@genome-spy/core 0.74.0 → 0.76.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/{esm-CgfVIRJ-.js → esm-BimDEpBb.js} +1 -1
- package/dist/bundle/{esm-DtE8VqAv.js → esm-Bvlm1uVk.js} +1 -1
- package/dist/bundle/{esm-sIoQYZ21.js → esm-CngqBe45.js} +17 -17
- package/dist/bundle/{esm-DQiq2Zhd.js → esm-D_euN86T.js} +43 -43
- package/dist/bundle/index.es.js +6064 -5756
- package/dist/bundle/index.js +104 -103
- package/dist/schema.json +572 -12
- package/dist/src/config/defaults/markDefaults.d.ts.map +1 -1
- package/dist/src/config/defaults/markDefaults.js +1 -12
- package/dist/src/config/defaults/scaleDefaults.d.ts.map +1 -1
- package/dist/src/config/defaults/scaleDefaults.js +1 -0
- package/dist/src/config/markConfig.d.ts.map +1 -1
- package/dist/src/config/markConfig.js +16 -8
- package/dist/src/config/themes.d.ts.map +1 -1
- package/dist/src/config/themes.js +15 -2
- package/dist/src/data/sources/dataUtils.d.ts +25 -0
- package/dist/src/data/sources/dataUtils.d.ts.map +1 -1
- package/dist/src/data/sources/dataUtils.js +23 -0
- package/dist/src/data/sources/inlineSource.js +2 -2
- package/dist/src/data/sources/lazy/registerBuiltInLazySources.js +2 -2
- package/dist/src/data/sources/lazy/registerCoreLazySources.d.ts +2 -0
- package/dist/src/data/sources/lazy/registerCoreLazySources.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/registerCoreLazySources.js +2 -0
- package/dist/src/data/sources/lazy/tabixSource.d.ts +7 -0
- package/dist/src/data/sources/lazy/tabixSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/tabixSource.js +18 -0
- package/dist/src/data/sources/lazy/tabixTsvSource.d.ts +37 -0
- package/dist/src/data/sources/lazy/tabixTsvSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/tabixTsvSource.js +163 -0
- package/dist/src/data/sources/urlSource.d.ts.map +1 -1
- package/dist/src/data/sources/urlSource.js +8 -3
- package/dist/src/encoder/encoder.d.ts +2 -2
- package/dist/src/encoder/encoder.d.ts.map +1 -1
- package/dist/src/genome/scaleLocus.d.ts.map +1 -1
- package/dist/src/genome/scaleLocus.js +8 -3
- package/dist/src/genomeSpy/interactionController.d.ts.map +1 -1
- package/dist/src/genomeSpy/interactionController.js +91 -51
- package/dist/src/genomeSpyBase.d.ts.map +1 -1
- package/dist/src/genomeSpyBase.js +4 -1
- package/dist/src/gl/dataToVertices.d.ts +12 -14
- package/dist/src/gl/dataToVertices.d.ts.map +1 -1
- package/dist/src/gl/dataToVertices.js +116 -95
- package/dist/src/gl/glslScaleGenerator.d.ts +3 -0
- package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
- package/dist/src/gl/glslScaleGenerator.js +10 -8
- package/dist/src/gl/vertexRangeIndex.d.ts +23 -0
- package/dist/src/gl/vertexRangeIndex.d.ts.map +1 -0
- package/dist/src/gl/vertexRangeIndex.js +150 -0
- package/dist/src/gl/webGLHelper.d.ts +5 -2
- package/dist/src/gl/webGLHelper.d.ts.map +1 -1
- package/dist/src/gl/webGLHelper.js +20 -3
- package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +1082 -0
- package/dist/src/marks/link.vertex.glsl.js +1 -1
- package/dist/src/marks/mark.d.ts +1 -1
- package/dist/src/minimal.d.ts.map +1 -1
- package/dist/src/minimal.js +5 -4
- package/dist/src/paramRuntime/expressionCompiler.d.ts +2 -1
- package/dist/src/paramRuntime/expressionCompiler.d.ts.map +1 -1
- package/dist/src/paramRuntime/expressionCompiler.js +3 -2
- package/dist/src/paramRuntime/expressionRef.d.ts +4 -1
- package/dist/src/paramRuntime/expressionRef.d.ts.map +1 -1
- package/dist/src/paramRuntime/expressionRef.js +10 -3
- package/dist/src/paramRuntime/graphRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/graphRuntime.js +15 -6
- package/dist/src/paramRuntime/paramRuntime.d.ts +8 -2
- package/dist/src/paramRuntime/paramRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/paramRuntime.js +10 -5
- package/dist/src/paramRuntime/types.d.ts +1 -0
- package/dist/src/paramRuntime/types.d.ts.map +1 -1
- package/dist/src/paramRuntime/types.js +1 -0
- package/dist/src/paramRuntime/viewParamRuntime.d.ts +5 -4
- package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/viewParamRuntime.js +17 -6
- package/dist/src/scale/scale.d.ts.map +1 -1
- package/dist/src/scale/scale.js +11 -2
- package/dist/src/scales/domainPlanner.d.ts +57 -11
- package/dist/src/scales/domainPlanner.d.ts.map +1 -1
- package/dist/src/scales/domainPlanner.js +183 -84
- package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -1
- package/dist/src/scales/scaleInstanceManager.js +7 -2
- package/dist/src/scales/scalePropsResolver.d.ts +3 -3
- package/dist/src/scales/scalePropsResolver.d.ts.map +1 -1
- package/dist/src/scales/scalePropsResolver.js +28 -5
- package/dist/src/scales/scaleResolution.d.ts +12 -1
- package/dist/src/scales/scaleResolution.d.ts.map +1 -1
- package/dist/src/scales/scaleResolution.js +180 -21
- package/dist/src/scales/selectionDomainUtils.d.ts +10 -0
- package/dist/src/scales/selectionDomainUtils.d.ts.map +1 -1
- package/dist/src/scales/selectionDomainUtils.js +32 -3
- package/dist/src/screenshotExport.d.ts +23 -0
- package/dist/src/screenshotExport.d.ts.map +1 -0
- package/dist/src/screenshotExport.js +44 -0
- package/dist/src/screenshotHarness.d.ts.map +1 -1
- package/dist/src/screenshotHarness.js +26 -24
- package/dist/src/spec/axis.d.ts +2 -2
- package/dist/src/spec/channel.d.ts +34 -4
- package/dist/src/spec/data.d.ts +52 -0
- package/dist/src/spec/parameter.d.ts +6 -0
- package/dist/src/spec/scale.d.ts +13 -1
- package/dist/src/spec/transform.d.ts +6 -0
- package/dist/src/utils/expression.d.ts +16 -8
- package/dist/src/utils/expression.d.ts.map +1 -1
- package/dist/src/utils/expression.js +291 -11
- package/dist/src/view/axisGridView.d.ts.map +1 -1
- package/dist/src/view/axisGridView.js +2 -1
- package/dist/src/view/axisView.d.ts.map +1 -1
- package/dist/src/view/axisView.js +2 -1
- package/dist/src/view/facetView.d.ts.map +1 -1
- package/dist/src/view/facetView.js +2 -1
- package/dist/src/view/flowBuilder.d.ts +1 -1
- package/dist/src/view/flowBuilder.d.ts.map +1 -1
- package/dist/src/view/flowBuilder.js +11 -7
- package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
- package/dist/src/view/gridView/gridChild.js +9 -1
- package/dist/src/view/gridView/gridView.d.ts.map +1 -1
- package/dist/src/view/gridView/gridView.js +198 -32
- package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
- package/dist/src/view/gridView/scrollbar.js +5 -1
- package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
- package/dist/src/view/gridView/selectionRect.js +5 -1
- package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
- package/dist/src/view/gridView/separatorView.js +5 -1
- package/dist/src/view/resolutionPlanner.d.ts +9 -0
- package/dist/src/view/resolutionPlanner.d.ts.map +1 -0
- package/dist/src/view/resolutionPlanner.js +302 -0
- package/dist/src/view/testUtils.d.ts +30 -3
- package/dist/src/view/testUtils.d.ts.map +1 -1
- package/dist/src/view/testUtils.js +51 -2
- package/dist/src/view/unitView.d.ts +1 -1
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/dist/src/view/unitView.js +5 -152
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.js +2 -1
- package/dist/src/view/viewSelectors.d.ts +38 -10
- package/dist/src/view/viewSelectors.d.ts.map +1 -1
- package/dist/src/view/viewSelectors.js +67 -2
- package/dist/src/view/viewUtilTypes.d.ts +15 -0
- package/dist/src/view/viewUtils.d.ts.map +1 -1
- package/dist/src/view/viewUtils.js +10 -0
- package/package.json +2 -2
- package/LICENSE +0 -21
- /package/dist/bundle/{esm-BDFRLEuD.js → esm-C49STiCR.js} +0 -0
- /package/dist/bundle/{esm-CGX-qz1d.js → esm-CuVa5T98.js} +0 -0
|
@@ -12,7 +12,7 @@ import coalesce from "../utils/coalesce.js";
|
|
|
12
12
|
import { field as vegaField } from "vega-util";
|
|
13
13
|
import DecoratorView from "./decoratorView.js";
|
|
14
14
|
import Padding from "./layout/padding.js";
|
|
15
|
-
import { markViewAsNonAddressable } from "./viewSelectors.js";
|
|
15
|
+
import { markViewAsChrome, markViewAsNonAddressable } from "./viewSelectors.js";
|
|
16
16
|
|
|
17
17
|
const DEFAULT_SPACING = 20;
|
|
18
18
|
|
|
@@ -104,6 +104,7 @@ export default class FacetView extends ContainerView {
|
|
|
104
104
|
`facetLabel-${channel}`
|
|
105
105
|
);
|
|
106
106
|
markViewAsNonAddressable(labelView, { skipSubtree: true });
|
|
107
|
+
markViewAsChrome(labelView, { skipSubtree: true });
|
|
107
108
|
return [channel, labelView];
|
|
108
109
|
})
|
|
109
110
|
);
|
|
@@ -15,7 +15,7 @@ export function buildDataFlow(root: import("./view.js").default<import("../spec/
|
|
|
15
15
|
*/
|
|
16
16
|
export function linearizeLocusAccess(view: import("./unitView.js").default): {
|
|
17
17
|
transforms: import("../data/flowNode.js").default[];
|
|
18
|
-
rewrittenEncoding:
|
|
18
|
+
rewrittenEncoding: Record<string, any>;
|
|
19
19
|
/**
|
|
20
20
|
* Should be called after the whole flow has been created in order to
|
|
21
21
|
* not disrupt inheritance of encodings
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowBuilder.d.ts","sourceRoot":"","sources":["../../../src/view/flowBuilder.js"],"names":[],"mappings":"AAyBA;;;;;;GAMG;AACH,oHALW,QAAQ,eAER,CAAC,IAAI,iEAAM,KAAK,OAAO,gCACvB,CAAC,IAAI,iEAAM,KAAK,OAAO,YAoPjC;AAuBD;;;;;;GAMG;AACH,2CAFW,OAAO,eAAe,EAAE,OAAO;;;
|
|
1
|
+
{"version":3,"file":"flowBuilder.d.ts","sourceRoot":"","sources":["../../../src/view/flowBuilder.js"],"names":[],"mappings":"AAyBA;;;;;;GAMG;AACH,oHALW,QAAQ,eAER,CAAC,IAAI,iEAAM,KAAK,OAAO,gCACvB,CAAC,IAAI,iEAAM,KAAK,OAAO,YAoPjC;AAuBD;;;;;;GAMG;AACH,2CAFW,OAAO,eAAe,EAAE,OAAO;;;IAwH5B;;;OAGG;;EAYhB;AAgCD;;;;;;GAMG;AACH,4BAFwB,CAAC,SAAZ,qCAAU,cAFZ,CAAC,iBACA,uCAAW;;;0BAwBG,OAAO,CAAC,QAAQ,CAAC,OAAO,qBAAqB,EAAE,KAAK,CAAC,CAAC;EAkB/E;qBA5foB,qBAAqB;sBAPpB,sBAAsB"}
|
|
@@ -312,7 +312,7 @@ export function linearizeLocusAccess(view) {
|
|
|
312
312
|
/** @type {FlowNode[]} */
|
|
313
313
|
const transforms = [];
|
|
314
314
|
|
|
315
|
-
/** @type {
|
|
315
|
+
/** @type {Record<string, any>} */
|
|
316
316
|
const rewrittenEncoding = {};
|
|
317
317
|
|
|
318
318
|
// Use mark.encoding so we see the same channel defs that encoders consume,
|
|
@@ -374,12 +374,16 @@ export function linearizeLocusAccess(view) {
|
|
|
374
374
|
|
|
375
375
|
// Prefer using the spec directly because getEncoding() returns inherited props too.
|
|
376
376
|
// TODO: I think this is not robust enough. Needs more work...
|
|
377
|
-
/** @type {any} */
|
|
377
|
+
/** @type {Record<string, any>} */
|
|
378
|
+
const currentEncoding =
|
|
379
|
+
view.spec.encoding?.[channel] ??
|
|
380
|
+
configuredEncoding[channel] ??
|
|
381
|
+
encoding[channel] ??
|
|
382
|
+
{};
|
|
383
|
+
|
|
384
|
+
/** @type {Record<string, any>} */
|
|
378
385
|
const newFieldDef = {
|
|
379
|
-
...
|
|
380
|
-
configuredEncoding[channel] ??
|
|
381
|
-
encoding[channel] ??
|
|
382
|
-
{}),
|
|
386
|
+
...currentEncoding,
|
|
383
387
|
field: linearizedField,
|
|
384
388
|
};
|
|
385
389
|
delete newFieldDef.chrom;
|
|
@@ -435,7 +439,7 @@ export function linearizeLocusAccess(view) {
|
|
|
435
439
|
|
|
436
440
|
/**
|
|
437
441
|
* @param {import("./unitView.js").default} view
|
|
438
|
-
* @param {
|
|
442
|
+
* @param {Record<string, any>} [encoding]
|
|
439
443
|
* @returns {import("../spec/transform.js").CompareParams}
|
|
440
444
|
*/
|
|
441
445
|
function getCompareParamsForView(view, encoding) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridChild.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/gridChild.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gridChild.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/gridChild.js"],"names":[],"mappings":"AA42BA;;;;;GAKG;AACH,qDALW,OAAO,yBAAyB,EAAE,uBAAuB,CAAC,MAAM,CAAC,sBACjE,OAAO,aACP,MAAM,GACJ,OAAO,yBAAyB,EAAE,WAAW,GAAG,SAAS,CAyBrE;AAcD;;;GAGG;AACH,iDAHW,OAAO,oBAAoB,EAAE,cAAc,GACzC,OAAO,oBAAoB,EAAE,QAAQ,CA6BjD;AAED;;;GAGG;AACH,uDAHW,OAAO,oBAAoB,EAAE,cAAc,GACzC,OAAO,oBAAoB,EAAE,QAAQ,CA4CjD;AAx8BD;IACI;;;;;;OAMG;IAEH;;;;OAIG;IACH,kBAJW,OAAO,YAAY,EAAE,OAAO,gBAC5B,OAAO,qBAAqB,EAAE,OAAO,UACrC,MAAM,EAwHhB;IArHG,gGAAgC;IAChC,0EAAgB;IAChB,eAAoB;IAEpB,uBAAuB;IACvB,YADW,QAAQ,CACQ;IAE3B,uBAAuB;IACvB,kBADW,QAAQ,CACc;IAEjC,sFAAsF;IACtF,MADW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAC/D;IAEd,+FAA+F;IAC/F,WADW,OAAO,CAAC,MAAM,CAAC,OAAO,oBAAoB,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAC9D;IAEnB,mFAAmF;IACnF,YADW,OAAO,CAAC,MAAM,CAAC,OAAO,gBAAgB,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAC3D;IAEpB,4BAA4B;IAC5B,eADW,aAAa,CACM;IAE9B,uBAAuB;IACvB,OADW,QAAQ,CACG;IAEtB,qBAAqB;IACrB,kBADW,MAAM,CACQ;IAEzB,iCAAiC;IACjC,wBADW,MAAM,GAAG,SAAS,CACU;IAEvC,qBAAqB;IACrB,aADW,MAAM,CACG;IAEpB,wBAAwB;IACxB,QADW,SAAS,CACQ;IA6hBhC,6GAiBC;IAED;;OAEG;IACH,4BA2LC;IAED;;OAEG;IACH,yBAWC;IAED,uBAqBC;IAED,iCAEC;;CACJ;qBAz1BoB,gBAAgB;qBANK,gBAAgB;yBADjC,oBAAoB;sBAYvB,gBAAgB;0BACoB,oBAAoB;sBARxD,wBAAwB;oBAF1B,sBAAsB"}
|
|
@@ -16,7 +16,10 @@ import Point from "../layout/point.js";
|
|
|
16
16
|
import Rectangle from "../layout/rectangle.js";
|
|
17
17
|
import createTitle, { resolveTitleSpec } from "../title.js";
|
|
18
18
|
import UnitView from "../unitView.js";
|
|
19
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
markViewAsChrome,
|
|
21
|
+
markViewAsNonAddressable,
|
|
22
|
+
} from "../viewSelectors.js";
|
|
20
23
|
import Scrollbar from "./scrollbar.js";
|
|
21
24
|
import SelectionRect, { INTERVAL_DRAG_ACTIVE_PARAM } from "./selectionRect.js";
|
|
22
25
|
import { normalizeIntervalForSelection } from "../../scales/selectionDomainUtils.js";
|
|
@@ -101,6 +104,7 @@ export default class GridChild {
|
|
|
101
104
|
markViewAsNonAddressable(this.background, {
|
|
102
105
|
skipSubtree: true,
|
|
103
106
|
});
|
|
107
|
+
markViewAsChrome(this.background, { skipSubtree: true });
|
|
104
108
|
}
|
|
105
109
|
|
|
106
110
|
const backgroundStrokeSpec = createBackgroundStroke(viewBackground);
|
|
@@ -118,6 +122,9 @@ export default class GridChild {
|
|
|
118
122
|
markViewAsNonAddressable(this.backgroundStroke, {
|
|
119
123
|
skipSubtree: true,
|
|
120
124
|
});
|
|
125
|
+
markViewAsChrome(this.backgroundStroke, {
|
|
126
|
+
skipSubtree: true,
|
|
127
|
+
});
|
|
121
128
|
}
|
|
122
129
|
|
|
123
130
|
const titleSpec = resolveTitleSpec(
|
|
@@ -139,6 +146,7 @@ export default class GridChild {
|
|
|
139
146
|
);
|
|
140
147
|
this.title = unitView;
|
|
141
148
|
markViewAsNonAddressable(this.title, { skipSubtree: true });
|
|
149
|
+
markViewAsChrome(this.title, { skipSubtree: true });
|
|
142
150
|
}
|
|
143
151
|
}
|
|
144
152
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridView.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/gridView.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gridView.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/gridView.js"],"names":[],"mappings":"AAywCA;;GAEG;AACH,sHAUC;AA4DD;;;;;GAKG;AACH,4CAJW,OAAO,wBAAwB,EAAE,OAAO,UACxC,OAAO,oBAAoB,EAAE,UAAU,YACvC,QAAQ,aAmBlB;AA3zCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,8BAH2D,KAAK,SAAnD,OAAQ,oBAAoB,EAAE,aAAc;IA6CrD;;;;;;;;;OASG;IACH,kBARW,KAAK,WACL,OAAO,4BAA4B,EAAE,OAAO,gBAC5C,aAAa,yFAEb,MAAM,WACN,MAAM,YACN,OAAO,YAAY,EAAE,WAAW,EAyC1C;IAtBG,uBAA0B;IAwB9B;;OAEG;IACH,6FAEC;IAED;;;;;;OAMG;IACH,4FAFa,SAAS,CAIrB;IAED;;;;;;;OAOG;IACH,oGAHW,MAAM,GACJ,SAAS,CASrB;IAED;;;;;OAKG;IACH,iGAQC;IAED;;;;;OAKG;IACH,qBAFW,MAAM,QAUhB;IAeD;;OAEG;IACH,mBAFW,qEAAM,QAWhB;IAYD;;OAEG;IACH,sFAEC;IAED,yBAEC;IAED;;OAEG;IACH,sCAKC;IAED;;;;OAIG;IACH,gCAqCC;;CAu4BJ;qBAjsC0D,gBAAgB;sBADrD,wBAAwB;0BAEpB,qBAAqB;sBAQzB,gBAAgB"}
|
|
@@ -22,6 +22,7 @@ import GridChild from "./gridChild.js";
|
|
|
22
22
|
import KeyboardZoomController from "./keyboardZoomController.js";
|
|
23
23
|
import SeparatorView, { resolveSeparatorProps } from "./separatorView.js";
|
|
24
24
|
import { getZoomableResolutions } from "./zoomNavigationUtils.js";
|
|
25
|
+
import { isHConcatSpec, isVConcatSpec } from "../viewSpecGuards.js";
|
|
25
26
|
|
|
26
27
|
// Secondary ordering within a z-index bucket for GridView-owned decorations.
|
|
27
28
|
// These are not z-indices themselves: actual layering is decided first by the
|
|
@@ -995,12 +996,18 @@ export default class GridView extends ContainerView {
|
|
|
995
996
|
gridChild.coords.containsPoint(event.point.x, event.point.y)
|
|
996
997
|
);
|
|
997
998
|
const pointedView = pointedChild?.view;
|
|
999
|
+
const gapZoomTarget = !pointedChild
|
|
1000
|
+
? this.#getGapZoomTarget(event.point)
|
|
1001
|
+
: undefined;
|
|
998
1002
|
|
|
999
1003
|
if (event.type === "wheelclaimprobe") {
|
|
1000
1004
|
// Probe path: claim wheel ownership without executing regular wheel
|
|
1001
1005
|
// behavior. InteractionController uses this to decide whether native
|
|
1002
1006
|
// wheel should be preventDefault()'ed before inertia kicks in.
|
|
1003
1007
|
if (!pointedView) {
|
|
1008
|
+
if (gapZoomTarget) {
|
|
1009
|
+
event.claimWheel();
|
|
1010
|
+
}
|
|
1004
1011
|
return;
|
|
1005
1012
|
}
|
|
1006
1013
|
|
|
@@ -1038,6 +1045,9 @@ export default class GridView extends ContainerView {
|
|
|
1038
1045
|
}
|
|
1039
1046
|
|
|
1040
1047
|
if (!pointedView) {
|
|
1048
|
+
if (gapZoomTarget) {
|
|
1049
|
+
this.#propagateGapZoomInteraction(event, gapZoomTarget);
|
|
1050
|
+
}
|
|
1041
1051
|
return;
|
|
1042
1052
|
}
|
|
1043
1053
|
|
|
@@ -1065,50 +1075,147 @@ export default class GridView extends ContainerView {
|
|
|
1065
1075
|
}
|
|
1066
1076
|
|
|
1067
1077
|
/**
|
|
1068
|
-
*
|
|
1069
|
-
* @
|
|
1070
|
-
* @param {View} view
|
|
1071
|
-
* @param {import("../zoom.js").ZoomEvent} zoomEvent
|
|
1072
|
-
* @returns {boolean} `true` when there was at least one zoomable resolution
|
|
1078
|
+
* @param {import("../layout/point.js").default} point
|
|
1079
|
+
* @returns {{ coords: Rectangle, zoomableResolutions: ReturnType<typeof getZoomableResolutionSet> } | undefined}
|
|
1073
1080
|
*/
|
|
1074
|
-
#
|
|
1075
|
-
|
|
1076
|
-
|
|
1081
|
+
#getGapZoomTarget(point) {
|
|
1082
|
+
const channel = this.#getGapZoomChannel();
|
|
1083
|
+
if (!channel) {
|
|
1084
|
+
return;
|
|
1085
|
+
}
|
|
1077
1086
|
|
|
1078
|
-
const
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
const
|
|
1084
|
-
|
|
1085
|
-
|
|
1087
|
+
const resolution = this.getScaleResolution(channel);
|
|
1088
|
+
if (!resolution || !resolution.isZoomable()) {
|
|
1089
|
+
return;
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1092
|
+
const coords = this.#getGapZoomCoords(channel);
|
|
1093
|
+
if (!coords) {
|
|
1094
|
+
return;
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
if (!coords.containsPoint(point.x, point.y)) {
|
|
1098
|
+
return;
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
return {
|
|
1102
|
+
coords,
|
|
1103
|
+
zoomableResolutions: getZoomableResolutionSet(channel, resolution),
|
|
1086
1104
|
};
|
|
1105
|
+
}
|
|
1087
1106
|
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1107
|
+
/**
|
|
1108
|
+
* @returns {import("../../spec/channel.js").PrimaryPositionalChannel | undefined}
|
|
1109
|
+
*/
|
|
1110
|
+
#getGapZoomChannel() {
|
|
1111
|
+
if (isVConcatSpec(this.spec)) {
|
|
1112
|
+
return "x";
|
|
1113
|
+
} else if (isHConcatSpec(this.spec)) {
|
|
1114
|
+
return "y";
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
|
|
1118
|
+
/**
|
|
1119
|
+
* @param {import("../../spec/channel.js").PrimaryPositionalChannel} channel
|
|
1120
|
+
* @returns {Rectangle | undefined}
|
|
1121
|
+
*/
|
|
1122
|
+
#getGapZoomCoords(channel) {
|
|
1123
|
+
const firstChild = this.#visibleChildren[0];
|
|
1124
|
+
if (!firstChild) {
|
|
1125
|
+
return;
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
const firstViewportCoords = firstChild.coords;
|
|
1129
|
+
const firstExpandedCoords = firstChild.coords.expand(
|
|
1130
|
+
firstChild.getOverhang()
|
|
1131
|
+
);
|
|
1132
|
+
|
|
1133
|
+
let minX = firstViewportCoords.x;
|
|
1134
|
+
let minY = firstExpandedCoords.y;
|
|
1135
|
+
let maxX = firstViewportCoords.x2;
|
|
1136
|
+
let maxY = firstExpandedCoords.y2;
|
|
1137
|
+
|
|
1138
|
+
for (const gridChild of this.#visibleChildren.slice(1)) {
|
|
1139
|
+
const viewportCoords = gridChild.coords;
|
|
1140
|
+
const expandedCoords = gridChild.coords.expand(
|
|
1141
|
+
gridChild.getOverhang()
|
|
1142
|
+
);
|
|
1143
|
+
|
|
1144
|
+
if (channel == "x") {
|
|
1145
|
+
minX = Math.max(minX, viewportCoords.x);
|
|
1146
|
+
maxX = Math.min(maxX, viewportCoords.x2);
|
|
1147
|
+
minY = Math.min(minY, expandedCoords.y);
|
|
1148
|
+
maxY = Math.max(maxY, expandedCoords.y2);
|
|
1149
|
+
} else {
|
|
1150
|
+
minX = Math.min(minX, expandedCoords.x);
|
|
1151
|
+
maxX = Math.max(maxX, expandedCoords.x2);
|
|
1152
|
+
minY = Math.max(minY, viewportCoords.y);
|
|
1153
|
+
maxY = Math.min(maxY, viewportCoords.y2);
|
|
1093
1154
|
}
|
|
1155
|
+
}
|
|
1094
1156
|
|
|
1095
|
-
|
|
1157
|
+
for (const axisView of Object.values(this.#sharedAxes)) {
|
|
1158
|
+
const axisCoords = axisView.coords;
|
|
1159
|
+
if (!axisCoords) {
|
|
1160
|
+
continue;
|
|
1161
|
+
}
|
|
1096
1162
|
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1163
|
+
const orient = axisView.axisProps.orient;
|
|
1164
|
+
if (channel == "x" && (orient == "top" || orient == "bottom")) {
|
|
1165
|
+
minY = Math.min(minY, axisCoords.y);
|
|
1166
|
+
maxY = Math.max(maxY, axisCoords.y2);
|
|
1167
|
+
} else if (
|
|
1168
|
+
channel == "y" &&
|
|
1169
|
+
(orient == "left" || orient == "right")
|
|
1170
|
+
) {
|
|
1171
|
+
minX = Math.min(minX, axisCoords.x);
|
|
1172
|
+
maxX = Math.max(maxX, axisCoords.x2);
|
|
1104
1173
|
}
|
|
1105
1174
|
}
|
|
1106
1175
|
|
|
1107
|
-
if (
|
|
1108
|
-
|
|
1176
|
+
if (minX >= maxX || minY >= maxY) {
|
|
1177
|
+
return;
|
|
1109
1178
|
}
|
|
1110
1179
|
|
|
1111
|
-
return
|
|
1180
|
+
return Rectangle.create(minX, minY, maxX - minX, maxY - minY);
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
/**
|
|
1184
|
+
* @param {import("../../utils/interaction.js").default} event
|
|
1185
|
+
* @param {{ coords: Rectangle, zoomableResolutions: ReturnType<typeof getZoomableResolutionSet> }} gapZoomTarget
|
|
1186
|
+
*/
|
|
1187
|
+
#propagateGapZoomInteraction(event, gapZoomTarget) {
|
|
1188
|
+
event.target = this;
|
|
1189
|
+
|
|
1190
|
+
interactionToZoom(
|
|
1191
|
+
event,
|
|
1192
|
+
gapZoomTarget.coords,
|
|
1193
|
+
(zoomEvent) =>
|
|
1194
|
+
zoomResolutions(
|
|
1195
|
+
gapZoomTarget.coords,
|
|
1196
|
+
zoomEvent,
|
|
1197
|
+
gapZoomTarget.zoomableResolutions,
|
|
1198
|
+
this.context.animator
|
|
1199
|
+
),
|
|
1200
|
+
this.context.getCurrentHover(),
|
|
1201
|
+
this.context.animator
|
|
1202
|
+
);
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
/**
|
|
1206
|
+
*
|
|
1207
|
+
* @param {import("../layout/rectangle.js").default} coords Coordinates
|
|
1208
|
+
* @param {View} view
|
|
1209
|
+
* @param {import("../zoom.js").ZoomEvent} zoomEvent
|
|
1210
|
+
* @returns {boolean} `true` when there was at least one zoomable resolution
|
|
1211
|
+
*/
|
|
1212
|
+
#handleZoom(coords, view, zoomEvent) {
|
|
1213
|
+
return zoomResolutions(
|
|
1214
|
+
coords,
|
|
1215
|
+
zoomEvent,
|
|
1216
|
+
getZoomableResolutions(view),
|
|
1217
|
+
this.context.animator
|
|
1218
|
+
);
|
|
1112
1219
|
}
|
|
1113
1220
|
|
|
1114
1221
|
/**
|
|
@@ -1121,6 +1228,65 @@ export default class GridView extends ContainerView {
|
|
|
1121
1228
|
}
|
|
1122
1229
|
}
|
|
1123
1230
|
|
|
1231
|
+
/**
|
|
1232
|
+
* @param {import("../../spec/channel.js").PrimaryPositionalChannel} channel
|
|
1233
|
+
* @param {import("../../scales/scaleResolution.js").default} resolution
|
|
1234
|
+
*/
|
|
1235
|
+
function getZoomableResolutionSet(channel, resolution) {
|
|
1236
|
+
const zoomableResolutions = {
|
|
1237
|
+
x: new Set(),
|
|
1238
|
+
y: new Set(),
|
|
1239
|
+
};
|
|
1240
|
+
zoomableResolutions[channel].add(resolution);
|
|
1241
|
+
return zoomableResolutions;
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
/**
|
|
1245
|
+
* @param {Rectangle} coords
|
|
1246
|
+
* @param {import("../zoom.js").ZoomEvent} zoomEvent
|
|
1247
|
+
* @param {ReturnType<typeof getZoomableResolutions>} zoomableResolutions
|
|
1248
|
+
* @param {import("../../utils/animator.js").default} animator
|
|
1249
|
+
*/
|
|
1250
|
+
function zoomResolutions(coords, zoomEvent, zoomableResolutions, animator) {
|
|
1251
|
+
let zoomable = false;
|
|
1252
|
+
let changed = false;
|
|
1253
|
+
|
|
1254
|
+
const p = coords.normalizePoint(zoomEvent.x, zoomEvent.y);
|
|
1255
|
+
const tp = coords.normalizePoint(
|
|
1256
|
+
zoomEvent.x + zoomEvent.xDelta,
|
|
1257
|
+
zoomEvent.y + zoomEvent.yDelta
|
|
1258
|
+
);
|
|
1259
|
+
const delta = {
|
|
1260
|
+
x: tp.x - p.x,
|
|
1261
|
+
y: tp.y - p.y,
|
|
1262
|
+
};
|
|
1263
|
+
|
|
1264
|
+
for (const [channel, resolutionSet] of Object.entries(
|
|
1265
|
+
zoomableResolutions
|
|
1266
|
+
)) {
|
|
1267
|
+
if (resolutionSet.size <= 0) {
|
|
1268
|
+
continue;
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
zoomable = true;
|
|
1272
|
+
|
|
1273
|
+
for (const resolution of resolutionSet) {
|
|
1274
|
+
const resolutionChanged = resolution.zoom(
|
|
1275
|
+
2 ** zoomEvent.zDelta,
|
|
1276
|
+
channel == "y" ? 1 - p[channel] : p[channel],
|
|
1277
|
+
channel == "x" ? delta.x : -delta.y
|
|
1278
|
+
);
|
|
1279
|
+
changed = resolutionChanged || changed;
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
if (changed) {
|
|
1284
|
+
animator.requestRender();
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
|
+
return zoomable;
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1124
1290
|
/**
|
|
1125
1291
|
* @param {View} view
|
|
1126
1292
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollbar.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/scrollbar.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scrollbar.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/scrollbar.js"],"names":[],"mappings":"AASA;;;;;GAKG;AACH;IAwBI;;;;OAIG;IACH,uBAJW,OAAO,gBAAgB,EAAE,OAAO,mBAChC,eAAe,YACf;QAAE,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,EA4H/D;IA3ID;;;;;;OAMG;IACH,uBAAmB;IAmDf;;;;MAAoB;IAmFxB,2BAEC;IAED;;;OAGG;IACH,yBAHW,MAAM,6BACN;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,QAYtD;IAqFD;;;;;;;;;OASG;IACH,gCAHW,SAAS,iBACT,SAAS,QASnB;IAMG;;;;MAWC;;CAER;;;;;8BAtSY,YAAY,GAAG,UAAU;qBAVjB,gBAAgB;sBADf,wBAAwB"}
|
|
@@ -2,7 +2,10 @@ import clamp from "../../utils/clamp.js";
|
|
|
2
2
|
import { makeLerpSmoother } from "../../utils/animator.js";
|
|
3
3
|
import Rectangle from "../layout/rectangle.js";
|
|
4
4
|
import UnitView from "../unitView.js";
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
markViewAsChrome,
|
|
7
|
+
markViewAsNonAddressable,
|
|
8
|
+
} from "../viewSelectors.js";
|
|
6
9
|
|
|
7
10
|
/**
|
|
8
11
|
* This class represents a scrollbar thumb that can be used within a grid view
|
|
@@ -78,6 +81,7 @@ export default class Scrollbar extends UnitView {
|
|
|
78
81
|
);
|
|
79
82
|
|
|
80
83
|
markViewAsNonAddressable(this, { skipSubtree: true });
|
|
84
|
+
markViewAsChrome(this, { skipSubtree: true });
|
|
81
85
|
|
|
82
86
|
this.config = config;
|
|
83
87
|
this.#scrollDirection = scrollDirection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectionRect.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/selectionRect.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"selectionRect.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/selectionRect.js"],"names":[],"mappings":"AAOA,yCAA0C,oBAAoB,CAAC;AAE/D;IACI;;;OAGG;IAEH;;;;OAIG;IACH,uBAJW,OAAO,gBAAgB,EAAE,OAAO,iBAChC,OAAO,6BAA6B,EAAE,eAAe,gBACrD,OAAO,yBAAyB,EAAE,WAAW,EA6KvD;IA3BG,qBAAqB;IACrB,SADW,MAAM,CACI;IA4BzB,oBAEC;CACJ;sBAnMqB,iBAAiB"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { primaryPositionalChannels } from "../../encoder/encoder.js";
|
|
2
2
|
import LayerView from "../layerView.js";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
markViewAsChrome,
|
|
5
|
+
markViewAsNonAddressable,
|
|
6
|
+
} from "../viewSelectors.js";
|
|
4
7
|
|
|
5
8
|
export const INTERVAL_DRAG_ACTIVE_PARAM = "intervalDragActive";
|
|
6
9
|
|
|
@@ -163,6 +166,7 @@ export default class SelectionRect extends LayerView {
|
|
|
163
166
|
this._zindex = zindex;
|
|
164
167
|
|
|
165
168
|
markViewAsNonAddressable(this, { skipSubtree: true });
|
|
169
|
+
markViewAsChrome(this, { skipSubtree: true });
|
|
166
170
|
|
|
167
171
|
const selectionListener = () => {
|
|
168
172
|
const selection =
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"separatorView.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/separatorView.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"separatorView.d.ts","sourceRoot":"","sources":["../../../../src/view/gridView/separatorView.js"],"names":[],"mappings":"AAwOA;;;GAGG;AACH,iDAHW,OAAO,oBAAoB,EAAE,cAAc,GAAG,OAAO,GAAG,SAAS,GAC/D,OAAO,oBAAoB,EAAE,cAAc,GAAG,IAAI,CAiB9D;AAzOD;;GAEG;AACH;IAyBI;;;;;;;;;OASG;IACH,+EATW;QACN,SAAS,EAAE,kBAAkB,CAAC;QAC9B,KAAK,EAAE,OAAO,oBAAoB,EAAE,cAAc,CAAC;QACnD,OAAO,EAAE,OAAO,4BAA4B,EAAE,OAAO,CAAC;QACtD,YAAY,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC;QACpD,UAAU,EAAE,OAAO,YAAY,EAAE,OAAO,CAAC;QACzC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAA;KACpC,EAuBH;IAED;;OAEG;IACH,YAFa,QAAQ,CAIpB;IAED,oBAEC;IAED;;;;;;;OAOG;IACH,mBAPW,OAAO,yBAAyB,EAAE,OAAO,EAAE,SAC3C,MAAM,UACN,OAAO,wBAAwB,EAAE,OAAO,eACxC,CAAC,SAAS,EAAE,KAAK,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,iBACtD,OAAO,YACP,OAAO,sBAAsB,EAAE,OAAO,QAKhD;IAED;;;;OAIG;IACH,gBAJW,OAAO,6CAA6C,EAAE,OAAO,UAC7D,OAAO,wBAAwB,EAAE,OAAO,WACxC,OAAO,0BAA0B,EAAE,gBAAgB,QAI7D;;CAwHJ;iCA/NY,YAAY,GAAG,UAAU;qBAPjB,gBAAgB"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import UnitView from "../unitView.js";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
markViewAsChrome,
|
|
4
|
+
markViewAsNonAddressable,
|
|
5
|
+
} from "../viewSelectors.js";
|
|
3
6
|
|
|
4
7
|
/**
|
|
5
8
|
* @typedef {"horizontal" | "vertical"} SeparatorDirection
|
|
@@ -221,6 +224,7 @@ export default class SeparatorView {
|
|
|
221
224
|
);
|
|
222
225
|
|
|
223
226
|
markViewAsNonAddressable(view, { skipSubtree: true });
|
|
227
|
+
markViewAsChrome(view, { skipSubtree: true });
|
|
224
228
|
|
|
225
229
|
return view;
|
|
226
230
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function resolveViewResolutions(view: import("./unitView.js").default, type?: import("../spec/view.js").ResolutionTarget): void;
|
|
2
|
+
export type ResolutionMember = {
|
|
3
|
+
view: import("./unitView.js").default;
|
|
4
|
+
channel: import("../spec/channel.js").Channel;
|
|
5
|
+
channelDef: import("../spec/channel.js").ChannelDefWithScale;
|
|
6
|
+
targetChannel: import("../spec/channel.js").ChannelWithScale;
|
|
7
|
+
};
|
|
8
|
+
export type ScaleResolutionMemberMap = Map<import("../scales/scaleResolution.js").default, ResolutionMember[]>;
|
|
9
|
+
//# sourceMappingURL=resolutionPlanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolutionPlanner.d.ts","sourceRoot":"","sources":["../../../src/view/resolutionPlanner.js"],"names":[],"mappings":"AA8RO,6CAHI,OAAO,eAAe,EAAE,OAAO,SAC/B,OAAO,iBAAiB,EAAE,gBAAgB,QAiBpD;;UAhSS,OAAO,eAAe,EAAE,OAAO;aAC/B,OAAO,oBAAoB,EAAE,OAAO;gBACpC,OAAO,oBAAoB,EAAE,mBAAmB;mBAChD,OAAO,oBAAoB,EAAE,gBAAgB;;uCAI1C,GAAG,CAAC,OAAO,8BAA8B,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|