semiotic 3.8.0 → 3.8.1

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.
Files changed (234) hide show
  1. package/CLAUDE.md +12 -9
  2. package/README.md +39 -39
  3. package/ai/dist/mcp-server.js +98 -17
  4. package/ai/schema.json +1 -1
  5. package/ai/surface-manifest.json +3 -2
  6. package/ai/system-prompt.md +3 -2
  7. package/dist/__tests__/scenarios/mcpProtocolTypes.d.ts +20 -0
  8. package/dist/components/AccessibleNavTree.d.ts +7 -1
  9. package/dist/components/ai/chartClinicMetadata.generated.d.ts +15 -0
  10. package/dist/components/ai/useNavigationSync.d.ts +17 -2
  11. package/dist/components/chartContainerMobile.d.ts +9 -0
  12. package/dist/components/charts/geo/ChoroplethMap.d.ts +19 -2
  13. package/dist/components/charts/geo/DistanceCartogram.d.ts +14 -2
  14. package/dist/components/charts/geo/FlowMap.d.ts +10 -6
  15. package/dist/components/charts/geo/ProportionalSymbolMap.d.ts +14 -2
  16. package/dist/components/charts/index.d.ts +6 -0
  17. package/dist/components/charts/network/ChordDiagram.d.ts +9 -1
  18. package/dist/components/charts/network/ForceDirectedGraph.d.ts +11 -0
  19. package/dist/components/charts/network/SankeyDiagram.d.ts +9 -1
  20. package/dist/components/charts/ordinal/BarChart.d.ts +21 -0
  21. package/dist/components/charts/ordinal/GroupedBarChart.d.ts +11 -0
  22. package/dist/components/charts/ordinal/StackedBarChart.d.ts +11 -0
  23. package/dist/components/charts/physics/CollisionSwarmChart.d.ts +7 -0
  24. package/dist/components/charts/physics/EventDropChart.d.ts +7 -0
  25. package/dist/components/charts/physics/GaltonBoardChart.d.ts +8 -0
  26. package/dist/components/charts/physics/PhysicsCustomChart.d.ts +4 -25
  27. package/dist/components/charts/physics/PhysicsPileChart.d.ts +7 -0
  28. package/dist/components/charts/physics/physicsChartShared.d.ts +17 -1
  29. package/dist/components/charts/physics/physicsCustomLayout.d.ts +32 -0
  30. package/dist/components/charts/shared/AnnotationLabel.d.ts +88 -0
  31. package/dist/components/charts/shared/annotationActivation.d.ts +35 -0
  32. package/dist/components/charts/shared/annotationLabelLayout.d.ts +5 -0
  33. package/dist/components/charts/shared/annotationRules.d.ts +2 -1
  34. package/dist/components/charts/shared/chartSelectionUtils.d.ts +4 -0
  35. package/dist/components/charts/shared/chartSpecCore.d.ts +3 -3
  36. package/dist/components/charts/shared/datumTypes.d.ts +2 -0
  37. package/dist/components/charts/shared/diagnoseAnnotationChecks.d.ts +2 -0
  38. package/dist/components/charts/shared/formatUtils.d.ts +3 -3
  39. package/dist/components/charts/shared/hatchFill.d.ts +87 -0
  40. package/dist/components/charts/shared/hooks.d.ts +7 -6
  41. package/dist/components/charts/shared/knownChartComponents.d.ts +9 -0
  42. package/dist/components/charts/shared/leastSquaresRegression.d.ts +16 -0
  43. package/dist/components/charts/shared/mergeShapeStyle.d.ts +3 -2
  44. package/dist/components/charts/shared/semanticInteractions.d.ts +42 -0
  45. package/dist/components/charts/shared/sparseArray.d.ts +1 -1
  46. package/dist/components/charts/shared/streamPropsHelpers.d.ts +6 -4
  47. package/dist/components/charts/shared/styleRules.d.ts +205 -0
  48. package/dist/components/charts/shared/tooltipUtils.d.ts +22 -9
  49. package/dist/components/charts/shared/types.d.ts +9 -6
  50. package/dist/components/charts/shared/useAreaSeriesSetup.d.ts +16 -2
  51. package/dist/components/charts/shared/useChartSetup.d.ts +2 -2
  52. package/dist/components/charts/shared/useCustomChartSetup.d.ts +3 -0
  53. package/dist/components/charts/shared/useFrameImperativeHandle.d.ts +1 -2
  54. package/dist/components/charts/shared/useLikertAggregation.d.ts +4 -4
  55. package/dist/components/charts/shared/useOrdinalBrush.d.ts +2 -1
  56. package/dist/components/charts/shared/useOrdinalPieceStyle.d.ts +24 -1
  57. package/dist/components/charts/shared/useStreamingLegend.d.ts +1 -1
  58. package/dist/components/charts/shared/useXYLineStyle.d.ts +10 -0
  59. package/dist/components/charts/shared/useXYPointStyle.d.ts +19 -1
  60. package/dist/components/charts/shared/validateChartData.d.ts +7 -5
  61. package/dist/components/charts/shared/validationMap.d.ts +11 -2
  62. package/dist/components/charts/shared/validationMap.generated.d.ts +6 -0
  63. package/dist/components/charts/shared/withChartWrapper.d.ts +4 -3
  64. package/dist/components/charts/value/targetPresentation.d.ts +22 -0
  65. package/dist/components/charts/value/types.d.ts +5 -6
  66. package/dist/components/charts/xy/AreaChart.d.ts +8 -0
  67. package/dist/components/charts/xy/BubbleChart.d.ts +9 -0
  68. package/dist/components/charts/xy/ConnectedScatterplot.d.ts +7 -0
  69. package/dist/components/charts/xy/DifferenceChart.d.ts +1 -52
  70. package/dist/components/charts/xy/Heatmap.d.ts +2 -2
  71. package/dist/components/charts/xy/LineChart.d.ts +11 -0
  72. package/dist/components/charts/xy/QuadrantChart.d.ts +7 -0
  73. package/dist/components/charts/xy/Scatterplot.d.ts +10 -0
  74. package/dist/components/charts/xy/StackedAreaChart.d.ts +7 -0
  75. package/dist/components/charts/xy/differenceSegments.d.ts +49 -0
  76. package/dist/components/charts/xy/scatterplotMatrixInteractionTypes.d.ts +12 -0
  77. package/dist/components/controls/SentenceFilter.d.ts +97 -0
  78. package/dist/components/data/fromVegaLite.d.ts +19 -9
  79. package/dist/components/rough/createRoughRenderMode.d.ts +46 -0
  80. package/dist/components/semiotic-ai.d.ts +3 -1
  81. package/dist/components/semiotic-controls.d.ts +2 -0
  82. package/dist/components/semiotic-geo.d.ts +4 -0
  83. package/dist/components/semiotic-network.d.ts +4 -0
  84. package/dist/components/semiotic-ordinal.d.ts +6 -0
  85. package/dist/components/semiotic-physics.d.ts +4 -0
  86. package/dist/components/semiotic-rough.d.ts +4 -0
  87. package/dist/components/semiotic-utils-core.d.ts +4 -0
  88. package/dist/components/semiotic-xy.d.ts +4 -0
  89. package/dist/components/semiotic.d.ts +9 -1
  90. package/dist/components/server/optionalImageTypes.d.ts +37 -0
  91. package/dist/components/server/serverChartConfigShared.d.ts +9 -5
  92. package/dist/components/server/serverChartConfigs.d.ts +4 -4
  93. package/dist/components/server/staticAnnotations.d.ts +6 -3
  94. package/dist/components/server/staticLegend.d.ts +1 -1
  95. package/dist/components/server/staticNetwork.d.ts +4 -4
  96. package/dist/components/server/staticSVGChrome.d.ts +2 -2
  97. package/dist/components/store/ObservationStore.d.ts +21 -1
  98. package/dist/components/stream/AccessibleDataTable.d.ts +4 -10
  99. package/dist/components/stream/AriaLiveTooltip.d.ts +9 -0
  100. package/dist/components/stream/CanvasHitTester.d.ts +4 -4
  101. package/dist/components/stream/DataSourceAdapter.d.ts +1 -1
  102. package/dist/components/stream/FrameRuntime.d.ts +57 -0
  103. package/dist/components/stream/GeoParticlePool.d.ts +1 -1
  104. package/dist/components/stream/GeoPipelineStore.d.ts +43 -12
  105. package/dist/components/stream/GeoSVGOverlay.d.ts +64 -0
  106. package/dist/components/stream/NetworkCanvasHitTester.d.ts +2 -1
  107. package/dist/components/stream/NetworkPipelineStore.d.ts +24 -21
  108. package/dist/components/stream/NetworkSSRFrame.d.ts +17 -0
  109. package/dist/components/stream/NetworkSVGOverlay.d.ts +6 -0
  110. package/dist/components/stream/OrdinalCanvasHitTester.d.ts +2 -2
  111. package/dist/components/stream/OrdinalPipelineStore.d.ts +13 -13
  112. package/dist/components/stream/OrdinalSVGOverlay.d.ts +9 -1
  113. package/dist/components/stream/OrdinalStyleResolver.d.ts +12 -0
  114. package/dist/components/stream/ParticlePool.d.ts +1 -1
  115. package/dist/components/stream/PipelineStore.d.ts +12 -16
  116. package/dist/components/stream/SVGOverlay.d.ts +6 -0
  117. package/dist/components/stream/SceneGraph.d.ts +3 -3
  118. package/dist/components/stream/accessorUtils.d.ts +2 -2
  119. package/dist/components/stream/annotationAccessorResolver.d.ts +2 -2
  120. package/dist/components/stream/frameGraphics.d.ts +4 -0
  121. package/dist/components/stream/frameKeyboardNavigation.d.ts +45 -0
  122. package/dist/components/stream/geoPipelineHelpers.d.ts +3 -3
  123. package/dist/components/stream/geoPipelineUpdateResults.d.ts +34 -0
  124. package/dist/components/stream/geoSceneBuilder.d.ts +16 -0
  125. package/dist/components/stream/geoTypes.d.ts +48 -15
  126. package/dist/components/stream/hitTestUtils.d.ts +2 -2
  127. package/dist/components/stream/hoverUtils.d.ts +4 -2
  128. package/dist/components/stream/layouts/forceLayoutWorkerClient.d.ts +1 -0
  129. package/dist/components/stream/layouts/hierarchyUtils.d.ts +2 -2
  130. package/dist/components/stream/networkCustomLayoutRunner.d.ts +23 -0
  131. package/dist/components/stream/networkCustomRestyle.d.ts +15 -0
  132. package/dist/components/stream/networkFrameAnimation.d.ts +7 -0
  133. package/dist/components/stream/networkFrameHandleTypes.d.ts +39 -0
  134. package/dist/components/stream/networkFrameObservations.d.ts +15 -0
  135. package/dist/components/stream/networkFramePaint.d.ts +11 -2
  136. package/dist/components/stream/networkInteractionTypes.d.ts +26 -0
  137. package/dist/components/stream/networkPipelineConfig.d.ts +2 -2
  138. package/dist/components/stream/networkPipelineUpdateResults.d.ts +38 -0
  139. package/dist/components/stream/networkTypes.d.ts +37 -56
  140. package/dist/components/stream/ordinalCanvasRenderers.d.ts +2 -2
  141. package/dist/components/stream/ordinalPipelineUpdateResults.d.ts +20 -1
  142. package/dist/components/stream/ordinalSceneBuilders/types.d.ts +2 -2
  143. package/dist/components/stream/ordinalTypes.d.ts +30 -3
  144. package/dist/components/stream/physics/PhysicsPipelineStore.d.ts +2 -0
  145. package/dist/components/stream/physics/PhysicsSVGOverlay.d.ts +6 -0
  146. package/dist/components/stream/physics/StreamPhysicsTypes.d.ts +21 -6
  147. package/dist/components/stream/physics/physicsFrameObservations.d.ts +19 -0
  148. package/dist/components/stream/physics/physicsFrameSetup.d.ts +4 -0
  149. package/dist/components/stream/physics/physicsPipelineUpdateResults.d.ts +19 -1
  150. package/dist/components/stream/physics/usePhysicsFrameLifecyclePolicy.d.ts +3 -1
  151. package/dist/components/stream/pipelineConfig.d.ts +4 -2
  152. package/dist/components/stream/pipelineDecay.d.ts +2 -2
  153. package/dist/components/stream/pipelinePulse.d.ts +2 -2
  154. package/dist/components/stream/pipelineStoreUpdateResults.d.ts +23 -2
  155. package/dist/components/stream/pipelineTransitions.d.ts +1 -1
  156. package/dist/components/stream/pipelineUpdateContract.d.ts +7 -0
  157. package/dist/components/stream/pipelineUpdateStore.d.ts +21 -0
  158. package/dist/components/stream/renderBackend.d.ts +27 -0
  159. package/dist/components/stream/renderers/canvasRenderHelpers.d.ts +15 -1
  160. package/dist/components/stream/renderers/geoCanvasRenderer.d.ts +3 -2
  161. package/dist/components/stream/renderers/networkParticleRenderer.d.ts +1 -1
  162. package/dist/components/stream/sceneRenderBackendTypes.d.ts +28 -0
  163. package/dist/components/stream/sceneRevisionDiagnostics.d.ts +31 -4
  164. package/dist/components/stream/streamSemanticTypes.d.ts +16 -0
  165. package/dist/components/stream/streamThemeTypes.d.ts +14 -0
  166. package/dist/components/stream/svgOverlayUtils.d.ts +10 -0
  167. package/dist/components/stream/test-utils/frameScheduler.d.ts +12 -0
  168. package/dist/components/stream/test-utils/revisionConsumption.d.ts +13 -0
  169. package/dist/components/stream/titleLayout.d.ts +31 -0
  170. package/dist/components/stream/types.d.ts +30 -65
  171. package/dist/components/stream/useCanvasFrameHost.d.ts +71 -0
  172. package/dist/components/stream/useFrame.d.ts +23 -0
  173. package/dist/components/stream/useLegendCategoryEmission.d.ts +3 -3
  174. package/dist/components/stream/useSemanticFrameInteractions.d.ts +22 -0
  175. package/dist/components/stream/useUpdateResultSnapshot.d.ts +7 -0
  176. package/dist/components/stream/xyFrameAxisTypes.d.ts +50 -0
  177. package/dist/components/stream/xySceneBuilders/types.d.ts +6 -5
  178. package/dist/controls.min.js +1 -1
  179. package/dist/controls.module.min.js +1 -1
  180. package/dist/forceLayoutWorker.js +1 -1
  181. package/dist/geo.min.js +1 -1
  182. package/dist/geo.module.min.js +1 -1
  183. package/dist/network.min.js +1 -1
  184. package/dist/network.module.min.js +1 -1
  185. package/dist/ordinal.min.js +1 -1
  186. package/dist/ordinal.module.min.js +1 -1
  187. package/dist/physics.min.js +1 -1
  188. package/dist/physics.module.min.js +1 -1
  189. package/dist/physicsWorker.js +1 -1
  190. package/dist/realtime.min.js +1 -1
  191. package/dist/realtime.module.min.js +1 -1
  192. package/dist/rough.min.js +1 -0
  193. package/dist/rough.module.min.js +1 -0
  194. package/dist/semiotic-ai-core.min.js +1 -1
  195. package/dist/semiotic-ai-core.module.min.js +1 -1
  196. package/dist/semiotic-ai.d.ts +3 -1
  197. package/dist/semiotic-ai.min.js +1 -1
  198. package/dist/semiotic-ai.module.min.js +1 -1
  199. package/dist/semiotic-controls.d.ts +2 -0
  200. package/dist/semiotic-data.min.js +1 -1
  201. package/dist/semiotic-data.module.min.js +1 -1
  202. package/dist/semiotic-experimental.min.js +1 -1
  203. package/dist/semiotic-experimental.module.min.js +1 -1
  204. package/dist/semiotic-geo.d.ts +4 -0
  205. package/dist/semiotic-network.d.ts +4 -0
  206. package/dist/semiotic-ordinal.d.ts +6 -0
  207. package/dist/semiotic-physics.d.ts +4 -0
  208. package/dist/semiotic-realtime-core.min.js +1 -1
  209. package/dist/semiotic-realtime-core.module.min.js +1 -1
  210. package/dist/semiotic-realtime-react.min.js +1 -1
  211. package/dist/semiotic-realtime-react.module.min.js +1 -1
  212. package/dist/semiotic-rough.d.ts +4 -0
  213. package/dist/semiotic-server-edge.min.js +1 -1
  214. package/dist/semiotic-server-edge.module.min.js +1 -1
  215. package/dist/semiotic-server-node.min.js +1 -1
  216. package/dist/semiotic-server-node.module.min.js +1 -1
  217. package/dist/semiotic-utils-core.d.ts +4 -0
  218. package/dist/semiotic-utils-core.min.js +1 -1
  219. package/dist/semiotic-utils-core.module.min.js +1 -1
  220. package/dist/semiotic-utils.min.js +1 -1
  221. package/dist/semiotic-utils.module.min.js +1 -1
  222. package/dist/semiotic-value.min.js +1 -1
  223. package/dist/semiotic-value.module.min.js +1 -1
  224. package/dist/semiotic-xy.d.ts +4 -0
  225. package/dist/semiotic.d.ts +9 -1
  226. package/dist/semiotic.min.js +1 -1
  227. package/dist/semiotic.module.min.js +1 -1
  228. package/dist/server.min.js +1 -1
  229. package/dist/server.module.min.js +1 -1
  230. package/dist/test-utils/capturedFrameProps.d.ts +67 -0
  231. package/dist/test-utils/frameMock.d.ts +12 -9
  232. package/dist/xy.min.js +1 -1
  233. package/dist/xy.module.min.js +1 -1
  234. package/package.json +26 -7
