@genome-spy/core 0.69.1 → 0.71.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/{AbortablePromiseCache-CcuMrnn7.js → AbortablePromiseCache-Dj0vzLnp.js} +4 -4
- package/dist/bundle/{browser-BRemItdO.js → browser-0iNU5Wit.js} +33 -33
- package/dist/bundle/index-BYsZN7b0.js +1597 -0
- package/dist/bundle/{index-Cq3QFUxX.js → index-C3kClAEN.js} +583 -593
- package/dist/bundle/{index-D-w7Mmt9.js → index-C7wOh6y1.js} +138 -140
- package/dist/bundle/index-CRaQAuki.js +326 -0
- package/dist/bundle/{index-D74H8TTz.js → index-D9v1PCj9.js} +1 -2
- package/dist/bundle/{index-BatuyGAI.js → index-GDOuv_D5.js} +75 -80
- package/dist/bundle/{index-DbJ0oeYM.js → index-Gt44EOIH.js} +160 -163
- package/dist/bundle/index.es.js +9095 -9129
- package/dist/bundle/index.js +121 -163
- package/dist/bundle/{unzip-NywezaRR.js → unzip-Bac01w6X.js} +1 -1
- package/dist/schema.json +0 -48
- package/dist/src/genomeSpy/containerUi.d.ts.map +1 -1
- package/dist/src/genomeSpy/containerUi.js +0 -1
- package/dist/src/genomeSpy/viewHighlight.js +2 -2
- package/dist/src/genomeSpy.d.ts +3 -3
- package/dist/src/genomeSpy.d.ts.map +1 -1
- package/dist/src/genomeSpy.js +27 -3
- package/dist/src/gl/colorUtils.d.ts +2 -1
- package/dist/src/gl/colorUtils.d.ts.map +1 -1
- package/dist/src/gl/colorUtils.js +15 -3
- package/dist/src/gl/webGLHelper.d.ts.map +1 -1
- package/dist/src/gl/webGLHelper.js +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -5
- package/dist/src/marks/mark.d.ts +1 -3
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +0 -8
- package/dist/src/marks/rect.d.ts.map +1 -1
- package/dist/src/marks/rect.js +0 -8
- package/dist/src/spec/view.d.ts +0 -10
- package/dist/src/utils/deepEqual.d.ts +14 -0
- package/dist/src/utils/deepEqual.d.ts.map +1 -0
- package/dist/src/utils/deepEqual.js +63 -0
- package/dist/src/utils/fetchUtils.d.ts +27 -0
- package/dist/src/utils/fetchUtils.d.ts.map +1 -0
- package/dist/src/utils/fetchUtils.js +47 -0
- package/dist/src/utils/keyboardZoomMotion.d.ts +93 -0
- package/dist/src/utils/keyboardZoomMotion.d.ts.map +1 -0
- package/dist/src/utils/keyboardZoomMotion.js +285 -0
- package/dist/src/utils/url.d.ts +12 -0
- package/dist/src/utils/url.d.ts.map +1 -1
- package/dist/src/utils/url.js +45 -0
- package/dist/src/view/axisGridView.d.ts +1 -1
- package/dist/src/view/axisGridView.js +0 -1
- package/dist/src/view/axisView.d.ts +1 -1
- package/dist/src/view/concatView.d.ts +6 -3
- package/dist/src/view/concatView.d.ts.map +1 -1
- package/dist/src/view/concatView.js +9 -2
- package/dist/src/view/containerMutationHelper.d.ts +6 -6
- package/dist/src/view/containerMutationHelper.d.ts.map +1 -1
- package/dist/src/view/containerView.d.ts +7 -5
- package/dist/src/view/containerView.d.ts.map +1 -1
- package/dist/src/view/containerView.js +4 -1
- package/dist/src/view/facetView.d.ts +1 -1
- package/dist/src/view/flowBuilder.d.ts +1 -1
- package/dist/src/view/flowBuilder.d.ts.map +1 -1
- package/dist/src/view/gridView/gridChild.d.ts +3 -3
- package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
- package/dist/src/view/gridView/gridChild.js +0 -2
- package/dist/src/view/gridView/gridView.d.ts +13 -11
- package/dist/src/view/gridView/gridView.d.ts.map +1 -1
- package/dist/src/view/gridView/gridView.js +17 -26
- package/dist/src/view/gridView/keyboardZoomController.d.ts +21 -0
- package/dist/src/view/gridView/keyboardZoomController.d.ts.map +1 -0
- package/dist/src/view/gridView/keyboardZoomController.js +202 -0
- package/dist/src/view/gridView/scrollbar.d.ts +1 -1
- package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
- package/dist/src/view/gridView/scrollbar.js +0 -1
- package/dist/src/view/gridView/selectionRect.d.ts +1 -1
- package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
- package/dist/src/view/gridView/selectionRect.js +0 -1
- package/dist/src/view/gridView/separatorView.js +0 -1
- package/dist/src/view/gridView/zoomNavigationUtils.d.ts +19 -0
- package/dist/src/view/gridView/zoomNavigationUtils.d.ts.map +1 -0
- package/dist/src/view/gridView/zoomNavigationUtils.js +51 -0
- package/dist/src/view/layerView.d.ts +8 -5
- package/dist/src/view/layerView.d.ts.map +1 -1
- package/dist/src/view/layerView.js +6 -2
- package/dist/src/view/title.d.ts.map +1 -1
- package/dist/src/view/title.js +0 -1
- package/dist/src/view/unitView.d.ts +7 -4
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/dist/src/view/unitView.js +5 -1
- package/dist/src/view/view.d.ts +13 -9
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.js +7 -1
- package/dist/src/view/viewError.d.ts +1 -1
- package/dist/src/view/viewError.d.ts.map +1 -1
- package/dist/src/view/viewFactory.d.ts +3 -44
- package/dist/src/view/viewFactory.d.ts.map +1 -1
- package/dist/src/view/viewFactory.js +28 -69
- package/dist/src/view/viewSelectors.d.ts.map +1 -1
- package/dist/src/view/viewSelectors.js +123 -160
- package/dist/src/view/viewSpecGuards.d.ts +43 -0
- package/dist/src/view/viewSpecGuards.d.ts.map +1 -0
- package/dist/src/view/viewSpecGuards.js +69 -0
- package/dist/src/view/viewUtils.d.ts +1 -1
- package/dist/src/view/viewUtils.d.ts.map +1 -1
- package/dist/src/view/viewUtils.js +4 -5
- package/dist/src/view/zoom.d.ts +1 -0
- package/dist/src/view/zoom.d.ts.map +1 -1
- package/dist/src/view/zoom.js +5 -1
- package/package.json +3 -3
- package/dist/bundle/index-ByuE8dvu.js +0 -332
- package/dist/bundle/index-D28m8tSW.js +0 -1607
- package/dist/src/data/collector.test.d.ts +0 -2
- package/dist/src/data/collector.test.d.ts.map +0 -1
- package/dist/src/data/dataFlow.test.d.ts +0 -2
- package/dist/src/data/dataFlow.test.d.ts.map +0 -1
- package/dist/src/data/flow.test.d.ts +0 -2
- package/dist/src/data/flow.test.d.ts.map +0 -1
- package/dist/src/data/flowInit.test.d.ts +0 -2
- package/dist/src/data/flowInit.test.d.ts.map +0 -1
- package/dist/src/data/flowNode.test.d.ts +0 -2
- package/dist/src/data/flowNode.test.d.ts.map +0 -1
- package/dist/src/data/flowOptimizer.test.d.ts +0 -2
- package/dist/src/data/flowOptimizer.test.d.ts.map +0 -1
- package/dist/src/data/formats/fasta.test.d.ts +0 -2
- package/dist/src/data/formats/fasta.test.d.ts.map +0 -1
- package/dist/src/data/keyIndex.test.d.ts +0 -2
- package/dist/src/data/keyIndex.test.d.ts.map +0 -1
- package/dist/src/data/sources/inlineSource.test.d.ts +0 -2
- package/dist/src/data/sources/inlineSource.test.d.ts.map +0 -1
- package/dist/src/data/sources/sequenceSource.test.d.ts +0 -2
- package/dist/src/data/sources/sequenceSource.test.d.ts.map +0 -1
- package/dist/src/data/transforms/aggregate.test.d.ts +0 -2
- package/dist/src/data/transforms/aggregate.test.d.ts.map +0 -1
- package/dist/src/data/transforms/clone.test.d.ts +0 -2
- package/dist/src/data/transforms/clone.test.d.ts.map +0 -1
- package/dist/src/data/transforms/coverage.test.d.ts +0 -2
- package/dist/src/data/transforms/coverage.test.d.ts.map +0 -1
- package/dist/src/data/transforms/filter.test.d.ts +0 -2
- package/dist/src/data/transforms/filter.test.d.ts.map +0 -1
- package/dist/src/data/transforms/filterScoredLabels.test.d.ts +0 -2
- package/dist/src/data/transforms/filterScoredLabels.test.d.ts.map +0 -1
- package/dist/src/data/transforms/flatten.test.d.ts +0 -2
- package/dist/src/data/transforms/flatten.test.d.ts.map +0 -1
- package/dist/src/data/transforms/flattenDelimited.test.d.ts +0 -2
- package/dist/src/data/transforms/flattenDelimited.test.d.ts.map +0 -1
- package/dist/src/data/transforms/flattenSequence.test.d.ts +0 -2
- package/dist/src/data/transforms/flattenSequence.test.d.ts.map +0 -1
- package/dist/src/data/transforms/formula.test.d.ts +0 -2
- package/dist/src/data/transforms/formula.test.d.ts.map +0 -1
- package/dist/src/data/transforms/identifier.test.d.ts +0 -2
- package/dist/src/data/transforms/identifier.test.d.ts.map +0 -1
- package/dist/src/data/transforms/pileup.test.d.ts +0 -2
- package/dist/src/data/transforms/pileup.test.d.ts.map +0 -1
- package/dist/src/data/transforms/project.test.d.ts +0 -2
- package/dist/src/data/transforms/project.test.d.ts.map +0 -1
- package/dist/src/data/transforms/regexExtract.test.d.ts +0 -2
- package/dist/src/data/transforms/regexExtract.test.d.ts.map +0 -1
- package/dist/src/data/transforms/regexFold.test.d.ts +0 -2
- package/dist/src/data/transforms/regexFold.test.d.ts.map +0 -1
- package/dist/src/data/transforms/sample.test.d.ts +0 -2
- package/dist/src/data/transforms/sample.test.d.ts.map +0 -1
- package/dist/src/data/transforms/stack.test.d.ts +0 -2
- package/dist/src/data/transforms/stack.test.d.ts.map +0 -1
- package/dist/src/encoder/accessor.test.d.ts +0 -2
- package/dist/src/encoder/accessor.test.d.ts.map +0 -1
- package/dist/src/encoder/encoder.test.d.ts +0 -2
- package/dist/src/encoder/encoder.test.d.ts.map +0 -1
- package/dist/src/encoder/metadataChannels.test.d.ts +0 -2
- package/dist/src/encoder/metadataChannels.test.d.ts.map +0 -1
- package/dist/src/genome/genome.test.d.ts +0 -2
- package/dist/src/genome/genome.test.d.ts.map +0 -1
- package/dist/src/genome/genomes.test.d.ts +0 -2
- package/dist/src/genome/genomes.test.d.ts.map +0 -1
- package/dist/src/genome/scaleIndex.test.d.ts +0 -2
- package/dist/src/genome/scaleIndex.test.d.ts.map +0 -1
- package/dist/src/genome/scaleLocus.test.d.ts +0 -2
- package/dist/src/genome/scaleLocus.test.d.ts.map +0 -1
- package/dist/src/genomeSpy/viewDataInit.test.d.ts +0 -2
- package/dist/src/genomeSpy/viewDataInit.test.d.ts.map +0 -1
- package/dist/src/paramRuntime/expressionRef.test.d.ts +0 -2
- package/dist/src/paramRuntime/expressionRef.test.d.ts.map +0 -1
- package/dist/src/paramRuntime/graphRuntime.test.d.ts +0 -2
- package/dist/src/paramRuntime/graphRuntime.test.d.ts.map +0 -1
- package/dist/src/paramRuntime/paramRuntime.test.d.ts +0 -2
- package/dist/src/paramRuntime/paramRuntime.test.d.ts.map +0 -1
- package/dist/src/paramRuntime/paramStore.test.d.ts +0 -2
- package/dist/src/paramRuntime/paramStore.test.d.ts.map +0 -1
- package/dist/src/scale/scale.test.d.ts +0 -2
- package/dist/src/scale/scale.test.d.ts.map +0 -1
- package/dist/src/scale/ticks.test.d.ts +0 -2
- package/dist/src/scale/ticks.test.d.ts.map +0 -1
- package/dist/src/scales/axisResolution.test.d.ts +0 -2
- package/dist/src/scales/axisResolution.test.d.ts.map +0 -1
- package/dist/src/scales/domainPlanner.test.d.ts +0 -2
- package/dist/src/scales/domainPlanner.test.d.ts.map +0 -1
- package/dist/src/scales/scaleInstanceManager.test.d.ts +0 -2
- package/dist/src/scales/scaleInstanceManager.test.d.ts.map +0 -1
- package/dist/src/scales/scaleInteractionController.test.d.ts +0 -2
- package/dist/src/scales/scaleInteractionController.test.d.ts.map +0 -1
- package/dist/src/scales/scaleResolution.test.d.ts +0 -2
- package/dist/src/scales/scaleResolution.test.d.ts.map +0 -1
- package/dist/src/scales/scaleRules.test.d.ts +0 -2
- package/dist/src/scales/scaleRules.test.d.ts.map +0 -1
- package/dist/src/selection/selection.test.d.ts +0 -2
- package/dist/src/selection/selection.test.d.ts.map +0 -1
- package/dist/src/tooltip/dataTooltipHandler.test.d.ts +0 -2
- package/dist/src/tooltip/dataTooltipHandler.test.d.ts.map +0 -1
- package/dist/src/tooltip/flattenDatumRows.test.d.ts +0 -2
- package/dist/src/tooltip/flattenDatumRows.test.d.ts.map +0 -1
- package/dist/src/tooltip/tooltipContext.test.d.ts +0 -2
- package/dist/src/tooltip/tooltipContext.test.d.ts.map +0 -1
- package/dist/src/utils/addBaseUrl.test.d.ts +0 -2
- package/dist/src/utils/addBaseUrl.test.d.ts.map +0 -1
- package/dist/src/utils/binnedIndex.test.d.ts +0 -2
- package/dist/src/utils/binnedIndex.test.d.ts.map +0 -1
- package/dist/src/utils/cloner.test.d.ts +0 -2
- package/dist/src/utils/cloner.test.d.ts.map +0 -1
- package/dist/src/utils/coalesce.test.d.ts +0 -2
- package/dist/src/utils/coalesce.test.d.ts.map +0 -1
- package/dist/src/utils/concatIterables.test.d.ts +0 -2
- package/dist/src/utils/concatIterables.test.d.ts.map +0 -1
- package/dist/src/utils/domainArray.test.d.ts +0 -2
- package/dist/src/utils/domainArray.test.d.ts.map +0 -1
- package/dist/src/utils/indexer.test.d.ts +0 -2
- package/dist/src/utils/indexer.test.d.ts.map +0 -1
- package/dist/src/utils/interactionEvent.test.d.ts +0 -2
- package/dist/src/utils/interactionEvent.test.d.ts.map +0 -1
- package/dist/src/utils/iterateNestedMaps.test.d.ts +0 -2
- package/dist/src/utils/iterateNestedMaps.test.d.ts.map +0 -1
- package/dist/src/utils/kWayMerge.test.d.ts +0 -2
- package/dist/src/utils/kWayMerge.test.d.ts.map +0 -1
- package/dist/src/utils/mergeObjects.test.d.ts +0 -2
- package/dist/src/utils/mergeObjects.test.d.ts.map +0 -1
- package/dist/src/utils/numberExtractor.test.d.ts +0 -2
- package/dist/src/utils/numberExtractor.test.d.ts.map +0 -1
- package/dist/src/utils/propertyCacher.test.d.ts +0 -2
- package/dist/src/utils/propertyCacher.test.d.ts.map +0 -1
- package/dist/src/utils/propertyCoalescer.test.d.ts +0 -2
- package/dist/src/utils/propertyCoalescer.test.d.ts.map +0 -1
- package/dist/src/utils/radixSort.test.d.ts +0 -2
- package/dist/src/utils/radixSort.test.d.ts.map +0 -1
- package/dist/src/utils/reservationMap.test.d.ts +0 -2
- package/dist/src/utils/reservationMap.test.d.ts.map +0 -1
- package/dist/src/utils/ringBuffer.test.d.ts +0 -2
- package/dist/src/utils/ringBuffer.test.d.ts.map +0 -1
- package/dist/src/utils/throttle.test.d.ts +0 -2
- package/dist/src/utils/throttle.test.d.ts.map +0 -1
- package/dist/src/utils/topK.test.d.ts +0 -2
- package/dist/src/utils/topK.test.d.ts.map +0 -1
- package/dist/src/utils/trees.test.d.ts +0 -2
- package/dist/src/utils/trees.test.d.ts.map +0 -1
- package/dist/src/utils/ui/tooltip.test.d.ts +0 -2
- package/dist/src/utils/ui/tooltip.test.d.ts.map +0 -1
- package/dist/src/utils/url.test.d.ts +0 -2
- package/dist/src/utils/url.test.d.ts.map +0 -1
- package/dist/src/utils/variableTools.test.d.ts +0 -2
- package/dist/src/utils/variableTools.test.d.ts.map +0 -1
- package/dist/src/view/concatView.test.d.ts +0 -2
- package/dist/src/view/concatView.test.d.ts.map +0 -1
- package/dist/src/view/dataReadiness.test.d.ts +0 -2
- package/dist/src/view/dataReadiness.test.d.ts.map +0 -1
- package/dist/src/view/flowBuilder.test.d.ts +0 -2
- package/dist/src/view/flowBuilder.test.d.ts.map +0 -1
- package/dist/src/view/gridView/gridView.test.d.ts +0 -2
- package/dist/src/view/gridView/gridView.test.d.ts.map +0 -1
- package/dist/src/view/gridView/selectionRect.test.d.ts +0 -2
- package/dist/src/view/gridView/selectionRect.test.d.ts.map +0 -1
- package/dist/src/view/layerView.test.d.ts +0 -2
- package/dist/src/view/layerView.test.d.ts.map +0 -1
- package/dist/src/view/layout/flexLayout.test.d.ts +0 -2
- package/dist/src/view/layout/flexLayout.test.d.ts.map +0 -1
- package/dist/src/view/layout/grid.test.d.ts +0 -2
- package/dist/src/view/layout/grid.test.d.ts.map +0 -1
- package/dist/src/view/layout/rectangle.test.d.ts +0 -2
- package/dist/src/view/layout/rectangle.test.d.ts.map +0 -1
- package/dist/src/view/multiscale.test.d.ts +0 -2
- package/dist/src/view/multiscale.test.d.ts.map +0 -1
- package/dist/src/view/view.test.d.ts +0 -2
- package/dist/src/view/view.test.d.ts.map +0 -1
- package/dist/src/view/viewDispose.test.d.ts +0 -2
- package/dist/src/view/viewDispose.test.d.ts.map +0 -1
- package/dist/src/view/viewFactory.test.d.ts +0 -2
- package/dist/src/view/viewFactory.test.d.ts.map +0 -1
- package/dist/src/view/viewParamRuntime.test.d.ts +0 -2
- package/dist/src/view/viewParamRuntime.test.d.ts.map +0 -1
- package/dist/src/view/viewSelectors.test.d.ts +0 -2
- package/dist/src/view/viewSelectors.test.d.ts.map +0 -1
- package/dist/src/view/viewUtils.test.d.ts +0 -2
- package/dist/src/view/viewUtils.test.d.ts.map +0 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export namespace DEFAULT_KEYBOARD_ZOOM_MOTION_CONFIG {
|
|
2
|
+
namespace pan {
|
|
3
|
+
let baseSpeed: number;
|
|
4
|
+
let maxExtraSpeed: number;
|
|
5
|
+
let pressHalfLifeMs: number;
|
|
6
|
+
let releaseHalfLifeMs: number;
|
|
7
|
+
let holdGrowthHalfLifeMs: number;
|
|
8
|
+
let stopVelocity: number;
|
|
9
|
+
}
|
|
10
|
+
namespace zoom {
|
|
11
|
+
let baseSpeed_1: number;
|
|
12
|
+
export { baseSpeed_1 as baseSpeed };
|
|
13
|
+
let maxExtraSpeed_1: number;
|
|
14
|
+
export { maxExtraSpeed_1 as maxExtraSpeed };
|
|
15
|
+
let pressHalfLifeMs_1: number;
|
|
16
|
+
export { pressHalfLifeMs_1 as pressHalfLifeMs };
|
|
17
|
+
let releaseHalfLifeMs_1: number;
|
|
18
|
+
export { releaseHalfLifeMs_1 as releaseHalfLifeMs };
|
|
19
|
+
let holdGrowthHalfLifeMs_1: number;
|
|
20
|
+
export { holdGrowthHalfLifeMs_1 as holdGrowthHalfLifeMs };
|
|
21
|
+
let stopVelocity_1: number;
|
|
22
|
+
export { stopVelocity_1 as stopVelocity };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Handles smooth WASD navigation motion with acceleration and braking.
|
|
27
|
+
*/
|
|
28
|
+
export default class KeyboardZoomMotion {
|
|
29
|
+
/**
|
|
30
|
+
* @param {typeof DEFAULT_KEYBOARD_ZOOM_MOTION_CONFIG} [config]
|
|
31
|
+
*/
|
|
32
|
+
constructor(config?: typeof DEFAULT_KEYBOARD_ZOOM_MOTION_CONFIG);
|
|
33
|
+
/**
|
|
34
|
+
* @param {string} code
|
|
35
|
+
*/
|
|
36
|
+
isNavigationKey(code: string): code is "KeyW" | "KeyA" | "KeyS" | "KeyD";
|
|
37
|
+
/**
|
|
38
|
+
* @param {string} code
|
|
39
|
+
* @returns {boolean} true if the key state changed
|
|
40
|
+
*/
|
|
41
|
+
handleKeyDown(code: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* @param {string} code
|
|
44
|
+
* @returns {boolean} true if the key state changed
|
|
45
|
+
*/
|
|
46
|
+
handleKeyUp(code: string): boolean;
|
|
47
|
+
reset(): void;
|
|
48
|
+
/**
|
|
49
|
+
* @param {number} dtMs
|
|
50
|
+
* @returns {MotionStep}
|
|
51
|
+
*/
|
|
52
|
+
step(dtMs: number): MotionStep;
|
|
53
|
+
isActive(): boolean;
|
|
54
|
+
#private;
|
|
55
|
+
}
|
|
56
|
+
export type NavigationKeyCode = "KeyW" | "KeyA" | "KeyS" | "KeyD";
|
|
57
|
+
export type AxisProfile = {
|
|
58
|
+
/**
|
|
59
|
+
* Target speed reached rapidly after key press.
|
|
60
|
+
*/
|
|
61
|
+
baseSpeed: number;
|
|
62
|
+
/**
|
|
63
|
+
* Additional speed gained during sustained hold.
|
|
64
|
+
*/
|
|
65
|
+
maxExtraSpeed: number;
|
|
66
|
+
/**
|
|
67
|
+
* Half-life for accelerating toward target speed.
|
|
68
|
+
*/
|
|
69
|
+
pressHalfLifeMs: number;
|
|
70
|
+
/**
|
|
71
|
+
* Half-life for braking velocity after release.
|
|
72
|
+
*/
|
|
73
|
+
releaseHalfLifeMs: number;
|
|
74
|
+
/**
|
|
75
|
+
* Half-life for hold-time extra acceleration.
|
|
76
|
+
*/
|
|
77
|
+
holdGrowthHalfLifeMs: number;
|
|
78
|
+
/**
|
|
79
|
+
* Velocity threshold below which motion snaps to zero.
|
|
80
|
+
*/
|
|
81
|
+
stopVelocity: number;
|
|
82
|
+
};
|
|
83
|
+
export type AxisState = {
|
|
84
|
+
velocity: number;
|
|
85
|
+
holdMs: number;
|
|
86
|
+
direction: -1 | 0 | 1;
|
|
87
|
+
};
|
|
88
|
+
export type MotionStep = {
|
|
89
|
+
panDelta: number;
|
|
90
|
+
zoomDelta: number;
|
|
91
|
+
active: boolean;
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=keyboardZoomMotion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboardZoomMotion.d.ts","sourceRoot":"","sources":["../../../src/utils/keyboardZoomMotion.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAmDA;;GAEG;AACH;IAcI;;OAEG;IACH,qBAFW,OAAO,mCAAmC,EAwBpD;IAED;;OAEG;IACH,sBAFW,MAAM,6CAShB;IAED;;;OAGG;IACH,oBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;OAGG;IACH,kBAHW,MAAM,GACJ,OAAO,CAInB;IAED,cAaC;IAED;;;OAGG;IACH,WAHW,MAAM,GACJ,UAAU,CAwCtB;IAED,oBAWC;;CAqBJ;gCArNY,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM;;;;;eAKpC,MAAM;;;;mBACN,MAAM;;;;qBACN,MAAM;;;;uBACN,MAAM;;;;0BACN,MAAM;;;;kBACN,MAAM;;;cAKN,MAAM;YACN,MAAM;eACN,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;;;cAKV,MAAM;eACN,MAAM;YACN,OAAO"}
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {"KeyW" | "KeyA" | "KeyS" | "KeyD"} NavigationKeyCode
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {object} AxisProfile
|
|
7
|
+
* @prop {number} baseSpeed Target speed reached rapidly after key press.
|
|
8
|
+
* @prop {number} maxExtraSpeed Additional speed gained during sustained hold.
|
|
9
|
+
* @prop {number} pressHalfLifeMs Half-life for accelerating toward target speed.
|
|
10
|
+
* @prop {number} releaseHalfLifeMs Half-life for braking velocity after release.
|
|
11
|
+
* @prop {number} holdGrowthHalfLifeMs Half-life for hold-time extra acceleration.
|
|
12
|
+
* @prop {number} stopVelocity Velocity threshold below which motion snaps to zero.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @typedef {object} AxisState
|
|
17
|
+
* @prop {number} velocity
|
|
18
|
+
* @prop {number} holdMs
|
|
19
|
+
* @prop {-1 | 0 | 1} direction
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @typedef {object} MotionStep
|
|
24
|
+
* @prop {number} panDelta
|
|
25
|
+
* @prop {number} zoomDelta
|
|
26
|
+
* @prop {boolean} active
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Tuned for fast key-tap response, one-second-ish braking, and gradual
|
|
31
|
+
* acceleration during long key holds.
|
|
32
|
+
*/
|
|
33
|
+
export const DEFAULT_KEYBOARD_ZOOM_MOTION_CONFIG = {
|
|
34
|
+
pan: {
|
|
35
|
+
baseSpeed: 1,
|
|
36
|
+
maxExtraSpeed: 3,
|
|
37
|
+
pressHalfLifeMs: 30,
|
|
38
|
+
releaseHalfLifeMs: 100,
|
|
39
|
+
holdGrowthHalfLifeMs: 800,
|
|
40
|
+
stopVelocity: 0.01,
|
|
41
|
+
},
|
|
42
|
+
zoom: {
|
|
43
|
+
baseSpeed: 3,
|
|
44
|
+
maxExtraSpeed: 15,
|
|
45
|
+
pressHalfLifeMs: 10,
|
|
46
|
+
releaseHalfLifeMs: 100,
|
|
47
|
+
holdGrowthHalfLifeMs: 600,
|
|
48
|
+
stopVelocity: 0.01,
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Handles smooth WASD navigation motion with acceleration and braking.
|
|
54
|
+
*/
|
|
55
|
+
export default class KeyboardZoomMotion {
|
|
56
|
+
/** @type {Record<NavigationKeyCode, boolean>} */
|
|
57
|
+
#pressed;
|
|
58
|
+
|
|
59
|
+
/** @type {AxisState} */
|
|
60
|
+
#pan;
|
|
61
|
+
|
|
62
|
+
/** @type {AxisState} */
|
|
63
|
+
#zoom;
|
|
64
|
+
|
|
65
|
+
#panProfile;
|
|
66
|
+
|
|
67
|
+
#zoomProfile;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @param {typeof DEFAULT_KEYBOARD_ZOOM_MOTION_CONFIG} [config]
|
|
71
|
+
*/
|
|
72
|
+
constructor(config = DEFAULT_KEYBOARD_ZOOM_MOTION_CONFIG) {
|
|
73
|
+
this.#panProfile = config.pan;
|
|
74
|
+
this.#zoomProfile = config.zoom;
|
|
75
|
+
|
|
76
|
+
this.#pressed = {
|
|
77
|
+
KeyW: false,
|
|
78
|
+
KeyA: false,
|
|
79
|
+
KeyS: false,
|
|
80
|
+
KeyD: false,
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
this.#pan = {
|
|
84
|
+
velocity: 0,
|
|
85
|
+
holdMs: 0,
|
|
86
|
+
direction: 0,
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
this.#zoom = {
|
|
90
|
+
velocity: 0,
|
|
91
|
+
holdMs: 0,
|
|
92
|
+
direction: 0,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* @param {string} code
|
|
98
|
+
*/
|
|
99
|
+
isNavigationKey(code) {
|
|
100
|
+
return (
|
|
101
|
+
code === "KeyW" ||
|
|
102
|
+
code === "KeyA" ||
|
|
103
|
+
code === "KeyS" ||
|
|
104
|
+
code === "KeyD"
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* @param {string} code
|
|
110
|
+
* @returns {boolean} true if the key state changed
|
|
111
|
+
*/
|
|
112
|
+
handleKeyDown(code) {
|
|
113
|
+
return this.#setPressed(code, true);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* @param {string} code
|
|
118
|
+
* @returns {boolean} true if the key state changed
|
|
119
|
+
*/
|
|
120
|
+
handleKeyUp(code) {
|
|
121
|
+
return this.#setPressed(code, false);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
reset() {
|
|
125
|
+
this.#pressed.KeyW = false;
|
|
126
|
+
this.#pressed.KeyA = false;
|
|
127
|
+
this.#pressed.KeyS = false;
|
|
128
|
+
this.#pressed.KeyD = false;
|
|
129
|
+
|
|
130
|
+
this.#pan.velocity = 0;
|
|
131
|
+
this.#pan.holdMs = 0;
|
|
132
|
+
this.#pan.direction = 0;
|
|
133
|
+
|
|
134
|
+
this.#zoom.velocity = 0;
|
|
135
|
+
this.#zoom.holdMs = 0;
|
|
136
|
+
this.#zoom.direction = 0;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* @param {number} dtMs
|
|
141
|
+
* @returns {MotionStep}
|
|
142
|
+
*/
|
|
143
|
+
step(dtMs) {
|
|
144
|
+
if (dtMs <= 0) {
|
|
145
|
+
return {
|
|
146
|
+
panDelta: 0,
|
|
147
|
+
zoomDelta: 0,
|
|
148
|
+
active: this.isActive(),
|
|
149
|
+
};
|
|
150
|
+
} else {
|
|
151
|
+
const panDirection = axisDirection(
|
|
152
|
+
this.#pressed.KeyD,
|
|
153
|
+
this.#pressed.KeyA
|
|
154
|
+
);
|
|
155
|
+
const zoomDirection = axisDirection(
|
|
156
|
+
this.#pressed.KeyW,
|
|
157
|
+
this.#pressed.KeyS
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
const panVelocity = updateAxis(
|
|
161
|
+
this.#pan,
|
|
162
|
+
panDirection,
|
|
163
|
+
dtMs,
|
|
164
|
+
this.#panProfile
|
|
165
|
+
);
|
|
166
|
+
const zoomVelocity = updateAxis(
|
|
167
|
+
this.#zoom,
|
|
168
|
+
zoomDirection,
|
|
169
|
+
dtMs,
|
|
170
|
+
this.#zoomProfile
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
const dtSeconds = dtMs / 1000;
|
|
174
|
+
|
|
175
|
+
return {
|
|
176
|
+
panDelta: panVelocity * dtSeconds,
|
|
177
|
+
zoomDelta: zoomVelocity * dtSeconds,
|
|
178
|
+
active: this.isActive(),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
isActive() {
|
|
184
|
+
if (
|
|
185
|
+
this.#pressed.KeyW ||
|
|
186
|
+
this.#pressed.KeyA ||
|
|
187
|
+
this.#pressed.KeyS ||
|
|
188
|
+
this.#pressed.KeyD
|
|
189
|
+
) {
|
|
190
|
+
return true;
|
|
191
|
+
} else {
|
|
192
|
+
return this.#pan.velocity !== 0 || this.#zoom.velocity !== 0;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* @param {string} code
|
|
198
|
+
* @param {boolean} pressed
|
|
199
|
+
* @returns {boolean}
|
|
200
|
+
*/
|
|
201
|
+
#setPressed(code, pressed) {
|
|
202
|
+
if (!this.isNavigationKey(code)) {
|
|
203
|
+
return false;
|
|
204
|
+
} else {
|
|
205
|
+
const keyCode = /** @type {NavigationKeyCode} */ (code);
|
|
206
|
+
const previous = this.#pressed[keyCode];
|
|
207
|
+
if (previous === pressed) {
|
|
208
|
+
return false;
|
|
209
|
+
} else {
|
|
210
|
+
this.#pressed[keyCode] = pressed;
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* @param {boolean} negative
|
|
219
|
+
* @param {boolean} positive
|
|
220
|
+
* @returns {-1 | 0 | 1}
|
|
221
|
+
*/
|
|
222
|
+
function axisDirection(negative, positive) {
|
|
223
|
+
if (negative === positive) {
|
|
224
|
+
return 0;
|
|
225
|
+
} else if (positive) {
|
|
226
|
+
return 1;
|
|
227
|
+
} else {
|
|
228
|
+
return -1;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* @param {AxisState} axis
|
|
234
|
+
* @param {-1 | 0 | 1} direction
|
|
235
|
+
* @param {number} dtMs
|
|
236
|
+
* @param {AxisProfile} profile
|
|
237
|
+
* @returns {number}
|
|
238
|
+
*/
|
|
239
|
+
function updateAxis(axis, direction, dtMs, profile) {
|
|
240
|
+
if (direction !== 0) {
|
|
241
|
+
if (axis.direction !== direction) {
|
|
242
|
+
axis.holdMs = 0;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
axis.holdMs += dtMs;
|
|
246
|
+
|
|
247
|
+
const extraSpeed =
|
|
248
|
+
profile.maxExtraSpeed *
|
|
249
|
+
(1 - Math.pow(2, -axis.holdMs / profile.holdGrowthHalfLifeMs));
|
|
250
|
+
|
|
251
|
+
const target = direction * (profile.baseSpeed + extraSpeed);
|
|
252
|
+
|
|
253
|
+
axis.velocity = smoothApproach(
|
|
254
|
+
axis.velocity,
|
|
255
|
+
target,
|
|
256
|
+
dtMs,
|
|
257
|
+
profile.pressHalfLifeMs
|
|
258
|
+
);
|
|
259
|
+
} else {
|
|
260
|
+
axis.holdMs = 0;
|
|
261
|
+
axis.velocity = smoothApproach(
|
|
262
|
+
axis.velocity,
|
|
263
|
+
0,
|
|
264
|
+
dtMs,
|
|
265
|
+
profile.releaseHalfLifeMs
|
|
266
|
+
);
|
|
267
|
+
|
|
268
|
+
if (Math.abs(axis.velocity) < profile.stopVelocity) {
|
|
269
|
+
axis.velocity = 0;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
axis.direction = direction;
|
|
274
|
+
return axis.velocity;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* @param {number} current
|
|
279
|
+
* @param {number} target
|
|
280
|
+
* @param {number} dtMs
|
|
281
|
+
* @param {number} halfLifeMs
|
|
282
|
+
*/
|
|
283
|
+
function smoothApproach(current, target, dtMs, halfLifeMs) {
|
|
284
|
+
return target + (current - target) * Math.pow(2, -dtMs / halfLifeMs);
|
|
285
|
+
}
|
package/dist/src/utils/url.d.ts
CHANGED
|
@@ -9,6 +9,18 @@
|
|
|
9
9
|
* @param {string} append
|
|
10
10
|
*/
|
|
11
11
|
export function concatUrl(base: string | (() => string), append: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Resolves a URL against a possibly relative base URL and runtime location.
|
|
14
|
+
*
|
|
15
|
+
* Unlike concatUrl, this function can normalize path segments ("..", ".")
|
|
16
|
+
* when enough context exists (absolute base or runtime base URI).
|
|
17
|
+
*
|
|
18
|
+
* @param {string | (() => string)} base
|
|
19
|
+
* @param {string} append
|
|
20
|
+
* @param {string | null} [runtimeBase]
|
|
21
|
+
* @returns {string}
|
|
22
|
+
*/
|
|
23
|
+
export function resolveUrl(base: string | (() => string), append: string, runtimeBase?: string | null): string;
|
|
12
24
|
/**
|
|
13
25
|
* @param {string} url
|
|
14
26
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../src/utils/url.js"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,gCAHW,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,UACvB,MAAM,UAsBhB;AAED;;GAEG;AACH,kCAFW,MAAM,UAShB"}
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../src/utils/url.js"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,gCAHW,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,UACvB,MAAM,UAsBhB;AAED;;;;;;;;;;GAUG;AACH,iCALW,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,UACvB,MAAM,gBACN,MAAM,GAAG,IAAI,GACX,MAAM,CAsBlB;AAED;;GAEG;AACH,kCAFW,MAAM,UAShB"}
|
package/dist/src/utils/url.js
CHANGED
|
@@ -32,6 +32,39 @@ export function concatUrl(base, append) {
|
|
|
32
32
|
return getDirectory(baseString) + append;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
/**
|
|
36
|
+
* Resolves a URL against a possibly relative base URL and runtime location.
|
|
37
|
+
*
|
|
38
|
+
* Unlike concatUrl, this function can normalize path segments ("..", ".")
|
|
39
|
+
* when enough context exists (absolute base or runtime base URI).
|
|
40
|
+
*
|
|
41
|
+
* @param {string | (() => string)} base
|
|
42
|
+
* @param {string} append
|
|
43
|
+
* @param {string | null} [runtimeBase]
|
|
44
|
+
* @returns {string}
|
|
45
|
+
*/
|
|
46
|
+
export function resolveUrl(base, append, runtimeBase = getRuntimeBase()) {
|
|
47
|
+
const baseString = typeof base == "function" ? base() : base;
|
|
48
|
+
if (!append) {
|
|
49
|
+
return baseString;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
try {
|
|
53
|
+
if (baseString) {
|
|
54
|
+
const absoluteBase = runtimeBase
|
|
55
|
+
? new URL(baseString, runtimeBase).href
|
|
56
|
+
: new URL(baseString).href;
|
|
57
|
+
return new URL(append, absoluteBase).href;
|
|
58
|
+
} else if (runtimeBase) {
|
|
59
|
+
return new URL(append, runtimeBase).href;
|
|
60
|
+
}
|
|
61
|
+
} catch (_error) {
|
|
62
|
+
// Fall back to simple concatenation below.
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return concatUrl(baseString, append);
|
|
66
|
+
}
|
|
67
|
+
|
|
35
68
|
/**
|
|
36
69
|
* @param {string} url
|
|
37
70
|
*/
|
|
@@ -43,3 +76,15 @@ export function getDirectory(url) {
|
|
|
43
76
|
? url + "/"
|
|
44
77
|
: directory;
|
|
45
78
|
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @returns {string | undefined}
|
|
82
|
+
*/
|
|
83
|
+
function getRuntimeBase() {
|
|
84
|
+
if (typeof document !== "undefined" && document.baseURI) {
|
|
85
|
+
return document.baseURI;
|
|
86
|
+
}
|
|
87
|
+
if (typeof window !== "undefined" && window.location?.href) {
|
|
88
|
+
return window.location.href;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* @typedef {import("../spec/axis.js").Axis} Axis
|
|
10
10
|
* @typedef {import("../spec/axis.js").GenomeAxis} GenomeAxis
|
|
11
11
|
*/
|
|
12
|
-
export default class AxisGridView extends LayerView {
|
|
12
|
+
export default class AxisGridView extends LayerView<import("../spec/view.js").LayerSpec> {
|
|
13
13
|
/**
|
|
14
14
|
* @param {Axis} axisProps
|
|
15
15
|
* @param {import("../types/viewContext.js").default} context
|
|
@@ -22,7 +22,7 @@ export const ORIENT_CHANNELS: Record<import("../spec/axis.js").AxisOrient, impor
|
|
|
22
22
|
* TODO: Implement grid
|
|
23
23
|
*
|
|
24
24
|
*/
|
|
25
|
-
export default class AxisView extends LayerView {
|
|
25
|
+
export default class AxisView extends LayerView<import("../spec/view.js").LayerSpec> {
|
|
26
26
|
/**
|
|
27
27
|
*
|
|
28
28
|
* @typedef {import("../spec/view.js").LayerSpec} LayerSpec
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Creates a vertically or horizontally concatenated layout for children.
|
|
3
|
+
*
|
|
4
|
+
* @template {import("../spec/view.js").AnyConcatSpec} [TSpec=import("../spec/view.js").AnyConcatSpec]
|
|
5
|
+
* @extends {GridView<TSpec>}
|
|
3
6
|
*/
|
|
4
|
-
export default class ConcatView extends GridView {
|
|
7
|
+
export default class ConcatView<TSpec extends import("../spec/view.js").AnyConcatSpec = import("../spec/view.js").AnyConcatSpec> extends GridView<TSpec> {
|
|
5
8
|
/**
|
|
6
9
|
*
|
|
7
|
-
* @param {
|
|
10
|
+
* @param {TSpec} spec
|
|
8
11
|
* @param {import("../types/viewContext.js").default} context
|
|
9
12
|
* @param {import("./containerView.js").default} layoutParent
|
|
10
13
|
* @param {import("./view.js").default} dataParent
|
|
11
14
|
* @param {string} name
|
|
12
15
|
*/
|
|
13
|
-
constructor(spec:
|
|
16
|
+
constructor(spec: TSpec, context: import("../types/viewContext.js").default, layoutParent: import("./containerView.js").default, dataParent: import("./view.js").default, name: string);
|
|
14
17
|
/**
|
|
15
18
|
* Adds a child spec dynamically. Intended for post-initialization updates.
|
|
16
19
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concatView.d.ts","sourceRoot":"","sources":["../../../src/view/concatView.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"concatView.d.ts","sourceRoot":"","sources":["../../../src/view/concatView.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,gCAHwD,KAAK,SAAhD,OAAQ,iBAAiB,EAAE,aAAc;IAIlD;;;;;;;OAOG;IACH,kBANW,KAAK,WACL,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,EAiBhB;IA6BD;;;;;;;;;OASG;IACH,wBAJW,OAAO,iBAAiB,EAAE,QAAQ,UAClC,MAAM,GACJ,OAAO,CAAC,OAAO,WAAW,EAAE,OAAO,CAAC,CAIhD;IAED;;;;OAIG;IACH,qBAFW,MAAM,iBAIhB;;CA2EJ;qBA9JoB,wBAAwB"}
|
|
@@ -1,14 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
isConcatSpec,
|
|
3
|
+
isHConcatSpec,
|
|
4
|
+
isVConcatSpec,
|
|
5
|
+
} from "./viewSpecGuards.js";
|
|
2
6
|
import GridView from "./gridView/gridView.js";
|
|
3
7
|
import ContainerMutationHelper from "./containerMutationHelper.js";
|
|
4
8
|
|
|
5
9
|
/**
|
|
6
10
|
* Creates a vertically or horizontally concatenated layout for children.
|
|
11
|
+
*
|
|
12
|
+
* @template {import("../spec/view.js").AnyConcatSpec} [TSpec=import("../spec/view.js").AnyConcatSpec]
|
|
13
|
+
* @extends {GridView<TSpec>}
|
|
7
14
|
*/
|
|
8
15
|
export default class ConcatView extends GridView {
|
|
9
16
|
/**
|
|
10
17
|
*
|
|
11
|
-
* @param {
|
|
18
|
+
* @param {TSpec} spec
|
|
12
19
|
* @param {import("../types/viewContext.js").default} context
|
|
13
20
|
* @param {import("./containerView.js").default} layoutParent
|
|
14
21
|
* @param {import("./view.js").default} dataParent
|
|
@@ -35,23 +35,23 @@ export default class ContainerMutationHelper {
|
|
|
35
35
|
insertAt: (index: number, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec) => void;
|
|
36
36
|
removeAt: (index: number) => void;
|
|
37
37
|
};
|
|
38
|
-
insertView: (view: import("./view.js").default
|
|
38
|
+
insertView: (view: import("./view.js").default<import("../spec/view.js").ViewSpec>, index: number) => any;
|
|
39
39
|
removeView: (index: number) => void;
|
|
40
|
-
prepareView?: (view: import("./view.js").default
|
|
40
|
+
prepareView?: (view: import("./view.js").default<import("../spec/view.js").ViewSpec>, index: number, insertionResult: any) => Promise<void>;
|
|
41
41
|
afterRemove?: (index: number) => Promise<void>;
|
|
42
42
|
defaultName?: (index: number, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec) => string;
|
|
43
43
|
requestLayout?: boolean;
|
|
44
44
|
});
|
|
45
|
-
container: import("./containerView.js").default
|
|
45
|
+
container: import("./containerView.js").default<import("../spec/view.js").ContainerSpec>;
|
|
46
46
|
options: {
|
|
47
47
|
getChildSpecs: () => {
|
|
48
48
|
specs: (import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec)[];
|
|
49
49
|
insertAt: (index: number, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec) => void;
|
|
50
50
|
removeAt: (index: number) => void;
|
|
51
51
|
};
|
|
52
|
-
insertView: (view: import("./view.js").default
|
|
52
|
+
insertView: (view: import("./view.js").default<import("../spec/view.js").ViewSpec>, index: number) => any;
|
|
53
53
|
removeView: (index: number) => void;
|
|
54
|
-
prepareView?: (view: import("./view.js").default
|
|
54
|
+
prepareView?: (view: import("./view.js").default<import("../spec/view.js").ViewSpec>, index: number, insertionResult: any) => Promise<void>;
|
|
55
55
|
afterRemove?: (index: number) => Promise<void>;
|
|
56
56
|
defaultName?: (index: number, spec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec) => string;
|
|
57
57
|
requestLayout?: boolean;
|
|
@@ -63,7 +63,7 @@ export default class ContainerMutationHelper {
|
|
|
63
63
|
* @param {number} [index]
|
|
64
64
|
* @returns {Promise<View>}
|
|
65
65
|
*/
|
|
66
|
-
addChildSpec(childSpec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec, index?: number): Promise<import("./view.js").default
|
|
66
|
+
addChildSpec(childSpec: import("../spec/view.js").ViewSpec | import("../spec/view.js").ImportSpec, index?: number): Promise<import("./view.js").default<import("../spec/view.js").ViewSpec>>;
|
|
67
67
|
/**
|
|
68
68
|
* Removes a child by index and updates the backing spec list.
|
|
69
69
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containerMutationHelper.d.ts","sourceRoot":"","sources":["../../../src/view/containerMutationHelper.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH;IACI;;;;;;;;;;OAUG;IAEH;;;;;;;;;;OAUG;IAEH;;;OAGG;IACH,uBAHW,OAAO,oBAAoB,EAAE,OAAO;uBAX3B;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"containerMutationHelper.d.ts","sourceRoot":"","sources":["../../../src/view/containerMutationHelper.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH;IACI;;;;;;;;;;OAUG;IAEH;;;;;;;;;;OAUG;IAEH;;;OAGG;IACH,uBAHW,OAAO,oBAAoB,EAAE,OAAO;uBAX3B;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;wBACpD,OAAO;OAW3B;IAFG,yFAA0B;IAC1B;uBAhBgB;mBARR,CAAC,yEAAqB,CAAC,EAAE;sBACtB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,IAAI;sBACpD,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;SAMF;oBACnB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG;oBAClC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;sBACrB,CAAC,IAAI,iEAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAChC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,yEAAqB,KAAK,MAAM;wBACpD,OAAO;MAUF;IAG1B;;;;;;OAMG;IACH,wBAJW,OAAO,iBAAiB,EAAE,QAAQ,GAAG,OAAO,iBAAiB,EAAE,UAAU,UACzE,MAAM,GACJ,OAAO,iEAAM,CA8CzB;IAED;;;;OAIG;IACH,qBAFW,MAAM,iBAehB;CACJ"}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Compositor view represents a non-leaf node in the view hierarchy.
|
|
3
|
+
*
|
|
4
|
+
* @template {import("../spec/view.js").ContainerSpec} [TSpec=import("../spec/view.js").ContainerSpec]
|
|
5
|
+
* @extends {View<TSpec>}
|
|
3
6
|
*/
|
|
4
|
-
export default class ContainerView extends View {
|
|
7
|
+
export default class ContainerView<TSpec extends import("../spec/view.js").ContainerSpec = import("../spec/view.js").ContainerSpec> extends View<TSpec> {
|
|
5
8
|
/**
|
|
6
9
|
*
|
|
7
|
-
* @param {
|
|
10
|
+
* @param {TSpec} spec
|
|
8
11
|
* @param {import("../types/viewContext.js").default} context
|
|
9
12
|
* @param {ContainerView} layoutParent
|
|
10
13
|
* @param {import("./view.js").default} dataParent
|
|
11
14
|
* @param {string} name
|
|
12
15
|
* @param {import("./view.js").ViewOptions} [options]
|
|
13
16
|
*/
|
|
14
|
-
constructor(spec:
|
|
15
|
-
spec: import("../spec/view.js").ContainerSpec;
|
|
17
|
+
constructor(spec: TSpec, context: import("../types/viewContext.js").default, layoutParent: ContainerView, dataParent: import("./view.js").default, name: string, options?: import("./view.js").ViewOptions);
|
|
16
18
|
initializeChildren(): Promise<void>;
|
|
17
19
|
/**
|
|
18
20
|
* Generates an auto name that is guaranteed to be unique within this container
|
|
@@ -31,7 +33,7 @@ export default class ContainerView extends View {
|
|
|
31
33
|
*
|
|
32
34
|
* @param {string} name
|
|
33
35
|
*/
|
|
34
|
-
findDescendantByName(name: string): View
|
|
36
|
+
findDescendantByName(name: string): View<import("../spec/view.js").ViewSpec>;
|
|
35
37
|
/**
|
|
36
38
|
* @returns {IterableIterator<View>}
|
|
37
39
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containerView.d.ts","sourceRoot":"","sources":["../../../src/view/containerView.js"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"containerView.d.ts","sourceRoot":"","sources":["../../../src/view/containerView.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,mCAHwD,KAAK,SAAhD,OAAQ,iBAAiB,EAAE,aAAc;IAOlD;;;;;;;;OAQG;IACH,kBAPW,KAAK,WACL,OAAO,yBAAyB,EAAE,OAAO,gBACzC,aAAa,cACb,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAMzC;IAED,oCAEC;IAED;;;;;;OAMG;IACH,wBAHW,MAAM,GACJ,MAAM,CAMlB;IAsDD;;;OAGG;IACH,2BAHW,MAAM,EAAE,GACN,IAAI,CAsBhB;IAaD;;;OAGG;IACH,2BAFW,MAAM,4CAchB;IAzGD;;OAEG;IACH,qBAFa,gBAAgB,CAAC,IAAI,CAAC,CAIlC;;CA8GJ;iBA/J4C,WAAW"}
|
|
@@ -2,6 +2,9 @@ import View, { VISIT_STOP, VISIT_SKIP } from "./view.js";
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Compositor view represents a non-leaf node in the view hierarchy.
|
|
5
|
+
*
|
|
6
|
+
* @template {import("../spec/view.js").ContainerSpec} [TSpec=import("../spec/view.js").ContainerSpec]
|
|
7
|
+
* @extends {View<TSpec>}
|
|
5
8
|
*/
|
|
6
9
|
export default class ContainerView extends View {
|
|
7
10
|
/** @type {Map<string, number>} */
|
|
@@ -9,7 +12,7 @@ export default class ContainerView extends View {
|
|
|
9
12
|
|
|
10
13
|
/**
|
|
11
14
|
*
|
|
12
|
-
* @param {
|
|
15
|
+
* @param {TSpec} spec
|
|
13
16
|
* @param {import("../types/viewContext.js").default} context
|
|
14
17
|
* @param {ContainerView} layoutParent
|
|
15
18
|
* @param {import("./view.js").default} dataParent
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* @prop {FacetFieldDef} facetFieldDef
|
|
14
14
|
*
|
|
15
15
|
*/
|
|
16
|
-
export default class FacetView extends ContainerView {
|
|
16
|
+
export default class FacetView extends ContainerView<import("../spec/view.js").ContainerSpec> {
|
|
17
17
|
/**
|
|
18
18
|
* @typedef {import("./view.js").default} View
|
|
19
19
|
* @typedef {import("./layerView.js").default} LayerView
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @param {(view: View) => boolean} [viewFilter]
|
|
6
6
|
* @param {(view: View) => boolean} [viewInitializationPredicate]
|
|
7
7
|
*/
|
|
8
|
-
export function buildDataFlow(root: import("./view.js").default
|
|
8
|
+
export function buildDataFlow(root: import("./view.js").default<import("../spec/view.js").ViewSpec>, existingFlow?: DataFlow, viewFilter?: (view: import("./view.js").default<import("../spec/view.js").ViewSpec>) => boolean, viewInitializationPredicate?: (view: import("./view.js").default<import("../spec/view.js").ViewSpec>) => boolean): DataFlow;
|
|
9
9
|
/**
|
|
10
10
|
* Changes the ChromPos channelDefs into FieldDefs and returns
|
|
11
11
|
* LinearizeGenomicCoordinate transform(s) that should be inserted into
|