react-cheminfo 0.16.0 → 0.18.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/lib/structure/core/editorGuide.d.ts +69 -0
- package/lib/structure/core/editorGuide.d.ts.map +1 -0
- package/lib/structure/core/editorGuide.js +162 -0
- package/lib/structure/core/editorGuide.js.map +1 -0
- package/lib/structure/core/editorToolbar.d.ts +45 -0
- package/lib/structure/core/editorToolbar.d.ts.map +1 -0
- package/lib/structure/core/editorToolbar.js +132 -0
- package/lib/structure/core/editorToolbar.js.map +1 -0
- package/lib/structure/core/editorToolbarGeometry.d.ts +36 -0
- package/lib/structure/core/editorToolbarGeometry.d.ts.map +1 -0
- package/lib/structure/core/editorToolbarGeometry.js +61 -0
- package/lib/structure/core/editorToolbarGeometry.js.map +1 -0
- package/lib/structure/core/index.d.ts +6 -0
- package/lib/structure/core/index.d.ts.map +1 -1
- package/lib/structure/core/index.js +3 -0
- package/lib/structure/core/index.js.map +1 -1
- package/lib/structure/core/pendingCall.d.ts +21 -0
- package/lib/structure/core/pendingCall.d.ts.map +1 -0
- package/lib/structure/core/pendingCall.js +37 -0
- package/lib/structure/core/pendingCall.js.map +1 -0
- package/lib/structure/ui/EditorCanvas.d.ts +1 -16
- package/lib/structure/ui/EditorCanvas.d.ts.map +1 -1
- package/lib/structure/ui/EditorCanvas.js +5 -18
- package/lib/structure/ui/EditorCanvas.js.map +1 -1
- package/lib/structure/ui/EditorHelpButton.d.ts +22 -0
- package/lib/structure/ui/EditorHelpButton.d.ts.map +1 -0
- package/lib/structure/ui/EditorHelpButton.js +38 -0
- package/lib/structure/ui/EditorHelpButton.js.map +1 -0
- package/lib/structure/ui/KeyCaps.d.ts +12 -0
- package/lib/structure/ui/KeyCaps.d.ts.map +1 -0
- package/lib/structure/ui/KeyCaps.js +29 -0
- package/lib/structure/ui/KeyCaps.js.map +1 -0
- package/lib/structure/ui/StructureEditor.d.ts +9 -2
- package/lib/structure/ui/StructureEditor.d.ts.map +1 -1
- package/lib/structure/ui/StructureEditor.js +17 -24
- package/lib/structure/ui/StructureEditor.js.map +1 -1
- package/lib/structure/ui/StructureEditorHelp.d.ts +18 -0
- package/lib/structure/ui/StructureEditorHelp.d.ts.map +1 -0
- package/lib/structure/ui/StructureEditorHelp.js +68 -0
- package/lib/structure/ui/StructureEditorHelp.js.map +1 -0
- package/lib/structure/ui/ToolbarTooltip.d.ts +20 -0
- package/lib/structure/ui/ToolbarTooltip.d.ts.map +1 -0
- package/lib/structure/ui/ToolbarTooltip.js +49 -0
- package/lib/structure/ui/ToolbarTooltip.js.map +1 -0
- package/lib/structure/ui/editorChange.d.ts +52 -0
- package/lib/structure/ui/editorChange.d.ts.map +1 -0
- package/lib/structure/ui/editorChange.js +34 -0
- package/lib/structure/ui/editorChange.js.map +1 -0
- package/lib/structure/ui/index.d.ts +3 -1
- package/lib/structure/ui/index.d.ts.map +1 -1
- package/lib/structure/ui/index.js +1 -0
- package/lib/structure/ui/index.js.map +1 -1
- package/lib/structure/ui/useToolbarFloor.d.ts.map +1 -1
- package/lib/structure/ui/useToolbarFloor.js +6 -45
- package/lib/structure/ui/useToolbarFloor.js.map +1 -1
- package/lib/structure/ui/useToolbarHover.d.ts +28 -0
- package/lib/structure/ui/useToolbarHover.d.ts.map +1 -0
- package/lib/structure/ui/useToolbarHover.js +96 -0
- package/lib/structure/ui/useToolbarHover.js.map +1 -0
- package/lib/structure/ui/watchToolbar.d.ts +17 -0
- package/lib/structure/ui/watchToolbar.d.ts.map +1 -0
- package/lib/structure/ui/watchToolbar.js +56 -0
- package/lib/structure/ui/watchToolbar.js.map +1 -0
- 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
- package/src/structure/core/editorGuide.ts +221 -0
- package/src/structure/core/editorToolbar.ts +175 -0
- package/src/structure/core/editorToolbarGeometry.ts +80 -0
- package/src/structure/core/index.ts +29 -0
- package/src/structure/core/pendingCall.ts +59 -0
- package/src/structure/ui/EditorCanvas.tsx +9 -35
- package/src/structure/ui/EditorHelpButton.tsx +70 -0
- package/src/structure/ui/KeyCaps.tsx +40 -0
- package/src/structure/ui/StructureEditor.tsx +39 -21
- package/src/structure/ui/StructureEditorHelp.tsx +136 -0
- package/src/structure/ui/ToolbarTooltip.tsx +95 -0
- package/src/structure/ui/editorChange.ts +81 -0
- package/src/structure/ui/index.ts +5 -1
- package/src/structure/ui/useToolbarFloor.ts +7 -46
- package/src/structure/ui/useToolbarHover.ts +134 -0
- package/src/structure/ui/watchToolbar.ts +59 -0
|
@@ -73,10 +73,11 @@ export interface ParallelCoordinatesProps {
|
|
|
73
73
|
*/
|
|
74
74
|
height?: number;
|
|
75
75
|
/**
|
|
76
|
-
*
|
|
77
|
-
* the brushes — which is what lets a table beside
|
|
78
|
-
* same ranges. The band being dragged stays inside
|
|
79
|
-
* so a controlled parent is never asked to
|
|
76
|
+
* What each axis keeps, keyed by axis id: one interval, several, or `null`.
|
|
77
|
+
* Present, the caller owns the brushes — which is what lets a table beside
|
|
78
|
+
* the figure filter on the same ranges. The band being dragged stays inside
|
|
79
|
+
* the component either way, so a controlled parent is never asked to
|
|
80
|
+
* re-render sixty times a second.
|
|
80
81
|
* @default undefined — the figure keeps its own
|
|
81
82
|
*/
|
|
82
83
|
ranges?: ParallelRanges;
|
|
@@ -86,17 +87,25 @@ export interface ParallelCoordinatesProps {
|
|
|
86
87
|
*/
|
|
87
88
|
defaultRanges?: ParallelRanges;
|
|
88
89
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
90
|
+
* Whether one axis may keep several intervals at once — the light molecules
|
|
91
|
+
* and the heavy ones, with nothing in between. A reader brushes a second
|
|
92
|
+
* interval by dragging on a bare part of an axis that already carries one,
|
|
93
|
+
* and takes one away by clicking it.
|
|
94
|
+
* @default false — a new brush replaces the one the axis carried
|
|
95
|
+
*/
|
|
96
|
+
several?: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Called when a brush is released, with every interval that axis now keeps —
|
|
99
|
+
* empty when the reader cleared it, and never while a band is being dragged.
|
|
91
100
|
* @default undefined
|
|
92
101
|
*/
|
|
93
|
-
onRangeChange?: (axisId: string,
|
|
102
|
+
onRangeChange?: (axisId: string, ranges: readonly ParallelRange[]) => void;
|
|
94
103
|
/**
|
|
95
104
|
* Called on every frame a band grows, for a caption saying what letting go
|
|
96
105
|
* would keep. Nothing else should be wired to it.
|
|
97
106
|
* @default undefined
|
|
98
107
|
*/
|
|
99
|
-
onRangePreview?: (axisId: string,
|
|
108
|
+
onRangePreview?: (axisId: string, ranges: readonly ParallelRange[]) => void;
|
|
100
109
|
/**
|
|
101
110
|
* Which rows the brushes keep, one entry per row, a zero meaning excluded.
|
|
102
111
|
* Left out, it is worked out from the ranges with `parallelIncludedMask`,
|
|
@@ -156,6 +165,15 @@ export interface ParallelCoordinatesProps {
|
|
|
156
165
|
* @default the axis label, and its unit after it
|
|
157
166
|
*/
|
|
158
167
|
renderAxisLabel?: (axis: ParallelAxis, index: number) => ReactNode;
|
|
168
|
+
/**
|
|
169
|
+
* Called with the axis ids in the order the reader dragged them into.
|
|
170
|
+
* Present, every axis name becomes a handle: drag it, or focus it and press
|
|
171
|
+
* the left and right arrow keys. Two columns only show their relationship
|
|
172
|
+
* when they stand next to each other, so this is how a reader asks a
|
|
173
|
+
* different question of the same figure.
|
|
174
|
+
* @default undefined — the axes stand in the order the caller gave them
|
|
175
|
+
*/
|
|
176
|
+
onAxisOrder?: (ids: readonly string[]) => void;
|
|
159
177
|
/**
|
|
160
178
|
* What is shown in place of the figure when there is nothing to draw.
|
|
161
179
|
* @default undefined — an empty figure of the given height
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelCoordinatesProps.d.ts","sourceRoot":"","sources":["../../../src/parallel/ui/parallelCoordinatesProps.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AAElC,2CAA2C;AAC3C,MAAM,WAAW,aAAa;IAC5B,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,CAAC,EAAE,MAAM,CAAC;IACV,gDAAgD;IAChD,CAAC,EAAE,MAAM,CAAC;CACX;AAED,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wCAAwC;AACxC,MAAM,WAAW,wBAAwB;IACvC,mEAAmE;IACnE,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;IAC9B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB
|
|
1
|
+
{"version":3,"file":"parallelCoordinatesProps.d.ts","sourceRoot":"","sources":["../../../src/parallel/ui/parallelCoordinatesProps.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,11 +9,13 @@
|
|
|
9
9
|
import type { SurfaceEvent } from '../../scatter/ui/lassoGesture.ts';
|
|
10
10
|
import type { ParallelAxisLayout } from '../core/parallelAxes.ts';
|
|
11
11
|
import type { ParallelBand } from '../core/parallelBrush.ts';
|
|
12
|
-
import type { ParallelRanges } from '../core/parallelTypes.ts';
|
|
12
|
+
import type { ParallelRange, ParallelRanges } from '../core/parallelTypes.ts';
|
|
13
13
|
/** A band being dragged, before the interval it keeps is reported. */
|
|
14
14
|
export interface ParallelDraft {
|
|
15
15
|
/** The axis it is on. */
|
|
16
16
|
axis: string;
|
|
17
|
+
/** Which of that axis's bands it is, or `-1` when it is a new one. */
|
|
18
|
+
index: number;
|
|
17
19
|
/** Where it stands this frame. */
|
|
18
20
|
band: ParallelBand;
|
|
19
21
|
}
|
|
@@ -41,12 +43,41 @@ export declare function parallelAxisNear(x: number, axes: readonly ParallelAxisL
|
|
|
41
43
|
*/
|
|
42
44
|
export declare function parallelAxisById(axes: readonly ParallelAxisLayout[], axisId: string): ParallelAxisLayout | undefined;
|
|
43
45
|
/**
|
|
44
|
-
* The
|
|
45
|
-
* the
|
|
46
|
+
* The bands to draw on each axis: the one being dragged where there is one,
|
|
47
|
+
* and the intervals in force everywhere else.
|
|
46
48
|
* @param axes - The axes, from left to right.
|
|
47
|
-
* @param ranges -
|
|
49
|
+
* @param ranges - What each axis keeps: one interval, several, or none.
|
|
48
50
|
* @param draft - The band being dragged, or `null` when nothing is.
|
|
49
|
-
* @returns The bands, keyed by axis id; an axis with none is left out.
|
|
51
|
+
* @returns The bands, keyed by axis id; an axis with none is left out. The
|
|
52
|
+
* band being dragged replaces the interval it came from rather than being
|
|
53
|
+
* drawn beside it, so an interval never appears twice mid-gesture.
|
|
50
54
|
*/
|
|
51
|
-
export declare function parallelBandsOf(axes: readonly ParallelAxisLayout[], ranges: ParallelRanges, draft: ParallelDraft | null): ReadonlyMap<string, ParallelBand>;
|
|
55
|
+
export declare function parallelBandsOf(axes: readonly ParallelAxisLayout[], ranges: ParallelRanges, draft: ParallelDraft | null): ReadonlyMap<string, ParallelBand[]>;
|
|
56
|
+
/** What a released band does to the intervals its axis already kept. */
|
|
57
|
+
export interface ParallelCommit {
|
|
58
|
+
/** The intervals in force on that axis. */
|
|
59
|
+
list: readonly ParallelRange[];
|
|
60
|
+
/** Which of them the drag took hold of, or `-1` when it began a new one. */
|
|
61
|
+
index: number;
|
|
62
|
+
/** The band as the pointer left it. */
|
|
63
|
+
band: ParallelBand;
|
|
64
|
+
/** The axis it is on, to read the band back into its own units. */
|
|
65
|
+
layout: ParallelAxisLayout;
|
|
66
|
+
/** Whether the press took an interval and let it go without moving it. */
|
|
67
|
+
still: boolean;
|
|
68
|
+
/** Whether the axis may keep more than one interval. */
|
|
69
|
+
several: boolean;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The intervals an axis keeps once a band has been let go.
|
|
73
|
+
*
|
|
74
|
+
* A press that keeps nothing is a click, and a click says "take this away":
|
|
75
|
+
* the interval under the pointer when it landed on one, and every interval on
|
|
76
|
+
* the axis when it landed on bare axis. That is the only way to be rid of one
|
|
77
|
+
* interval on an axis carrying four, and it is the gesture that already
|
|
78
|
+
* cleared an axis before it could carry more than one.
|
|
79
|
+
* @param commit - See {@link ParallelCommit}.
|
|
80
|
+
* @returns The intervals, sorted and disjoint.
|
|
81
|
+
*/
|
|
82
|
+
export declare function parallelCommitOf(commit: ParallelCommit): ParallelRange[];
|
|
52
83
|
//# sourceMappingURL=parallelGestureModel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelGestureModel.d.ts","sourceRoot":"","sources":["../../../src/parallel/ui/parallelGestureModel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"parallelGestureModel.d.ts","sourceRoot":"","sources":["../../../src/parallel/ui/parallelGestureModel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAW7D,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE9E,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,IAAI,EAAE,YAAY,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG;IACpD,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAMA;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,SAAS,kBAAkB,EAAE,GAClC,MAAM,CAaR;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,kBAAkB,EAAE,EACnC,MAAM,EAAE,MAAM,GACb,kBAAkB,GAAG,SAAS,CAKhC;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,kBAAkB,EAAE,EACnC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,aAAa,GAAG,IAAI,GAC1B,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAcrC;AAED,wEAAwE;AACxE,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,IAAI,EAAE,SAAS,aAAa,EAAE,CAAC;IAC/B,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,IAAI,EAAE,YAAY,CAAC;IACnB,mEAAmE;IACnE,MAAM,EAAE,kBAAkB,CAAC;IAC3B,0EAA0E;IAC1E,KAAK,EAAE,OAAO,CAAC;IACf,wDAAwD;IACxD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,aAAa,EAAE,CASxE"}
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { surfacePosition } from "../../scatter/ui/lassoGesture.js";
|
|
10
10
|
import { PARALLEL_MARGIN } from "../core/parallelAxes.js";
|
|
11
|
-
import { PARALLEL_BRUSH_HALF_WIDTH, parallelBandOf, } from "../core/parallelBrush.js";
|
|
11
|
+
import { PARALLEL_BRUSH_HALF_WIDTH, parallelBandOf, parallelIsBand, parallelRangeOf, } from "../core/parallelBrush.js";
|
|
12
|
+
import { parallelRangeList, parallelWriteRange, } from "../core/parallelSelection.js";
|
|
12
13
|
/**
|
|
13
14
|
* Where an event landed, relative to the top left of the drawing area.
|
|
14
15
|
* @param event - The event, for where on the surface it happened.
|
|
@@ -56,25 +57,54 @@ export function parallelAxisById(axes, axisId) {
|
|
|
56
57
|
return undefined;
|
|
57
58
|
}
|
|
58
59
|
/**
|
|
59
|
-
* The
|
|
60
|
-
* the
|
|
60
|
+
* The bands to draw on each axis: the one being dragged where there is one,
|
|
61
|
+
* and the intervals in force everywhere else.
|
|
61
62
|
* @param axes - The axes, from left to right.
|
|
62
|
-
* @param ranges -
|
|
63
|
+
* @param ranges - What each axis keeps: one interval, several, or none.
|
|
63
64
|
* @param draft - The band being dragged, or `null` when nothing is.
|
|
64
|
-
* @returns The bands, keyed by axis id; an axis with none is left out.
|
|
65
|
+
* @returns The bands, keyed by axis id; an axis with none is left out. The
|
|
66
|
+
* band being dragged replaces the interval it came from rather than being
|
|
67
|
+
* drawn beside it, so an interval never appears twice mid-gesture.
|
|
65
68
|
*/
|
|
66
69
|
export function parallelBandsOf(axes, ranges, draft) {
|
|
67
70
|
const drawn = new Map();
|
|
68
71
|
for (const axis of axes) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
+
const list = parallelRangeList(ranges[axis.id]);
|
|
73
|
+
const dragging = draft !== null && draft.axis === axis.id;
|
|
74
|
+
const bands = [];
|
|
75
|
+
for (let index = 0; index < list.length; index++) {
|
|
76
|
+
if (dragging && index === draft.index)
|
|
77
|
+
continue;
|
|
78
|
+
bands.push(parallelBandOf(list[index], axis));
|
|
72
79
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
80
|
+
if (dragging)
|
|
81
|
+
bands.push(draft.band);
|
|
82
|
+
if (bands.length > 0)
|
|
83
|
+
drawn.set(axis.id, bands);
|
|
77
84
|
}
|
|
78
85
|
return drawn;
|
|
79
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* The intervals an axis keeps once a band has been let go.
|
|
89
|
+
*
|
|
90
|
+
* A press that keeps nothing is a click, and a click says "take this away":
|
|
91
|
+
* the interval under the pointer when it landed on one, and every interval on
|
|
92
|
+
* the axis when it landed on bare axis. That is the only way to be rid of one
|
|
93
|
+
* interval on an axis carrying four, and it is the gesture that already
|
|
94
|
+
* cleared an axis before it could carry more than one.
|
|
95
|
+
* @param commit - See {@link ParallelCommit}.
|
|
96
|
+
* @returns The intervals, sorted and disjoint.
|
|
97
|
+
*/
|
|
98
|
+
export function parallelCommitOf(commit) {
|
|
99
|
+
const { list, index, band, layout, still, several } = commit;
|
|
100
|
+
if (still)
|
|
101
|
+
return parallelWriteRange(list, index, null);
|
|
102
|
+
if (!parallelIsBand(band)) {
|
|
103
|
+
return index === -1 ? [] : parallelWriteRange(list, index, null);
|
|
104
|
+
}
|
|
105
|
+
const range = parallelRangeOf(band, layout);
|
|
106
|
+
if (!several && index === -1)
|
|
107
|
+
return [range];
|
|
108
|
+
return parallelWriteRange(list, index, range);
|
|
109
|
+
}
|
|
80
110
|
//# sourceMappingURL=parallelGestureModel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelGestureModel.js","sourceRoot":"","sources":["../../../src/parallel/ui/parallelGestureModel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EACL,yBAAyB,EACzB,cAAc,
|
|
1
|
+
{"version":3,"file":"parallelGestureModel.js","sourceRoot":"","sources":["../../../src/parallel/ui/parallelGestureModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,7 +30,7 @@ export declare function parallelColorOf(color: ParallelColorBy | undefined, colo
|
|
|
30
30
|
/**
|
|
31
31
|
* Whether any axis on the figure carries an interval at all.
|
|
32
32
|
* @param axes - The axes, whose ids the intervals are keyed by.
|
|
33
|
-
* @param ranges -
|
|
33
|
+
* @param ranges - What each axis keeps.
|
|
34
34
|
* @returns Whether anything is brushed, which is what decides whether a line
|
|
35
35
|
* is ever drawn in the excluded ink.
|
|
36
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelPlotModel.d.ts","sourceRoot":"","sources":["../../../src/parallel/ui/parallelPlotModel.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"parallelPlotModel.d.ts","sourceRoot":"","sources":["../../../src/parallel/ui/parallelPlotModel.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACf,MAAM,0BAA0B,CAAC;AAElC;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,YAAY,EAAE,EAC7B,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAUR;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,eAAe,GAAG,SAAS,EAClC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,IAAI,EAAE,SAAS,YAAY,EAAE,GAC5B,eAAe,GAAG,SAAS,CAe7B;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,YAAY,EAAE,EAC7B,MAAM,EAAE,cAAc,GACrB,OAAO,CAKT;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACvC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,iBAAiB,EAAE,CAUrB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,YAAY,EAAE,EAC7B,KAAK,EAAE,MAAM,GACZ,MAAM,CAMR"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* arithmetic is a component nobody can see the layout in.
|
|
9
9
|
*/
|
|
10
10
|
import { formatInteger } from "../../format/core/numbers.js";
|
|
11
|
+
import { parallelHasRange } from "../core/parallelSelection.js";
|
|
11
12
|
/**
|
|
12
13
|
* How many rows the figure draws.
|
|
13
14
|
* @param axes - The axes, whose columns are read.
|
|
@@ -61,14 +62,13 @@ export function parallelColorOf(color, colorAxis, axes) {
|
|
|
61
62
|
/**
|
|
62
63
|
* Whether any axis on the figure carries an interval at all.
|
|
63
64
|
* @param axes - The axes, whose ids the intervals are keyed by.
|
|
64
|
-
* @param ranges -
|
|
65
|
+
* @param ranges - What each axis keeps.
|
|
65
66
|
* @returns Whether anything is brushed, which is what decides whether a line
|
|
66
67
|
* is ever drawn in the excluded ink.
|
|
67
68
|
*/
|
|
68
69
|
export function parallelIsBrushed(axes, ranges) {
|
|
69
70
|
for (const axis of axes) {
|
|
70
|
-
|
|
71
|
-
if (range !== null && range !== undefined)
|
|
71
|
+
if (parallelHasRange(ranges[axis.id]))
|
|
72
72
|
return true;
|
|
73
73
|
}
|
|
74
74
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelPlotModel.js","sourceRoot":"","sources":["../../../src/parallel/ui/parallelPlotModel.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"parallelPlotModel.js","sourceRoot":"","sources":["../../../src/parallel/ui/parallelPlotModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,12 +43,35 @@ export declare const PARALLEL_LABELS_STYLE: {
|
|
|
43
43
|
readonly position: "absolute";
|
|
44
44
|
readonly inset: 0;
|
|
45
45
|
};
|
|
46
|
+
/** How one axis name is placed, and whether it is being moved. */
|
|
47
|
+
export interface ParallelLabelPlacement {
|
|
48
|
+
/** Where the axis stands, in pixels from the figure's left edge. */
|
|
49
|
+
left: number;
|
|
50
|
+
/**
|
|
51
|
+
* Whether the name can be dragged to move its axis.
|
|
52
|
+
* @default false
|
|
53
|
+
*/
|
|
54
|
+
draggable?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* How far it has been dragged, in pixels, or `null` when it is not moving.
|
|
57
|
+
* @default null
|
|
58
|
+
*/
|
|
59
|
+
dx?: number | null;
|
|
60
|
+
}
|
|
46
61
|
/**
|
|
47
62
|
* One axis name, centred over its axis and taking the pointer back.
|
|
48
|
-
* @param
|
|
49
|
-
* @returns The name's rules.
|
|
63
|
+
* @param placement - See {@link ParallelLabelPlacement}.
|
|
64
|
+
* @returns The name's rules. A name being dragged follows the pointer and is
|
|
65
|
+
* drawn over its neighbours, so it is never hidden behind the name it is
|
|
66
|
+
* about to change places with.
|
|
50
67
|
*/
|
|
51
|
-
export declare function parallelLabelStyle(
|
|
68
|
+
export declare function parallelLabelStyle(placement: ParallelLabelPlacement): CSSProperties;
|
|
69
|
+
/**
|
|
70
|
+
* The axis a dragged name would take the place of, marked while it is moving.
|
|
71
|
+
* @param ink - The colour the figure singles things out in.
|
|
72
|
+
* @returns The mark's rules.
|
|
73
|
+
*/
|
|
74
|
+
export declare function parallelDropMarkStyle(ink: string): CSSProperties;
|
|
52
75
|
/** One tick written out, tabular so a column of them lines up on the point. */
|
|
53
76
|
export declare const PARALLEL_TICK_LABEL_STYLE: {
|
|
54
77
|
readonly fontSize: 10;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelStyles.d.ts","sourceRoot":"","sources":["../../../src/parallel/ui/parallelStyles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAI3C,0EAA0E;AAC1E,eAAO,MAAM,oBAAoB;;;CAGC,CAAC;AAEnC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAMjE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAMjE;AAED,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB;;;;;CAIG,CAAC;AAEnC;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;;;;CAGA,CAAC;AAEnC;;;;GAIG;AACH,wBAAgB,
|
|
1
|
+
{"version":3,"file":"parallelStyles.d.ts","sourceRoot":"","sources":["../../../src/parallel/ui/parallelStyles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAI3C,0EAA0E;AAC1E,eAAO,MAAM,oBAAoB;;;CAGC,CAAC;AAEnC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAMjE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAMjE;AAED,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB;;;;;CAIG,CAAC;AAEnC;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;;;;CAGA,CAAC;AAEnC,kEAAkE;AAClE,MAAM,WAAW,sBAAsB;IACrC,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,sBAAsB,GAChC,aAAa,CAoBf;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAOhE;AAED,+EAA+E;AAC/E,eAAO,MAAM,yBAAyB;;;;CAIJ,CAAC;AAEnC,8DAA8D;AAC9D,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,iDAAiD;AACjD,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAO5D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAE9D;AAED,mDAAmD;AACnD,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAiB7E"}
|
|
@@ -55,20 +55,42 @@ export const PARALLEL_LABELS_STYLE = {
|
|
|
55
55
|
};
|
|
56
56
|
/**
|
|
57
57
|
* One axis name, centred over its axis and taking the pointer back.
|
|
58
|
-
* @param
|
|
59
|
-
* @returns The name's rules.
|
|
58
|
+
* @param placement - See {@link ParallelLabelPlacement}.
|
|
59
|
+
* @returns The name's rules. A name being dragged follows the pointer and is
|
|
60
|
+
* drawn over its neighbours, so it is never hidden behind the name it is
|
|
61
|
+
* about to change places with.
|
|
60
62
|
*/
|
|
61
|
-
export function parallelLabelStyle(
|
|
63
|
+
export function parallelLabelStyle(placement) {
|
|
64
|
+
const { left, draggable = false, dx = null } = placement;
|
|
65
|
+
const moving = dx !== null;
|
|
62
66
|
return {
|
|
63
67
|
position: 'absolute',
|
|
68
|
+
zIndex: moving ? 2 : undefined,
|
|
64
69
|
top: 2,
|
|
65
70
|
left,
|
|
66
|
-
transform: 'translateX(-50%)'
|
|
71
|
+
transform: dx === null ? 'translateX(-50%)' : `translateX(calc(-50% + ${dx}px))`,
|
|
67
72
|
color: TOKEN.text,
|
|
68
73
|
fontSize: 11,
|
|
69
74
|
fontWeight: 600,
|
|
70
75
|
whiteSpace: 'nowrap',
|
|
71
76
|
pointerEvents: 'auto',
|
|
77
|
+
cursor: draggable ? (moving ? 'grabbing' : 'grab') : undefined,
|
|
78
|
+
opacity: moving ? 0.85 : undefined,
|
|
79
|
+
touchAction: draggable ? 'none' : undefined,
|
|
80
|
+
userSelect: draggable ? 'none' : undefined,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The axis a dragged name would take the place of, marked while it is moving.
|
|
85
|
+
* @param ink - The colour the figure singles things out in.
|
|
86
|
+
* @returns The mark's rules.
|
|
87
|
+
*/
|
|
88
|
+
export function parallelDropMarkStyle(ink) {
|
|
89
|
+
return {
|
|
90
|
+
stroke: ink,
|
|
91
|
+
strokeWidth: 2,
|
|
92
|
+
strokeOpacity: 0.7,
|
|
93
|
+
strokeDasharray: '4 3',
|
|
72
94
|
};
|
|
73
95
|
}
|
|
74
96
|
/** One tick written out, tabular so a column of them lines up on the point. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallelStyles.js","sourceRoot":"","sources":["../../../src/parallel/ui/parallelStyles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAE1D,0EAA0E;AAC1E,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,CAAC;CACwB,CAAC;AAEnC;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO;QACL,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO;QACL,GAAG,oBAAoB;QACvB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,GAAG,oBAAoB;IACvB,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,SAAS;CACa,CAAC;AAEnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,GAAG,oBAAoB;IACvB,aAAa,EAAE,MAAM;CACW,CAAC;
|
|
1
|
+
{"version":3,"file":"parallelStyles.js","sourceRoot":"","sources":["../../../src/parallel/ui/parallelStyles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dragging an axis by its name to stand somewhere else.
|
|
3
|
+
*
|
|
4
|
+
* Two columns only show their relationship when they are neighbours, so the
|
|
5
|
+
* order the axes stand in is a question the reader asks, not a decision the
|
|
6
|
+
* caller takes once. The name is the handle: it is the only part of an axis
|
|
7
|
+
* that is not already spoken for by the brush, and it is what a reader reaches
|
|
8
|
+
* for anyway.
|
|
9
|
+
*
|
|
10
|
+
* The gesture moves the name and nothing else. Reordering the axes for real
|
|
11
|
+
* would repaint every line on every frame, which a library of ten thousand
|
|
12
|
+
* molecules cannot afford — so the figure shows where the axis would land and
|
|
13
|
+
* moves it once, on release.
|
|
14
|
+
*/
|
|
15
|
+
import type { KeyboardEvent, PointerEvent } from 'react';
|
|
16
|
+
import type { ParallelAxisLayout } from '../core/parallelAxes.ts';
|
|
17
|
+
/** What {@link useParallelAxisDrag} needs. */
|
|
18
|
+
export interface ParallelAxisDragOptions {
|
|
19
|
+
/** The axes, from left to right, already placed. */
|
|
20
|
+
layouts: readonly ParallelAxisLayout[];
|
|
21
|
+
/**
|
|
22
|
+
* Called with the axis ids in the order the reader put them in.
|
|
23
|
+
* @default undefined — the axes cannot be moved
|
|
24
|
+
*/
|
|
25
|
+
onAxisOrder?: ((ids: readonly string[]) => void) | undefined;
|
|
26
|
+
}
|
|
27
|
+
/** The name being dragged, and where it would land. */
|
|
28
|
+
export interface ParallelAxisDragState {
|
|
29
|
+
/** Which axis is moving, as an index into the axes. */
|
|
30
|
+
from: number;
|
|
31
|
+
/** How far its name has been dragged, in pixels. */
|
|
32
|
+
dx: number;
|
|
33
|
+
/** Which place it would take if let go now. */
|
|
34
|
+
to: number;
|
|
35
|
+
}
|
|
36
|
+
/** The reorder gesture, as the figure renders it. */
|
|
37
|
+
export interface ParallelAxisDrag {
|
|
38
|
+
/** Whether the axes can be moved at all. */
|
|
39
|
+
enabled: boolean;
|
|
40
|
+
/** The name being dragged, or `null` when none is. */
|
|
41
|
+
active: ParallelAxisDragState | null;
|
|
42
|
+
/** Spread onto one axis's name. */
|
|
43
|
+
propsFor: (index: number) => ParallelAxisHandleProps;
|
|
44
|
+
}
|
|
45
|
+
/** What one axis name carries so it can be dragged and stepped with the keys. */
|
|
46
|
+
export interface ParallelAxisHandleProps {
|
|
47
|
+
onPointerDown: (event: PointerEvent<HTMLElement>) => void;
|
|
48
|
+
onPointerMove: (event: PointerEvent<HTMLElement>) => void;
|
|
49
|
+
onPointerUp: (event: PointerEvent<HTMLElement>) => void;
|
|
50
|
+
onPointerCancel: (event: PointerEvent<HTMLElement>) => void;
|
|
51
|
+
onKeyDown: (event: KeyboardEvent<HTMLElement>) => void;
|
|
52
|
+
tabIndex: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Move an axis by dragging its name, or by stepping it with the arrow keys.
|
|
56
|
+
* @param options - See {@link ParallelAxisDragOptions}.
|
|
57
|
+
* @returns The gesture. See {@link ParallelAxisDrag}.
|
|
58
|
+
*/
|
|
59
|
+
export declare function useParallelAxisDrag(options: ParallelAxisDragOptions): ParallelAxisDrag;
|
|
60
|
+
//# sourceMappingURL=useParallelAxisDrag.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useParallelAxisDrag.d.ts","sourceRoot":"","sources":["../../../src/parallel/ui/useParallelAxisDrag.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAGzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAOlE,8CAA8C;AAC9C,MAAM,WAAW,uBAAuB;IACtC,oDAAoD;IACpD,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC9D;AAED,uDAAuD;AACvD,MAAM,WAAW,qBAAqB;IACpC,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACrC,mCAAmC;IACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,uBAAuB,CAAC;CACtD;AAED,iFAAiF;AACjF,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC1D,aAAa,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC1D,WAAW,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACxD,eAAe,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC5D,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACvD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAYD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,CA2DlB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dragging an axis by its name to stand somewhere else.
|
|
3
|
+
*
|
|
4
|
+
* Two columns only show their relationship when they are neighbours, so the
|
|
5
|
+
* order the axes stand in is a question the reader asks, not a decision the
|
|
6
|
+
* caller takes once. The name is the handle: it is the only part of an axis
|
|
7
|
+
* that is not already spoken for by the brush, and it is what a reader reaches
|
|
8
|
+
* for anyway.
|
|
9
|
+
*
|
|
10
|
+
* The gesture moves the name and nothing else. Reordering the axes for real
|
|
11
|
+
* would repaint every line on every frame, which a library of ten thousand
|
|
12
|
+
* molecules cannot afford — so the figure shows where the axis would land and
|
|
13
|
+
* moves it once, on release.
|
|
14
|
+
*/
|
|
15
|
+
import { useRef, useState } from 'react';
|
|
16
|
+
import { parallelAxisOrder, parallelDropIndex, parallelMoveAxis, } from "../core/parallelOrder.js";
|
|
17
|
+
/** A name that has not been dragged, and is not moving anything. */
|
|
18
|
+
const IDLE = {
|
|
19
|
+
onPointerDown: noop,
|
|
20
|
+
onPointerMove: noop,
|
|
21
|
+
onPointerUp: noop,
|
|
22
|
+
onPointerCancel: noop,
|
|
23
|
+
onKeyDown: noop,
|
|
24
|
+
tabIndex: -1,
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Move an axis by dragging its name, or by stepping it with the arrow keys.
|
|
28
|
+
* @param options - See {@link ParallelAxisDragOptions}.
|
|
29
|
+
* @returns The gesture. See {@link ParallelAxisDrag}.
|
|
30
|
+
*/
|
|
31
|
+
export function useParallelAxisDrag(options) {
|
|
32
|
+
const { layouts, onAxisOrder } = options;
|
|
33
|
+
const [active, setActive] = useState(null);
|
|
34
|
+
const originRef = useRef(0);
|
|
35
|
+
function move(from, to) {
|
|
36
|
+
if (onAxisOrder === undefined)
|
|
37
|
+
return;
|
|
38
|
+
const order = parallelAxisOrder(layouts);
|
|
39
|
+
if (to < 0 || to >= order.length || to === from)
|
|
40
|
+
return;
|
|
41
|
+
onAxisOrder(parallelMoveAxis(order, from, to));
|
|
42
|
+
}
|
|
43
|
+
function dropAt(from, dx) {
|
|
44
|
+
const layout = layouts[from];
|
|
45
|
+
if (layout === undefined)
|
|
46
|
+
return from;
|
|
47
|
+
return parallelDropIndex(layout.x + dx, layouts);
|
|
48
|
+
}
|
|
49
|
+
function propsFor(index) {
|
|
50
|
+
if (onAxisOrder === undefined)
|
|
51
|
+
return IDLE;
|
|
52
|
+
return {
|
|
53
|
+
tabIndex: 0,
|
|
54
|
+
onPointerDown: (event) => {
|
|
55
|
+
if (event.button !== 0)
|
|
56
|
+
return;
|
|
57
|
+
event.preventDefault();
|
|
58
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
59
|
+
originRef.current = event.clientX;
|
|
60
|
+
setActive({ from: index, dx: 0, to: index });
|
|
61
|
+
},
|
|
62
|
+
onPointerMove: (event) => {
|
|
63
|
+
setActive((current) => {
|
|
64
|
+
if (current?.from !== index)
|
|
65
|
+
return current;
|
|
66
|
+
const dx = event.clientX - originRef.current;
|
|
67
|
+
return { from: index, dx, to: dropAt(index, dx) };
|
|
68
|
+
});
|
|
69
|
+
},
|
|
70
|
+
onPointerUp: (event) => {
|
|
71
|
+
event.currentTarget.releasePointerCapture?.(event.pointerId);
|
|
72
|
+
setActive((current) => {
|
|
73
|
+
if (current !== null && current.from === index) {
|
|
74
|
+
move(current.from, current.to);
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
});
|
|
78
|
+
},
|
|
79
|
+
onPointerCancel: () => {
|
|
80
|
+
setActive(null);
|
|
81
|
+
},
|
|
82
|
+
onKeyDown: (event) => {
|
|
83
|
+
const step = event.key === 'ArrowLeft' ? -1 : event.key === 'ArrowRight' ? 1 : 0;
|
|
84
|
+
if (step === 0)
|
|
85
|
+
return;
|
|
86
|
+
event.preventDefault();
|
|
87
|
+
move(index, index + step);
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return { enabled: onAxisOrder !== undefined, active, propsFor };
|
|
92
|
+
}
|
|
93
|
+
function noop() {
|
|
94
|
+
// A figure whose axes are fixed hands its names no handlers at all.
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=useParallelAxisDrag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useParallelAxisDrag.js","sourceRoot":"","sources":["../../../src/parallel/ui/useParallelAxisDrag.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,10 +29,15 @@ export interface ParallelGestureOptions {
|
|
|
29
29
|
included: Uint8Array | null;
|
|
30
30
|
/** The intervals in force, whoever owns them. */
|
|
31
31
|
ranges: ParallelRanges;
|
|
32
|
-
/**
|
|
33
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Whether one axis may keep several intervals at once.
|
|
34
|
+
* @default false
|
|
35
|
+
*/
|
|
36
|
+
several?: boolean | undefined;
|
|
37
|
+
/** Called when a brush is released, with every interval that axis now keeps. */
|
|
38
|
+
onRangeChange: (axisId: string, ranges: readonly ParallelRange[]) => void;
|
|
34
39
|
/** Called on every frame a band grows. */
|
|
35
|
-
onRangePreview?: ((axisId: string,
|
|
40
|
+
onRangePreview?: ((axisId: string, ranges: readonly ParallelRange[]) => void) | undefined;
|
|
36
41
|
/** The row the caller says is hovered, if it owns that. */
|
|
37
42
|
hovered?: number | undefined;
|
|
38
43
|
/** Called with the row under the pointer, or `-1`. */
|
|
@@ -46,8 +51,8 @@ export interface ParallelGesture {
|
|
|
46
51
|
surface: ScatterSurfaceProps;
|
|
47
52
|
/** Put on the same rectangle, for the click that picks a line. */
|
|
48
53
|
onClick: (event: ReactMouseEvent<Element>) => void;
|
|
49
|
-
/** The
|
|
50
|
-
bands: ReadonlyMap<string, ParallelBand>;
|
|
54
|
+
/** The bands to draw on each axis, the one being dragged included. */
|
|
55
|
+
bands: ReadonlyMap<string, ParallelBand[]>;
|
|
51
56
|
/** The row under the pointer, or `-1`. */
|
|
52
57
|
hovered: number;
|
|
53
58
|
/** Where the pointer is in the figure, or `null` when it is away. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useParallelGesture.d.ts","sourceRoot":"","sources":["../../../src/parallel/ui/useParallelGesture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,OAAO,CAAC;AAG3D,OAAO,KAAK,EACV,mBAAmB,EAEpB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EAAE,YAAY,EAAqB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"useParallelGesture.d.ts","sourceRoot":"","sources":["../../../src/parallel/ui/useParallelGesture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,OAAO,CAAC;AAG3D,OAAO,KAAK,EACV,mBAAmB,EAEpB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EAAE,YAAY,EAAqB,MAAM,0BAA0B,CAAC;AAQhF,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAW9E,6CAA6C;AAC7C,MAAM,WAAW,sBAAsB;IACrC,oCAAoC;IACpC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC,6CAA6C;IAC7C,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAC;IAC5B,iDAAiD;IACjD,MAAM,EAAE,cAAc,CAAC;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,gFAAgF;IAChF,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,aAAa,EAAE,KAAK,IAAI,CAAC;IAC1E,0CAA0C;IAC1C,cAAc,CAAC,EACb,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,aAAa,EAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3E,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,sDAAsD;IACtD,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtD,6EAA6E;IAC7E,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACpD;AAED,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,kEAAkE;IAClE,OAAO,EAAE,mBAAmB,CAAC;IAC7B,kEAAkE;IAClE,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACnD,sEAAsE;IACtE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAC3C,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,OAAO,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzC,iDAAiD;IACjD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CAmJjB"}
|