semiotic 3.8.3 → 3.8.5
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/CLAUDE.md +13 -10
- package/README.md +52 -45
- package/ai/componentMetadata.cjs +1 -1
- package/ai/dist/mcp-server.js +4 -2
- package/ai/examples.md +168 -1
- package/ai/schema.json +3756 -327
- package/ai/surface-manifest.json +6 -4
- package/ai/system-prompt.md +1 -1
- package/dist/chunk-chartContainerDataAudit-74TLKIP6.module.min.js +2 -0
- package/dist/chunk-chunk-2JGJ5GUG.module.min.js +0 -1
- package/dist/chunk-chunk-4AANPFOX.module.min.js +2 -0
- package/dist/{chunk-chunk-JNCHKRIR.module.min.js → chunk-chunk-5I3UZV4Q.module.min.js} +1 -1
- package/dist/chunk-chunk-74CCPVXB.module.min.js +1 -0
- package/dist/{chunk-chunk-VVCA3DB7.module.min.js → chunk-chunk-7ALTGHK6.module.min.js} +1 -1
- package/dist/chunk-chunk-ACLDBMRH.module.min.js +2 -0
- package/dist/chunk-chunk-AVBI6GDT.module.min.js +1 -0
- package/dist/{chunk-chunk-XQYVEKEJ.module.min.js → chunk-chunk-BANTPINB.module.min.js} +1 -1
- package/dist/chunk-chunk-C4YA6TDR.module.min.js +1 -0
- package/dist/chunk-chunk-C57LR3YG.module.min.js +1 -0
- package/dist/chunk-chunk-CKMD5NV3.module.min.js +2 -0
- package/dist/chunk-chunk-CO5KQMGH.module.min.js +1 -0
- package/dist/chunk-chunk-CWQ5YIHX.module.min.js +2 -0
- package/dist/chunk-chunk-E6TXX6MI.module.min.js +1 -0
- package/dist/{chunk-chunk-7FW6EGLP.module.min.js → chunk-chunk-I36PJ4OC.module.min.js} +1 -1
- package/dist/chunk-chunk-IY7RYD4S.module.min.js +1 -0
- package/dist/chunk-chunk-K3DMEW22.module.min.js +1 -0
- package/dist/chunk-chunk-KT2VAZMZ.module.min.js +1 -0
- package/dist/{chunk-chunk-AZJUDQRM.module.min.js → chunk-chunk-L6EA5V3G.module.min.js} +1 -1
- package/dist/{chunk-chunk-SANERMIZ.module.min.js → chunk-chunk-LJLS6DY7.module.min.js} +1 -1
- package/dist/chunk-chunk-LJPCLYSC.module.min.js +2 -0
- package/dist/chunk-chunk-LRIFN2HK.module.min.js +1 -0
- package/dist/chunk-chunk-N5DDKCCF.module.min.js +1 -0
- package/dist/chunk-chunk-NEVE562N.module.min.js +1 -0
- package/dist/chunk-chunk-NLO44TOS.module.min.js +2 -0
- package/dist/{chunk-chunk-FYY2ACNJ.module.min.js → chunk-chunk-PRDGLMJT.module.min.js} +1 -1
- package/dist/chunk-chunk-PZJ2SBLL.module.min.js +2 -0
- package/dist/chunk-chunk-QUJ6TTLY.module.min.js +1 -0
- package/dist/chunk-chunk-RBIDBUT4.module.min.js +2 -0
- package/dist/chunk-chunk-RFLAG356.module.min.js +1 -0
- package/dist/chunk-chunk-RPU4IZAV.module.min.js +2 -0
- package/dist/chunk-chunk-SKMBCFIL.module.min.js +2 -0
- package/dist/chunk-chunk-TAE7W424.module.min.js +2 -0
- package/dist/{chunk-chunk-OQTLSTGI.module.min.js → chunk-chunk-TMWIZL3K.module.min.js} +1 -1
- package/dist/chunk-chunk-TUBMTZMU.module.min.js +2 -0
- package/dist/chunk-chunk-UFFEXJQY.module.min.js +1 -0
- package/dist/chunk-chunk-XSCHTS4D.module.min.js +2 -0
- package/dist/chunk-chunk-XXWSHGPL.module.min.js +2 -0
- package/dist/chunk-chunk-ZOAQDIJO.module.min.js +1 -0
- package/dist/chunk-chunk-ZXIXAPRE.module.min.js +2 -0
- package/dist/chunk-minimapBrushOverlay-JU57U7NM.module.min.js +2 -0
- package/dist/chunk-scatterplotMatrixBrushOverlay-SDIZSN66.module.min.js +2 -0
- package/dist/chunk-statisticalOverlays-QGDLRUHX.module.min.js +1 -0
- package/dist/chunk-statisticalOverlays-T77OKLDY.module.min.js +1 -0
- package/dist/components/ChartContainer.d.ts +12 -2
- package/dist/components/ai/chartCapabilities.d.ts +2 -1
- package/dist/components/ai/chartCapabilityTypes.d.ts +19 -0
- package/dist/components/chartContainerDataAudit.d.ts +10 -0
- package/dist/components/charts/geo/ChoroplethMap.d.ts +2 -0
- package/dist/components/charts/geo/DistanceCartogram.d.ts +35 -5
- package/dist/components/charts/geo/FlowMap.d.ts +4 -0
- package/dist/components/charts/geo/ProportionalSymbolMap.d.ts +3 -1
- package/dist/components/charts/index.d.ts +1 -0
- package/dist/components/charts/network/ForceDirectedGraph.d.ts +36 -1
- package/dist/components/charts/physics/CollisionSwarmChart.d.ts +6 -1
- package/dist/components/charts/physics/CrucibleChart.capability.d.ts +8 -0
- package/dist/components/charts/physics/CrucibleChart.d.ts +63 -0
- package/dist/components/charts/physics/GaltonBoardChart.d.ts +6 -1
- package/dist/components/charts/physics/crucibleBodyRenderers.d.ts +27 -0
- package/dist/components/charts/physics/crucibleChartProps.d.ts +90 -0
- package/dist/components/charts/physics/crucibleChrome.d.ts +47 -0
- package/dist/components/charts/physics/crucibleController.d.ts +59 -0
- package/dist/components/charts/physics/crucibleEffects.d.ts +30 -0
- package/dist/components/charts/physics/cruciblePhysics.d.ts +54 -0
- package/dist/components/charts/physics/crucibleProgram.d.ts +38 -0
- package/dist/components/charts/physics/crucibleTypes.d.ts +415 -0
- package/dist/components/charts/physics/gauntletChartProps.d.ts +7 -1
- package/dist/components/charts/physics/gauntletChrome.d.ts +2 -1
- package/dist/components/charts/physics/gauntletPhysics.d.ts +19 -4
- package/dist/components/charts/physics/gauntletRuntime.d.ts +3 -0
- package/dist/components/charts/physics/physicsHocUtils.d.ts +12 -0
- package/dist/components/charts/shared/chartMode.d.ts +8 -0
- package/dist/components/charts/shared/chartSpecCore.d.ts +10 -2
- package/dist/components/charts/shared/crucibleWireSchema.d.ts +5 -0
- package/dist/components/charts/shared/diagnoseTypes.d.ts +10 -0
- package/dist/components/charts/shared/hatchPattern.d.ts +8 -3
- package/dist/components/charts/shared/knownChartComponents.d.ts +1 -1
- package/dist/components/charts/shared/lineSeriesSsr.d.ts +55 -0
- package/dist/components/charts/shared/types.d.ts +2 -2
- package/dist/components/charts/shared/validateProps.d.ts +1 -1
- package/dist/components/charts/xy/AreaChart.d.ts +10 -0
- package/dist/components/charts/xy/minimapBrushOverlay.d.ts +17 -0
- package/dist/components/charts/xy/minimapBrushOverlayLazy.d.ts +4 -0
- package/dist/components/charts/xy/scatterplotMatrixBrushOverlay.d.ts +8 -0
- package/dist/components/charts/xy/scatterplotMatrixBrushOverlayLazy.d.ts +3 -0
- package/dist/components/data/auditData.d.ts +51 -0
- package/dist/components/data/dataAuditPresentation.d.ts +18 -0
- package/dist/components/data/dataAuditSources.d.ts +9 -0
- package/dist/components/data/numericContracts.d.ts +59 -0
- package/dist/components/data/numericFieldProfiler.d.ts +23 -0
- package/dist/components/realtime/types.d.ts +5 -0
- package/dist/components/recipes/gridObservatory.d.ts +176 -0
- package/dist/components/recipes/netEnsembleLayout.d.ts +167 -0
- package/dist/components/recipes/netEnsembleOverlays.d.ts +20 -0
- package/dist/components/recipes/recipeChrome.d.ts +24 -0
- package/dist/components/recipes/sequenceLayout.d.ts +139 -0
- package/dist/components/recipes/wordTrails.d.ts +156 -0
- package/dist/components/recipes/wordTrailsProgressiveReveal.d.ts +42 -0
- package/dist/components/semiotic-ai-core.d.ts +3 -0
- package/dist/components/semiotic-ai-data-audit.d.ts +4 -0
- package/dist/components/semiotic-ai.d.ts +7 -5
- package/dist/components/semiotic-physics.d.ts +1 -0
- package/dist/components/semiotic-recipes-core.d.ts +10 -2
- package/dist/components/semiotic-utils-core.d.ts +3 -0
- package/dist/components/semiotic.d.ts +1 -1
- package/dist/components/server/renderEvidence.d.ts +27 -0
- package/dist/components/server/serverChartConfigs.d.ts +1 -0
- package/dist/components/server/serverChartConfigsPhysics.d.ts +9 -0
- package/dist/components/server/staticAnnotations.d.ts +15 -1
- package/dist/components/stream/GeoPipelineStore.d.ts +1 -0
- package/dist/components/stream/GeoSVGOverlay.d.ts +7 -0
- package/dist/components/stream/SceneToSVG.d.ts +6 -6
- package/dist/components/stream/SceneToSVGOrdinal.d.ts +12 -0
- package/dist/components/stream/geoCartogram.d.ts +7 -0
- package/dist/components/stream/geoTypes.d.ts +17 -2
- package/dist/components/stream/networkFrameHandleTypes.d.ts +4 -0
- package/dist/components/stream/networkFramePaint.d.ts +2 -0
- package/dist/components/stream/physics/PhysicsPipelineStore.d.ts +18 -2
- package/dist/components/stream/physics/PhysicsSettledSVG.d.ts +8 -0
- package/dist/components/stream/physics/physicsBodyCanvas.d.ts +7 -0
- package/dist/components/stream/physics/physicsPipelineEviction.d.ts +15 -0
- package/dist/components/stream/physics/physicsPipelineObservations.d.ts +1 -1
- package/dist/components/stream/physics/physicsPipelineQuiescence.d.ts +20 -0
- package/dist/components/stream/sceneToSVGShared.d.ts +30 -1
- package/dist/components/stream/types.d.ts +4 -0
- package/dist/components/stream/useHydration.d.ts +7 -1
- package/dist/components/stream/xySceneBuilders/candlestickScene.d.ts +1 -1
- package/dist/components/useChartContainerDataAudit.d.ts +7 -0
- package/dist/forceLayoutWorker.js +1 -1
- package/dist/geo.min.js +1 -1
- package/dist/geo.module.min.js +1 -1
- package/dist/network.min.js +1 -1
- package/dist/network.module.min.js +1 -1
- package/dist/ordinal.min.js +1 -1
- package/dist/ordinal.module.min.js +1 -1
- package/dist/physics.min.js +1 -1
- package/dist/physics.module.min.js +1 -1
- package/dist/physicsWorker.js +1 -1
- package/dist/realtime.min.js +1 -1
- package/dist/realtime.module.min.js +1 -1
- package/dist/rough.min.js +1 -1
- package/dist/rough.module.min.js +1 -1
- package/dist/semiotic-ai-core.d.ts +3 -0
- package/dist/semiotic-ai-core.min.js +1 -1
- package/dist/semiotic-ai-core.module.min.js +1 -1
- package/dist/semiotic-ai.d.ts +7 -5
- package/dist/semiotic-ai.min.js +1 -1
- package/dist/semiotic-ai.module.min.js +1 -1
- package/dist/semiotic-experimental.min.js +1 -1
- package/dist/semiotic-experimental.module.min.js +1 -1
- package/dist/semiotic-physics.d.ts +1 -0
- package/dist/semiotic-realtime-core.min.js +1 -1
- package/dist/semiotic-realtime-core.module.min.js +1 -1
- package/dist/semiotic-recipes-core.d.ts +10 -2
- package/dist/semiotic-recipes-core.min.js +1 -1
- package/dist/semiotic-recipes-core.module.min.js +1 -1
- package/dist/semiotic-recipes.min.js +1 -1
- package/dist/semiotic-recipes.module.min.js +1 -1
- package/dist/semiotic-server-edge.min.js +1 -1
- package/dist/semiotic-server-edge.module.min.js +1 -1
- package/dist/semiotic-server-node.min.js +1 -1
- package/dist/semiotic-server-node.module.min.js +1 -1
- package/dist/semiotic-utils-core.d.ts +3 -0
- package/dist/semiotic-utils-core.min.js +1 -1
- package/dist/semiotic-utils-core.module.min.js +1 -1
- package/dist/semiotic-utils.min.js +1 -1
- package/dist/semiotic-utils.module.min.js +1 -1
- package/dist/semiotic-value.module.min.js +1 -1
- package/dist/semiotic.d.ts +1 -1
- package/dist/semiotic.min.js +1 -1
- package/dist/semiotic.module.min.js +1 -1
- package/dist/server.min.js +1 -1
- package/dist/server.module.min.js +1 -1
- package/dist/xy.min.js +1 -1
- package/dist/xy.module.min.js +1 -1
- package/package.json +4 -3
- package/dist/chunk-chunk-255KDHW5.module.min.js +0 -1
- package/dist/chunk-chunk-2CCFBTQC.module.min.js +0 -2
- package/dist/chunk-chunk-2RXP3FS3.module.min.js +0 -1
- package/dist/chunk-chunk-2WVCH4PL.module.min.js +0 -1
- package/dist/chunk-chunk-4TMZXLCR.module.min.js +0 -1
- package/dist/chunk-chunk-5APBQXZA.module.min.js +0 -1
- package/dist/chunk-chunk-6HSGDMTA.module.min.js +0 -2
- package/dist/chunk-chunk-7OEOSCBP.module.min.js +0 -1
- package/dist/chunk-chunk-A63CTACR.module.min.js +0 -2
- package/dist/chunk-chunk-B6V35LMY.module.min.js +0 -2
- package/dist/chunk-chunk-BOSVL645.module.min.js +0 -2
- package/dist/chunk-chunk-CP3EN6KZ.module.min.js +0 -1
- package/dist/chunk-chunk-F25UA5HT.module.min.js +0 -1
- package/dist/chunk-chunk-FRIO6MCV.module.min.js +0 -1
- package/dist/chunk-chunk-GWSWSPXN.module.min.js +0 -1
- package/dist/chunk-chunk-I6C3KR5H.module.min.js +0 -2
- package/dist/chunk-chunk-IP2UE74X.module.min.js +0 -1
- package/dist/chunk-chunk-J3ELI22J.module.min.js +0 -1
- package/dist/chunk-chunk-J5RL6GXU.module.min.js +0 -2
- package/dist/chunk-chunk-L3H6DQCR.module.min.js +0 -2
- package/dist/chunk-chunk-M337NY6L.module.min.js +0 -1
- package/dist/chunk-chunk-M7VYYHCE.module.min.js +0 -2
- package/dist/chunk-chunk-MC35ILYP.module.min.js +0 -2
- package/dist/chunk-chunk-N72SWNBV.module.min.js +0 -1
- package/dist/chunk-chunk-OBQRFTIL.module.min.js +0 -2
- package/dist/chunk-chunk-QRIBHZYW.module.min.js +0 -1
- package/dist/chunk-chunk-SA3D43RA.module.min.js +0 -2
- package/dist/chunk-chunk-UHSZEB74.module.min.js +0 -1
- package/dist/chunk-chunk-Y6AXCRVO.module.min.js +0 -1
- package/dist/chunk-chunk-ZCNBUZPL.module.min.js +0 -2
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { BandInfo } from "./netEnsembleLayout";
|
|
3
|
+
export interface NetEnsembleOverlayOptions {
|
|
4
|
+
convergeColor: string;
|
|
5
|
+
branchColor: string;
|
|
6
|
+
edgeColor: string;
|
|
7
|
+
plot: {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
};
|
|
13
|
+
showBandLabels: boolean;
|
|
14
|
+
showExemplars: boolean;
|
|
15
|
+
showLegend: boolean;
|
|
16
|
+
textColor: string;
|
|
17
|
+
subText: string;
|
|
18
|
+
}
|
|
19
|
+
/** Render presentation-only band labels, exemplars, and the directedness key. */
|
|
20
|
+
export declare function buildNetEnsembleOverlays(bands: BandInfo[], o: NetEnsembleOverlayOptions): ReactNode;
|
|
@@ -44,6 +44,30 @@ export declare function boundsOf(points: ReadonlyArray<{
|
|
|
44
44
|
width: number;
|
|
45
45
|
height: number;
|
|
46
46
|
} | null;
|
|
47
|
+
/** Axis-aligned box with a top-left origin (chip, card, scene rect). */
|
|
48
|
+
export interface HullBox {
|
|
49
|
+
x: number;
|
|
50
|
+
y: number;
|
|
51
|
+
width: number;
|
|
52
|
+
height: number;
|
|
53
|
+
}
|
|
54
|
+
export type HullPadding = number | {
|
|
55
|
+
x?: number;
|
|
56
|
+
y?: number;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Axis-aligned hull of discrete mark boxes, with optional padding. Use this when
|
|
60
|
+
* marks are chips/cards with known extents (not just points): the result fully
|
|
61
|
+
* surrounds the marks so a stroke drawn *after* the marks reads as a true
|
|
62
|
+
* enclosure (fill under, stroke over). Returns null for an empty set.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* const hull = hullFromBoxes(chips, { x: 12, y: 10 })
|
|
67
|
+
* // overlays: fill rect (under) then marks then stroke-only rect (over)
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare function hullFromBoxes(boxes: ReadonlyArray<HullBox>, padding?: HullPadding): HullBox | null;
|
|
47
71
|
export interface BandLabelProps {
|
|
48
72
|
text: string;
|
|
49
73
|
x: number;
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sequence diagram kit — linear spines, span-arc packing, and shared-edge
|
|
3
|
+
* partition helpers for custom charts that treat a row of marks as a baseline
|
|
4
|
+
* (dependency arcs, co-reference, genomic links, alternate-hypothesis overlays).
|
|
5
|
+
*
|
|
6
|
+
* Pure / SSR-safe. Complements {@link packIntervals} (time tracks) and the
|
|
7
|
+
* edge-router kit (network S-curves): here the domain is an ordered index on a
|
|
8
|
+
* baseline and the mark is a vertical-band arc between two anchors.
|
|
9
|
+
*/
|
|
10
|
+
export interface SequenceItem {
|
|
11
|
+
/** Stable identity used as the position map key. */
|
|
12
|
+
id: string;
|
|
13
|
+
}
|
|
14
|
+
export interface SequencePosition {
|
|
15
|
+
id: string;
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
/** Zero-based order on the baseline. */
|
|
19
|
+
index: number;
|
|
20
|
+
}
|
|
21
|
+
export interface LayoutSequenceOptions {
|
|
22
|
+
width: number;
|
|
23
|
+
y: number;
|
|
24
|
+
/** @default min(74, max(34, width * 0.08)) */
|
|
25
|
+
paddingLeft?: number;
|
|
26
|
+
/** @default min(74, max(34, width * 0.08)) */
|
|
27
|
+
paddingRight?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Place ordered items evenly along a horizontal baseline. Returns a Map keyed
|
|
31
|
+
* by `id` so callers can look up either end of a span arc in O(1).
|
|
32
|
+
*/
|
|
33
|
+
export declare function layoutSequence(items: readonly SequenceItem[], options: LayoutSequenceOptions): Map<string, SequencePosition>;
|
|
34
|
+
export interface ChipStripItem extends SequenceItem {
|
|
35
|
+
/** Optional label used by the default width estimator. */
|
|
36
|
+
label?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface LayoutChipStripOptions extends LayoutSequenceOptions {
|
|
39
|
+
/** Gap between chips when packing by content width. @default 8 */
|
|
40
|
+
gap?: number;
|
|
41
|
+
/**
|
|
42
|
+
* When true (default), distribute free horizontal space evenly between chips
|
|
43
|
+
* so the strip still spans the baseline. When false, pack left-to-right.
|
|
44
|
+
*/
|
|
45
|
+
distribute?: boolean;
|
|
46
|
+
/** Override per-chip width. Defaults to {@link estimateLabelWidth} of `label`/`id`. */
|
|
47
|
+
estimateWidth?: (item: ChipStripItem, index: number) => number;
|
|
48
|
+
}
|
|
49
|
+
export interface ChipStripPosition extends SequencePosition {
|
|
50
|
+
/** Chip width in px (for hulls / hit targets). */
|
|
51
|
+
width: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Place ordered chips along a baseline, sizing each by estimated label width.
|
|
55
|
+
* Prefer {@link layoutSequence} when marks are equal-spaced points rather than
|
|
56
|
+
* variable-width chips.
|
|
57
|
+
*/
|
|
58
|
+
export declare function layoutChipStrip(items: readonly ChipStripItem[], options: LayoutChipStripOptions): Map<string, ChipStripPosition>;
|
|
59
|
+
/**
|
|
60
|
+
* Rough text width for chip / arc labels. Matches the heuristic used by the
|
|
61
|
+
* sentence-structure stage and is good enough for layout before paint.
|
|
62
|
+
*/
|
|
63
|
+
export declare function estimateLabelWidth(text: unknown, minimum?: number, charWidth?: number, pad?: number): number;
|
|
64
|
+
export interface SpanInterval {
|
|
65
|
+
/** Stable identity for the packed result. */
|
|
66
|
+
id: string;
|
|
67
|
+
/** Inclusive left index on the sequence baseline. */
|
|
68
|
+
a: number;
|
|
69
|
+
/** Inclusive right index on the sequence baseline. */
|
|
70
|
+
b: number;
|
|
71
|
+
}
|
|
72
|
+
export interface PackedSpanLevel<T extends SpanInterval = SpanInterval> {
|
|
73
|
+
span: T;
|
|
74
|
+
/** Zero-based height level (0 = closest to the baseline). */
|
|
75
|
+
level: number;
|
|
76
|
+
}
|
|
77
|
+
export interface PackSpanLevelsResult<T extends SpanInterval = SpanInterval> {
|
|
78
|
+
packed: PackedSpanLevel<T>[];
|
|
79
|
+
/** Number of distinct levels used (`maxLevel + 1`, at least 1). */
|
|
80
|
+
levelCount: number;
|
|
81
|
+
maxLevel: number;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Greedy span packing: assign each interval to the lowest level whose last
|
|
85
|
+
* right edge is already left of this span's left edge. Short spans are packed
|
|
86
|
+
* first so long arcs stack above them — the classic dependency-arc layout.
|
|
87
|
+
*
|
|
88
|
+
* Indices are treated as inclusive; a span with `a === b` is a zero-width hop.
|
|
89
|
+
*/
|
|
90
|
+
export declare function packSpanLevels<T extends SpanInterval>(spans: readonly T[]): PackSpanLevelsResult<T>;
|
|
91
|
+
export interface ScaleArcBandOptions {
|
|
92
|
+
/** Y of the sequence baseline (token line). */
|
|
93
|
+
baselineY: number;
|
|
94
|
+
/** Top of the free vertical band arcs may occupy. */
|
|
95
|
+
ceilingY: number;
|
|
96
|
+
/** From {@link packSpanLevels}. */
|
|
97
|
+
levelCount: number;
|
|
98
|
+
/** Vertical room reserved under each peak for a mid-arc label. @default 18 */
|
|
99
|
+
labelRoom?: number;
|
|
100
|
+
}
|
|
101
|
+
export interface ScaleArcBandResult {
|
|
102
|
+
/** Height of the shortest (level 0) arc above the baseline foot. */
|
|
103
|
+
arcLift: number;
|
|
104
|
+
/** Vertical spacing between successive levels. */
|
|
105
|
+
levelStep: number;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Stretch packed arc levels across the free band between `ceilingY` and the
|
|
109
|
+
* baseline so short plots are not a cramped nest under a blank canvas.
|
|
110
|
+
*/
|
|
111
|
+
export declare function scaleArcBand(options: ScaleArcBandOptions): ScaleArcBandResult;
|
|
112
|
+
export interface SpanArcPathOptions {
|
|
113
|
+
/**
|
|
114
|
+
* How far above `baselineY` the arc feet attach (keeps arcs off token chips).
|
|
115
|
+
* @default 26
|
|
116
|
+
*/
|
|
117
|
+
footLift?: number;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Quadratic span arc between two x-positions on a baseline. Pure path `d`
|
|
121
|
+
* string for SVG overlays / scene edge emission.
|
|
122
|
+
*/
|
|
123
|
+
export declare function spanArcPath(x0: number, x1: number, baselineY: number, peakY: number, options?: SpanArcPathOptions): string;
|
|
124
|
+
/**
|
|
125
|
+
* Peak y for a packed span level given band metrics from {@link scaleArcBand}.
|
|
126
|
+
*/
|
|
127
|
+
export declare function spanArcPeakY(baselineY: number, level: number, metrics: ScaleArcBandResult): number;
|
|
128
|
+
export type EdgeKeyFn<T> = (edge: T) => string;
|
|
129
|
+
/**
|
|
130
|
+
* Partition several edge lists into the shared intersection (present in every
|
|
131
|
+
* set under `keyOf`) and the per-set exclusive remainder. Used by compare views
|
|
132
|
+
* that paint common topology once and disputed links per hypothesis.
|
|
133
|
+
*
|
|
134
|
+
* Shared edges are taken from the first set (stable identity for paint keys).
|
|
135
|
+
*/
|
|
136
|
+
export declare function partitionSharedEdges<T>(edgeSets: readonly (readonly T[])[], keyOf?: EdgeKeyFn<T>): {
|
|
137
|
+
shared: T[];
|
|
138
|
+
exclusive: T[][];
|
|
139
|
+
};
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import type { OrdinalCustomLayout } from "../stream/ordinalCustomLayout";
|
|
2
|
+
import type { Datum } from "../charts/shared/datumTypes";
|
|
3
|
+
export { wordTrailsProgressiveReveal, type WordTrailsProgressiveRevealOptions } from "./wordTrailsProgressiveReveal";
|
|
4
|
+
/**
|
|
5
|
+
* Word Trails — a *quantitatively honest* word cloud.
|
|
6
|
+
*
|
|
7
|
+
* Where a classic word cloud (d3-cloud / amueller) packs words into free space
|
|
8
|
+
* with only size encoding frequency and position meaning nothing, Word Trails
|
|
9
|
+
* gives position meaning on both axes:
|
|
10
|
+
*
|
|
11
|
+
* - **columns** (x) are a category — e.g. each speaker in a debate;
|
|
12
|
+
* - **the vertical axis** (y) is an ordered value — e.g. the debate segment
|
|
13
|
+
* where the word peaked, so a word's height reads as *when* it was said;
|
|
14
|
+
* - **font size** encodes frequency/weight.
|
|
15
|
+
*
|
|
16
|
+
* Each column is laid out with greedy, largest-first placement: every word
|
|
17
|
+
* searches outward from its segment anchor for the nearest free spot, so the
|
|
18
|
+
* result is **overlap-free by construction**. A single global font scale
|
|
19
|
+
* (`scaleToFit`) shrinks every word together until it all fits — relative
|
|
20
|
+
* magnitude is preserved, nothing is clipped or dropped.
|
|
21
|
+
*
|
|
22
|
+
* The reading: scan a column top-to-bottom to follow one speaker through time;
|
|
23
|
+
* scan across a row to compare what everyone emphasised at the same moment.
|
|
24
|
+
*
|
|
25
|
+
* Inspired by Elijah Meeks's 2016 "Word Trails" debate visualization. Because
|
|
26
|
+
* placement is *box*-aware (not sprite/pixel), the layout needs no canvas text
|
|
27
|
+
* measurement — it is pure and SSR-clean.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* import { OrdinalCustomChart } from "semiotic/ordinal"
|
|
32
|
+
* import { wordTrailsLayout } from "semiotic/recipes"
|
|
33
|
+
*
|
|
34
|
+
* <OrdinalCustomChart
|
|
35
|
+
* data={terms} // [{ word, weight, speaker, segment }]
|
|
36
|
+
* layout={wordTrailsLayout}
|
|
37
|
+
* layoutConfig={{
|
|
38
|
+
* textAccessor: "word",
|
|
39
|
+
* weightAccessor: "weight",
|
|
40
|
+
* columnAccessor: "speaker",
|
|
41
|
+
* segmentAccessor: "segment",
|
|
42
|
+
* }}
|
|
43
|
+
* width={860}
|
|
44
|
+
* height={520}
|
|
45
|
+
* />
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export interface WordTrailsWordInfo {
|
|
49
|
+
/** Rendered word text. */
|
|
50
|
+
word: string;
|
|
51
|
+
/** Column containing this word. */
|
|
52
|
+
column: string;
|
|
53
|
+
/** Quantitative weight used to size this word. */
|
|
54
|
+
weight: number;
|
|
55
|
+
/** Ordered segment/time value anchoring this word vertically. */
|
|
56
|
+
segment: number;
|
|
57
|
+
/** Exact source row supplied to the chart. */
|
|
58
|
+
datum: Datum;
|
|
59
|
+
/** Index of `datum` in the chart's input data. */
|
|
60
|
+
dataIndex: number;
|
|
61
|
+
/** Index of the word's column in the final rendered column order. */
|
|
62
|
+
columnIndex: number;
|
|
63
|
+
/** Column color after `columnColor` / the chart theme has been resolved. */
|
|
64
|
+
resolvedColumnColor: string;
|
|
65
|
+
}
|
|
66
|
+
export interface WordTrailsConfig {
|
|
67
|
+
/** Field (or fn) giving the word text. */
|
|
68
|
+
textAccessor: string | ((d: Datum) => string);
|
|
69
|
+
/** Field (or fn) giving the word weight (→ font size). */
|
|
70
|
+
weightAccessor: string | ((d: Datum) => number);
|
|
71
|
+
/** Field (or fn) giving the column category (→ x band). */
|
|
72
|
+
columnAccessor: string | ((d: Datum) => string);
|
|
73
|
+
/** Field (or fn) giving the ordered segment/time value (→ pinned y). */
|
|
74
|
+
segmentAccessor: string | ((d: Datum) => number);
|
|
75
|
+
/** `[min, max]` of the segment axis. Derived from data when omitted. */
|
|
76
|
+
segmentDomain?: [number, number];
|
|
77
|
+
/** Explicit column order. Data insertion order when omitted. */
|
|
78
|
+
columnOrder?: string[];
|
|
79
|
+
/** Smallest font size, px. @default 11 */
|
|
80
|
+
minFontSize?: number;
|
|
81
|
+
/** Largest font size, px. @default 42 */
|
|
82
|
+
maxFontSize?: number;
|
|
83
|
+
/** Gap between columns, px. @default 18 */
|
|
84
|
+
columnGutter?: number;
|
|
85
|
+
/**
|
|
86
|
+
* Gap kept between word boxes, px — the density knob. `0` packs words as
|
|
87
|
+
* tightly as their glyph boxes allow (crowded, still overlap-free); larger
|
|
88
|
+
* values open the cloud up. @default 2
|
|
89
|
+
*/
|
|
90
|
+
collisionPadding?: number;
|
|
91
|
+
/**
|
|
92
|
+
* Per-word fill override. Return a color for a word (e.g. from a
|
|
93
|
+
* distinctiveness / sentiment model) or `undefined` to fall back to the
|
|
94
|
+
* column color. Same word ⇒ same color across columns if you key on the text.
|
|
95
|
+
*/
|
|
96
|
+
wordColor?: (info: WordTrailsWordInfo) => string | undefined | null;
|
|
97
|
+
/**
|
|
98
|
+
* Per-word reveal opacity. Return a value in `[0, 1]`; values are clamped,
|
|
99
|
+
* and non-finite values resolve to `0`. Every row still participates in
|
|
100
|
+
* scale-to-fit and collision placement, so changing opacity cannot move the
|
|
101
|
+
* remaining words. A resolved `0` emits neither a glyph nor an interactive
|
|
102
|
+
* hit target. By default a nonzero value multiplies the built-in weight
|
|
103
|
+
* opacity; set `weightOpacity` to `false` when this callback should be the
|
|
104
|
+
* exact rendered opacity.
|
|
105
|
+
* @default () => 1
|
|
106
|
+
*/
|
|
107
|
+
wordOpacity?: (info: WordTrailsWordInfo) => number;
|
|
108
|
+
/**
|
|
109
|
+
* Fade lower-weight words from `0.5` to `1` opacity in addition to encoding
|
|
110
|
+
* weight with font size. Disable this when opacity carries an independent
|
|
111
|
+
* variable such as recency; `wordOpacity` then controls rendered opacity
|
|
112
|
+
* exactly. @default true
|
|
113
|
+
*/
|
|
114
|
+
weightOpacity?: boolean;
|
|
115
|
+
/** Per-column label color override. Falls back to the categorical palette. */
|
|
116
|
+
columnColor?: (column: string) => string | undefined | null;
|
|
117
|
+
/** Draw the speaker/column labels along the top. @default true */
|
|
118
|
+
showColumnLabels?: boolean;
|
|
119
|
+
/** Draw the segment/time value axis on the left. @default true */
|
|
120
|
+
showSegmentAxis?: boolean;
|
|
121
|
+
/** Approx. number of ticks on the segment axis. @default 6 */
|
|
122
|
+
segmentTickCount?: number;
|
|
123
|
+
/** Formats a segment value for the axis + tooltip. @default String */
|
|
124
|
+
segmentTickFormat?: (v: number) => string;
|
|
125
|
+
/** Title shown above the segment axis (e.g. "Debate segment"). */
|
|
126
|
+
segmentAxisLabel?: string;
|
|
127
|
+
/**
|
|
128
|
+
* Max rotation magnitude, degrees. Each word gets a deterministic angle in
|
|
129
|
+
* `[-rotate, +rotate]`. `0` keeps every word horizontal (most legible).
|
|
130
|
+
* @default 0
|
|
131
|
+
*/
|
|
132
|
+
rotate?: number;
|
|
133
|
+
/**
|
|
134
|
+
* Allow the same word to appear more than once in a column. When `false`
|
|
135
|
+
* (default), duplicate `(column, word)` rows are merged to a single entry at
|
|
136
|
+
* the row with the greatest weight (its peak) — the classic word-cloud
|
|
137
|
+
* reading. When `true`, every row is kept, so a word can trail down its
|
|
138
|
+
* column once per segment it appeared in. @default false
|
|
139
|
+
*/
|
|
140
|
+
repeatWords?: boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Uniformly shrink every word by one global factor until nothing overlaps.
|
|
143
|
+
* Relative magnitude is preserved (a word twice as frequent stays twice the
|
|
144
|
+
* area) — only the absolute scale drops as words are added. Turn it off to
|
|
145
|
+
* keep exact `minFontSize`/`maxFontSize` sizing and accept overlap.
|
|
146
|
+
* @default true
|
|
147
|
+
*/
|
|
148
|
+
scaleToFit?: boolean;
|
|
149
|
+
/**
|
|
150
|
+
* Target fraction of each column's area filled by word boxes before the
|
|
151
|
+
* global scale is reduced. Lower packs looser (more whitespace); higher
|
|
152
|
+
* starts larger and lets the greedy placer crowd words in. @default 0.6
|
|
153
|
+
*/
|
|
154
|
+
packingDensity?: number;
|
|
155
|
+
}
|
|
156
|
+
export declare const wordTrailsLayout: OrdinalCustomLayout<WordTrailsConfig>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { WordTrailsConfig } from "./wordTrails";
|
|
2
|
+
/** Options for a stable, progressive Word Trails reveal. */
|
|
3
|
+
export interface WordTrailsProgressiveRevealOptions {
|
|
4
|
+
/** Segment that is currently active/reached. Values are clamped to `segmentDomain`. */
|
|
5
|
+
currentSegment: number;
|
|
6
|
+
/** Ordered `[oldest, newest]` segment extent used for the fade. */
|
|
7
|
+
segmentDomain: readonly [number, number];
|
|
8
|
+
/** Opacity of the oldest reached segment. @default 0.25 */
|
|
9
|
+
oldestOpacity?: number;
|
|
10
|
+
/** Opacity of the current segment. @default 1 */
|
|
11
|
+
currentOpacity?: number;
|
|
12
|
+
/** Opacity of unreached segments. `0` hides their glyphs and hit targets. @default 0 */
|
|
13
|
+
futureOpacity?: number;
|
|
14
|
+
/** Also multiply the reveal by Word Trails' built-in weight fade. @default false */
|
|
15
|
+
combineWeightOpacity?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Build the two config fields for a stable, progressive segment reveal.
|
|
19
|
+
*
|
|
20
|
+
* Reached rows fade linearly from `oldestOpacity` at the start of the domain
|
|
21
|
+
* to `currentOpacity` at `currentSegment`; future rows use `futureOpacity`.
|
|
22
|
+
* Word Trails still lays out zero-opacity rows, so playback changes visibility
|
|
23
|
+
* without reflow. The returned config disables the independent weight-opacity
|
|
24
|
+
* encoding unless `combineWeightOpacity` is explicitly enabled.
|
|
25
|
+
*
|
|
26
|
+
* This is the Word Trails composition counterpart to the runtime-neutral
|
|
27
|
+
* `opacityFromAge` helper: it keeps the same linear newest-to-oldest reading,
|
|
28
|
+
* then adds future hiding, layout reservation, and exact weight-opacity
|
|
29
|
+
* semantics without making the recipes entry point depend on a motion runtime.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```tsx
|
|
33
|
+
* layoutConfig={{
|
|
34
|
+
* ...config,
|
|
35
|
+
* ...wordTrailsProgressiveReveal({
|
|
36
|
+
* currentSegment: iteration,
|
|
37
|
+
* segmentDomain: [0, lastIteration]
|
|
38
|
+
* })
|
|
39
|
+
* }}
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare function wordTrailsProgressiveReveal(options: WordTrailsProgressiveRevealOptions): Pick<WordTrailsConfig, "wordOpacity" | "weightOpacity">;
|
|
@@ -18,6 +18,9 @@ export { toConfig, fromConfig, toURL, fromURL, copyConfig, configToJSX } from ".
|
|
|
18
18
|
export type { ChartConfig, ToConfigOptions, CopyFormat } from "./export/chartConfig";
|
|
19
19
|
export { summarizeData } from "./data/DataSummarizer";
|
|
20
20
|
export type { DataSummary, FieldSummary, FieldType, SummarizeOptions } from "./data/DataSummarizer";
|
|
21
|
+
export { auditData, formatDataAudit, profileNumericFields, toDataAuditNotifications, } from "./data/auditData";
|
|
22
|
+
export type { AuditDataOptions, CheckedNumericContract, DataAuditChartNotification, DataAuditDiagnosis, DataAuditNotificationOptions, DataAuditResult, NumericFieldProfile, ProfileNumericFieldsOptions, } from "./data/auditData";
|
|
23
|
+
export type { NumericAggregateContract, NumericContracts, NumericFieldContract, NumericFieldRole, NumericRequirement, } from "./data/numericContracts";
|
|
21
24
|
export { profileData } from "./ai/profileData";
|
|
22
25
|
export type { ProfileDataOptions } from "./ai/profileData";
|
|
23
26
|
export { inferIntent } from "./ai/inferIntent";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { auditData, formatDataAudit, profileNumericFields, toDataAuditNotifications, } from "./data/auditData";
|
|
2
|
+
export type { AuditDataOptions, CheckedNumericContract, DataAuditChartNotification, DataAuditDiagnosis, DataAuditNotificationOptions, DataAuditResult, NumericFieldProfile, ProfileNumericFieldsOptions, } from "./data/auditData";
|
|
3
|
+
export type { NumericAggregateContract, NumericContracts, NumericFieldContract, NumericFieldRole, NumericRequirement, } from "./data/numericContracts";
|
|
4
|
+
export type { ChartContainerDataAudit, ChartContainerDataAuditOptions, } from "./chartContainerDataAudit";
|
|
@@ -50,6 +50,7 @@ export { CollisionSwarmChart } from "./charts/physics/CollisionSwarmChart";
|
|
|
50
50
|
export { PhysicalFlowChart } from "./charts/physics/PhysicalFlowChart";
|
|
51
51
|
export { ProcessFlowChart } from "./charts/physics/ProcessFlowChart";
|
|
52
52
|
export { GauntletChart } from "./charts/physics/GauntletChart";
|
|
53
|
+
export { CrucibleChart } from "./charts/physics/CrucibleChart";
|
|
53
54
|
export { BigNumber } from "./charts/value/BigNumber";
|
|
54
55
|
export { TooltipProvider } from "./store/TooltipStore";
|
|
55
56
|
export { MultiLineTooltip } from "./Tooltip/Tooltip";
|
|
@@ -59,10 +60,10 @@ export { ChartContainer } from "./ChartContainer";
|
|
|
59
60
|
export { MobileChartContainer } from "./MobileChartContainer";
|
|
60
61
|
export { SmallMultipleChart } from "./SmallMultipleChart";
|
|
61
62
|
export { MobileStandardControls } from "./MobileStandardControls";
|
|
62
|
-
export { clampMobileRange, useMobileRangeControls, zoomMobileRange
|
|
63
|
+
export { clampMobileRange, useMobileRangeControls, zoomMobileRange } from "./MobileStandardControls";
|
|
63
64
|
export type { ChartContainerProps, ChartContainerHandle, ChartContainerMobileOptions, ChartNotification, ChartNotificationLevel } from "./ChartContainer";
|
|
64
65
|
export type { MobileChartChip, MobileChartContainerProps, MobileChartDetailMode } from "./MobileChartContainer";
|
|
65
|
-
export type { MobileStandardBrushControls, MobileStandardControlKind, MobileStandardControlLegendItem, MobileStandardControlRequest, MobileStandardControlsMode, MobileStandardControlsProps, MobileStandardLegendControls, MobileStandardZoomControls, UseMobileRangeControlsOptions, UseMobileRangeControlsResult
|
|
66
|
+
export type { MobileStandardBrushControls, MobileStandardControlKind, MobileStandardControlLegendItem, MobileStandardControlRequest, MobileStandardControlsMode, MobileStandardControlsProps, MobileStandardLegendControls, MobileStandardZoomControls, UseMobileRangeControlsOptions, UseMobileRangeControlsResult } from "./MobileStandardControls";
|
|
66
67
|
export type { SmallMultipleChartProps, SmallMultipleExtent, SmallMultipleItem, SmallMultipleRenderContext, SmallMultipleSharedExtent } from "./SmallMultipleChart";
|
|
67
68
|
export { ChartGrid } from "./ChartGrid";
|
|
68
69
|
export type { ChartGridProps } from "./ChartGrid";
|
|
@@ -76,8 +77,8 @@ export { validateProps } from "./charts/shared/validateProps";
|
|
|
76
77
|
export type { ValidationResult } from "./charts/shared/validateProps";
|
|
77
78
|
export { diagnoseConfig } from "./charts/shared/diagnoseConfig";
|
|
78
79
|
export type { Diagnosis, DiagnosisResult } from "./charts/shared/diagnoseConfig";
|
|
79
|
-
export { diagnoseTokenEncoding, normalizeTokenEncoding, suggestTokenEncoding, tokenTaskIntentToCapabilityIntents
|
|
80
|
-
export type { PositionedToken, SuggestTokenEncodingInput, TokenCapabilityIntent, TokenCountStrategy, TokenDiagnostic, TokenDiagnosticCode, TokenDiagnosticsContext, TokenEncoding, TokenEncodingSuggestion, TokenGeneratorInput, TokenGridOptions, TokenLabelPolicy, TokenLayout, TokenSemantics, TokenSet, TokenTaskIntent, TokenType, VisualToken
|
|
80
|
+
export { diagnoseTokenEncoding, normalizeTokenEncoding, suggestTokenEncoding, tokenTaskIntentToCapabilityIntents } from "./recipes/tokenEncoding";
|
|
81
|
+
export type { PositionedToken, SuggestTokenEncodingInput, TokenCapabilityIntent, TokenCountStrategy, TokenDiagnostic, TokenDiagnosticCode, TokenDiagnosticsContext, TokenEncoding, TokenEncodingSuggestion, TokenGeneratorInput, TokenGridOptions, TokenLabelPolicy, TokenLayout, TokenSemantics, TokenSet, TokenTaskIntent, TokenType, VisualToken } from "./recipes/tokenEncoding";
|
|
81
82
|
export { auditAccessibility, formatAccessibilityAudit, accessibilityCaveats } from "./charts/shared/auditAccessibility";
|
|
82
83
|
export { auditMobileVisualization, formatMobileVisualizationAudit, mobileVisualizationCaveats } from "./charts/shared/auditMobileVisualization";
|
|
83
84
|
export { responsiveRuleMatches, resolveResponsiveRules } from "./charts/shared/responsiveRules";
|
|
@@ -112,6 +113,7 @@ export type { AccessibleNavTreeProps } from "./AccessibleNavTree";
|
|
|
112
113
|
export { useNavigationSync } from "./ai/useNavigationSync";
|
|
113
114
|
export type { UseNavigationSyncOptions, UseNavigationSyncResult } from "./ai/useNavigationSync";
|
|
114
115
|
export type { DataSummary, FieldSummary, FieldType, NumericFieldSummary, DateFieldSummary, CategoricalFieldSummary, UnknownFieldSummary, SummarizeOptions } from "./data/DataSummarizer";
|
|
116
|
+
export * from "./semiotic-ai-data-audit";
|
|
115
117
|
export { profileData } from "./ai/profileData";
|
|
116
118
|
export type { ProfileDataOptions } from "./ai/profileData";
|
|
117
119
|
export { suggestCharts, suggestChartsGrouped, scoreChart, explainCapabilityFit } from "./ai/suggestCharts";
|
|
@@ -154,7 +156,7 @@ export type { RecipeNavigationOptions } from "./ai/recipeNavigation";
|
|
|
154
156
|
export { auditObservedScene } from "./ai/observedSceneAudit";
|
|
155
157
|
export type { AuditObservedSceneInput, DeclaredRecipeSemantics, ObservedAuditFinding, ObservedAuditStatus, ObservedSceneAuditResult } from "./ai/observedSceneAudit";
|
|
156
158
|
export { auditVisualizationControls } from "./controls/controlAudit";
|
|
157
|
-
export type { AuditVisualizationControlsOptions, ControlAuditFinding, ControlAuditResult, ControlAuditStatus
|
|
159
|
+
export type { AuditVisualizationControlsOptions, ControlAuditFinding, ControlAuditResult, ControlAuditStatus } from "./controls/controlAudit";
|
|
158
160
|
export type { VisualizationControlDefinition } from "./controls/controlContract";
|
|
159
161
|
export { IntentMark } from "./ai/IntentMark";
|
|
160
162
|
export type { IntentMarkProps } from "./ai/IntentMark";
|
|
@@ -25,6 +25,7 @@ export { BuiltInPhysicsEngineAdapter, CollisionSwarmChart, EventDropChart, Gaunt
|
|
|
25
25
|
export default StreamPhysicsFrame;
|
|
26
26
|
export type { CollisionSwarmChartProps } from "./charts/physics/CollisionSwarmChart";
|
|
27
27
|
export type { EventDropChartProps } from "./charts/physics/EventDropChart";
|
|
28
|
+
export * from "./charts/physics/CrucibleChart";
|
|
28
29
|
export type { GauntletChartProps, GauntletEffect, GauntletEvent, GauntletEventContext, GauntletEventLogItem, GauntletGate, GauntletLayout, GauntletNegativeReplacementOptions, GauntletPopSpec, GauntletProjectPlacement, GauntletProjectState, GauntletPropertyForceContext, GauntletPropertyDefinition, GauntletPropertyWorkPlan, GauntletPropertyWorkPlanOptions } from "./charts/physics/GauntletChart";
|
|
29
30
|
export type { PhysicsProcessBodyGroup, PhysicsProcessBoundaryOptions, PhysicsProcessStage } from "./charts/physics/physicsProcessPrimitives";
|
|
30
31
|
export type { GaltonBoardChartProps, GaltonBoardReferenceLine } from "./charts/physics/GaltonBoardChart";
|
|
@@ -25,6 +25,8 @@ export { lineageDagLayout } from "./recipes/lineageDag";
|
|
|
25
25
|
export type { LineageDagConfig, LineageLod, LineageStoreSlot } from "./recipes/lineageDag";
|
|
26
26
|
export { mermaidDagLayout } from "./recipes/mermaidDag";
|
|
27
27
|
export type { MermaidDagConfig } from "./recipes/mermaidDag";
|
|
28
|
+
export { netEnsembleLayout, analyzeNetEnsemble } from "./recipes/netEnsembleLayout";
|
|
29
|
+
export type { NetEnsembleConfig, NetEnsembleAnalysis, NetEnsembleComponent, NetEnsembleMotif, } from "./recipes/netEnsembleLayout";
|
|
28
30
|
export { packedClusterMatrix } from "./recipes/packedClusterMatrix";
|
|
29
31
|
export type { PackedClusterMatrixConfig } from "./recipes/packedClusterMatrix";
|
|
30
32
|
export { marimekkoLayout } from "./recipes/marimekko";
|
|
@@ -39,10 +41,14 @@ export { annotationLayout } from "./recipes/annotationLayout";
|
|
|
39
41
|
export type { AnnotationLayoutConfig, AnnotationLayoutOptions, AutoPlaceAnnotations, AutoPlaceAnnotationsConfig, AnnotationCohesion, AnnotationAudience, AnnotationMobileConfig, } from "./recipes/annotationLayout";
|
|
40
42
|
export { annotationDensity, annotationBudget, DEFAULT_AREA_PER_ANNOTATION } from "./recipes/annotationDensity";
|
|
41
43
|
export type { AnnotationDensityConfig, AnnotationDensityOptions, AnnotationDensityResult, } from "./recipes/annotationDensity";
|
|
44
|
+
export { GRID_FUEL_KEYS, GRID_FUEL_LABELS, stackFuelSeries, demandForecastRows, reserveMarginPct, reserveSeries, thresholdBandsForReserve, reserveAnnotationBands, summarizeOperatingPoint, gridEventAnnotations, tightestHours, formatMw, formatReservePct, } from "./recipes/gridObservatory";
|
|
45
|
+
export type { GridFuelKey, GridHour, ReserveSnapshot, ReserveLevels, FuelStackRow, DemandForecastRow, OperatingPointSummary, GridEventWindow, } from "./recipes/gridObservatory";
|
|
42
46
|
export { intervalLanesLayout } from "./recipes/intervalLanes";
|
|
43
47
|
export type { IntervalLanesConfig } from "./recipes/intervalLanes";
|
|
44
48
|
export { axisFixedForceLayout, axisFixedForcePositions, rectCollide } from "./recipes/axisFixedForce";
|
|
45
49
|
export type { AxisFixedForceConfig, AxisFixedForceResult, PositionedNode, CollisionBox, RectCollideOptions, } from "./recipes/axisFixedForce";
|
|
50
|
+
export { wordTrailsLayout, wordTrailsProgressiveReveal } from "./recipes/wordTrails";
|
|
51
|
+
export type { WordTrailsConfig, WordTrailsProgressiveRevealOptions, WordTrailsWordInfo, } from "./recipes/wordTrails";
|
|
46
52
|
export { hitTargetPoint, hitTargetRect, networkHitTarget, geoHitTarget, geoAreaHitTarget, DEFAULT_HIT_RADIUS, } from "./stream/hitTarget";
|
|
47
53
|
export type { GeoAreaHitTargetProps, HitTargetPointProps, HitTargetRectProps, NetworkHitTargetCircleProps, NetworkHitTargetRectProps, } from "./stream/hitTarget";
|
|
48
54
|
export { runs, runLengthEncode } from "./recipes/runs";
|
|
@@ -50,6 +56,8 @@ export type { Run, RunOptions } from "./recipes/runs";
|
|
|
50
56
|
export { wrapValue, shortestArcDelta, cyclicRangeContains, selectCyclicRange } from "./recipes/cyclical";
|
|
51
57
|
export { packIntervals, activeCountOverDomain } from "./recipes/intervals";
|
|
52
58
|
export type { PackedInterval, PackIntervalsResult, PackIntervalsOptions, ActiveCount, ActiveCountOptions, } from "./recipes/intervals";
|
|
59
|
+
export { layoutSequence, layoutChipStrip, estimateLabelWidth, packSpanLevels, scaleArcBand, spanArcPath, spanArcPeakY, partitionSharedEdges, } from "./recipes/sequenceLayout";
|
|
60
|
+
export type { SequenceItem, SequencePosition, LayoutSequenceOptions, ChipStripItem, LayoutChipStripOptions, ChipStripPosition, SpanInterval, PackedSpanLevel, PackSpanLevelsResult, ScaleArcBandOptions, ScaleArcBandResult, SpanArcPathOptions, EdgeKeyFn, } from "./recipes/sequenceLayout";
|
|
53
61
|
export { polarToXY, xyToAngle, angleScale, radiusScale, ringArcPath, TAU } from "./recipes/radialCoords";
|
|
54
62
|
export type { Point, PolarOptions, AngleScaleOptions, RingArcOptions } from "./recipes/radialCoords";
|
|
55
63
|
export { curvedEdgePath, orthogonalEdgePath, boxEdgeAnchors, fanOutBend, cubicPoint, cubicTangent, cubicPath, } from "./recipes/edgeRouter";
|
|
@@ -69,8 +77,8 @@ export type { NetworkSymbolName } from "./stream/symbolPath";
|
|
|
69
77
|
export { glyphPlacement, glyphExtent, glyphFractionClipRect, DEFAULT_GLYPH_VIEWBOX, DEFAULT_GLYPH_ANCHOR, } from "./stream/glyphDef";
|
|
70
78
|
export type { GlyphDef, GlyphPart, GlyphPlacement } from "./stream/glyphDef";
|
|
71
79
|
export { isotypeInk, isotypePaper, isotypeGhost, isotypeServerGlyph, isotypeChipGlyph, isotypeBoltGlyph, isotypeBusGlyph, isotypePersonPath, isotypePersonGlyph, isotypeNetworkGlyphs, } from "./recipes/isotypeGlyphs";
|
|
72
|
-
export { roundedEnclosure, boundsOf, bandLabel, markCallout, linearAxis, hatchFill } from "./recipes/recipeChrome";
|
|
73
|
-
export type { RoundedEnclosureProps, BandLabelProps, MarkCalloutProps, CalloutConnector, LinearAxisProps, AxisOrient, HatchFillOptions, } from "./recipes/recipeChrome";
|
|
80
|
+
export { roundedEnclosure, boundsOf, hullFromBoxes, bandLabel, markCallout, linearAxis, hatchFill, } from "./recipes/recipeChrome";
|
|
81
|
+
export type { RoundedEnclosureProps, HullBox, HullPadding, BandLabelProps, MarkCalloutProps, CalloutConnector, LinearAxisProps, AxisOrient, HatchFillOptions, } from "./recipes/recipeChrome";
|
|
74
82
|
export { legendGroupsFrom, legendSwatches } from "./recipes/recipeLegend";
|
|
75
83
|
export type { LegendGroupsInput, LegendSwatch, LegendSwatchesProps } from "./recipes/recipeLegend";
|
|
76
84
|
export { buildTooltipEntries, extractTooltipDatum, formatTooltipValue, } from "./recipes/customTooltip";
|
|
@@ -20,6 +20,9 @@ export { resolveStyleRules, matchesThreshold, ruleMatches, makeRuleValueResolver
|
|
|
20
20
|
export type { StyleRule, StyleRuleStyle, StyleRuleThreshold, StyleRuleContext, StyleRulePredicate, } from "./charts/shared/styleRules";
|
|
21
21
|
export { validateProps } from "./charts/shared/validateProps";
|
|
22
22
|
export { diagnoseConfig } from "./charts/shared/diagnoseConfig";
|
|
23
|
+
export { auditData, formatDataAudit, profileNumericFields, toDataAuditNotifications, } from "./data/auditData";
|
|
24
|
+
export type { AuditDataOptions, CheckedNumericContract, DataAuditChartNotification, DataAuditDiagnosis, DataAuditNotificationOptions, DataAuditResult, NumericFieldProfile, ProfileNumericFieldsOptions, } from "./data/auditData";
|
|
25
|
+
export type { NumericAggregateContract, NumericContracts, NumericFieldContract, NumericFieldRole, NumericRequirement, } from "./data/numericContracts";
|
|
23
26
|
export { auditAccessibility, formatAccessibilityAudit, accessibilityCaveats } from "./charts/shared/auditAccessibility";
|
|
24
27
|
export { auditMobileVisualization, formatMobileVisualizationAudit, mobileVisualizationCaveats } from "./charts/shared/auditMobileVisualization";
|
|
25
28
|
export { responsiveRuleMatches, resolveResponsiveRules } from "./charts/shared/responsiveRules";
|
|
@@ -72,7 +72,7 @@ export { intentManifestFromRecipe, summarizeIntentManifest } from "./ai/intentMa
|
|
|
72
72
|
export type { IntentManifest, IntentManifestFromRecipeOptions } from "./ai/intentManifest";
|
|
73
73
|
export { useNavigationSync } from "./ai/useNavigationSync";
|
|
74
74
|
export type { UseNavigationSyncOptions, UseNavigationSyncResult } from "./ai/useNavigationSync";
|
|
75
|
-
export type { ChartContainerProps, ChartContainerHandle, ChartContainerMobileOptions, ChartNotification, ChartNotificationLevel, } from "./ChartContainer";
|
|
75
|
+
export type { ChartContainerProps, ChartContainerHandle, ChartContainerDataAudit, ChartContainerDataAuditOptions, ChartContainerMobileOptions, ChartNotification, ChartNotificationLevel, } from "./ChartContainer";
|
|
76
76
|
export type { MobileChartChip, MobileChartContainerProps, MobileChartDetailMode, } from "./MobileChartContainer";
|
|
77
77
|
export type { MobileStandardBrushControls, MobileStandardControlKind, MobileStandardControlLegendItem, MobileStandardControlRequest, MobileStandardControlsMode, MobileStandardControlsProps, MobileStandardLegendControls, MobileStandardZoomControls, UseMobileRangeControlsOptions, UseMobileRangeControlsResult, } from "./MobileStandardControls";
|
|
78
78
|
export type { MobileVisualizationContract } from "./charts/shared/auditMobileVisualization";
|
|
@@ -47,6 +47,26 @@ export interface RenderEvidence {
|
|
|
47
47
|
ariaLabel: string;
|
|
48
48
|
/** Stable warning codes (EMPTY_SCENE, NO_SCALES). */
|
|
49
49
|
warnings: string[];
|
|
50
|
+
/**
|
|
51
|
+
* The resolved margin Semiotic actually used — after auto-reservation for a
|
|
52
|
+
* legend, a title, or any other chrome that grows a side beyond the caller's
|
|
53
|
+
* input. This is ground truth for reconstructing the plot rectangle by
|
|
54
|
+
* hand (e.g. a caller hand-drawing an SSR overlay); it is exactly what the
|
|
55
|
+
* emitted SVG's `data-area` group is translated by.
|
|
56
|
+
*/
|
|
57
|
+
margin?: {
|
|
58
|
+
top: number;
|
|
59
|
+
right: number;
|
|
60
|
+
bottom: number;
|
|
61
|
+
left: number;
|
|
62
|
+
};
|
|
63
|
+
/** The plot rectangle after resolving `margin` against the outer `width`/`height`. */
|
|
64
|
+
plot?: {
|
|
65
|
+
x: number;
|
|
66
|
+
y: number;
|
|
67
|
+
width: number;
|
|
68
|
+
height: number;
|
|
69
|
+
};
|
|
50
70
|
}
|
|
51
71
|
/**
|
|
52
72
|
* Internal mutable slot threaded through the frame renderers. Only
|
|
@@ -85,6 +105,13 @@ interface BuildEvidenceInput {
|
|
|
85
105
|
edgeCount?: number;
|
|
86
106
|
legendItems?: number;
|
|
87
107
|
extraWarnings?: string[];
|
|
108
|
+
/** The resolved margin (after auto-reservation) the caller's frame used. */
|
|
109
|
+
margin?: {
|
|
110
|
+
top: number;
|
|
111
|
+
right: number;
|
|
112
|
+
bottom: number;
|
|
113
|
+
left: number;
|
|
114
|
+
};
|
|
88
115
|
}
|
|
89
116
|
/** Assemble evidence from a computed scene. Component name is stamped later
|
|
90
117
|
* by `renderChartWithEvidence`, which knows the HOC-level name. */
|
|
@@ -5,5 +5,14 @@ export declare const physicsPileChart: ChartConfig;
|
|
|
5
5
|
export declare const collisionSwarmChart: ChartConfig;
|
|
6
6
|
export declare const processFlowChart: ChartConfig;
|
|
7
7
|
export declare const gauntletChart: ChartConfig;
|
|
8
|
+
/**
|
|
9
|
+
* Static CrucibleChart renders the same deterministic ledger used by the
|
|
10
|
+
* client HOC. A replay request settles at the terminal state for SSR (the
|
|
11
|
+
* client also hydrates from that reduced-motion snapshot); snapshot mode is
|
|
12
|
+
* the one deliberate way to request an authored intermediate instant.
|
|
13
|
+
* `paused`, `playbackRate`, and `rerunMS` govern wall-clock replay only and
|
|
14
|
+
* therefore cannot alter this static semantic state.
|
|
15
|
+
*/
|
|
16
|
+
export declare const crucibleChart: ChartConfig;
|
|
8
17
|
export declare const physicalFlowChart: ChartConfig;
|
|
9
18
|
export declare const physicsCustomChart: ChartConfig;
|
|
@@ -7,6 +7,7 @@ import type { Datum, DatumValue } from "../charts/shared/datumTypes";
|
|
|
7
7
|
*/
|
|
8
8
|
import * as React from "react";
|
|
9
9
|
import type { SemioticTheme } from "../store/ThemeStore";
|
|
10
|
+
import type { AnnotationContext } from "../realtime/types";
|
|
10
11
|
import { type AutoPlaceAnnotations } from "../recipes/annotationLayout";
|
|
11
12
|
interface AnnotationScales {
|
|
12
13
|
x?: AnnotationScale;
|
|
@@ -27,7 +28,9 @@ interface AnnotationScales {
|
|
|
27
28
|
}
|
|
28
29
|
type AnnotationScale = {
|
|
29
30
|
bivarianceHack(value: DatumValue): number;
|
|
30
|
-
}["bivarianceHack"]
|
|
31
|
+
}["bivarianceHack"] & {
|
|
32
|
+
domain?: () => DatumValue[];
|
|
33
|
+
};
|
|
31
34
|
interface AnnotationLayout {
|
|
32
35
|
width: number;
|
|
33
36
|
height: number;
|
|
@@ -44,6 +47,17 @@ export interface StaticAnnotationConfig {
|
|
|
44
47
|
yAccessor?: string;
|
|
45
48
|
/** Ordinal projection — determines whether r maps to x or y */
|
|
46
49
|
projection?: "vertical" | "horizontal" | "radial";
|
|
50
|
+
/**
|
|
51
|
+
* Custom SVG annotation renderer — same contract as the client
|
|
52
|
+
* `svgAnnotationRules` frame prop. When present, each annotation is
|
|
53
|
+
* offered to this rule first; returning `null`/`undefined` falls through
|
|
54
|
+
* to the built-in static type handlers. Without this, custom middle-
|
|
55
|
+
* marker / bulb overlays (and any other non-built-in annotation type)
|
|
56
|
+
* silently vanished from `renderChart` SVG.
|
|
57
|
+
*/
|
|
58
|
+
svgAnnotationRules?: (annotation: Datum, index: number, context: AnnotationContext) => React.ReactNode;
|
|
59
|
+
/** Chart data forwarded into the AnnotationContext for custom rules. */
|
|
60
|
+
annotationData?: Datum[];
|
|
47
61
|
}
|
|
48
62
|
/**
|
|
49
63
|
* Render annotations as static SVG elements.
|