@@ -5,7 +5,7 @@ import type { StreamNetworkFrameProps, RealtimeEdge } from "../stream/networkTyp
5
5
  import type { StreamOrdinalFrameProps } from "../stream/ordinalTypes";
6
6
  import type { StreamGeoFrameProps } from "../stream/geoTypes";
7
7
  import type { PhysicsSettledSVGOptions } from "../stream/physics/PhysicsSettledSVG";
8
- import type { PhysicsPipelineStore } from "../stream/physics/PhysicsPipelineStore";
8
+ import type { PhysicsPipelineStore, PhysicsQueuedSpawn } from "../stream/physics/PhysicsPipelineStore";
9
9
  import type { OrdinalPipelineStore } from "../stream/OrdinalPipelineStore";
10
10
  import type { RenderEvidence } from "./renderEvidence";
11
11
  import { resolveTheme, type ThemeInput } from "./themeResolver";
@@ -14,7 +14,7 @@ import * as React from "react";
14
14
  export type FrameType = RenderEvidence["frameType"];
15
15
  export type StaticPhysicsFrameProps = PhysicsSettledSVGOptions & {
16
16
  config?: ConstructorParameters<typeof PhysicsPipelineStore>[0];
17
- initialSpawns?: Array<Record<string, unknown>>;
17
+ initialSpawns?: PhysicsQueuedSpawn[];
18
18
  projectionRows?: PhysicsSettledSVGOptions["projectionRows"];
19
19
  size?: [number, number];
20
20
  _idPrefix?: string;
@@ -6,6 +6,8 @@ interface ObservationBase {
6
6
  chartType: string;
7
7
  chartId?: string;
8
8
  }
9
+ /** Input channel that produced a semantic chart interaction. */
10
+ export type ObservationInputType = "keyboard" | "pointer" | "touch" | "navigation-tree";
9
11
  export interface HoverObservation extends ObservationBase {
10
12
  type: "hover";
11
13
  datum: Datum;
@@ -47,6 +49,24 @@ export interface ClickObservation extends ObservationBase {
47
49
  export interface ClickEndObservation extends ObservationBase {
48
50
  type: "click-end";
49
51
  }
52
+ /** A datum became the reader's active focus target. */
53
+ export interface FocusObservation extends ObservationBase {
54
+ type: "focus";
55
+ datum: Datum;
56
+ inputType: Exclude<ObservationInputType, "touch">;
57
+ }
58
+ /** A datum was deliberately activated, independent of input modality. */
59
+ export interface ActivateObservation extends ObservationBase {
60
+ type: "activate";
61
+ datum: Datum;
62
+ inputType: ObservationInputType;
63
+ }
64
+ /** A stable, interactive annotation was deliberately activated. */
65
+ export interface AnnotationActivateObservation extends ObservationBase {
66
+ type: "annotation-activate";
67
+ annotationId: string;
68
+ inputType: ObservationInputType;
69
+ }
50
70
  /**
51
71
  * Emitted when an event-time stream receives a record outside its
52
72
  * lateness/grace window (see `ReorderBuffer`). Surfaces lateness as an
@@ -66,7 +86,7 @@ export interface LateDataObservation extends ObservationBase {
66
86
  /** Running total of late events seen on this chart. */
67
87
  lateCount: number;
68
88
  }
69
- export type ChartObservation = HoverObservation | HoverEndObservation | BrushObservation | BrushEndObservation | SelectionObservation | SelectionEndObservation | ClickObservation | ClickEndObservation | ControlObservation | LateDataObservation;
89
+ export type ChartObservation = HoverObservation | HoverEndObservation | BrushObservation | BrushEndObservation | SelectionObservation | SelectionEndObservation | ClickObservation | ClickEndObservation | FocusObservation | ActivateObservation | AnnotationActivateObservation | ControlObservation | LateDataObservation;
70
90
  export type OnObservationCallback = (observation: ChartObservation) => void;
71
91
  export interface ObservationStoreState {
72
92
  /** Ring buffer of recent observations (newest last). Mutated in place for perf. */
@@ -1,8 +1,9 @@
1
1
  import * as React from "react";
2
+ import type { Datum } from "../charts/shared/datumTypes";
2
3
  import { type AccessibleSceneNode as AnySceneNode } from "./accessibleDataRows";
3
4
  export { extractAllRows } from "./accessibleDataRows";
4
5
  export type { DataRow } from "./accessibleDataRows";
5
- declare const SR_ONLY_STYLE: React.CSSProperties;
6
+ export { AriaLiveTooltip, SR_ONLY_STYLE } from "./AriaLiveTooltip";
6
7
  /**
7
8
  * Compute an aria-label describing the chart type and data shape from the scene graph.
8
9
  */
@@ -28,7 +29,7 @@ interface AccessibleDataTableProps {
28
29
  export declare function AccessibleDataTable({ scene, chartType, tableId, chartTitle }: AccessibleDataTableProps): React.JSX.Element | null;
29
30
  interface NetworkAccessibleDataTableProps {
30
31
  nodes: Array<{
31
- datum?: any;
32
+ datum?: Datum | null;
32
33
  id?: string;
33
34
  cx?: number;
34
35
  cy?: number;
@@ -36,7 +37,7 @@ interface NetworkAccessibleDataTableProps {
36
37
  y?: number;
37
38
  }>;
38
39
  edges: Array<{
39
- datum?: any;
40
+ datum?: Datum | null;
40
41
  source?: string;
41
42
  target?: string;
42
43
  }>;
@@ -62,10 +63,3 @@ export declare function ScreenReaderSummary({ summary }: {
62
63
  export declare function SkipToTableLink({ tableId }: {
63
64
  tableId: string;
64
65
  }): React.JSX.Element;
65
- /**
66
- * Visually-hidden aria-live region that mirrors tooltip text for screen readers.
67
- */
68
- export declare function AriaLiveTooltip({ hoverPoint }: {
69
- hoverPoint: any;
70
- }): React.JSX.Element;
71
- export { SR_ONLY_STYLE };
@@ -0,0 +1,9 @@
1
+ import * as React from "react";
2
+ import type { HoverData } from "../realtime/types";
3
+ export declare const SR_ONLY_STYLE: React.CSSProperties;
4
+ /** Visually-hidden aria-live region that mirrors tooltip text for screen readers. */
5
+ export declare function AriaLiveTooltip({ hoverPoint }: {
6
+ hoverPoint: Pick<HoverData, "data"> | {
7
+ data: object;
8
+ } | null;
9
+ }): React.JSX.Element;
@@ -1,17 +1,17 @@
1
- import type { SceneNode, PointSceneNode } from "./types";
1
+ import type { SceneNode, SceneDatum, PointSceneNode } from "./types";
2
+ import type { Datum } from "../charts/shared/datumTypes";
2
3
  import type { RingBuffer } from "../realtime/RingBuffer";
3
4
  import type { Quadtree } from "d3-quadtree";
4
- import type { Datum } from "../charts/shared/datumTypes";
5
5
  export interface HitResult {
6
6
  node: SceneNode;
7
- datum: any;
7
+ datum: SceneDatum;
8
8
  x: number;
9
9
  y: number;
10
10
  distance: number;
11
11
  }
12
12
  export interface XHitResult {
13
13
  node: SceneNode;
14
- datum: any;
14
+ datum: SceneDatum;
15
15
  x: number;
16
16
  y: number;
17
17
  y0?: number;
@@ -1,7 +1,7 @@
1
1
  import type { Changeset } from "./types";
2
2
  import type { Datum } from "../charts/shared/datumTypes";
3
3
  export type ChangesetCallback<T> = (changeset: Changeset<T>) => void;
4
- export declare class DataSourceAdapter<T = Datum> {
4
+ export declare class DataSourceAdapter<T extends object = Datum> {
5
5
  private callback;
6
6
  private lastBoundedData;
7
7
  private chunkTimer;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Shared timing and randomness policy for frame hosts.
3
+ *
4
+ * A runtime converts a wall clock into logical frame time. Logical time moves
5
+ * forward only while the frame is active, so a paused or hidden chart resumes
6
+ * from its previous animation state instead of fast-forwarding through the
7
+ * elapsed wall-clock interval.
8
+ */
9
+ export type FrameClock = () => number;
10
+ export type FrameRandom = () => number;
11
+ export interface FrameRuntimeOptions {
12
+ /** Monotonic wall-clock milliseconds. Defaults to performance.now/Date.now. */
13
+ clock?: FrameClock;
14
+ /** Injectable random source for tests or an embedding runtime. */
15
+ random?: FrameRandom;
16
+ /** Serializable deterministic random seed. Ignored when `random` is provided. */
17
+ seed?: number;
18
+ paused?: boolean;
19
+ visible?: boolean;
20
+ }
21
+ export interface FrameRuntimeSnapshot {
22
+ now: number;
23
+ paused: boolean;
24
+ seed?: number;
25
+ visible: boolean;
26
+ }
27
+ /** Mulberry32 is small, deterministic, and accepts the serializable integer seed surface. */
28
+ export declare function createSeededFrameRandom(seed: number): FrameRandom;
29
+ export declare class FrameRuntime {
30
+ private clock;
31
+ private lastWallTime;
32
+ private logicalTime;
33
+ private randomInput;
34
+ private randomSource;
35
+ private seedValue;
36
+ private pausedValue;
37
+ private subscribers;
38
+ private visibleValue;
39
+ /** Stable callable seam for stores and render loops. */
40
+ readonly now: () => number;
41
+ /** Stable callable seam for stochastic renderers. */
42
+ readonly random: () => number;
43
+ constructor(options?: FrameRuntimeOptions);
44
+ get isActive(): boolean;
45
+ get paused(): boolean;
46
+ get seed(): number | undefined;
47
+ get visible(): boolean;
48
+ configure(options: Pick<FrameRuntimeOptions, "clock" | "random" | "seed">): void;
49
+ setPaused(paused: boolean): void;
50
+ setVisible(visible: boolean): void;
51
+ snapshot(): FrameRuntimeSnapshot;
52
+ subscribe(listener: () => void): () => void;
53
+ private advance;
54
+ private emit;
55
+ private setClock;
56
+ private setRandomSource;
57
+ }
@@ -35,7 +35,7 @@ export declare class GeoParticlePool {
35
35
  particles: GeoParticle[];
36
36
  private capacity;
37
37
  constructor(capacity: number);
38
- spawn(lineIndex: number): GeoParticle | null;
38
+ spawn(lineIndex: number, random?: () => number): GeoParticle | null;
39
39
  /**
40
40
  * Advance all active particles.
41
41
  * @param paths - array of polyline paths, one per line index
@@ -7,8 +7,17 @@ import type { Datum } from "../charts/shared/datumTypes";
7
7
  import type { GeoLayoutResult } from "./geoCustomLayout";
8
8
  import type { CustomLayoutSelection } from "./customLayoutSelection";
9
9
  import { type CustomLayoutFailureDiagnostic } from "./customLayoutFailure";
10
- export declare class GeoPipelineStore {
10
+ import { GeoPipelineUpdateResults } from "./geoPipelineUpdateResults";
11
+ import { type UpdateResult, type UpdateResultStore } from "./pipelineUpdateStore";
12
+ export declare class GeoPipelineStore implements UpdateResultStore {
13
+ getLastUpdateResult: () => UpdateResult;
14
+ getUpdateSnapshot: () => UpdateResult;
15
+ subscribeUpdateResult: (listener: () => void) => () => void;
16
+ setLayoutSelection: (selection: CustomLayoutSelection | null) => void;
17
+ markStylePaintPending: () => void;
18
+ consumeStylePaintPending: () => boolean;
11
19
  config: GeoPipelineConfig;
20
+ protected updateResults: GeoPipelineUpdateResults;
12
21
  scene: GeoSceneNode[];
13
22
  scales: GeoScales | null;
14
23
  version: number;
@@ -55,18 +64,47 @@ export declare class GeoPipelineStore {
55
64
  private prevPositions;
56
65
  private _hasRenderedOnce;
57
66
  constructor(config: GeoPipelineConfig);
67
+ /** Keep Geo transitions and pulse lifecycle on the host's logical clock
68
+ * when one is supplied, while preserving the existing wall-clock default. */
69
+ private currentTime;
70
+ /** Resolve the one configuration-owned retention bound for both streaming
71
+ * points and flow lines. Keeping it here prevents imperative push paths
72
+ * from silently allocating a differently sized window. */
73
+ private getConfiguredWindowSize;
74
+ /** Trim the array-backed line collection only while it participates in a
75
+ * stream. Bounded `setLines` snapshots remain complete until conversion. */
76
+ private retainNewestLines;
77
+ /** Rebuild both point resources from the same retained suffix so pulse
78
+ * timestamps remain indexed to their matching point after a resize. */
79
+ private resizeStreamingWindow;
58
80
  updateConfig(config: Partial<GeoPipelineConfig>): void;
81
+ /** Additive explicit-result form of {@link updateConfig}. */
82
+ updateConfigWithResult(config: Partial<GeoPipelineConfig>): UpdateResult;
59
83
  setAreas(features: GeoJSON.Feature[]): void;
84
+ /** Additive explicit-result form of {@link setAreas}. */
85
+ setAreasWithResult(features: GeoJSON.Feature[]): UpdateResult;
60
86
  setPoints(data: Datum[]): void;
87
+ /** Additive explicit-result form of {@link setPoints}. */
88
+ setPointsWithResult(data: Datum[]): UpdateResult;
61
89
  setLines(data: Datum[]): void;
62
- /** Initialize streaming mode with a ring buffer */
90
+ /** Additive explicit-result form of {@link setLines}. */
91
+ setLinesWithResult(data: Datum[]): UpdateResult;
92
+ /**
93
+ * Enter streaming mode while retaining the newest configured window from a
94
+ * bounded snapshot. The optional legacy argument is immediately reflected
95
+ * in config so the config remains the sole owner of the active capacity.
96
+ */
63
97
  initStreaming(windowSize?: number): void;
64
98
  /** Push a single streaming point */
65
99
  pushPoint(datum: Datum): void;
100
+ /** Additive explicit-result form of {@link pushPoint}. */
101
+ pushPointWithResult(datum: Datum): UpdateResult;
66
102
  /** Push multiple streaming points */
67
103
  pushMany(data: Datum[]): void;
104
+ /** Additive explicit-result form of {@link pushMany}. */
105
+ pushManyWithResult(data: Datum[]): UpdateResult;
68
106
  /** Append a single line/flow record (coordinates pre-resolved). Lines
69
- * aren't ring-buffered the bounded set is the geography.
107
+ * use array storage, then retain the active configured window in streaming mode.
70
108
  * Mutates `lineData` in place to avoid the O(n) GC churn of an
71
109
  * array spread per push. The mutation is invisible to callers
72
110
  * because `setLines` defensive-copies on entry and `getLines`
@@ -92,15 +130,6 @@ export declare class GeoPipelineStore {
92
130
  */
93
131
  removePoint(id: string | string[]): Datum[];
94
132
  clear(): void;
95
- setLayoutSelection(selection: CustomLayoutSelection | null): void;
96
- /**
97
- * "Styles changed, repaint the data canvas without rebuilding the scene."
98
- * Set by {@link restyleScene}; consumed once per frame by the paint loop, so a
99
- * style-only selection change repaints without a projection/scene recompute.
100
- */
101
- private _stylePaintPending;
102
- /** Consume the style-only repaint signal (see {@link _stylePaintPending}). */
103
- consumeStylePaintPending(): boolean;
104
133
  restyleScene(selection: CustomLayoutSelection | null): void;
105
134
  computeScene(layout: StreamLayout): void;
106
135
  private fitProjection;
@@ -148,6 +177,8 @@ export declare class GeoPipelineStore {
148
177
  private applyCartogramTransform;
149
178
  private applyDecay;
150
179
  private applyPulse;
180
+ refreshPulse(now: number): boolean;
181
+ hasActivePulsesAt(now: number): boolean;
151
182
  get hasActivePulses(): boolean;
152
183
  private startTransition;
153
184
  /**
@@ -0,0 +1,64 @@
1
+ import type { Datum } from "../charts/shared/datumTypes";
2
+ import type { OnObservationCallback } from "../store/ObservationStore";
3
+ import { type OnAnnotationActivateCallback } from "../charts/shared/annotationActivation";
4
+ import * as React from "react";
5
+ import type { ReactNode } from "react";
6
+ import type { GradientLegendConfig, LegendGroup, LegendLayout } from "../types/legendTypes";
7
+ import { type AutoPlaceAnnotations } from "../recipes/annotationLayout";
8
+ interface GeoSVGOverlayProps {
9
+ width: number;
10
+ height: number;
11
+ totalWidth: number;
12
+ totalHeight: number;
13
+ margin: {
14
+ top: number;
15
+ right: number;
16
+ bottom: number;
17
+ left: number;
18
+ };
19
+ /**
20
+ * Geo has no Cartesian axis scale, but this remains part of the internal
21
+ * contract because StreamGeoFrame historically used it to request an empty
22
+ * accessible overlay shell.
23
+ */
24
+ showAxes?: boolean;
25
+ title?: string | ReactNode;
26
+ legend?: ReactNode | {
27
+ legendGroups: LegendGroup[];
28
+ } | {
29
+ gradient: GradientLegendConfig;
30
+ };
31
+ legendHoverBehavior?: (item: {
32
+ label: string;
33
+ } | null) => void;
34
+ legendClickBehavior?: (item: {
35
+ label: string;
36
+ }) => void;
37
+ legendHighlightedCategory?: string | null;
38
+ legendIsolatedCategories?: Set<string>;
39
+ legendPosition?: "right" | "left" | "top" | "bottom";
40
+ legendLayout?: LegendLayout;
41
+ foregroundGraphics?: ReactNode;
42
+ annotations?: Datum[];
43
+ onAnnotationActivate?: OnAnnotationActivateCallback;
44
+ onObservation?: OnObservationCallback;
45
+ chartId?: string;
46
+ chartType?: string;
47
+ autoPlaceAnnotations?: AutoPlaceAnnotations;
48
+ pointNodes?: {
49
+ pointId?: string;
50
+ x: number;
51
+ y: number;
52
+ r: number;
53
+ }[];
54
+ }
55
+ /**
56
+ * The SVG chrome used by StreamGeoFrame.
57
+ *
58
+ * Geo previously imported the Cartesian SVGOverlay even though it never
59
+ * supplies scales, marginal graphics, grids, or linked-crosshair state. Keep
60
+ * the subset Geo actually exercises here so those XY-only dependencies do not
61
+ * enter the Geo bundle.
62
+ */
63
+ export declare function GeoSVGOverlay(props: GeoSVGOverlayProps): React.JSX.Element | null;
64
+ export {};
@@ -1,8 +1,9 @@
1
1
  import type { NetworkSceneNode, NetworkSceneEdge, NetworkCircleNode } from "./networkTypes";
2
2
  import type { Quadtree } from "d3-quadtree";
3
+ import type { SceneDatum } from "./types";
3
4
  export interface NetworkHitResult {
4
5
  type: "node" | "edge";
5
- datum: any;
6
+ datum: SceneDatum;
6
7
  x: number;
7
8
  y: number;
8
9
  distance: number;
@@ -1,11 +1,13 @@
1
1
  import { ParticlePool } from "./ParticlePool";
2
2
  import type { NetworkLayoutResult, NetworkHtmlMark } from "./networkCustomLayout";
3
3
  import type { CustomLayoutSelection } from "./customLayoutSelection";
4
- import { type CustomLayoutFailureDiagnostic } from "./customLayoutFailure";
4
+ import type { CustomLayoutFailureDiagnostic } from "./customLayoutFailure";
5
5
  import type { ActiveTransition } from "./pipelineTransitionUtils";
6
6
  import { type Quadtree } from "d3-quadtree";
7
7
  import type { NetworkPipelineConfig, NetworkSceneNode, NetworkSceneEdge, NetworkCircleNode, NetworkLabel, RealtimeNode, RealtimeEdge, EdgePush } from "./networkTypes";
8
8
  import type { Datum } from "../charts/shared/datumTypes";
9
+ import { NetworkPipelineUpdateResults } from "./networkPipelineUpdateResults";
10
+ import { type UpdateResult, type UpdateResultStore } from "./pipelineUpdateStore";
9
11
  /**
10
12
  * NetworkPipelineStore — stateful store for the StreamNetworkFrame.
11
13
  *
@@ -15,7 +17,13 @@ import type { Datum } from "../charts/shared/datumTypes";
15
17
  * For bounded data: ingests nodes/edges arrays, runs layout once, builds scene.
16
18
  * For streaming data: ingests edge pushes, tracks tension, relayouts on threshold.
17
19
  */
18
- export declare class NetworkPipelineStore {
20
+ export declare class NetworkPipelineStore implements UpdateResultStore {
21
+ getLastUpdateResult: () => UpdateResult;
22
+ getUpdateSnapshot: () => UpdateResult;
23
+ subscribeUpdateResult: (listener: () => void) => () => void;
24
+ setLayoutSelection: (selection: CustomLayoutSelection | null) => void;
25
+ markStylePaintPending: () => void;
26
+ consumeStylePaintPending: () => boolean;
19
27
  nodes: Map<string, RealtimeNode>;
20
28
  edges: Map<string, RealtimeEdge>;
21
29
  tension: number;
@@ -65,6 +73,9 @@ export declare class NetworkPipelineStore {
65
73
  particlePool: ParticlePool | null;
66
74
  private config;
67
75
  private tensionConfig;
76
+ protected updateResults: NetworkPipelineUpdateResults;
77
+ /** Keep ingest, live encodings, staleness, and transitions on one clock. */
78
+ private currentTime;
68
79
  transition: ActiveTransition | null;
69
80
  private _hasRenderedOnce;
70
81
  /** Snapshot of node positions from before bounded re-ingestion cleared the maps */
@@ -97,19 +108,25 @@ export declare class NetworkPipelineStore {
97
108
  y: number;
98
109
  }> | null;
99
110
  constructor(config: NetworkPipelineConfig);
100
- updateConfig(config: NetworkPipelineConfig): void;
111
+ updateConfig(config: Partial<NetworkPipelineConfig>): void;
112
+ /** Additive explicit-result form of {@link updateConfig}. */
113
+ updateConfigWithResult(config: Partial<NetworkPipelineConfig>): UpdateResult;
101
114
  /**
102
115
  * Ingest hierarchy root data for tree/treemap/circlepack/partition layouts.
103
116
  * The hierarchy root is passed to the layout plugin via config.__hierarchyRoot.
104
117
  */
105
- ingestHierarchy(rootData: any, size: [number, number]): void;
118
+ ingestHierarchy(rootData: Datum, size: [number, number]): void;
106
119
  /**
107
120
  * Ingest bounded node/edge arrays (from props).
108
121
  * Clears existing topology and rebuilds from scratch.
109
122
  */
110
- ingestBounded(rawNodes: any[], rawEdges: any[], size: [number, number], options?: {
123
+ ingestBounded(rawNodes: Datum[], rawEdges: Datum[], size: [number, number], options?: {
111
124
  deferLayout?: boolean;
112
125
  }): void;
126
+ /** Additive explicit-result form of {@link ingestBounded}. */
127
+ ingestBoundedWithResult(rawNodes: Datum[], rawEdges: Datum[], size: [number, number], options?: {
128
+ deferLayout?: boolean;
129
+ }): UpdateResult;
113
130
  /**
114
131
  * Apply worker-computed force positions through the normal layout finalizer.
115
132
  * The force plugin still resolves edge endpoints, clamps bounds, records
@@ -129,6 +146,8 @@ export declare class NetworkPipelineStore {
129
146
  * Returns true if a relayout is needed.
130
147
  */
131
148
  ingestEdge(push: EdgePush): boolean;
149
+ /** Additive explicit-result form of {@link ingestEdge}. */
150
+ ingestEdgeWithResult(push: EdgePush): UpdateResult;
132
151
  /**
133
152
  * Run the layout algorithm via the appropriate plugin.
134
153
  */
@@ -145,13 +164,6 @@ export declare class NetworkPipelineStore {
145
164
  /**
146
165
  * Build the scene graph from current layout positions.
147
166
  */
148
- /** Update the selection the layout reads at the next `buildScene`, without
149
- * triggering a rebuild. The frame calls this on selection change; whether it
150
- * then repaints (restyle) or rebuilds is the frame's decision. */
151
- setLayoutSelection(selection: CustomLayoutSelection | null): void;
152
- /** Snapshot each mark's as-emitted style so {@link restyleScene} can re-apply
153
- * patches from the original rather than compounding. */
154
- private snapshotBaseStyles;
155
167
  /**
156
168
  * Re-apply the custom layout's `restyle`/`restyleEdge` to the existing scene
157
169
  * for `selection`, mutating styles **in place** off each mark's base style.
@@ -159,15 +171,6 @@ export declare class NetworkPipelineStore {
159
171
  * stays valid and no relayout/repack happens. The frame repaints the canvas
160
172
  * after calling this. No-op when the layout supplied no restyle callbacks.
161
173
  */
162
- /**
163
- * "Styles changed, repaint the data canvas without rebuilding the scene."
164
- * Set by {@link restyleScene}; consumed once per frame by the paint loop.
165
- * Deliberately separate from `_sceneNodesRevision` (the quadtree-invalidation
166
- * counter) so a style-only selection change repaints without a relayout.
167
- */
168
- private _stylePaintPending;
169
- /** Consume the style-only repaint signal (see {@link _stylePaintPending}). */
170
- consumeStylePaintPending(): boolean;
171
174
  restyleScene(selection: CustomLayoutSelection | null): void;
172
175
  buildScene(size: [number, number]): void;
173
176
  /**
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ import type { StreamNetworkFrameProps } from "./networkTypes";
3
+ import { NetworkPipelineStore } from "./NetworkPipelineStore";
4
+ import { NetworkSVGOverlay } from "./NetworkSVGOverlay";
5
+ interface NetworkSSRFrameProps {
6
+ props: StreamNetworkFrameProps;
7
+ store: NetworkPipelineStore | null;
8
+ responsiveRef: React.Ref<HTMLDivElement>;
9
+ size: [number, number];
10
+ margin: React.ComponentProps<typeof NetworkSVGOverlay>["margin"];
11
+ adjustedWidth: number;
12
+ adjustedHeight: number;
13
+ resolvedBackground: React.ReactNode;
14
+ resolvedForeground: React.ReactNode;
15
+ }
16
+ export declare function NetworkSSRFrame({ props, store, responsiveRef, size, margin, adjustedWidth, adjustedHeight, resolvedBackground, resolvedForeground }: NetworkSSRFrameProps): React.JSX.Element;
17
+ export {};
@@ -6,6 +6,8 @@ import type { LegendGroup, GradientLegendConfig, LegendLayout } from "../types/l
6
6
  import { type AutoPlaceAnnotations } from "../recipes/annotationLayout";
7
7
  import type { AnnotationContext } from "../realtime/types";
8
8
  import { type GlyphDef } from "./glyphDef";
9
+ import type { OnObservationCallback } from "../store/ObservationStore";
10
+ import { type OnAnnotationActivateCallback } from "../charts/shared/annotationActivation";
9
11
  type AnnotationAnchorNode = {
10
12
  type: string;
11
13
  datum: Datum | null;
@@ -75,6 +77,10 @@ export interface NetworkSVGOverlayProps {
75
77
  sceneNodes?: AnnotationAnchorNode[];
76
78
  /** Annotations */
77
79
  annotations?: Datum[];
80
+ onAnnotationActivate?: OnAnnotationActivateCallback;
81
+ onObservation?: OnObservationCallback;
82
+ chartId?: string;
83
+ chartType?: string;
78
84
  autoPlaceAnnotations?: AutoPlaceAnnotations;
79
85
  svgAnnotationRules?: (annotation: Datum, index: number, context: NetworkAnnotationContext) => ReactNode;
80
86
  annotationFrame?: number;
@@ -1,8 +1,8 @@
1
1
  import type { OrdinalSceneNode } from "./ordinalTypes";
2
- import type { PointSceneNode } from "./types";
2
+ import type { SceneDatum, PointSceneNode } from "./types";
3
3
  import type { Quadtree } from "d3-quadtree";
4
4
  export interface OrdinalHitResult {
5
- datum: any;
5
+ datum: SceneDatum;
6
6
  x: number;
7
7
  y: number;
8
8
  distance: number;
@@ -23,15 +23,22 @@ import type { ActiveTransition } from "./pipelineTransitionUtils";
23
23
  import type { OrdinalLayoutResult } from "./ordinalCustomLayout";
24
24
  import type { CustomLayoutSelection } from "./customLayoutSelection";
25
25
  import { type CustomLayoutFailureDiagnostic } from "./customLayoutFailure";
26
- import type { UpdateResult } from "./pipelineUpdateContract";
27
- export declare class OrdinalPipelineStore {
26
+ import { type UpdateResult, type UpdateResultStore } from "./pipelineUpdateStore";
27
+ import { OrdinalPipelineUpdateResults } from "./ordinalPipelineUpdateResults";
28
+ export declare class OrdinalPipelineStore implements UpdateResultStore {
29
+ getLastUpdateResult: () => UpdateResult;
30
+ getUpdateSnapshot: () => UpdateResult;
31
+ subscribeUpdateResult: (listener: () => void) => () => void;
32
+ setLayoutSelection: (selection: CustomLayoutSelection | null) => void;
33
+ markStylePaintPending: () => void;
34
+ consumeStylePaintPending: () => boolean;
28
35
  private buffer;
29
36
  private rExtent;
30
37
  /** Per-accessor extents for multiAxis mode */
31
38
  private rExtents;
32
39
  private config;
33
40
  private windowSizeWarned;
34
- private updateResults;
41
+ protected updateResults: OrdinalPipelineUpdateResults;
35
42
  private getO;
36
43
  private getR;
37
44
  /** All resolved rAccessors (length > 1 when multiAxis) */
@@ -46,9 +53,7 @@ export declare class OrdinalPipelineStore {
46
53
  private categories;
47
54
  /** True once a non-bounded (push) changeset has been ingested */
48
55
  private _hasStreamingData;
49
- /** Lazy color map built from colorScheme for resolvePieceStyle */
50
- private _colorSchemeMap;
51
- private _colorSchemeIndex;
56
+ private styleResolver;
52
57
  private timestampBuffer;
53
58
  activeTransition: ActiveTransition | null;
54
59
  private prevPositionMap;
@@ -98,6 +103,8 @@ export declare class OrdinalPipelineStore {
98
103
  * empty ring would associate later timestamps with the wrong datum index.
99
104
  */
100
105
  private syncPulseTimestampBuffer;
106
+ /** Keep ingest, pulse, staleness, and transition timestamps on one clock. */
107
+ private currentTime;
101
108
  ingest(changeset: Changeset): boolean;
102
109
  ingestWithResult(changeset: Changeset): UpdateResult;
103
110
  private pushValueExtent;
@@ -112,9 +119,6 @@ export declare class OrdinalPipelineStore {
112
119
  private getSceneContext;
113
120
  private buildSceneNodes;
114
121
  private buildLayoutContext;
115
- private resolvePieceStyle;
116
- private getColorFromScheme;
117
- private resolveSummaryStyle;
118
122
  computeDecayOpacity(bufferIndex: number, bufferSize: number): number;
119
123
  /**
120
124
  * Build (or return cached) datum→buffer-index map. Cached against
@@ -171,8 +175,6 @@ export declare class OrdinalPipelineStore {
171
175
  */
172
176
  private getBufferArray;
173
177
  getData(): Datum[];
174
- /** Most recent additive update result for revision-aware hosts and tests. */
175
- getLastUpdateResult(): UpdateResult;
176
178
  /**
177
179
  * Remove data items by ID. Requires dataIdAccessor to be configured.
178
180
  * Returns the removed items. Marks the store dirty for scene rebuild.
@@ -187,8 +189,6 @@ export declare class OrdinalPipelineStore {
187
189
  get size(): number;
188
190
  getOAccessor(): (d: Datum) => string;
189
191
  getRAccessor(): (d: Datum) => number;
190
- /** Update the selection the layout reads at the next rebuild, without one. */
191
- setLayoutSelection(selection: CustomLayoutSelection | null): void;
192
192
  private applyCustomRestyle;
193
193
  /**
194
194
  * Re-apply the custom layout's `restyle` to the existing scene for
@@ -4,6 +4,8 @@ import type { OrdinalScales } from "./ordinalTypes";
4
4
  import type { AnnotationContext } from "../realtime/types";
5
5
  import type { ReactNode } from "react";
6
6
  import type { LegendGroup, GradientLegendConfig, LegendLayout } from "../types/legendTypes";
7
+ import type { OnObservationCallback } from "../store/ObservationStore";
8
+ import { type OnAnnotationActivateCallback } from "../charts/shared/annotationActivation";
7
9
  import { type AutoPlaceAnnotations } from "../recipes/annotationLayout";
8
10
  import { type AxisExtentMode } from "../charts/shared/axisExtent";
9
11
  interface OrdinalSVGOverlayProps {
@@ -53,14 +55,20 @@ interface OrdinalSVGOverlayProps {
53
55
  legendLayout?: LegendLayout;
54
56
  foregroundGraphics?: ReactNode;
55
57
  annotations?: Datum[];
58
+ onAnnotationActivate?: OnAnnotationActivateCallback;
59
+ onObservation?: OnObservationCallback;
60
+ chartId?: string;
61
+ chartType?: string;
56
62
  autoPlaceAnnotations?: AutoPlaceAnnotations;
57
63
  svgAnnotationRules?: (annotation: Datum, index: number, context: AnnotationContext) => ReactNode;
58
64
  annotationFrame?: number;
59
65
  xAccessor?: string;
60
66
  yAccessor?: string;
61
67
  annotationData?: Datum[];
62
- /** When true, grid lines and axis baselines are skipped (rendered by OrdinalSVGUnderlay instead) */
68
+ /** When true, grid lines and axis baselines are also rendered by OrdinalSVGUnderlay. */
63
69
  underlayRendered?: boolean;
70
+ /** Whether an opaque canvas hides the SVG underlay and needs an overlay copy. */
71
+ canvasObscuresUnderlay?: boolean;
64
72
  children?: ReactNode;
65
73
  }
66
74
  interface OrdinalSVGUnderlayProps {
@@ -0,0 +1,12 @@
1
+ import type { Datum } from "../charts/shared/datumTypes";
2
+ import type { OrdinalPipelineConfig } from "./ordinalTypes";
3
+ import type { Style } from "./types";
4
+ /** Resolves ordinal mark styles while retaining stable category colors. */
5
+ export declare class OrdinalStyleResolver {
6
+ private colorSchemeMap;
7
+ private colorSchemeIndex;
8
+ resetColors(): void;
9
+ resolvePieceStyle(config: OrdinalPipelineConfig, datum: Datum | null, category?: string): Style;
10
+ resolveSummaryStyle(config: OrdinalPipelineConfig, datum: Datum | null, category?: string): Style;
11
+ private getColorFromScheme;
12
+ }