packages/core/src/features/viz/inspection/capture.ts
This is the source snapshot used to build these API details. View this revision on GitHub.
1 import { invertNumericPosition } from "../lib/series-position.js";
2 import { useRenderedRef } from "./owned-ref.js";
3 import type { HoverSeries } from "../lib/hover-types.js";
4 import type {
5 NumericSeriesCapture,
6 NumericInspectionRef,
7 PointInspectionRef,
8 PointRenderedSeries,
9 } from "./capture-types.js";
10
11 function useCapture<D>(): PointInspectionRef<D> {
12 return useRenderedRef<NumericSeriesCapture<D>, PointRenderedSeries<D>>(
13 "numericSeriesInspection",
14 (candidate, geometry) => {
15 const rows = candidate.observations.map((row) =>
16 Object.freeze({
17 ...row,
18 anchorLocal: Object.freeze({ ...row.anchorLocal }),
19 anchorRoot: geometry.rootAtLocal(row.anchorLocal),
20 }),
21 );
22 return Object.freeze({
23 observations: Object.freeze(rows),
24 marks: Object.freeze(candidate.observations.slice()),
25 assertLive: geometry.assertLive,
26 localAtRoot: geometry.localAtRoot,
27 anchorInsideClips: geometry.anchorInsideClips,
28 domainXAtRoot(point: Readonly<{ x: number; y: number }>) {
29 const local = geometry.localAtRoot(point);
30 return local
31 ? invertNumericPosition(candidate.xScale, local.x)
32 : undefined;
33 },
34 anchorAtDomain(point: Readonly<{ domainX: number; domainY: number }>) {
35 geometry.assertLive();
36 const anchorLocal = Object.freeze({
37 x: candidate.xScale.map(point.domainX),
38 y: candidate.yScale.map(point.domainY),
39 });
40 return Object.freeze({
41 anchorLocal,
42 anchorRoot: geometry.rootAtLocal(anchorLocal),
43 });
44 },
45 });
46 },
47 );
48 }
49
50 /**
51 * Owns optional numeric capture without reading signals or executing queries.
52 * @param _series - Typed descriptor used for datum inference; not observed or registered.
53 * @returns A stable mount-owned capture ref; pass it to one numeric series' inspection prop.
54 * @see {@link NumericInspectionRef}
55 */
56 export function useNumericInspection<D>(
57 _series: HoverSeries<D>,
58 ): NumericInspectionRef<D> {
59 return useCapture<D>();
60 }
61
62 /**
63 * Owns optional circle/ring capture for one PointSeries; O(n) retained geometry when enabled.
64 * @param _series - Typed descriptor used for datum inference; not observed or registered.
65 * @returns A stable point inspection ref. Rendered records are borrowed until replacement/disposal.
66 * @see {@link PointInspectionRef}
67 */
68 export function usePointInspection<D>(
69 _series: HoverSeries<D>,
70 ): PointInspectionRef<D> {
71 return useCapture<D>();
72 }
73
Documentation version
Section titled “Documentation version”Documentation built with @pibbl/core 0.0.2, revision dd39ce2. ALPHA — NOT FOR PRODUCTION USE.