react-cheminfo 0.16.0 → 0.17.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/lib/parallel/core/index.d.ts +7 -5
- package/lib/parallel/core/index.d.ts.map +1 -1
- package/lib/parallel/core/index.js +5 -3
- package/lib/parallel/core/index.js.map +1 -1
- package/lib/parallel/core/parallelBrush.d.ts +22 -1
- package/lib/parallel/core/parallelBrush.d.ts.map +1 -1
- package/lib/parallel/core/parallelBrush.js +53 -3
- package/lib/parallel/core/parallelBrush.js.map +1 -1
- package/lib/parallel/core/parallelFilter.d.ts +14 -1
- package/lib/parallel/core/parallelFilter.d.ts.map +1 -1
- package/lib/parallel/core/parallelFilter.js +44 -11
- package/lib/parallel/core/parallelFilter.js.map +1 -1
- package/lib/parallel/core/parallelOrder.d.ts +36 -0
- package/lib/parallel/core/parallelOrder.d.ts.map +1 -0
- package/lib/parallel/core/parallelOrder.js +65 -0
- package/lib/parallel/core/parallelOrder.js.map +1 -0
- package/lib/parallel/core/parallelPaint.d.ts +4 -0
- package/lib/parallel/core/parallelPaint.d.ts.map +1 -1
- package/lib/parallel/core/parallelPaint.js +15 -6
- package/lib/parallel/core/parallelPaint.js.map +1 -1
- package/lib/parallel/core/parallelPalette.d.ts +10 -1
- package/lib/parallel/core/parallelPalette.d.ts.map +1 -1
- package/lib/parallel/core/parallelPalette.js +14 -1
- package/lib/parallel/core/parallelPalette.js.map +1 -1
- package/lib/parallel/core/parallelSelection.d.ts +43 -0
- package/lib/parallel/core/parallelSelection.d.ts.map +1 -0
- package/lib/parallel/core/parallelSelection.js +87 -0
- package/lib/parallel/core/parallelSelection.js.map +1 -0
- package/lib/parallel/core/parallelTicks.d.ts.map +1 -1
- package/lib/parallel/core/parallelTicks.js +7 -4
- package/lib/parallel/core/parallelTicks.js.map +1 -1
- package/lib/parallel/core/parallelTypes.d.ts +12 -1
- package/lib/parallel/core/parallelTypes.d.ts.map +1 -1
- package/lib/parallel/core/parallelTypes.js.map +1 -1
- package/lib/parallel/ui/ParallelAxesLayer.d.ts +2 -2
- package/lib/parallel/ui/ParallelAxesLayer.d.ts.map +1 -1
- package/lib/parallel/ui/ParallelAxesLayer.js +2 -2
- package/lib/parallel/ui/ParallelAxesLayer.js.map +1 -1
- package/lib/parallel/ui/ParallelCoordinates.d.ts.map +1 -1
- package/lib/parallel/ui/ParallelCoordinates.js +10 -5
- package/lib/parallel/ui/ParallelCoordinates.js.map +1 -1
- package/lib/parallel/ui/ParallelLabels.d.ts +6 -0
- package/lib/parallel/ui/ParallelLabels.d.ts.map +1 -1
- package/lib/parallel/ui/ParallelLabels.js +14 -2
- package/lib/parallel/ui/ParallelLabels.js.map +1 -1
- package/lib/parallel/ui/index.d.ts +4 -0
- package/lib/parallel/ui/index.d.ts.map +1 -1
- package/lib/parallel/ui/index.js +2 -0
- package/lib/parallel/ui/index.js.map +1 -1
- package/lib/parallel/ui/parallelCoordinatesProps.d.ts +26 -8
- package/lib/parallel/ui/parallelCoordinatesProps.d.ts.map +1 -1
- package/lib/parallel/ui/parallelGestureModel.d.ts +37 -6
- package/lib/parallel/ui/parallelGestureModel.d.ts.map +1 -1
- package/lib/parallel/ui/parallelGestureModel.js +42 -12
- package/lib/parallel/ui/parallelGestureModel.js.map +1 -1
- package/lib/parallel/ui/parallelPlotModel.d.ts +1 -1
- package/lib/parallel/ui/parallelPlotModel.d.ts.map +1 -1
- package/lib/parallel/ui/parallelPlotModel.js +3 -3
- package/lib/parallel/ui/parallelPlotModel.js.map +1 -1
- package/lib/parallel/ui/parallelStyles.d.ts +26 -3
- package/lib/parallel/ui/parallelStyles.d.ts.map +1 -1
- package/lib/parallel/ui/parallelStyles.js +26 -4
- package/lib/parallel/ui/parallelStyles.js.map +1 -1
- package/lib/parallel/ui/useParallelAxisDrag.d.ts +60 -0
- package/lib/parallel/ui/useParallelAxisDrag.d.ts.map +1 -0
- package/lib/parallel/ui/useParallelAxisDrag.js +96 -0
- package/lib/parallel/ui/useParallelAxisDrag.js.map +1 -0
- package/lib/parallel/ui/useParallelGesture.d.ts +10 -5
- package/lib/parallel/ui/useParallelGesture.d.ts.map +1 -1
- package/lib/parallel/ui/useParallelGesture.js +46 -21
- package/lib/parallel/ui/useParallelGesture.js.map +1 -1
- package/package.json +1 -1
- package/src/parallel/core/index.ts +16 -0
- package/src/parallel/core/parallelBrush.ts +69 -3
- package/src/parallel/core/parallelFilter.ts +52 -15
- package/src/parallel/core/parallelOrder.ts +73 -0
- package/src/parallel/core/parallelPaint.ts +16 -5
- package/src/parallel/core/parallelPalette.ts +14 -1
- package/src/parallel/core/parallelSelection.ts +99 -0
- package/src/parallel/core/parallelTicks.ts +7 -3
- package/src/parallel/core/parallelTypes.ts +13 -1
- package/src/parallel/ui/ParallelAxesLayer.tsx +10 -4
- package/src/parallel/ui/ParallelCoordinates.tsx +22 -3
- package/src/parallel/ui/ParallelLabels.tsx +23 -2
- package/src/parallel/ui/index.ts +15 -0
- package/src/parallel/ui/parallelCoordinatesProps.ts +26 -8
- package/src/parallel/ui/parallelGestureModel.ts +63 -13
- package/src/parallel/ui/parallelPlotModel.ts +3 -3
- package/src/parallel/ui/parallelStyles.ts +46 -4
- package/src/parallel/ui/useParallelAxisDrag.ts +147 -0
- package/src/parallel/ui/useParallelGesture.ts +61 -28
|
@@ -10,18 +10,20 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export type { ParallelAxisLayout, ParallelAxisPixels } from './parallelAxes.ts';
|
|
12
12
|
export { PARALLEL_MARGIN, parallelAxisLayouts, parallelAxisPixels, parallelPixelAt, parallelValueToY, parallelYToValue, } from './parallelAxes.ts';
|
|
13
|
-
export type { ParallelBand, ParallelBrushDrag, ParallelBrushGrip, } from './parallelBrush.ts';
|
|
14
|
-
export { PARALLEL_BRUSH_HALF_WIDTH, PARALLEL_BRUSH_HANDLE_REACH, PARALLEL_BRUSH_SMALLEST, parallelBandAt, parallelBandOf, parallelBrushGrip, parallelIsBand, parallelRangeOf, } from './parallelBrush.ts';
|
|
13
|
+
export type { ParallelBand, ParallelBrushDrag, ParallelBrushGrip, ParallelBrushTarget, } from './parallelBrush.ts';
|
|
14
|
+
export { PARALLEL_BRUSH_HALF_WIDTH, PARALLEL_BRUSH_HANDLE_REACH, PARALLEL_BRUSH_SMALLEST, parallelBandAt, parallelBandOf, parallelBrushGrip, parallelBrushTarget, parallelIsBand, parallelRangeOf, } from './parallelBrush.ts';
|
|
15
15
|
export type { ParallelExtent } from './parallelExtent.ts';
|
|
16
16
|
export { PARALLEL_DEGENERATE_PADDING, parallelExtent, } from './parallelExtent.ts';
|
|
17
|
-
export { parallelIncludedMask, parallelKeptCount, parallelRangeKeeps, } from './parallelFilter.ts';
|
|
17
|
+
export { parallelIncludedMask, parallelKeptCount, parallelRangeKeeps, parallelSelectionKeeps, } from './parallelFilter.ts';
|
|
18
18
|
export type { ParallelPoint, ParallelSegment } from './parallelHit.ts';
|
|
19
19
|
export { PARALLEL_HOVER_TOLERANCE, parallelNearestRow, parallelSegmentAt, } from './parallelHit.ts';
|
|
20
|
+
export { parallelAxisOrder, parallelDropIndex, parallelMoveAxis, } from './parallelOrder.ts';
|
|
20
21
|
export type { ParallelHighlight, ParallelHighlightPaint, ParallelPaint, } from './parallelPaint.ts';
|
|
21
22
|
export { PARALLEL_INCLUDED_ALPHA, paintParallelHighlights, paintParallelLines, preparePlotCanvas, traceParallelRow, } from './parallelPaint.ts';
|
|
22
|
-
export { PARALLEL_PALETTE_STEPS, parallelColorSteps, parallelPalette, } from './parallelPalette.ts';
|
|
23
|
+
export { PARALLEL_PALETTE_STEPS, PARALLEL_PALETTE_UNKNOWN, parallelColorSteps, parallelPalette, } from './parallelPalette.ts';
|
|
24
|
+
export { parallelHasRange, parallelMergeRanges, parallelRangeList, parallelWriteRange, } from './parallelSelection.ts';
|
|
23
25
|
export type { ParallelGraduation } from './parallelTicks.ts';
|
|
24
26
|
export { PARALLEL_TICK_COUNT, parallelTicks } from './parallelTicks.ts';
|
|
25
|
-
export type { ParallelAxis, ParallelAxisScale, ParallelAxisSource, ParallelColorBy, ParallelRange, ParallelRanges, ParallelTick, } from './parallelTypes.ts';
|
|
27
|
+
export type { ParallelAxis, ParallelAxisScale, ParallelAxisSource, ParallelColorBy, ParallelRange, ParallelRanges, ParallelSelection, ParallelTick, } from './parallelTypes.ts';
|
|
26
28
|
export { parallelAxisOf } from './parallelTypes.ts';
|
|
27
29
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/parallel/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/parallel/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EACL,2BAA2B,EAC3B,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -9,12 +9,14 @@
|
|
|
9
9
|
* covered by tests in a runtime with no DOM, and the figure stays declarative.
|
|
10
10
|
*/
|
|
11
11
|
export { PARALLEL_MARGIN, parallelAxisLayouts, parallelAxisPixels, parallelPixelAt, parallelValueToY, parallelYToValue, } from "./parallelAxes.js";
|
|
12
|
-
export { PARALLEL_BRUSH_HALF_WIDTH, PARALLEL_BRUSH_HANDLE_REACH, PARALLEL_BRUSH_SMALLEST, parallelBandAt, parallelBandOf, parallelBrushGrip, parallelIsBand, parallelRangeOf, } from "./parallelBrush.js";
|
|
12
|
+
export { PARALLEL_BRUSH_HALF_WIDTH, PARALLEL_BRUSH_HANDLE_REACH, PARALLEL_BRUSH_SMALLEST, parallelBandAt, parallelBandOf, parallelBrushGrip, parallelBrushTarget, parallelIsBand, parallelRangeOf, } from "./parallelBrush.js";
|
|
13
13
|
export { PARALLEL_DEGENERATE_PADDING, parallelExtent, } from "./parallelExtent.js";
|
|
14
|
-
export { parallelIncludedMask, parallelKeptCount, parallelRangeKeeps, } from "./parallelFilter.js";
|
|
14
|
+
export { parallelIncludedMask, parallelKeptCount, parallelRangeKeeps, parallelSelectionKeeps, } from "./parallelFilter.js";
|
|
15
15
|
export { PARALLEL_HOVER_TOLERANCE, parallelNearestRow, parallelSegmentAt, } from "./parallelHit.js";
|
|
16
|
+
export { parallelAxisOrder, parallelDropIndex, parallelMoveAxis, } from "./parallelOrder.js";
|
|
16
17
|
export { PARALLEL_INCLUDED_ALPHA, paintParallelHighlights, paintParallelLines, preparePlotCanvas, traceParallelRow, } from "./parallelPaint.js";
|
|
17
|
-
export { PARALLEL_PALETTE_STEPS, parallelColorSteps, parallelPalette, } from "./parallelPalette.js";
|
|
18
|
+
export { PARALLEL_PALETTE_STEPS, PARALLEL_PALETTE_UNKNOWN, parallelColorSteps, parallelPalette, } from "./parallelPalette.js";
|
|
19
|
+
export { parallelHasRange, parallelMergeRanges, parallelRangeList, parallelWriteRange, } from "./parallelSelection.js";
|
|
18
20
|
export { PARALLEL_TICK_COUNT, parallelTicks } from "./parallelTicks.js";
|
|
19
21
|
export { parallelAxisOf } from "./parallelTypes.js";
|
|
20
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/parallel/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/parallel/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,2BAA2B,EAC3B,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAWxE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -23,6 +23,8 @@ export type ParallelBrushGrip = 'create' | 'move' | 'top' | 'bottom';
|
|
|
23
23
|
export interface ParallelBrushDrag {
|
|
24
24
|
/** The axis being brushed, by its id. */
|
|
25
25
|
axis: string;
|
|
26
|
+
/** Which of that axis's intervals is being written, or `-1` for a new one. */
|
|
27
|
+
index: number;
|
|
26
28
|
/** What the press took hold of. */
|
|
27
29
|
grip: ParallelBrushGrip;
|
|
28
30
|
/** Where the press landed, in pixels from the top of the drawing area. */
|
|
@@ -45,6 +47,22 @@ export declare const PARALLEL_BRUSH_HALF_WIDTH = 9;
|
|
|
45
47
|
* including a press on a bare axis — starts a new one.
|
|
46
48
|
*/
|
|
47
49
|
export declare function parallelBrushGrip(y: number, band: ParallelBand | null): ParallelBrushGrip;
|
|
50
|
+
/** Which of an axis's bands a press took hold of, and by what. */
|
|
51
|
+
export interface ParallelBrushTarget {
|
|
52
|
+
/** The band, as an index into the list, or `-1` when none was under it. */
|
|
53
|
+
index: number;
|
|
54
|
+
/** What the press took hold of. */
|
|
55
|
+
grip: ParallelBrushGrip;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Which band a press at that height took hold of, on an axis carrying several.
|
|
59
|
+
* @param y - Where the press landed, in pixels from the top of the drawing area.
|
|
60
|
+
* @param bands - The bands on that axis, in any order.
|
|
61
|
+
* @returns The band and the grip. An edge wins over the band it belongs to and
|
|
62
|
+
* over any band it lies inside, so two bands dragged flush against each other
|
|
63
|
+
* can still be pulled apart; a press on bare axis starts a new band.
|
|
64
|
+
*/
|
|
65
|
+
export declare function parallelBrushTarget(y: number, bands: readonly ParallelBand[]): ParallelBrushTarget;
|
|
48
66
|
/**
|
|
49
67
|
* The band a drag stands at, now that the pointer is there.
|
|
50
68
|
* @param drag - The drag, as it began.
|
|
@@ -73,7 +91,10 @@ export declare function parallelBandOf(range: ParallelRange, axis: ParallelAxisL
|
|
|
73
91
|
* @param band - The band, in pixels from the top of the drawing area.
|
|
74
92
|
* @param axis - The axis it belongs to.
|
|
75
93
|
* @returns The interval, low value first — which is the order every filter in
|
|
76
|
-
* the family reads, and getting it backwards keeps nothing at all.
|
|
94
|
+
* the family reads, and getting it backwards keeps nothing at all. An edge
|
|
95
|
+
* standing on an end of the axis reports that end verbatim: inverting the
|
|
96
|
+
* placement is not exact, and one ulp is enough to drop the row the axis ends
|
|
97
|
+
* on from its own full-range brush.
|
|
77
98
|
*/
|
|
78
99
|
export declare function parallelRangeOf(band: ParallelBand, axis: ParallelAxisLayout): ParallelRange;
|
|
79
100
|
//# sourceMappingURL=parallelBrush.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelBrush.d.ts","sourceRoot":"","sources":["../../../src/parallel/core/parallelBrush.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,+CAA+C;AAC/C,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAErE,sCAAsC;AACtC,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,IAAI,EAAE,iBAAiB,CAAC;IACxB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,8EAA8E;AAC9E,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,0EAA0E;AAC1E,eAAO,MAAM,yBAAyB,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"parallelBrush.d.ts","sourceRoot":"","sources":["../../../src/parallel/core/parallelBrush.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,+CAA+C;AAC/C,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAErE,sCAAsC;AACtC,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,IAAI,EAAE,iBAAiB,CAAC;IACxB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,8EAA8E;AAC9E,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAE7C,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,0EAA0E;AAC1E,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAW3C;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,YAAY,GAAG,IAAI,GACxB,iBAAiB,CAMnB;AAED,kEAAkE;AAClE,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAKD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,SAAS,YAAY,EAAE,GAC7B,mBAAmB,CAsBrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,iBAAiB,EACvB,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,MAAM,GACb,YAAY,CAcd;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAE1D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,kBAAkB,GACvB,YAAY,CAKd;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,kBAAkB,GACvB,aAAa,CAUf"}
|
|
@@ -15,6 +15,14 @@ export const PARALLEL_BRUSH_HANDLE_REACH = 4;
|
|
|
15
15
|
export const PARALLEL_BRUSH_SMALLEST = 1;
|
|
16
16
|
/** How far either side of an axis a press still reaches it, in pixels. */
|
|
17
17
|
export const PARALLEL_BRUSH_HALF_WIDTH = 9;
|
|
18
|
+
/**
|
|
19
|
+
* How close to an axis's own end a band edge counts as standing on it.
|
|
20
|
+
*
|
|
21
|
+
* Half a pixel is below anything a pointer can aim at, and the two ends are
|
|
22
|
+
* where the rows a reader most wants sit: the axes end exactly on the data,
|
|
23
|
+
* so the extreme row is drawn on the end itself.
|
|
24
|
+
*/
|
|
25
|
+
const END_REACH = 0.5;
|
|
18
26
|
/**
|
|
19
27
|
* What a press at that height takes hold of.
|
|
20
28
|
* @param y - Where the press landed, in pixels from the top of the drawing area.
|
|
@@ -34,6 +42,41 @@ export function parallelBrushGrip(y, band) {
|
|
|
34
42
|
return 'move';
|
|
35
43
|
return 'create';
|
|
36
44
|
}
|
|
45
|
+
/** Nothing under the press, so it starts a band of its own. */
|
|
46
|
+
const NEW_BAND = { index: -1, grip: 'create' };
|
|
47
|
+
/**
|
|
48
|
+
* Which band a press at that height took hold of, on an axis carrying several.
|
|
49
|
+
* @param y - Where the press landed, in pixels from the top of the drawing area.
|
|
50
|
+
* @param bands - The bands on that axis, in any order.
|
|
51
|
+
* @returns The band and the grip. An edge wins over the band it belongs to and
|
|
52
|
+
* over any band it lies inside, so two bands dragged flush against each other
|
|
53
|
+
* can still be pulled apart; a press on bare axis starts a new band.
|
|
54
|
+
*/
|
|
55
|
+
export function parallelBrushTarget(y, bands) {
|
|
56
|
+
let nearest = NEW_BAND;
|
|
57
|
+
let nearestDistance = PARALLEL_BRUSH_HANDLE_REACH;
|
|
58
|
+
for (let index = 0; index < bands.length; index++) {
|
|
59
|
+
const band = bands[index];
|
|
60
|
+
const toTop = Math.abs(y - band.top);
|
|
61
|
+
if (toTop <= nearestDistance) {
|
|
62
|
+
nearestDistance = toTop;
|
|
63
|
+
nearest = { index, grip: 'top' };
|
|
64
|
+
}
|
|
65
|
+
const toBottom = Math.abs(y - band.bottom);
|
|
66
|
+
if (toBottom <= nearestDistance) {
|
|
67
|
+
nearestDistance = toBottom;
|
|
68
|
+
nearest = { index, grip: 'bottom' };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (nearest !== NEW_BAND)
|
|
72
|
+
return nearest;
|
|
73
|
+
for (let index = 0; index < bands.length; index++) {
|
|
74
|
+
const band = bands[index];
|
|
75
|
+
if (y > band.top && y < band.bottom)
|
|
76
|
+
return { index, grip: 'move' };
|
|
77
|
+
}
|
|
78
|
+
return NEW_BAND;
|
|
79
|
+
}
|
|
37
80
|
/**
|
|
38
81
|
* The band a drag stands at, now that the pointer is there.
|
|
39
82
|
* @param drag - The drag, as it began.
|
|
@@ -79,11 +122,18 @@ export function parallelBandOf(range, axis) {
|
|
|
79
122
|
* @param band - The band, in pixels from the top of the drawing area.
|
|
80
123
|
* @param axis - The axis it belongs to.
|
|
81
124
|
* @returns The interval, low value first — which is the order every filter in
|
|
82
|
-
* the family reads, and getting it backwards keeps nothing at all.
|
|
125
|
+
* the family reads, and getting it backwards keeps nothing at all. An edge
|
|
126
|
+
* standing on an end of the axis reports that end verbatim: inverting the
|
|
127
|
+
* placement is not exact, and one ulp is enough to drop the row the axis ends
|
|
128
|
+
* on from its own full-range brush.
|
|
83
129
|
*/
|
|
84
130
|
export function parallelRangeOf(band, axis) {
|
|
85
|
-
const low =
|
|
86
|
-
|
|
131
|
+
const low = band.bottom >= parallelValueToY(axis.min, axis) - END_REACH
|
|
132
|
+
? axis.min
|
|
133
|
+
: parallelYToValue(band.bottom, axis);
|
|
134
|
+
const high = band.top <= parallelValueToY(axis.max, axis) + END_REACH
|
|
135
|
+
? axis.max
|
|
136
|
+
: parallelYToValue(band.top, axis);
|
|
87
137
|
return low <= high ? [low, high] : [high, low];
|
|
88
138
|
}
|
|
89
139
|
function order(a, b) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelBrush.js","sourceRoot":"","sources":["../../../src/parallel/core/parallelBrush.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"parallelBrush.js","sourceRoot":"","sources":["../../../src/parallel/core/parallelBrush.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
* figure has to filter on the same answer. Two definitions of "kept" is the
|
|
6
6
|
* fault this file exists to prevent: a table showing fourteen rows under a
|
|
7
7
|
* plot drawing one is not a rounding error, it is two different programs.
|
|
8
|
+
*
|
|
9
|
+
* An axis carrying several intervals keeps a row that falls in any of them,
|
|
10
|
+
* while a row has to be kept by every brushed axis — union down an axis,
|
|
11
|
+
* intersection across them, which is the only reading under which brushing a
|
|
12
|
+
* second axis can never widen what the first one left.
|
|
8
13
|
*/
|
|
9
14
|
import type { ParallelAxis, ParallelRange, ParallelRanges } from './parallelTypes.ts';
|
|
10
15
|
/**
|
|
@@ -16,10 +21,18 @@ import type { ParallelAxis, ParallelRange, ParallelRanges } from './parallelType
|
|
|
16
21
|
* been worked out yet cannot be said to be in range.
|
|
17
22
|
*/
|
|
18
23
|
export declare function parallelRangeKeeps(range: ParallelRange, value: number): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Whether one value falls inside any of an axis's intervals.
|
|
26
|
+
* @param ranges - The intervals that axis keeps.
|
|
27
|
+
* @param value - The value to test.
|
|
28
|
+
* @returns Whether any of them keeps it. An axis keeping nothing keeps every
|
|
29
|
+
* value, which is what an unbrushed axis means.
|
|
30
|
+
*/
|
|
31
|
+
export declare function parallelSelectionKeeps(ranges: readonly ParallelRange[], value: number): boolean;
|
|
19
32
|
/**
|
|
20
33
|
* Which rows every brush keeps at once.
|
|
21
34
|
* @param axes - The axes, whose ids the intervals are keyed by.
|
|
22
|
-
* @param ranges -
|
|
35
|
+
* @param ranges - What each axis keeps: one interval, several, or none.
|
|
23
36
|
* @param count - How many rows there are.
|
|
24
37
|
* @returns One byte per row, `1` for kept. An interval keyed on an axis that
|
|
25
38
|
* is not drawn is ignored rather than emptying the figure, so a range left
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelFilter.d.ts","sourceRoot":"","sources":["../../../src/parallel/core/parallelFilter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"parallelFilter.d.ts","sourceRoot":"","sources":["../../../src/parallel/core/parallelFilter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACf,MAAM,oBAAoB,CAAC;AAY5B;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,aAAa,EAAE,EAChC,KAAK,EAAE,MAAM,GACZ,OAAO,CAMT;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,YAAY,EAAE,EAC7B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,GACZ,UAAU,CAuCZ;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAM9D"}
|
|
@@ -5,7 +5,13 @@
|
|
|
5
5
|
* figure has to filter on the same answer. Two definitions of "kept" is the
|
|
6
6
|
* fault this file exists to prevent: a table showing fourteen rows under a
|
|
7
7
|
* plot drawing one is not a rounding error, it is two different programs.
|
|
8
|
+
*
|
|
9
|
+
* An axis carrying several intervals keeps a row that falls in any of them,
|
|
10
|
+
* while a row has to be kept by every brushed axis — union down an axis,
|
|
11
|
+
* intersection across them, which is the only reading under which brushing a
|
|
12
|
+
* second axis can never widen what the first one left.
|
|
8
13
|
*/
|
|
14
|
+
import { parallelRangeList } from "./parallelSelection.js";
|
|
9
15
|
/**
|
|
10
16
|
* Whether one value falls inside an interval.
|
|
11
17
|
* @param range - The interval, low value first.
|
|
@@ -17,10 +23,26 @@
|
|
|
17
23
|
export function parallelRangeKeeps(range, value) {
|
|
18
24
|
return value >= range[0] && value <= range[1];
|
|
19
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Whether one value falls inside any of an axis's intervals.
|
|
28
|
+
* @param ranges - The intervals that axis keeps.
|
|
29
|
+
* @param value - The value to test.
|
|
30
|
+
* @returns Whether any of them keeps it. An axis keeping nothing keeps every
|
|
31
|
+
* value, which is what an unbrushed axis means.
|
|
32
|
+
*/
|
|
33
|
+
export function parallelSelectionKeeps(ranges, value) {
|
|
34
|
+
if (ranges.length === 0)
|
|
35
|
+
return true;
|
|
36
|
+
for (const range of ranges) {
|
|
37
|
+
if (value >= range[0] && value <= range[1])
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
20
42
|
/**
|
|
21
43
|
* Which rows every brush keeps at once.
|
|
22
44
|
* @param axes - The axes, whose ids the intervals are keyed by.
|
|
23
|
-
* @param ranges -
|
|
45
|
+
* @param ranges - What each axis keeps: one interval, several, or none.
|
|
24
46
|
* @param count - How many rows there are.
|
|
25
47
|
* @returns One byte per row, `1` for kept. An interval keyed on an axis that
|
|
26
48
|
* is not drawn is ignored rather than emptying the figure, so a range left
|
|
@@ -31,26 +53,37 @@ export function parallelIncludedMask(axes, ranges, count) {
|
|
|
31
53
|
const included = new Uint8Array(count).fill(1);
|
|
32
54
|
const active = [];
|
|
33
55
|
for (const axis of axes) {
|
|
34
|
-
const
|
|
35
|
-
if (
|
|
56
|
+
const list = parallelRangeList(ranges[axis.id]);
|
|
57
|
+
if (list.length === 0)
|
|
36
58
|
continue;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
59
|
+
const minimum = new Float64Array(list.length);
|
|
60
|
+
const maximum = new Float64Array(list.length);
|
|
61
|
+
for (let index = 0; index < list.length; index++) {
|
|
62
|
+
const range = list[index];
|
|
63
|
+
minimum[index] = Math.min(range[0], range[1]);
|
|
64
|
+
maximum[index] = Math.max(range[0], range[1]);
|
|
65
|
+
}
|
|
66
|
+
active.push({ values: axis.values, minimum, maximum });
|
|
42
67
|
}
|
|
43
68
|
if (active.length === 0)
|
|
44
69
|
return included;
|
|
45
70
|
for (const range of active) {
|
|
46
71
|
const rows = Math.min(count, range.values.length);
|
|
72
|
+
const intervals = range.minimum.length;
|
|
47
73
|
for (let row = 0; row < rows; row++) {
|
|
48
74
|
if (included[row] === 0)
|
|
49
75
|
continue;
|
|
50
76
|
const value = range.values[row];
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
77
|
+
let kept = false;
|
|
78
|
+
for (let index = 0; index < intervals; index++) {
|
|
79
|
+
if (value >= range.minimum[index] &&
|
|
80
|
+
value <= range.maximum[index]) {
|
|
81
|
+
kept = true;
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (!kept)
|
|
86
|
+
included[row] = 0;
|
|
54
87
|
}
|
|
55
88
|
// A row the figure has no value for on a brushed axis is not in range.
|
|
56
89
|
for (let row = rows; row < count; row++)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelFilter.js","sourceRoot":"","sources":["../../../src/parallel/core/parallelFilter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"parallelFilter.js","sourceRoot":"","sources":["../../../src/parallel/core/parallelFilter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which order the axes stand in, when the reader is the one deciding.
|
|
3
|
+
*
|
|
4
|
+
* A parallel-coordinates figure only shows a relationship between two columns
|
|
5
|
+
* that stand next to each other, so the order is not decoration: moving an
|
|
6
|
+
* axis is how a reader asks a different question of the same data. The
|
|
7
|
+
* arithmetic of the move is here, away from the pointer that starts it, so
|
|
8
|
+
* that dragging a name and pressing an arrow key are the same operation.
|
|
9
|
+
*/
|
|
10
|
+
import type { ParallelAxisLayout } from './parallelAxes.ts';
|
|
11
|
+
/**
|
|
12
|
+
* The same ids with one of them moved.
|
|
13
|
+
* @param ids - The axes, from left to right.
|
|
14
|
+
* @param from - Which one is moving.
|
|
15
|
+
* @param to - The place it lands in, counted in the list it left.
|
|
16
|
+
* @returns The new order. The list comes back unchanged when either place is
|
|
17
|
+
* outside it or when nothing moves, so a caller can report without comparing.
|
|
18
|
+
*/
|
|
19
|
+
export declare function parallelMoveAxis(ids: readonly string[], from: number, to: number): string[];
|
|
20
|
+
/**
|
|
21
|
+
* Where an axis dragged to that position would land.
|
|
22
|
+
* @param x - Where the pointer is, in pixels from the left of the drawing area.
|
|
23
|
+
* @param layouts - The axes, from left to right.
|
|
24
|
+
* @returns The index of the axis whose place it would take, or `-1` when there
|
|
25
|
+
* is nowhere to land. Nearest axis rather than nearest gap: a reader dragging
|
|
26
|
+
* a name over its neighbour means the two to swap, and the neighbour's own
|
|
27
|
+
* name is the thing they are aiming at.
|
|
28
|
+
*/
|
|
29
|
+
export declare function parallelDropIndex(x: number, layouts: readonly ParallelAxisLayout[]): number;
|
|
30
|
+
/**
|
|
31
|
+
* The ids of the axes, from left to right.
|
|
32
|
+
* @param layouts - The axes, already placed.
|
|
33
|
+
* @returns Their ids, which is what an order is reported as.
|
|
34
|
+
*/
|
|
35
|
+
export declare function parallelAxisOrder(layouts: readonly ParallelAxisLayout[]): string[];
|
|
36
|
+
//# sourceMappingURL=parallelOrder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallelOrder.d.ts","sourceRoot":"","sources":["../../../src/parallel/core/parallelOrder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,MAAM,EAAE,CAQV;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,MAAM,EACT,OAAO,EAAE,SAAS,kBAAkB,EAAE,GACrC,MAAM,CAaR;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,kBAAkB,EAAE,GACrC,MAAM,EAAE,CAIV"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which order the axes stand in, when the reader is the one deciding.
|
|
3
|
+
*
|
|
4
|
+
* A parallel-coordinates figure only shows a relationship between two columns
|
|
5
|
+
* that stand next to each other, so the order is not decoration: moving an
|
|
6
|
+
* axis is how a reader asks a different question of the same data. The
|
|
7
|
+
* arithmetic of the move is here, away from the pointer that starts it, so
|
|
8
|
+
* that dragging a name and pressing an arrow key are the same operation.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* The same ids with one of them moved.
|
|
12
|
+
* @param ids - The axes, from left to right.
|
|
13
|
+
* @param from - Which one is moving.
|
|
14
|
+
* @param to - The place it lands in, counted in the list it left.
|
|
15
|
+
* @returns The new order. The list comes back unchanged when either place is
|
|
16
|
+
* outside it or when nothing moves, so a caller can report without comparing.
|
|
17
|
+
*/
|
|
18
|
+
export function parallelMoveAxis(ids, from, to) {
|
|
19
|
+
const order = [...ids];
|
|
20
|
+
if (from < 0 || from >= order.length)
|
|
21
|
+
return order;
|
|
22
|
+
if (to < 0 || to >= order.length || to === from)
|
|
23
|
+
return order;
|
|
24
|
+
const [moved] = order.splice(from, 1);
|
|
25
|
+
if (moved === undefined)
|
|
26
|
+
return [...ids];
|
|
27
|
+
order.splice(to, 0, moved);
|
|
28
|
+
return order;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Where an axis dragged to that position would land.
|
|
32
|
+
* @param x - Where the pointer is, in pixels from the left of the drawing area.
|
|
33
|
+
* @param layouts - The axes, from left to right.
|
|
34
|
+
* @returns The index of the axis whose place it would take, or `-1` when there
|
|
35
|
+
* is nowhere to land. Nearest axis rather than nearest gap: a reader dragging
|
|
36
|
+
* a name over its neighbour means the two to swap, and the neighbour's own
|
|
37
|
+
* name is the thing they are aiming at.
|
|
38
|
+
*/
|
|
39
|
+
export function parallelDropIndex(x, layouts) {
|
|
40
|
+
let nearest = -1;
|
|
41
|
+
let nearestDistance = Number.POSITIVE_INFINITY;
|
|
42
|
+
for (let index = 0; index < layouts.length; index++) {
|
|
43
|
+
const layout = layouts[index];
|
|
44
|
+
if (layout === undefined)
|
|
45
|
+
continue;
|
|
46
|
+
const distance = Math.abs(x - layout.x);
|
|
47
|
+
if (distance < nearestDistance) {
|
|
48
|
+
nearestDistance = distance;
|
|
49
|
+
nearest = index;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return nearest;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The ids of the axes, from left to right.
|
|
56
|
+
* @param layouts - The axes, already placed.
|
|
57
|
+
* @returns Their ids, which is what an order is reported as.
|
|
58
|
+
*/
|
|
59
|
+
export function parallelAxisOrder(layouts) {
|
|
60
|
+
const ids = [];
|
|
61
|
+
for (const layout of layouts)
|
|
62
|
+
ids.push(layout.id);
|
|
63
|
+
return ids;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=parallelOrder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallelOrder.js","sourceRoot":"","sources":["../../../src/parallel/core/parallelOrder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAsB,EACtB,IAAY,EACZ,EAAU;IAEV,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACvB,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACnD,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACtC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IACzC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAC/B,CAAS,EACT,OAAsC;IAEtC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;IACjB,IAAI,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC/C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,MAAM,KAAK,SAAS;YAAE,SAAS;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,QAAQ,GAAG,eAAe,EAAE,CAAC;YAC/B,eAAe,GAAG,QAAQ,CAAC;YAC3B,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAsC;IAEtC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,MAAM,IAAI,OAAO;QAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -95,6 +95,10 @@ export declare function paintParallelLines(context: CanvasRenderingContext2D, pa
|
|
|
95
95
|
export declare function paintParallelHighlights(context: CanvasRenderingContext2D, paint: ParallelHighlightPaint): void;
|
|
96
96
|
/**
|
|
97
97
|
* Add one row's line to the path being built.
|
|
98
|
+
*
|
|
99
|
+
* The line is one polyline per unbroken run of known values, so a row with a
|
|
100
|
+
* gap in the middle is drawn as two, and nothing is painted over an axis the
|
|
101
|
+
* row has no value on.
|
|
98
102
|
* @param context - A context already scaled and moved to the drawing area.
|
|
99
103
|
* @param row - The row to trace.
|
|
100
104
|
* @param layouts - The axes, from left to right.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelPaint.d.ts","sourceRoot":"","sources":["../../../src/parallel/core/parallelPaint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,gFAAgF;AAChF,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAa5C,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC,6CAA6C;IAC7C,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,QAAQ,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB;IAChC,eAAe;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qCAAqC;AACrC,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACzC,oCAAoC;IACpC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC,6CAA6C;IAC7C,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,wBAAwB,GAAG,IAAI,CAYjC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,aAAa,GACnB,IAAI,
|
|
1
|
+
{"version":3,"file":"parallelPaint.d.ts","sourceRoot":"","sources":["../../../src/parallel/core/parallelPaint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,gFAAgF;AAChF,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAa5C,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,iEAAiE;IACjE,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC,6CAA6C;IAC7C,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,QAAQ,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,+DAA+D;AAC/D,MAAM,WAAW,iBAAiB;IAChC,eAAe;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qCAAqC;AACrC,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACzC,oCAAoC;IACpC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC,6CAA6C;IAC7C,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,wBAAwB,GAAG,IAAI,CAYjC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,aAAa,GACnB,IAAI,CAsCN;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,wBAAwB,EACjC,KAAK,EAAE,sBAAsB,GAC5B,IAAI,CA2BN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,wBAAwB,EACjC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GACvC,IAAI,CAsBN"}
|
|
@@ -81,9 +81,10 @@ export function paintParallelLines(context, paint) {
|
|
|
81
81
|
if (steps !== null) {
|
|
82
82
|
const step = steps[row];
|
|
83
83
|
if (step !== previousStep) {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
// A step past the end of the ramp is a quantity nobody knows for this
|
|
85
|
+
// row; it is drawn in the neutral ink rather than in the ramp's first
|
|
86
|
+
// colour, which means the smallest value in the set.
|
|
87
|
+
context.strokeStyle = palette[step] ?? line;
|
|
87
88
|
previousStep = step;
|
|
88
89
|
}
|
|
89
90
|
}
|
|
@@ -131,6 +132,10 @@ export function paintParallelHighlights(context, paint) {
|
|
|
131
132
|
}
|
|
132
133
|
/**
|
|
133
134
|
* Add one row's line to the path being built.
|
|
135
|
+
*
|
|
136
|
+
* The line is one polyline per unbroken run of known values, so a row with a
|
|
137
|
+
* gap in the middle is drawn as two, and nothing is painted over an axis the
|
|
138
|
+
* row has no value on.
|
|
134
139
|
* @param context - A context already scaled and moved to the drawing area.
|
|
135
140
|
* @param row - The row to trace.
|
|
136
141
|
* @param layouts - The axes, from left to right.
|
|
@@ -144,10 +149,14 @@ export function traceParallelRow(context, row, layouts, values) {
|
|
|
144
149
|
if (layout === undefined || column === undefined)
|
|
145
150
|
continue;
|
|
146
151
|
const y = parallelPixelAt(layout.pixels, column[row]);
|
|
147
|
-
// A row whose value on this axis is not known yet has no point to draw
|
|
148
|
-
// the line
|
|
149
|
-
|
|
152
|
+
// A row whose value on this axis is not known yet has no point to draw,
|
|
153
|
+
// and the line breaks rather than bridging the axis: a segment drawn
|
|
154
|
+
// across it reads as a value the row does not hold, and the hit test,
|
|
155
|
+
// which has no endpoint there, cannot pick it back.
|
|
156
|
+
if (!Number.isFinite(y)) {
|
|
157
|
+
started = false;
|
|
150
158
|
continue;
|
|
159
|
+
}
|
|
151
160
|
if (started) {
|
|
152
161
|
context.lineTo(layout.x, y);
|
|
153
162
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelPaint.js","sourceRoot":"","sources":["../../../src/parallel/core/parallelPaint.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"parallelPaint.js","sourceRoot":"","sources":["../../../src/parallel/core/parallelPaint.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,14 @@ import type { ColorScale } from '../../color/core/interpolate.ts';
|
|
|
11
11
|
import type { ParallelColorBy } from './parallelTypes.ts';
|
|
12
12
|
/** How many steps the ramp is quantised into; there is one more colour than steps. */
|
|
13
13
|
export declare const PARALLEL_PALETTE_STEPS = 120;
|
|
14
|
+
/**
|
|
15
|
+
* The step a row whose colouring quantity is unknown takes.
|
|
16
|
+
*
|
|
17
|
+
* Past the end of the ramp on purpose: no colour indexes it, so the painter
|
|
18
|
+
* leaves such a row in the neutral ink rather than claiming for it the ink of
|
|
19
|
+
* the smallest value in the set.
|
|
20
|
+
*/
|
|
21
|
+
export declare const PARALLEL_PALETTE_UNKNOWN: number;
|
|
14
22
|
/**
|
|
15
23
|
* The ramp, sampled into the steps a line's colour is looked up by.
|
|
16
24
|
* @param scale - The ramp, as the registry hands it over or as a plain list of colours. Defaults to viridis.
|
|
@@ -25,7 +33,8 @@ export declare function parallelPalette(scale?: ColorScale | readonly string[]):
|
|
|
25
33
|
* loop reads an integer instead of placing a value on a ramp.
|
|
26
34
|
* @param color - The quantity the lines are coloured by.
|
|
27
35
|
* @param count - How many rows there are.
|
|
28
|
-
* @returns One step per row, from `0` to {@link PARALLEL_PALETTE_STEPS}
|
|
36
|
+
* @returns One step per row, from `0` to {@link PARALLEL_PALETTE_STEPS}, or
|
|
37
|
+
* {@link PARALLEL_PALETTE_UNKNOWN} for a row whose value is not a number.
|
|
29
38
|
*/
|
|
30
39
|
export declare function parallelColorSteps(color: ParallelColorBy, count: number): Uint8Array;
|
|
31
40
|
//# sourceMappingURL=parallelPalette.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelPalette.d.ts","sourceRoot":"","sources":["../../../src/parallel/core/parallelPalette.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAOlE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,sFAAsF;AACtF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,GACrC,SAAS,MAAM,EAAE,CAEnB;AAED
|
|
1
|
+
{"version":3,"file":"parallelPalette.d.ts","sourceRoot":"","sources":["../../../src/parallel/core/parallelPalette.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAOlE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,sFAAsF;AACtF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,QAA6B,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,MAAM,EAAE,GACrC,SAAS,MAAM,EAAE,CAEnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,MAAM,GACZ,UAAU,CAqBZ"}
|