@genome-spy/core 0.59.0 → 0.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle/index.es.js +6170 -5616
- package/dist/bundle/index.js +144 -119
- package/dist/schema.json +304 -22
- package/dist/src/data/collector.d.ts.map +1 -1
- package/dist/src/data/collector.js +1 -0
- package/dist/src/data/sources/dataUtils.d.ts +2 -1
- package/dist/src/data/sources/dataUtils.d.ts.map +1 -1
- package/dist/src/data/sources/dataUtils.js +3 -4
- package/dist/src/data/sources/inlineSource.d.ts +8 -0
- package/dist/src/data/sources/inlineSource.d.ts.map +1 -1
- package/dist/src/data/sources/inlineSource.js +17 -1
- package/dist/src/data/sources/urlSource.d.ts +1 -0
- package/dist/src/data/sources/urlSource.d.ts.map +1 -1
- package/dist/src/data/sources/urlSource.js +33 -4
- package/dist/src/encoder/encoder.d.ts +1 -1
- package/dist/src/genomeSpy.d.ts.map +1 -1
- package/dist/src/genomeSpy.js +39 -6
- package/dist/src/gl/colorUtils.d.ts +4 -0
- package/dist/src/gl/colorUtils.d.ts.map +1 -1
- package/dist/src/gl/colorUtils.js +8 -0
- package/dist/src/gl/glslScaleGenerator.d.ts +1 -1
- package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
- package/dist/src/gl/glslScaleGenerator.js +1 -9
- package/dist/src/gl/includes/common.glsl.js +1 -1
- package/dist/src/marks/link.d.ts.map +1 -1
- package/dist/src/marks/link.js +8 -0
- package/dist/src/marks/mark.d.ts +8 -0
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +101 -3
- package/dist/src/marks/point.fragment.glsl.js +1 -1
- package/dist/src/marks/point.vertex.glsl.js +1 -1
- package/dist/src/marks/rect.common.glsl.js +1 -1
- package/dist/src/marks/rect.d.ts.map +1 -1
- package/dist/src/marks/rect.fragment.glsl.js +1 -1
- package/dist/src/marks/rect.js +41 -0
- package/dist/src/marks/rect.vertex.glsl.js +1 -1
- package/dist/src/selection/selection.d.ts +27 -2
- package/dist/src/selection/selection.d.ts.map +1 -1
- package/dist/src/selection/selection.js +53 -3
- package/dist/src/spec/data.d.ts +18 -1
- package/dist/src/spec/mark.d.ts +58 -1
- package/dist/src/spec/parameter.d.ts +71 -31
- package/dist/src/spec/view.d.ts +9 -2
- package/dist/src/styles/genome-spy.css.d.ts +1 -1
- package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
- package/dist/src/styles/genome-spy.css.js +12 -1
- package/dist/src/styles/genome-spy.scss +19 -1
- package/dist/src/types/selectionTypes.d.ts +4 -7
- package/dist/src/utils/expression.d.ts.map +1 -1
- package/dist/src/utils/expression.js +4 -0
- package/dist/src/utils/ui/tooltip.d.ts +6 -10
- package/dist/src/utils/ui/tooltip.d.ts.map +1 -1
- package/dist/src/utils/ui/tooltip.js +74 -42
- package/dist/src/view/concatView.d.ts +1 -1
- package/dist/src/view/concatView.d.ts.map +1 -1
- package/dist/src/view/concatView.js +1 -1
- package/dist/src/view/gridView/gridChild.d.ts +53 -0
- package/dist/src/view/gridView/gridChild.d.ts.map +1 -0
- package/dist/src/view/gridView/gridChild.js +753 -0
- package/dist/src/view/gridView/gridView.d.ts +64 -0
- package/dist/src/view/gridView/gridView.d.ts.map +1 -0
- package/dist/src/view/{gridView.js → gridView/gridView.js} +40 -595
- package/dist/src/view/gridView/scrollbar.d.ts +32 -0
- package/dist/src/view/gridView/scrollbar.d.ts.map +1 -0
- package/dist/src/view/gridView/scrollbar.js +186 -0
- package/dist/src/view/gridView/selectionRect.d.ts +10 -0
- package/dist/src/view/gridView/selectionRect.d.ts.map +1 -0
- package/dist/src/view/gridView/selectionRect.js +182 -0
- package/dist/src/view/layout/rectangle.d.ts +11 -1
- package/dist/src/view/layout/rectangle.d.ts.map +1 -1
- package/dist/src/view/layout/rectangle.js +22 -2
- package/dist/src/view/layout/rectangle.test.js +12 -0
- package/dist/src/view/paramMediator.d.ts.map +1 -1
- package/dist/src/view/paramMediator.js +9 -0
- package/dist/src/view/scaleResolution.d.ts +1 -0
- package/dist/src/view/scaleResolution.d.ts.map +1 -1
- package/dist/src/view/scaleResolution.js +43 -33
- package/dist/src/view/view.d.ts +6 -0
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.js +19 -0
- package/dist/src/view/viewFactory.d.ts.map +1 -1
- package/dist/src/view/viewFactory.js +13 -1
- package/package.json +2 -2
- package/dist/src/view/gridView.d.ts +0 -135
- package/dist/src/view/gridView.d.ts.map +0 -1
|
@@ -85,9 +85,6 @@ export default class ScaleResolution {
|
|
|
85
85
|
* @typedef {VegaScale & { props: import("../spec/scale.js").Scale }} ScaleWithProps
|
|
86
86
|
*/
|
|
87
87
|
|
|
88
|
-
/** @type {number[]} */
|
|
89
|
-
#zoomExtent;
|
|
90
|
-
|
|
91
88
|
/**
|
|
92
89
|
* @type {Record<ScaleResolutionEventType, Set<ScaleResolutionListener>>}
|
|
93
90
|
*/
|
|
@@ -99,6 +96,12 @@ export default class ScaleResolution {
|
|
|
99
96
|
/** @type {ScaleWithProps} */
|
|
100
97
|
#scale;
|
|
101
98
|
|
|
99
|
+
/**
|
|
100
|
+
* The initial domain before any zooming.
|
|
101
|
+
* @type {any[]}
|
|
102
|
+
*/
|
|
103
|
+
#initialDomain;
|
|
104
|
+
|
|
102
105
|
/**
|
|
103
106
|
* Keeps track of the expression references in the range. If range is modified,
|
|
104
107
|
* new expressions are created and the old ones must be invalidated.
|
|
@@ -129,6 +132,14 @@ export default class ScaleResolution {
|
|
|
129
132
|
return this.#firstMemberView.context;
|
|
130
133
|
}
|
|
131
134
|
|
|
135
|
+
get zoomExtent() {
|
|
136
|
+
return (
|
|
137
|
+
(this.#scale &&
|
|
138
|
+
isContinuous(this.#scale.type) &&
|
|
139
|
+
this.#getZoomExtent()) ?? [-Infinity, Infinity]
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
|
|
132
143
|
/**
|
|
133
144
|
* Adds a listener that is called when the scale domain is changed,
|
|
134
145
|
* e.g., zoomed. The call is synchronous and happens before the views
|
|
@@ -170,11 +181,17 @@ export default class ScaleResolution {
|
|
|
170
181
|
addMember(newMember) {
|
|
171
182
|
const { channel, channelDef } = newMember;
|
|
172
183
|
|
|
184
|
+
// A convenience hack for cases where the new member should adapt
|
|
185
|
+
// the scale type to the existing one. For example: SelectionRect
|
|
186
|
+
// TODO: Add test
|
|
187
|
+
const adapt = channelDef.type == null && this.type;
|
|
188
|
+
|
|
173
189
|
if (
|
|
174
190
|
// @ts-expect-error "sample" is not really a channel with scale
|
|
175
191
|
channel != "sample" &&
|
|
176
192
|
!channelDef.type &&
|
|
177
|
-
!isSecondaryChannel(channel)
|
|
193
|
+
!isSecondaryChannel(channel) &&
|
|
194
|
+
!adapt
|
|
178
195
|
) {
|
|
179
196
|
throw new Error(
|
|
180
197
|
`The "type" property must be defined in channel definition: "${channel}": ${JSON.stringify(
|
|
@@ -198,15 +215,17 @@ export default class ScaleResolution {
|
|
|
198
215
|
this.name = name;
|
|
199
216
|
}
|
|
200
217
|
|
|
201
|
-
if (!
|
|
202
|
-
this.type
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
218
|
+
if (!adapt) {
|
|
219
|
+
if (!this.type) {
|
|
220
|
+
this.type = type;
|
|
221
|
+
} else if (type !== this.type && !isSecondaryChannel(channel)) {
|
|
222
|
+
// TODO: Include a reference to the layer
|
|
223
|
+
throw new Error(
|
|
224
|
+
`Can not use shared scale for different data types: ${this.type} vs. ${type}. Use "resolve: independent" for channel ${this.channel}`
|
|
225
|
+
);
|
|
226
|
+
// Actually, point scale could be changed into band scale
|
|
227
|
+
// TODO: Use the same merging logic as in: https://github.com/vega/vega-lite/blob/master/src/scale.ts
|
|
228
|
+
}
|
|
210
229
|
}
|
|
211
230
|
|
|
212
231
|
this.members.push(newMember);
|
|
@@ -450,11 +469,8 @@ export default class ScaleResolution {
|
|
|
450
469
|
scale.props = props;
|
|
451
470
|
this.#configureRange();
|
|
452
471
|
|
|
453
|
-
if (isContinuous(scale.type)) {
|
|
454
|
-
this.#zoomExtent = this.#getZoomExtent();
|
|
455
|
-
}
|
|
456
|
-
|
|
457
472
|
if (!domainWasInitialized) {
|
|
473
|
+
this.#initialDomain = scale.domain();
|
|
458
474
|
this.#notifyListeners("domain");
|
|
459
475
|
return;
|
|
460
476
|
}
|
|
@@ -502,10 +518,6 @@ export default class ScaleResolution {
|
|
|
502
518
|
scale.genome(this.getGenome());
|
|
503
519
|
}
|
|
504
520
|
|
|
505
|
-
if (isContinuous(scale.type)) {
|
|
506
|
-
this.#zoomExtent = this.#getZoomExtent();
|
|
507
|
-
}
|
|
508
|
-
|
|
509
521
|
// Hijack the range method
|
|
510
522
|
const range = scale.range;
|
|
511
523
|
if (range) {
|
|
@@ -630,13 +642,8 @@ export default class ScaleResolution {
|
|
|
630
642
|
}
|
|
631
643
|
|
|
632
644
|
// TODO: Use the zoomTo method. Move clamping etc there.
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
newDomain,
|
|
636
|
-
this.#zoomExtent[0],
|
|
637
|
-
this.#zoomExtent[1]
|
|
638
|
-
);
|
|
639
|
-
}
|
|
645
|
+
const zoomExtent = this.zoomExtent;
|
|
646
|
+
newDomain = clampRange(newDomain, zoomExtent[0], zoomExtent[1]);
|
|
640
647
|
|
|
641
648
|
if ([0, 1].some((i) => newDomain[i] != oldDomain[i])) {
|
|
642
649
|
scale.domain(newDomain);
|
|
@@ -741,7 +748,7 @@ export default class ScaleResolution {
|
|
|
741
748
|
getZoomLevel() {
|
|
742
749
|
// Zoom level makes sense only for user-zoomable scales where zoom extent is defined
|
|
743
750
|
if (this.isZoomable()) {
|
|
744
|
-
return span(this
|
|
751
|
+
return span(this.zoomExtent) / span(this.scale.domain());
|
|
745
752
|
}
|
|
746
753
|
|
|
747
754
|
return 1.0;
|
|
@@ -777,6 +784,9 @@ export default class ScaleResolution {
|
|
|
777
784
|
: 0;
|
|
778
785
|
}
|
|
779
786
|
|
|
787
|
+
/**
|
|
788
|
+
* @returns {number[]}
|
|
789
|
+
*/
|
|
780
790
|
#getZoomExtent() {
|
|
781
791
|
const props = this.scale.props;
|
|
782
792
|
const zoom = props.zoom;
|
|
@@ -791,11 +801,11 @@ export default class ScaleResolution {
|
|
|
791
801
|
if (props.type == "locus") {
|
|
792
802
|
return this.getGenome().getExtent();
|
|
793
803
|
}
|
|
794
|
-
|
|
795
|
-
// TODO: Perhaps this should be "domain" for index scale and nothing for quantitative.
|
|
796
|
-
// Would behave similarly to Vega-Lite, which doesn't have constraints.
|
|
797
|
-
return this.#scale.domain();
|
|
798
804
|
}
|
|
805
|
+
|
|
806
|
+
// TODO: Perhaps this should be "domain" for index scale and nothing for quantitative.
|
|
807
|
+
// Would behave similarly to Vega-Lite, which doesn't have constraints.
|
|
808
|
+
return this.#initialDomain;
|
|
799
809
|
}
|
|
800
810
|
|
|
801
811
|
/**
|
package/dist/src/view/view.d.ts
CHANGED
|
@@ -194,6 +194,12 @@ export default class View {
|
|
|
194
194
|
* @param {boolean} [useCapture]
|
|
195
195
|
*/
|
|
196
196
|
addInteractionEventListener(type: string, listener: InteractionEventListener, useCapture?: boolean): void;
|
|
197
|
+
/**
|
|
198
|
+
* @param {string} type
|
|
199
|
+
* @param {InteractionEventListener} listener
|
|
200
|
+
* @param {boolean} [useCapture]
|
|
201
|
+
*/
|
|
202
|
+
removeInteractionEventListener(type: string, listener: InteractionEventListener, useCapture?: boolean): void;
|
|
197
203
|
/**
|
|
198
204
|
* Visits child views in depth-first order. Visitor's return value
|
|
199
205
|
* controls the traversal.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"AA2BA,oBAAoB;AACpB,yBAA0B,YAAY,CAAC;AACvC,0BAA0B;AAC1B,yBAA0B,YAAY,CAAC;AAKvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH;IA6BI;;;;;;;;;OASG;IACH,kBARW,OAAO,iBAAiB,EAAE,QAAQ,WAClC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,WAAW,
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../src/view/view.js"],"names":[],"mappings":"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"}
|
package/dist/src/view/view.js
CHANGED
|
@@ -150,6 +150,7 @@ export default class View {
|
|
|
150
150
|
|
|
151
151
|
if (spec.params) {
|
|
152
152
|
for (const param of spec.params) {
|
|
153
|
+
// TODO: If interval selection, validate `encodings` or provides defaults
|
|
153
154
|
this.paramMediator.registerParam(param);
|
|
154
155
|
}
|
|
155
156
|
}
|
|
@@ -451,6 +452,24 @@ export default class View {
|
|
|
451
452
|
listeners.push(listener);
|
|
452
453
|
}
|
|
453
454
|
|
|
455
|
+
/**
|
|
456
|
+
* @param {string} type
|
|
457
|
+
* @param {InteractionEventListener} listener
|
|
458
|
+
* @param {boolean} [useCapture]
|
|
459
|
+
*/
|
|
460
|
+
removeInteractionEventListener(type, listener, useCapture) {
|
|
461
|
+
const listenersByType = useCapture
|
|
462
|
+
? this.#capturingInteractionEventListeners
|
|
463
|
+
: this.#nonCapturingInteractionEventListeners;
|
|
464
|
+
let listeners = listenersByType?.[type];
|
|
465
|
+
if (listeners) {
|
|
466
|
+
const index = listeners.indexOf(listener);
|
|
467
|
+
if (index >= 0) {
|
|
468
|
+
listeners.splice(index, 1);
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
|
|
454
473
|
/**
|
|
455
474
|
* Visits child views in depth-first order. Visitor's return value
|
|
456
475
|
* controls the traversal.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewFactory.d.ts","sourceRoot":"","sources":["../../../src/view/viewFactory.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"viewFactory.d.ts","sourceRoot":"","sources":["../../../src/view/viewFactory.js"],"names":[],"mappings":"AA4RA;;;;GAIG;AACH,sEAFa,IAAI,sCAAY,CAI5B;AAED;;;;GAIG;AACH,uEAFa,IAAI,uCAAa,CAI7B;AAED;;;;GAIG;AACH,uEAFa,IAAI,uCAAa,CAS7B;AAED;;;;GAIG;AACH,kFAFa,IAAI,IAAI,OAAO,iBAAiB,EAAE,oBAAoB,CAQlE;AAED;;;;GAIG;AACH,mCAHW,MAAM,GACJ,IAAI,IAAI,OAAO,iBAAiB,EAAE,UAAU,CAIxD;AAED;;;;GAIG;AACH,yEAFa,IAAI,yCAAe,CAI/B;AAED;;;;GAIG;AACH,yEAFa,IAAI,IAAI,WAAW,CAI/B;AAED;;;;GAIG;AACH,wEAFa,IAAI,wCAAc,CAI9B;AAED;;;;GAIG;AACH,wEAFa,IAAI,8CAAc,CAS9B;AA5WD,6BAA8B,UAAU,CAAC;AAEzC;;;;GAIG;AAEH;;GAEG;AACH;IAiBI;;OAEG;IACH,sBAFW,kBAAkB,EAoC5B;IAjCG,2CAA2C;IAC3C,SADW,QAAQ,CAAC,kBAAkB,CAAC,CAKtC;IA8BL;;;OAGG;IACH,qEAlDiC,OAAO,yHAC2B,OAAO,oBAAoB,EAAE,OAAO,eAAe,OAAO,WAAW,EAAE,OAAO,gBAAgB,MAAM,KAAK,IAAI,QAmD/K;IAED;;;;;;OAMG;IACH,wHAJW,OAAO,oBAAoB,EAAE,OAAO,eACpC,OAAO,WAAW,EAAE,OAAO,gBAC3B,MAAM,QAmBhB;IAED;;;;OAIG;IACH,sDAFa,IAAI,sCAAY,CAU5B;IAED;;;;;;;;;;OAUG;IACH,yBAPW,qCAAW,OAAO,iBAAiB,EAAE,UAAU,qEAE/C,OAAO,oBAAoB,EAAE,OAAO,eACpC,OAAO,WAAW,EAAE,OAAO,gBAC3B,MAAM,cACN,CAAC,IAAI,oCAAU,KAAK,IAAI,iBAiFlC;;CACJ;;;;;kBA3Ma,OAAO;eACP,OAAO;;iBAjBJ,WAAW"}
|
|
@@ -8,6 +8,8 @@ import { isArray, isObject, isString } from "vega-util";
|
|
|
8
8
|
import { loadExternalViewSpec } from "./viewUtils.js";
|
|
9
9
|
import ContainerView from "./containerView.js";
|
|
10
10
|
import ViewError from "./viewError.js";
|
|
11
|
+
import { isSelectionParameter } from "./paramMediator.js";
|
|
12
|
+
import { asSelectionConfig } from "../selection/selection.js";
|
|
11
13
|
|
|
12
14
|
export const VIEW_ROOT_NAME = "viewRoot";
|
|
13
15
|
|
|
@@ -179,11 +181,21 @@ export class ViewFactory {
|
|
|
179
181
|
viewSpec = spec;
|
|
180
182
|
}
|
|
181
183
|
|
|
184
|
+
// A view with an interval selection always needs a parent.
|
|
185
|
+
const hasIntervalSelection = (/** @type {ViewSpec} */ spec) =>
|
|
186
|
+
spec?.params?.some(
|
|
187
|
+
(param) =>
|
|
188
|
+
isSelectionParameter(param) &&
|
|
189
|
+
asSelectionConfig(param.select).type == "interval"
|
|
190
|
+
);
|
|
191
|
+
|
|
182
192
|
// Wrap a unit spec at root into a grid view to get axes, etc.
|
|
183
193
|
if (
|
|
184
194
|
!dataParent &&
|
|
185
195
|
this.options.wrapRoot &&
|
|
186
|
-
(isUnitSpec(viewSpec) ||
|
|
196
|
+
(isUnitSpec(viewSpec) ||
|
|
197
|
+
isLayerSpec(viewSpec) ||
|
|
198
|
+
hasIntervalSelection(viewSpec)) &&
|
|
187
199
|
defaultName === VIEW_ROOT_NAME
|
|
188
200
|
) {
|
|
189
201
|
viewSpec = {
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"contributors": [],
|
|
9
9
|
"license": "MIT",
|
|
10
|
-
"version": "0.
|
|
10
|
+
"version": "0.60.0",
|
|
11
11
|
"jsdelivr": "dist/bundle/index.js",
|
|
12
12
|
"unpkg": "dist/bundle/index.js",
|
|
13
13
|
"browser": "dist/bundle/index.js",
|
|
@@ -67,5 +67,5 @@
|
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@types/long": "^4.0.1"
|
|
69
69
|
},
|
|
70
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "82948eadeadfedcb13e669f6664e163dac3a6a92"
|
|
71
71
|
}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @param {import("../spec/view.js").ViewBackground} viewBackground
|
|
3
|
-
* @returns {import("../spec/view.js").UnitSpec}
|
|
4
|
-
*/
|
|
5
|
-
export function createBackground(viewBackground: import("../spec/view.js").ViewBackground): import("../spec/view.js").UnitSpec;
|
|
6
|
-
/**
|
|
7
|
-
* @param {import("../spec/view.js").ViewBackground} viewBackground
|
|
8
|
-
* @returns {import("../spec/view.js").UnitSpec}
|
|
9
|
-
*/
|
|
10
|
-
export function createBackgroundStroke(viewBackground: import("../spec/view.js").ViewBackground): import("../spec/view.js").UnitSpec;
|
|
11
|
-
/**
|
|
12
|
-
* @param {View} view
|
|
13
|
-
*/
|
|
14
|
-
export function isClippedChildren(view: import("./view.js").default): boolean;
|
|
15
|
-
/**
|
|
16
|
-
*
|
|
17
|
-
* @param {import("./layout/rectangle.js").default} coords
|
|
18
|
-
* @param {import("../spec/axis.js").AxisOrient} orient
|
|
19
|
-
* @param {AxisView} axisView
|
|
20
|
-
*/
|
|
21
|
-
export function translateAxisCoords(coords: import("./layout/rectangle.js").default, orient: import("../spec/axis.js").AxisOrient, axisView: AxisView): Rectangle;
|
|
22
|
-
/**
|
|
23
|
-
* Modeled after: https://vega.github.io/vega/docs/layout/
|
|
24
|
-
*
|
|
25
|
-
* This should take care of the following:
|
|
26
|
-
* - Composition: [hv]concat / facet / repeat
|
|
27
|
-
* - Views
|
|
28
|
-
* - Axes
|
|
29
|
-
* - Grid lines
|
|
30
|
-
* - View background
|
|
31
|
-
* - View titles
|
|
32
|
-
* - Facet (column / row) titles
|
|
33
|
-
* - Header / footer
|
|
34
|
-
* - Zoom / pan
|
|
35
|
-
* - Scrollable viewports (with scrollbars)
|
|
36
|
-
* - And later on, brushing, legend(?)
|
|
37
|
-
*/
|
|
38
|
-
export default class GridView extends ContainerView {
|
|
39
|
-
/**
|
|
40
|
-
*
|
|
41
|
-
* @param {import("../spec/view.js").AnyConcatSpec} spec
|
|
42
|
-
* @param {import("../types/viewContext.js").default} context
|
|
43
|
-
* @param {ContainerView} layoutParent
|
|
44
|
-
* @param {View} dataParent
|
|
45
|
-
* @param {string} name
|
|
46
|
-
* @param {number} columns
|
|
47
|
-
* @param {import("./view.js").ViewOptions} [options]
|
|
48
|
-
*/
|
|
49
|
-
constructor(spec: import("../spec/view.js").AnyConcatSpec, context: import("../types/viewContext.js").default, layoutParent: ContainerView, dataParent: import("./view.js").default, name: string, columns: number, options?: import("./view.js").ViewOptions);
|
|
50
|
-
spec: import("../spec/view.js").AnyConcatSpec;
|
|
51
|
-
wrappingFacet: boolean;
|
|
52
|
-
/**
|
|
53
|
-
* @param {View} view
|
|
54
|
-
*/
|
|
55
|
-
appendChild(view: import("./view.js").default): void;
|
|
56
|
-
/**
|
|
57
|
-
* @param {View[]} views
|
|
58
|
-
*/
|
|
59
|
-
setChildren(views: import("./view.js").default[]): void;
|
|
60
|
-
/**
|
|
61
|
-
* Read-only view to children
|
|
62
|
-
*/
|
|
63
|
-
get children(): import("./view.js").default[];
|
|
64
|
-
get childCount(): number;
|
|
65
|
-
/**
|
|
66
|
-
* @protected
|
|
67
|
-
*/
|
|
68
|
-
protected createAxes(): Promise<void[]>;
|
|
69
|
-
#private;
|
|
70
|
-
}
|
|
71
|
-
export class GridChild {
|
|
72
|
-
/**
|
|
73
|
-
* @param {View} view
|
|
74
|
-
* @param {ContainerView} layoutParent
|
|
75
|
-
* @param {number} serial
|
|
76
|
-
*/
|
|
77
|
-
constructor(view: import("./view.js").default, layoutParent: ContainerView, serial: number);
|
|
78
|
-
layoutParent: ContainerView;
|
|
79
|
-
view: import("./view.js").default;
|
|
80
|
-
serial: number;
|
|
81
|
-
/** @type {UnitView} */
|
|
82
|
-
background: UnitView;
|
|
83
|
-
/** @type {UnitView} */
|
|
84
|
-
backgroundStroke: UnitView;
|
|
85
|
-
/** @type {Partial<Record<import("../spec/axis.js").AxisOrient, AxisView>>} axes */
|
|
86
|
-
axes: Partial<Record<import("../spec/axis.js").AxisOrient, AxisView>>;
|
|
87
|
-
/** @type {Partial<Record<import("../spec/axis.js").AxisOrient, AxisGridView>>} gridLines */
|
|
88
|
-
gridLines: Partial<Record<import("../spec/axis.js").AxisOrient, AxisGridView>>;
|
|
89
|
-
/** @type {Partial<Record<ScrollDirection, Scrollbar>>} */
|
|
90
|
-
scrollbars: Partial<Record<"vertical" | "horizontal", Scrollbar>>;
|
|
91
|
-
/** @type {UnitView} */
|
|
92
|
-
title: UnitView;
|
|
93
|
-
/** @type {Rectangle} */
|
|
94
|
-
coords: Rectangle;
|
|
95
|
-
getChildren(): Generator<import("./view.js").default, void, unknown>;
|
|
96
|
-
/**
|
|
97
|
-
* Create view decorations, grid lines, axes, etc.
|
|
98
|
-
*/
|
|
99
|
-
createAxes(): Promise<void>;
|
|
100
|
-
getOverhang(): Padding;
|
|
101
|
-
getOverhangAndPadding(): Padding;
|
|
102
|
-
}
|
|
103
|
-
import AxisView from "./axisView.js";
|
|
104
|
-
import Rectangle from "./layout/rectangle.js";
|
|
105
|
-
import ContainerView from "./containerView.js";
|
|
106
|
-
import UnitView from "./unitView.js";
|
|
107
|
-
import AxisGridView from "./axisGridView.js";
|
|
108
|
-
declare class Scrollbar extends UnitView {
|
|
109
|
-
/**
|
|
110
|
-
* @param {GridChild} gridChild
|
|
111
|
-
* @param {ScrollDirection} scrollDirection
|
|
112
|
-
*/
|
|
113
|
-
constructor(gridChild: GridChild, scrollDirection: "vertical" | "horizontal");
|
|
114
|
-
viewportOffset: number;
|
|
115
|
-
config: {
|
|
116
|
-
scrollbarSize: number;
|
|
117
|
-
scrollbarPadding: number;
|
|
118
|
-
};
|
|
119
|
-
interpolateViewportOffset: ((target: {
|
|
120
|
-
x: number;
|
|
121
|
-
}) => void) & {
|
|
122
|
-
stop: () => void;
|
|
123
|
-
};
|
|
124
|
-
get scrollOffset(): number;
|
|
125
|
-
/**
|
|
126
|
-
*
|
|
127
|
-
* @param {Rectangle} viewportCoords
|
|
128
|
-
* @param {Rectangle} coords
|
|
129
|
-
*/
|
|
130
|
-
updateScrollbar(viewportCoords: Rectangle, coords: Rectangle): void;
|
|
131
|
-
#private;
|
|
132
|
-
}
|
|
133
|
-
import Padding from "./layout/padding.js";
|
|
134
|
-
export {};
|
|
135
|
-
//# sourceMappingURL=gridView.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gridView.d.ts","sourceRoot":"","sources":["../../../src/view/gridView.js"],"names":[],"mappings":"AAswBA;;;GAGG;AACH,iDAHW,OAAO,iBAAiB,EAAE,cAAc,GACtC,OAAO,iBAAiB,EAAE,QAAQ,CAwB9C;AAED;;;GAGG;AACH,uDAHW,OAAO,iBAAiB,EAAE,cAAc,GACtC,OAAO,iBAAiB,EAAE,QAAQ,CA6C9C;AA2BD;;GAEG;AACH,8EAUC;AAED;;;;;GAKG;AACH,4CAJW,OAAO,uBAAuB,EAAE,OAAO,UACvC,OAAO,iBAAiB,EAAE,UAAU,YACpC,QAAQ,aAmBlB;AA53BD;;;;;;;;;;;;;;;GAeG;AACH;IA6BI;;;;;;;;;OASG;IACH,kBARW,OAAO,iBAAiB,EAAE,aAAa,WACvC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,iDAEb,MAAM,WACN,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAoBzC;IARG,8CAAgB;IAOhB,uBAA0B;IAG9B;;OAEG;IACH,qDAIC;IAeD;;OAEG;IACH,mBAFW,6BAAM,QAOhB;IAqBD;;OAEG;IACH,8CAEC;IAED,yBAEC;IAED;;OAEG;IACH,wCAmCC;;CA+jBJ;AAgJD;IACI;;;;OAIG;IACH,6DAHW,aAAa,UACb,MAAM,EAoFhB;IAjFG,4BAAgC;IAChC,kCAAgB;IAChB,eAAoB;IAEpB,uBAAuB;IACvB,YADW,QAAQ,CACQ;IAE3B,uBAAuB;IACvB,kBADW,QAAQ,CACc;IAEjC,mFAAmF;IACnF,MADW,OAAO,CAAC,MAAM,CAAC,OAAO,iBAAiB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAC5D;IAEd,4FAA4F;IAC5F,WADW,OAAO,CAAC,MAAM,CAAC,OAAO,iBAAiB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAC3D;IAEnB,0DAA0D;IAC1D,YADW,OAAO,CAAC,MAAM,4BAAkB,SAAS,CAAC,CAAC,CAClC;IAEpB,uBAAuB;IACvB,OADW,QAAQ,CACG;IAEtB,wBAAwB;IACxB,QADW,SAAS,CACQ;IA4DhC,qEAcC;IAED;;OAEG;IACH,4BAsKC;IAED,uBAqBC;IAED,iCAEC;CACJ;qBAtrC0D,eAAe;sBAFpD,uBAAuB;0BAGnB,oBAAoB;qBAGzB,eAAe;yBALX,mBAAmB;AAyrC5C;IAeI;;;OAGG;IACH,uBAHW,SAAS,8CA6FnB;IAhGD,uBAAmB;IAsCf;;;MAAoB;IAIpB;;;;MAQC;IAgDL,2BAKC;IAWD;;;;OAIG;IACH,gCAHW,SAAS,UACT,SAAS,QA8CnB;;CACJ;oBA52CmB,qBAAqB"}
|