semiotic 3.8.0 → 3.8.2
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 +14 -9
- package/README.md +56 -55
- package/ai/behaviorContracts.cjs +9 -0
- package/ai/dist/mcp-server.js +240 -30
- package/ai/schema.json +616 -42
- package/ai/surface-manifest.json +3 -2
- package/ai/system-prompt.md +7 -3
- package/dist/__tests__/scenarios/mcpProtocolTypes.d.ts +20 -0
- package/dist/chunk-OrdinalBrushOverlay-PXHQYDB2.module.min.js +2 -0
- package/dist/chunk-XYBrushOverlay-ECZJJLAJ.module.min.js +1 -0
- package/dist/chunk-XYBrushOverlay-EP2SV3UI.module.min.js +2 -0
- package/dist/chunk-chunk-255KDHW5.module.min.js +1 -0
- package/dist/chunk-chunk-27HVVXS6.module.min.js +1 -0
- package/dist/chunk-chunk-2CXCXRB4.module.min.js +1 -0
- package/dist/chunk-chunk-2JGJ5GUG.module.min.js +2 -0
- package/dist/chunk-chunk-2UN3ANRN.module.min.js +2 -0
- package/dist/chunk-chunk-2VUEY5TH.module.min.js +1 -0
- package/dist/chunk-chunk-2WVCH4PL.module.min.js +1 -0
- package/dist/chunk-chunk-5UKL5W76.module.min.js +2 -0
- package/dist/chunk-chunk-5WEFWNUW.module.min.js +2 -0
- package/dist/chunk-chunk-6F6GEAQU.module.min.js +1 -0
- package/dist/chunk-chunk-7LHMKRKE.module.min.js +2 -0
- package/dist/chunk-chunk-BHYTYMY2.module.min.js +2 -0
- package/dist/chunk-chunk-C6EJ4IOD.module.min.js +2 -0
- package/dist/chunk-chunk-CA3YDW6F.module.min.js +1 -0
- package/dist/chunk-chunk-CP3EN6KZ.module.min.js +1 -0
- package/dist/chunk-chunk-CYIML3AV.module.min.js +2 -0
- package/dist/chunk-chunk-DNY43POY.module.min.js +1 -0
- package/dist/chunk-chunk-DSNGDNJY.module.min.js +1 -0
- package/dist/chunk-chunk-E7MIQX7D.module.min.js +2 -0
- package/dist/chunk-chunk-EMO5NUGE.module.min.js +1 -0
- package/dist/chunk-chunk-ES4DCG3L.module.min.js +1 -0
- package/dist/chunk-chunk-FAKO3RGQ.module.min.js +2 -0
- package/dist/chunk-chunk-FYY2ACNJ.module.min.js +2 -0
- package/dist/chunk-chunk-G7WFWHAD.module.min.js +2 -0
- package/dist/chunk-chunk-GMQ5AYTD.module.min.js +1 -0
- package/dist/chunk-chunk-H4PPRW6N.module.min.js +1 -0
- package/dist/chunk-chunk-IFYPMWKY.module.min.js +1 -0
- package/dist/chunk-chunk-J3ELI22J.module.min.js +1 -0
- package/dist/chunk-chunk-J3QOW4OE.module.min.js +0 -0
- package/dist/chunk-chunk-J3XWETBJ.module.min.js +2 -0
- package/dist/chunk-chunk-JCG72SGW.module.min.js +2 -0
- package/dist/{semiotic-ai-chunk-OG7BQUUW.module.min.js → chunk-chunk-JJ2OOIET.module.min.js} +0 -1
- package/dist/chunk-chunk-KTWEBFMX.module.min.js +2 -0
- package/dist/chunk-chunk-L6D3I3V7.module.min.js +2 -0
- package/dist/chunk-chunk-M337NY6L.module.min.js +1 -0
- package/dist/chunk-chunk-NO4MCQVD.module.min.js +1 -0
- package/dist/chunk-chunk-ODUZEEBH.module.min.js +2 -0
- package/dist/chunk-chunk-P6UBCMSQ.module.min.js +2 -0
- package/dist/chunk-chunk-Q2YADC2V.module.min.js +2 -0
- package/dist/chunk-chunk-QRIBHZYW.module.min.js +1 -0
- package/dist/chunk-chunk-QSQVBIJA.module.min.js +1 -0
- package/dist/chunk-chunk-RCF52Z42.module.min.js +2 -0
- package/dist/chunk-chunk-RH5TSQPH.module.min.js +1 -0
- package/dist/chunk-chunk-ROP4HI7H.module.min.js +2 -0
- package/dist/chunk-chunk-RZH7VZYS.module.min.js +2 -0
- package/dist/chunk-chunk-SIRIJ3DY.module.min.js +1 -0
- package/dist/chunk-chunk-STZFFTAN.module.min.js +2 -0
- package/dist/chunk-chunk-SV4XAZ3Q.module.min.js +1 -0
- package/dist/chunk-chunk-T27ZEV6A.module.min.js +1 -0
- package/dist/chunk-chunk-U3AGQ5EF.module.min.js +2 -0
- package/dist/chunk-chunk-U66USBWU.module.min.js +1 -0
- package/dist/chunk-chunk-VVCA3DB7.module.min.js +1 -0
- package/dist/chunk-chunk-W3DB2MN4.module.min.js +2 -0
- package/dist/chunk-chunk-WCX6U47H.module.min.js +2 -0
- package/dist/chunk-chunk-WDIN4LRC.module.min.js +1 -0
- package/dist/chunk-chunk-XEVJDUTH.module.min.js +1 -0
- package/dist/chunk-chunk-XOYX77KF.module.min.js +2 -0
- package/dist/chunk-chunk-YCQYG6J5.module.min.js +2 -0
- package/dist/chunk-chunk-YHNZCPOZ.module.min.js +2 -0
- package/dist/chunk-chunk-YWZB3KPI.module.min.js +2 -0
- package/dist/chunk-chunk-Z5KXAVQD.module.min.js +2 -0
- package/dist/chunk-chunk-ZCNBUZPL.module.min.js +2 -0
- package/dist/chunk-chunk-ZLKRTF5N.module.min.js +2 -0
- package/dist/chunk-chunk-ZTNVDWAK.module.min.js +2 -0
- package/dist/chunk-statisticalOverlays-6MVAK5RW.module.min.js +2 -0
- package/dist/components/AccessibleNavTree.d.ts +7 -1
- package/dist/components/ai/chartClinicMetadata.generated.d.ts +15 -0
- package/dist/components/ai/useNavigationSync.d.ts +17 -2
- package/dist/components/chartContainerMobile.d.ts +9 -0
- package/dist/components/charts/geo/ChoroplethMap.d.ts +19 -2
- package/dist/components/charts/geo/DistanceCartogram.d.ts +14 -2
- package/dist/components/charts/geo/FlowMap.d.ts +10 -6
- package/dist/components/charts/geo/ProportionalSymbolMap.d.ts +14 -2
- package/dist/components/charts/index.d.ts +6 -0
- package/dist/components/charts/network/ChordDiagram.d.ts +9 -1
- package/dist/components/charts/network/ForceDirectedGraph.d.ts +11 -0
- package/dist/components/charts/network/SankeyDiagram.d.ts +9 -1
- package/dist/components/charts/ordinal/BarChart.d.ts +21 -0
- package/dist/components/charts/ordinal/GroupedBarChart.d.ts +11 -0
- package/dist/components/charts/ordinal/StackedBarChart.d.ts +11 -0
- package/dist/components/charts/physics/CollisionSwarmChart.d.ts +7 -0
- package/dist/components/charts/physics/EventDropChart.d.ts +7 -0
- package/dist/components/charts/physics/GaltonBoardChart.d.ts +8 -0
- package/dist/components/charts/physics/PhysicalFlowChart.d.ts +7 -0
- package/dist/components/charts/physics/PhysicsCustomChart.d.ts +4 -25
- package/dist/components/charts/physics/PhysicsPileChart.d.ts +7 -0
- package/dist/components/charts/physics/physicsChartShared.d.ts +17 -1
- package/dist/components/charts/physics/physicsCustomLayout.d.ts +32 -0
- package/dist/components/charts/shared/AnnotationLabel.d.ts +88 -0
- package/dist/components/charts/shared/annotationActivation.d.ts +35 -0
- package/dist/components/charts/shared/annotationLabelLayout.d.ts +5 -0
- package/dist/components/charts/shared/annotationRules.d.ts +2 -1
- package/dist/components/charts/shared/auditAccessibilityText.d.ts +13 -0
- package/dist/components/charts/shared/chartSelectionUtils.d.ts +4 -0
- package/dist/components/charts/shared/chartSpecCore.d.ts +3 -3
- package/dist/components/charts/shared/datumTypes.d.ts +2 -0
- package/dist/components/charts/shared/diagnoseAnnotationChecks.d.ts +2 -0
- package/dist/components/charts/shared/formatUtils.d.ts +3 -3
- package/dist/components/charts/shared/hatchFill.d.ts +87 -0
- package/dist/components/charts/shared/hooks.d.ts +7 -6
- package/dist/components/charts/shared/knownChartComponents.d.ts +9 -0
- package/dist/components/charts/shared/leastSquaresRegression.d.ts +16 -0
- package/dist/components/charts/shared/mergeShapeStyle.d.ts +3 -2
- package/dist/components/charts/shared/semanticInteractions.d.ts +42 -0
- package/dist/components/charts/shared/sparseArray.d.ts +1 -1
- package/dist/components/charts/shared/streamPropsHelpers.d.ts +6 -4
- package/dist/components/charts/shared/styleRules.d.ts +205 -0
- package/dist/components/charts/shared/tooltipUtils.d.ts +22 -9
- package/dist/components/charts/shared/types.d.ts +9 -6
- package/dist/components/charts/shared/useAreaSeriesSetup.d.ts +16 -2
- package/dist/components/charts/shared/useChartSetup.d.ts +2 -2
- package/dist/components/charts/shared/useCustomChartSetup.d.ts +3 -0
- package/dist/components/charts/shared/useFrameImperativeHandle.d.ts +1 -2
- package/dist/components/charts/shared/useLikertAggregation.d.ts +4 -4
- package/dist/components/charts/shared/useOrdinalBrush.d.ts +2 -1
- package/dist/components/charts/shared/useOrdinalPieceStyle.d.ts +24 -1
- package/dist/components/charts/shared/useStreamingLegend.d.ts +1 -1
- package/dist/components/charts/shared/useXYLineStyle.d.ts +10 -0
- package/dist/components/charts/shared/useXYPointStyle.d.ts +19 -1
- package/dist/components/charts/shared/validateChartData.d.ts +7 -5
- package/dist/components/charts/shared/validationMap.d.ts +11 -2
- package/dist/components/charts/shared/validationMap.generated.d.ts +6 -0
- package/dist/components/charts/shared/withChartWrapper.d.ts +4 -3
- package/dist/components/charts/value/targetPresentation.d.ts +22 -0
- package/dist/components/charts/value/types.d.ts +5 -6
- package/dist/components/charts/xy/AreaChart.d.ts +8 -0
- package/dist/components/charts/xy/BubbleChart.d.ts +9 -0
- package/dist/components/charts/xy/ConnectedScatterplot.d.ts +7 -0
- package/dist/components/charts/xy/DifferenceChart.d.ts +1 -52
- package/dist/components/charts/xy/Heatmap.d.ts +2 -2
- package/dist/components/charts/xy/LineChart.d.ts +11 -0
- package/dist/components/charts/xy/QuadrantChart.d.ts +7 -0
- package/dist/components/charts/xy/Scatterplot.d.ts +10 -0
- package/dist/components/charts/xy/StackedAreaChart.d.ts +7 -0
- package/dist/components/charts/xy/differenceSegments.d.ts +49 -0
- package/dist/components/charts/xy/scatterplotMatrixInteractionTypes.d.ts +12 -0
- package/dist/components/controls/SentenceFilter.d.ts +97 -0
- package/dist/components/data/fromVegaLite.d.ts +19 -9
- package/dist/components/rough/createRoughRenderMode.d.ts +46 -0
- package/dist/components/semiotic-ai.d.ts +3 -1
- package/dist/components/semiotic-controls.d.ts +2 -0
- package/dist/components/semiotic-geo.d.ts +4 -0
- package/dist/components/semiotic-network.d.ts +4 -0
- package/dist/components/semiotic-ordinal.d.ts +6 -0
- package/dist/components/semiotic-physics.d.ts +4 -0
- package/dist/components/semiotic-rough.d.ts +4 -0
- package/dist/components/semiotic-utils-core.d.ts +4 -0
- package/dist/components/semiotic-xy.d.ts +4 -0
- package/dist/components/semiotic.d.ts +9 -1
- package/dist/components/server/optionalImageTypes.d.ts +37 -0
- package/dist/components/server/serverChartConfigShared.d.ts +9 -5
- package/dist/components/server/serverChartConfigs.d.ts +4 -4
- package/dist/components/server/staticAnnotations.d.ts +6 -3
- package/dist/components/server/staticLegend.d.ts +1 -1
- package/dist/components/server/staticNetwork.d.ts +4 -4
- package/dist/components/server/staticSVGChrome.d.ts +5 -4
- package/dist/components/store/ObservationStore.d.ts +21 -1
- package/dist/components/stream/AccessibleDataTable.d.ts +4 -10
- package/dist/components/stream/AriaLiveTooltip.d.ts +9 -0
- package/dist/components/stream/CanvasHitTester.d.ts +4 -4
- package/dist/components/stream/DataSourceAdapter.d.ts +1 -1
- package/dist/components/stream/FrameRuntime.d.ts +57 -0
- package/dist/components/stream/GeoParticlePool.d.ts +1 -1
- package/dist/components/stream/GeoPipelineStore.d.ts +43 -12
- package/dist/components/stream/GeoSVGOverlay.d.ts +64 -0
- package/dist/components/stream/NetworkCanvasHitTester.d.ts +2 -1
- package/dist/components/stream/NetworkPipelineStore.d.ts +24 -21
- package/dist/components/stream/NetworkSSRFrame.d.ts +17 -0
- package/dist/components/stream/NetworkSVGOverlay.d.ts +6 -0
- package/dist/components/stream/OrdinalBrushOverlay.d.ts +1 -2
- package/dist/components/stream/OrdinalBrushOverlayLazy.d.ts +9 -0
- package/dist/components/stream/OrdinalCanvasHitTester.d.ts +2 -2
- package/dist/components/stream/OrdinalPipelineStore.d.ts +13 -13
- package/dist/components/stream/OrdinalSVGOverlay.d.ts +9 -1
- package/dist/components/stream/OrdinalStyleResolver.d.ts +12 -0
- package/dist/components/stream/ParticlePool.d.ts +1 -1
- package/dist/components/stream/PipelineStore.d.ts +12 -16
- package/dist/components/stream/SVGOverlay.d.ts +6 -0
- package/dist/components/stream/SceneGraph.d.ts +3 -3
- package/dist/components/stream/XYBrushOverlayLazy.d.ts +17 -0
- package/dist/components/stream/accessorUtils.d.ts +2 -2
- package/dist/components/stream/annotationAccessorResolver.d.ts +2 -2
- package/dist/components/stream/frameGraphics.d.ts +4 -0
- package/dist/components/stream/frameKeyboardNavigation.d.ts +45 -0
- package/dist/components/stream/geoPipelineHelpers.d.ts +3 -3
- package/dist/components/stream/geoPipelineUpdateResults.d.ts +34 -0
- package/dist/components/stream/geoSceneBuilder.d.ts +16 -0
- package/dist/components/stream/geoTypes.d.ts +48 -15
- package/dist/components/stream/hitTestUtils.d.ts +2 -2
- package/dist/components/stream/hoverUtils.d.ts +4 -2
- package/dist/components/stream/layouts/forceLayoutWorkerClient.d.ts +1 -0
- package/dist/components/stream/layouts/hierarchyUtils.d.ts +2 -2
- package/dist/components/stream/networkCustomLayoutRunner.d.ts +23 -0
- package/dist/components/stream/networkCustomRestyle.d.ts +15 -0
- package/dist/components/stream/networkFrameAnimation.d.ts +7 -0
- package/dist/components/stream/networkFrameHandleTypes.d.ts +39 -0
- package/dist/components/stream/networkFrameObservations.d.ts +15 -0
- package/dist/components/stream/networkFramePaint.d.ts +11 -2
- package/dist/components/stream/networkInteractionTypes.d.ts +26 -0
- package/dist/components/stream/networkPipelineConfig.d.ts +2 -2
- package/dist/components/stream/networkPipelineUpdateResults.d.ts +38 -0
- package/dist/components/stream/networkTypes.d.ts +37 -56
- package/dist/components/stream/ordinalCanvasRenderers.d.ts +2 -2
- package/dist/components/stream/ordinalPipelineUpdateResults.d.ts +20 -1
- package/dist/components/stream/ordinalSceneBuilders/types.d.ts +2 -2
- package/dist/components/stream/ordinalTypes.d.ts +30 -3
- package/dist/components/stream/physics/PhysicsPipelineStore.d.ts +2 -0
- package/dist/components/stream/physics/PhysicsSVGOverlay.d.ts +6 -0
- package/dist/components/stream/physics/StreamPhysicsTypes.d.ts +21 -6
- package/dist/components/stream/physics/physicsFrameObservations.d.ts +19 -0
- package/dist/components/stream/physics/physicsFrameSetup.d.ts +4 -0
- package/dist/components/stream/physics/physicsPipelineUpdateResults.d.ts +19 -1
- package/dist/components/stream/physics/usePhysicsFrameLifecyclePolicy.d.ts +3 -1
- package/dist/components/stream/pipelineConfig.d.ts +4 -2
- package/dist/components/stream/pipelineDecay.d.ts +2 -2
- package/dist/components/stream/pipelinePulse.d.ts +2 -2
- package/dist/components/stream/pipelineStoreUpdateResults.d.ts +23 -2
- package/dist/components/stream/pipelineTransitions.d.ts +1 -1
- package/dist/components/stream/pipelineUpdateContract.d.ts +7 -0
- package/dist/components/stream/pipelineUpdateStore.d.ts +21 -0
- package/dist/components/stream/renderBackend.d.ts +27 -0
- package/dist/components/stream/renderers/canvasRenderHelpers.d.ts +15 -1
- package/dist/components/stream/renderers/geoCanvasRenderer.d.ts +3 -2
- package/dist/components/stream/renderers/networkParticleRenderer.d.ts +1 -1
- package/dist/components/stream/sceneRenderBackendTypes.d.ts +28 -0
- package/dist/components/stream/sceneRevisionDiagnostics.d.ts +31 -4
- package/dist/components/stream/streamSemanticTypes.d.ts +16 -0
- package/dist/components/stream/streamThemeTypes.d.ts +14 -0
- package/dist/components/stream/svgOverlayUtils.d.ts +10 -0
- package/dist/components/stream/test-utils/frameScheduler.d.ts +12 -0
- package/dist/components/stream/test-utils/revisionConsumption.d.ts +13 -0
- package/dist/components/stream/titleLayout.d.ts +31 -0
- package/dist/components/stream/types.d.ts +30 -65
- package/dist/components/stream/useCanvasFrameHost.d.ts +71 -0
- package/dist/components/stream/useFrame.d.ts +23 -0
- package/dist/components/stream/useLegendCategoryEmission.d.ts +3 -3
- package/dist/components/stream/useSemanticFrameInteractions.d.ts +22 -0
- package/dist/components/stream/useUpdateResultSnapshot.d.ts +7 -0
- package/dist/components/stream/xyFrameAxisTypes.d.ts +50 -0
- package/dist/components/stream/xySceneBuilders/types.d.ts +6 -5
- package/dist/controls.min.js +1 -1
- package/dist/controls.module.min.js +1 -1
- 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-matter.min.js +1 -1
- package/dist/physics-matter.module.min.js +1 -1
- package/dist/physics-rapier.min.js +1 -1
- package/dist/physics-rapier.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 -0
- package/dist/rough.module.min.js +1 -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 +3 -1
- package/dist/semiotic-ai.min.js +1 -1
- package/dist/semiotic-ai.module.min.js +1 -1
- package/dist/semiotic-controls.d.ts +2 -0
- package/dist/semiotic-data.min.js +1 -1
- package/dist/semiotic-data.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-geo.d.ts +4 -0
- package/dist/semiotic-network.d.ts +4 -0
- package/dist/semiotic-ordinal.d.ts +6 -0
- package/dist/semiotic-physics.d.ts +4 -0
- package/dist/semiotic-realtime-core.min.js +1 -1
- package/dist/semiotic-realtime-core.module.min.js +1 -1
- package/dist/semiotic-realtime-react.min.js +1 -1
- package/dist/semiotic-realtime-react.module.min.js +1 -1
- package/dist/semiotic-recipes-core.min.js +1 -1
- package/dist/semiotic-recipes-core.module.min.js +1 -1
- package/dist/semiotic-recipes-react.min.js +1 -1
- package/dist/semiotic-recipes-react.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-rough.d.ts +4 -0
- 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-themes-core.min.js +1 -1
- package/dist/semiotic-themes-core.module.min.js +1 -1
- package/dist/semiotic-themes-react.min.js +1 -1
- package/dist/semiotic-themes-react.module.min.js +1 -1
- package/dist/semiotic-themes.min.js +1 -1
- package/dist/semiotic-themes.module.min.js +1 -1
- package/dist/semiotic-utils-core.d.ts +4 -0
- package/dist/semiotic-utils-core.min.js +1 -1
- package/dist/semiotic-utils-core.module.min.js +1 -1
- package/dist/semiotic-utils-react.min.js +1 -1
- package/dist/semiotic-utils-react.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.min.js +1 -1
- package/dist/semiotic-value.module.min.js +1 -1
- package/dist/semiotic-xy.d.ts +4 -0
- package/dist/semiotic.d.ts +9 -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/test-utils/capturedFrameProps.d.ts +67 -0
- package/dist/test-utils/frameMock.d.ts +12 -9
- package/dist/xy.min.js +1 -1
- package/dist/xy.module.min.js +1 -1
- package/package.json +29 -10
- package/dist/semiotic-ai-statisticalOverlays-CY4WKR4A.module.min.js +0 -2
- package/dist/semiotic-chunk-3FSVZ46U.module.min.js +0 -2
- package/dist/semiotic-statisticalOverlays-UOMSFKVJ.module.min.js +0 -2
- package/dist/xy-chunk-IWD6IB6V.module.min.js +0 -2
- package/dist/xy-statisticalOverlays-7RWG6LJT.module.min.js +0 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
2
|
import type { GeoProjection, GeoPath, GeoPermissibleObjects } from "d3-geo";
|
|
3
3
|
import type { GradientLegendConfig, LegendGroup, LegendLayout } from "../types/legendTypes";
|
|
4
|
-
import type { Style, DecayConfig, PulseConfig, TransitionConfig, StalenessConfig, SceneDatum, PointSceneNode, GlyphSceneNode, ThemeSemanticColors, SceneAccessibilityMetadata } from "./types";
|
|
4
|
+
import type { Style, DecayConfig, PulseConfig, TransitionConfig, StalenessConfig, SceneDatum, PointSceneNode, GlyphSceneNode, ThemeSemanticColors, SceneAccessibilityMetadata, SceneRenderMode } from "./types";
|
|
5
5
|
import type { AnimateProp } from "./pipelineTransitionUtils";
|
|
6
6
|
import type { HoverAnnotationConfig, HoverData } from "../realtime/types";
|
|
7
7
|
import type { GeoParticleStyle } from "./GeoParticlePool";
|
|
@@ -11,6 +11,9 @@ import type { MarginType } from "../types/marginType";
|
|
|
11
11
|
import type { GeoCustomLayout } from "./geoCustomLayout";
|
|
12
12
|
import type { CustomLayoutSelection } from "./customLayoutSelection";
|
|
13
13
|
import type { CustomLayoutFailureDiagnostic } from "./customLayoutFailure";
|
|
14
|
+
import type { OnObservationCallback } from "../store/ObservationStore";
|
|
15
|
+
import type { SemanticClickBehavior, SemanticHoverBehavior } from "../charts/shared/semanticInteractions";
|
|
16
|
+
import type { OnAnnotationActivateCallback } from "../charts/shared/annotationActivation";
|
|
14
17
|
export type ProjectionProp = GeoProjection | ProjectionName | ProjectionConfig;
|
|
15
18
|
export type ProjectionName = "mercator" | "equalEarth" | "albersUsa" | "orthographic" | "naturalEarth" | "equirectangular";
|
|
16
19
|
export interface ProjectionConfig {
|
|
@@ -69,7 +72,7 @@ export interface GeoLineSceneNode {
|
|
|
69
72
|
export type GeoSceneNode = GeoAreaSceneNode | PointSceneNode | GlyphSceneNode | GeoLineSceneNode;
|
|
70
73
|
export interface GeoScales {
|
|
71
74
|
projection: GeoProjection;
|
|
72
|
-
geoPath: GeoPath<
|
|
75
|
+
geoPath: GeoPath<void, GeoPermissibleObjects>;
|
|
73
76
|
projectedPoint: (lon: number, lat: number) => [number, number] | null;
|
|
74
77
|
invertedPoint: (px: number, py: number) => [number, number] | null;
|
|
75
78
|
}
|
|
@@ -77,19 +80,20 @@ export interface GeoPipelineConfig {
|
|
|
77
80
|
projection: ProjectionProp;
|
|
78
81
|
projectionExtent?: [[number, number], [number, number]];
|
|
79
82
|
/**
|
|
80
|
-
*
|
|
81
|
-
* `0.1` insets
|
|
82
|
-
*
|
|
83
|
+
* Projection-fit padding as a finite fraction of the plot, not pixels.
|
|
84
|
+
* Valid values are in `[0, 0.5)`; `0.1` insets automatic fitting 10% from
|
|
85
|
+
* each edge. `null` and `undefined` use `0`; other values throw `RangeError`
|
|
86
|
+
* at the config boundary. Ignored when `projectionExtent` is supplied.
|
|
83
87
|
* @default 0
|
|
84
88
|
*/
|
|
85
|
-
fitPadding?: number;
|
|
89
|
+
fitPadding?: number | null;
|
|
86
90
|
xAccessor?: string | ((d: Datum) => number);
|
|
87
91
|
yAccessor?: string | ((d: Datum) => number);
|
|
88
92
|
lineDataAccessor?: string | ((d: Datum) => Datum[]);
|
|
89
93
|
lineType?: "geo" | "line";
|
|
90
94
|
/** Flow rendering style: "basic" (straight/great-circle), "offset" (bidirectional offset), "arc" (curved arcs) @default "basic" */
|
|
91
95
|
flowStyle?: "basic" | "offset" | "arc";
|
|
92
|
-
areaStyle?: Style | ((d:
|
|
96
|
+
areaStyle?: Style | ((d: GeoJSON.Feature) => Style);
|
|
93
97
|
pointStyle?: (d: Datum) => Style & {
|
|
94
98
|
r?: number;
|
|
95
99
|
};
|
|
@@ -103,6 +107,10 @@ export interface GeoPipelineConfig {
|
|
|
103
107
|
themeDiverging?: string;
|
|
104
108
|
graticule?: boolean | GraticuleConfig;
|
|
105
109
|
projectionTransform?: DistanceCartogramConfig;
|
|
110
|
+
/** Maximum retained points and lines after the store enters streaming mode. @default 500 */
|
|
111
|
+
windowSize?: number;
|
|
112
|
+
/** Logical clock used for Geo pulse and transition work. */
|
|
113
|
+
clock?: import("./FrameRuntime").FrameClock;
|
|
106
114
|
decay?: DecayConfig;
|
|
107
115
|
pulse?: PulseConfig;
|
|
108
116
|
transition?: TransitionConfig;
|
|
@@ -125,12 +133,13 @@ export interface StreamGeoFrameProps<T = Datum> {
|
|
|
125
133
|
projection: ProjectionProp;
|
|
126
134
|
projectionExtent?: [[number, number], [number, number]];
|
|
127
135
|
/**
|
|
128
|
-
*
|
|
129
|
-
* `0.1` insets
|
|
130
|
-
*
|
|
136
|
+
* Projection-fit padding as a finite fraction of the plot, not pixels.
|
|
137
|
+
* Valid values are in `[0, 0.5)`; `0.1` insets automatic fitting 10% from
|
|
138
|
+
* each edge. `null` and `undefined` use `0`; other values throw `RangeError`
|
|
139
|
+
* at the config boundary. Ignored when `projectionExtent` is supplied.
|
|
131
140
|
* @default 0
|
|
132
141
|
*/
|
|
133
|
-
fitPadding?: number;
|
|
142
|
+
fitPadding?: number | null;
|
|
134
143
|
areas?: GeoJSON.Feature[];
|
|
135
144
|
points?: T[];
|
|
136
145
|
lines?: T[];
|
|
@@ -190,7 +199,11 @@ export interface StreamGeoFrameProps<T = Datum> {
|
|
|
190
199
|
className?: string;
|
|
191
200
|
background?: string;
|
|
192
201
|
runtimeMode?: "bounded" | "streaming";
|
|
193
|
-
|
|
202
|
+
/** Maximum retained points and lines after imperative streaming begins. @default 500 */
|
|
203
|
+
windowSize?: number;
|
|
204
|
+
/** Optional scene paint backend. Exact projected geometry remains interactive. */
|
|
205
|
+
renderMode?: SceneRenderMode<GeoSceneNode>;
|
|
206
|
+
areaStyle?: Style | ((d: GeoJSON.Feature) => Style);
|
|
194
207
|
pointStyle?: (d: Datum) => Style & {
|
|
195
208
|
r?: number;
|
|
196
209
|
};
|
|
@@ -214,9 +227,17 @@ export interface StreamGeoFrameProps<T = Datum> {
|
|
|
214
227
|
* @default false
|
|
215
228
|
*/
|
|
216
229
|
allowTooltipOverflow?: boolean;
|
|
217
|
-
customClickBehavior?:
|
|
218
|
-
customHoverBehavior?:
|
|
230
|
+
customClickBehavior?: SemanticClickBehavior<HoverData>;
|
|
231
|
+
customHoverBehavior?: SemanticHoverBehavior<HoverData>;
|
|
232
|
+
/** Structured interaction observations, including semantic focus/activate. */
|
|
233
|
+
onObservation?: OnObservationCallback;
|
|
234
|
+
/** @internal HOC observation callback forwarded only to annotation widgets. */
|
|
235
|
+
annotationObservationCallback?: OnObservationCallback;
|
|
236
|
+
/** Chart instance identifier included in observation events. */
|
|
237
|
+
chartId?: string;
|
|
219
238
|
annotations?: Datum[];
|
|
239
|
+
/** Observe activation of widget annotations without replacing widget behavior. */
|
|
240
|
+
onAnnotationActivate?: OnAnnotationActivateCallback;
|
|
220
241
|
autoPlaceAnnotations?: AutoPlaceAnnotations;
|
|
221
242
|
decay?: DecayConfig;
|
|
222
243
|
pulse?: PulseConfig;
|
|
@@ -226,6 +247,18 @@ export interface StreamGeoFrameProps<T = Datum> {
|
|
|
226
247
|
* Set `{ intro: false }` to disable the intro animation. */
|
|
227
248
|
animate?: AnimateProp;
|
|
228
249
|
staleness?: StalenessConfig;
|
|
250
|
+
/** Optional rAF seam for deterministic host scheduling. */
|
|
251
|
+
frameScheduler?: import("./useFrame").FrameScheduler;
|
|
252
|
+
/** Monotonic wall-clock seam for deterministic replay, tests, or evidence capture. */
|
|
253
|
+
clock?: import("./FrameRuntime").FrameClock;
|
|
254
|
+
/** Injectable random source for frame-local stochastic work. */
|
|
255
|
+
random?: import("./FrameRuntime").FrameRandom;
|
|
256
|
+
/** Serializable deterministic random seed. Ignored when `random` is supplied. */
|
|
257
|
+
seed?: number;
|
|
258
|
+
/** Freeze logical animation time and cancel queued work while paused. */
|
|
259
|
+
paused?: boolean;
|
|
260
|
+
/** Freeze logical animation time while the page is hidden. Defaults to true for Geo frames. */
|
|
261
|
+
suspendWhenHidden?: boolean;
|
|
229
262
|
backgroundGraphics?: ReactNode;
|
|
230
263
|
foregroundGraphics?: ReactNode;
|
|
231
264
|
title?: string | ReactNode;
|
|
@@ -271,7 +304,7 @@ export interface StreamGeoFrameHandle {
|
|
|
271
304
|
getLines(): Datum[];
|
|
272
305
|
clear(): void;
|
|
273
306
|
getProjection(): GeoProjection | null;
|
|
274
|
-
getGeoPath(): GeoPath<
|
|
307
|
+
getGeoPath(): GeoPath<void, GeoPermissibleObjects> | null;
|
|
275
308
|
/** Get cartogram layout info (center position, max cost, radius) */
|
|
276
309
|
getCartogramLayout(): {
|
|
277
310
|
cx: number;
|
|
@@ -27,11 +27,11 @@ export declare function getHitRadius(nodeRadius: number | undefined, maxDistance
|
|
|
27
27
|
* Convert a value to a Date if possible. Returns null for non-date values.
|
|
28
28
|
* Treats numbers > 1e9 as millisecond timestamps.
|
|
29
29
|
*/
|
|
30
|
-
export declare function toDate(value:
|
|
30
|
+
export declare function toDate(value: Date | number | string | null | undefined): Date | null;
|
|
31
31
|
/**
|
|
32
32
|
* Detect whether a tick marks a time boundary (new month or year) compared to the previous tick.
|
|
33
33
|
*/
|
|
34
|
-
export declare function isTimeLandmark(value:
|
|
34
|
+
export declare function isTimeLandmark(value: Date | number | string | null | undefined, prevValue: Date | number | string | null | undefined): boolean;
|
|
35
35
|
/**
|
|
36
36
|
* Normalize an angle to the [0, 2π) range.
|
|
37
37
|
*/
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* property flattening that are handled at the call site.
|
|
8
8
|
*/
|
|
9
9
|
import type { HoverData } from "../realtime/types";
|
|
10
|
+
import type { Datum } from "../charts/shared/datumTypes";
|
|
11
|
+
export type RawHoverDatum = Datum | Datum[] | null;
|
|
10
12
|
/**
|
|
11
13
|
* Minimal shape a Stream Frame's internal hover handler needs from a pointer
|
|
12
14
|
* event. React.MouseEvent satisfies this structurally, as does the plain
|
|
@@ -22,7 +24,7 @@ export interface HoverPointerCoords {
|
|
|
22
24
|
}
|
|
23
25
|
export declare const TOUCH_HIT_RADIUS = 24;
|
|
24
26
|
export declare function getPointerHitRadius(baseRadius: number, pointerType?: string): number;
|
|
25
|
-
export declare function normalizeHoverDatum(rawDatum:
|
|
27
|
+
export declare function normalizeHoverDatum(rawDatum: RawHoverDatum): Datum | null;
|
|
26
28
|
/**
|
|
27
29
|
* Build a HoverData object from a raw datum and pixel coordinates.
|
|
28
30
|
* The raw datum is preserved as `hover.data` for tooltip / callback
|
|
@@ -30,4 +32,4 @@ export declare function normalizeHoverDatum(rawDatum: any): any;
|
|
|
30
32
|
* relevant to a specific frame family — `category`, `stats`,
|
|
31
33
|
* `nodeOrEdge`, `xValue`, etc. — is layered in via `extra`.
|
|
32
34
|
*/
|
|
33
|
-
export declare function buildHoverData(rawDatum:
|
|
35
|
+
export declare function buildHoverData(rawDatum: RawHoverDatum, x: number, y: number, extra?: Partial<HoverData>): HoverData;
|
|
@@ -20,7 +20,7 @@ export declare function parseColor(color: string): [number, number, number];
|
|
|
20
20
|
* Uses perceived luminance (ITU-R BT.601).
|
|
21
21
|
*/
|
|
22
22
|
export declare function contrastTextColor(bgColor: string): string;
|
|
23
|
-
export declare function resolveChildrenAccessor(accessor: string | ((d: Datum) =>
|
|
24
|
-
export declare function resolveNodeId(d:
|
|
23
|
+
export declare function resolveChildrenAccessor(accessor: string | ((d: Datum) => Datum[]) | undefined): ((d: Datum) => Datum[]) | undefined;
|
|
24
|
+
export declare function resolveNodeId(d: Datum, config: NetworkPipelineConfig, index: number): string;
|
|
25
25
|
export declare function resolveLabelFn(nodeLabel: string | ((d: Datum) => string) | undefined): ((d: Datum) => string) | null;
|
|
26
26
|
export declare function resolveDefaultNodeSize(nodeSize: number | string | ((d: Datum) => number) | undefined): number;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { NetworkLayoutResult } from "./networkCustomLayout";
|
|
2
|
+
import { type CustomLayoutFailureDiagnostic } from "./customLayoutFailure";
|
|
3
|
+
import type { NetworkPipelineConfig, RealtimeEdge, RealtimeNode } from "./networkTypes";
|
|
4
|
+
interface NetworkCustomLayoutRunInput {
|
|
5
|
+
config: NetworkPipelineConfig;
|
|
6
|
+
customLayout: NonNullable<NetworkPipelineConfig["customNetworkLayout"]>;
|
|
7
|
+
size: [number, number];
|
|
8
|
+
nodes: RealtimeNode[];
|
|
9
|
+
edges: RealtimeEdge[];
|
|
10
|
+
previousResult: NetworkLayoutResult | null;
|
|
11
|
+
revision: number;
|
|
12
|
+
}
|
|
13
|
+
export type NetworkCustomLayoutRunResult = {
|
|
14
|
+
kind: "success";
|
|
15
|
+
result: NetworkLayoutResult;
|
|
16
|
+
} | {
|
|
17
|
+
kind: "failure";
|
|
18
|
+
diagnostic: CustomLayoutFailureDiagnostic;
|
|
19
|
+
preservedLastGoodScene: boolean;
|
|
20
|
+
};
|
|
21
|
+
/** Runs user-provided network layout code behind the common failure boundary. */
|
|
22
|
+
export declare function runNetworkCustomLayout({ config, customLayout, size, nodes, edges, previousResult, revision }: NetworkCustomLayoutRunInput): NetworkCustomLayoutRunResult;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CustomLayoutSelection } from "./customLayoutSelection";
|
|
2
|
+
import type { NetworkLayoutResult } from "./networkCustomLayout";
|
|
3
|
+
import type { NetworkSceneEdge, NetworkSceneNode } from "./networkTypes";
|
|
4
|
+
import type { Style } from "./types";
|
|
5
|
+
export declare function snapshotNetworkCustomStyles(nodes: NetworkSceneNode[], edges: NetworkSceneEdge[]): WeakMap<object, Style>;
|
|
6
|
+
interface NetworkRestyleInput {
|
|
7
|
+
nodes: NetworkSceneNode[];
|
|
8
|
+
edges: NetworkSceneEdge[];
|
|
9
|
+
restyle: NetworkLayoutResult["restyle"];
|
|
10
|
+
restyleEdge: NetworkLayoutResult["restyleEdge"];
|
|
11
|
+
baseStyles: WeakMap<object, Style>;
|
|
12
|
+
selection: CustomLayoutSelection | null;
|
|
13
|
+
}
|
|
14
|
+
export declare function restyleNetworkCustomScene({ nodes, edges, restyle, restyleEdge, baseStyles, selection }: NetworkRestyleInput): boolean;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether the network paint loop needs another animation frame.
|
|
3
|
+
*
|
|
4
|
+
* Particles are continuous only for sankey and custom layouts; pulse and
|
|
5
|
+
* pipeline animations apply to every chart type.
|
|
6
|
+
*/
|
|
7
|
+
export declare function shouldContinueNetworkAnimation(chartType: string, hasCustomNetworkLayout: boolean, showParticles: boolean, hasPulse: boolean, isStoreAnimating: boolean): boolean;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Datum } from "../charts/shared/datumTypes";
|
|
2
|
+
import type { EdgePush, RealtimeEdge, RealtimeNode } from "./networkTypes";
|
|
3
|
+
import type { CustomLayoutFailureDiagnostic } from "./customLayoutFailure";
|
|
4
|
+
import type { NetworkLayoutResult } from "./networkCustomLayout";
|
|
5
|
+
/** Imperative API exposed by `StreamNetworkFrame` refs. */
|
|
6
|
+
export interface StreamNetworkFrameHandle {
|
|
7
|
+
push(edge: EdgePush): void;
|
|
8
|
+
pushMany(edges: EdgePush[]): void;
|
|
9
|
+
/** Remove a node by ID. Also removes connected edges. */
|
|
10
|
+
removeNode(id: string): boolean;
|
|
11
|
+
/** Remove edges by source+target, or by edge ID when edgeIdAccessor is configured. */
|
|
12
|
+
removeEdge(sourceIdOrEdgeId: string, targetId?: string): boolean;
|
|
13
|
+
/** Update a node's data by ID. Returns previous data. */
|
|
14
|
+
updateNode(id: string, updater: (data: Datum) => Datum): Datum | null;
|
|
15
|
+
/** Update all edges between source+target. Returns array of previous data. */
|
|
16
|
+
updateEdge(sourceId: string, targetId: string, updater: (data: Datum) => Datum): Datum[];
|
|
17
|
+
clear(): void;
|
|
18
|
+
getTopology(): {
|
|
19
|
+
nodes: RealtimeNode[];
|
|
20
|
+
edges: RealtimeEdge[];
|
|
21
|
+
};
|
|
22
|
+
getTopologyDiff(): {
|
|
23
|
+
addedNodes: string[];
|
|
24
|
+
removedNodes: string[];
|
|
25
|
+
addedEdges: string[];
|
|
26
|
+
removedEdges: string[];
|
|
27
|
+
};
|
|
28
|
+
relayout(): void;
|
|
29
|
+
getTension(): number;
|
|
30
|
+
/** The most recent custom layout result (sceneNodes/sceneEdges/overlays as
|
|
31
|
+
* returned by `customNetworkLayout`) - host readback so pages that need the
|
|
32
|
+
* computed placement do not re-run the layout. Null before the first layout
|
|
33
|
+
* or when no custom layout is configured. A failed retry retains the prior
|
|
34
|
+
* good result; inspect `getLayoutFailure()` to distinguish recovery. */
|
|
35
|
+
getCustomLayout(): NetworkLayoutResult | null;
|
|
36
|
+
/** The latest custom-layout failure, if any. Cleared by a successful layout,
|
|
37
|
+
* removing the custom layout, or `clear()`. */
|
|
38
|
+
getLayoutFailure(): CustomLayoutFailureDiagnostic | null;
|
|
39
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type SemanticClickBehavior, type SemanticHoverBehavior } from "../charts/shared/semanticInteractions";
|
|
2
|
+
import type { HoverData } from "../realtime/types";
|
|
3
|
+
import type { OnObservationCallback } from "../store/ObservationStore";
|
|
4
|
+
interface NetworkObservationBehaviorOptions {
|
|
5
|
+
customHoverBehavior?: SemanticHoverBehavior<HoverData>;
|
|
6
|
+
customClickBehavior?: SemanticClickBehavior<HoverData>;
|
|
7
|
+
onObservation?: OnObservationCallback;
|
|
8
|
+
chartId?: string;
|
|
9
|
+
}
|
|
10
|
+
/** Adds the standard observation vocabulary to the network behavior callbacks. */
|
|
11
|
+
export declare function useNetworkObservationBehaviors({ customHoverBehavior: customHoverBehaviorProp, customClickBehavior: customClickBehaviorProp, onObservation, chartId }: NetworkObservationBehaviorOptions): {
|
|
12
|
+
customHoverBehavior: SemanticHoverBehavior<HoverData>;
|
|
13
|
+
customClickBehavior: SemanticClickBehavior<HoverData>;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
import type { NetworkPipelineStore } from "./NetworkPipelineStore";
|
|
2
|
-
import type {
|
|
2
|
+
import type { SceneRevisionDiagnostics } from "./sceneRevisionDiagnostics";
|
|
3
|
+
import type { NetworkPipelineConfig, ParticleStyle, RealtimeEdge, NetworkSceneNode, NetworkSceneEdge } from "./networkTypes";
|
|
3
4
|
import type { MarginType } from "../types/marginType";
|
|
4
|
-
import type { DecayConfig, PulseConfig, StalenessConfig } from "./types";
|
|
5
|
+
import type { DecayConfig, PulseConfig, StalenessConfig, SceneRenderMode } from "./types";
|
|
5
6
|
export interface NetworkFramePaintContext {
|
|
6
7
|
canvas: HTMLCanvasElement;
|
|
7
8
|
store: NetworkPipelineStore;
|
|
9
|
+
sceneRevisionDiagnostics?: SceneRevisionDiagnostics;
|
|
8
10
|
size: [number, number];
|
|
9
11
|
margin: MarginType;
|
|
10
12
|
adjustedWidth: number;
|
|
11
13
|
adjustedHeight: number;
|
|
12
14
|
background?: string;
|
|
15
|
+
renderMode?: SceneRenderMode<NetworkSceneNode | NetworkSceneEdge>;
|
|
16
|
+
/** Skip opaque canvas fill when an SVG backgroundGraphics layer is present. */
|
|
17
|
+
hasBackgroundGraphics?: boolean;
|
|
13
18
|
dirtyRef: {
|
|
14
19
|
current: boolean;
|
|
15
20
|
};
|
|
16
21
|
lastFrameTimeRef: {
|
|
17
22
|
current: number;
|
|
18
23
|
};
|
|
24
|
+
/** FrameRuntime logical timestamp for this paint. */
|
|
25
|
+
now: number;
|
|
26
|
+
/** FrameRuntime random source for particle placement/spawn sampling. */
|
|
27
|
+
random: () => number;
|
|
19
28
|
reducedMotion: boolean;
|
|
20
29
|
showParticles: boolean;
|
|
21
30
|
isContinuous: boolean;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { Datum } from "../charts/shared/datumTypes";
|
|
3
|
+
import type { SemanticClickBehavior, SemanticHoverBehavior } from "../charts/shared/semanticInteractions";
|
|
4
|
+
import type { OnAnnotationActivateCallback } from "../charts/shared/annotationActivation";
|
|
5
|
+
import type { AnnotationContext, HoverData } from "../realtime/types";
|
|
6
|
+
import type { AutoPlaceAnnotations } from "../recipes/annotationLayout";
|
|
7
|
+
import type { OnObservationCallback } from "../store/ObservationStore";
|
|
8
|
+
/** Interaction and annotation callbacks shared by every network chart layout. */
|
|
9
|
+
export interface StreamNetworkInteractionProps<Node, Edge> {
|
|
10
|
+
enableHover?: boolean;
|
|
11
|
+
tooltipContent?: (d: HoverData) => ReactNode;
|
|
12
|
+
customHoverBehavior?: SemanticHoverBehavior<HoverData>;
|
|
13
|
+
customClickBehavior?: SemanticClickBehavior<HoverData>;
|
|
14
|
+
/** Observation callback — emits hover/click events to the ObservationStore and this callback. */
|
|
15
|
+
onObservation?: OnObservationCallback;
|
|
16
|
+
/** @internal HOC observation callback forwarded only to annotation widgets. */
|
|
17
|
+
annotationObservationCallback?: OnObservationCallback;
|
|
18
|
+
/** Chart instance identifier for observation filtering. */
|
|
19
|
+
chartId?: string;
|
|
20
|
+
onTopologyChange?: (nodes: Node[], edges: Edge[]) => void;
|
|
21
|
+
annotations?: Datum[];
|
|
22
|
+
/** Observe activation of widget annotations without replacing widget behavior. */
|
|
23
|
+
onAnnotationActivate?: OnAnnotationActivateCallback;
|
|
24
|
+
autoPlaceAnnotations?: AutoPlaceAnnotations;
|
|
25
|
+
svgAnnotationRules?: (annotation: Datum, index: number, context: AnnotationContext) => ReactNode;
|
|
26
|
+
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type { SemioticTheme } from "../store/ThemeStore";
|
|
6
6
|
import type { NetworkPipelineConfig } from "./networkTypes";
|
|
7
7
|
import type { StreamNetworkFrameProps } from "./networkTypes";
|
|
8
|
-
export type NetworkPipelineConfigSources = Pick<StreamNetworkFrameProps, "chartType" | "nodeIDAccessor" | "sourceAccessor" | "targetAccessor" | "valueAccessor" | "edgeIdAccessor" | "childrenAccessor" | "hierarchySum" | "orientation" | "nodeAlign" | "nodePaddingRatio" | "nodeWidth" | "iterations" | "forceStrength" | "padAngle" | "groupWidth" | "sortGroups" | "edgeSort" | "treeOrientation" | "edgeType" | "padding" | "paddingTop" | "nodeStyle" | "edgeStyle" | "nodeLabel" | "showLabels" | "labelMode" | "colorBy" | "colorScheme" | "edgeColorBy" | "edgeOpacity" | "colorByDepth" | "nodeSize" | "nodeSizeRange" | "decay" | "pulse" | "transition" | "staleness" | "thresholds" | "orbitMode" | "orbitSize" | "orbitSpeed" | "orbitRevolution" | "orbitRevolutionStyle" | "orbitEccentricity" | "orbitShowRings" | "orbitAnimated" | "customNetworkLayout" | "onLayoutError" | "layoutConfig"> & {
|
|
8
|
+
export type NetworkPipelineConfigSources = Pick<StreamNetworkFrameProps, "chartType" | "nodeIDAccessor" | "sourceAccessor" | "targetAccessor" | "valueAccessor" | "edgeIdAccessor" | "childrenAccessor" | "hierarchySum" | "orientation" | "nodeAlign" | "nodePaddingRatio" | "nodeWidth" | "iterations" | "forceStrength" | "padAngle" | "groupWidth" | "sortGroups" | "edgeSort" | "treeOrientation" | "edgeType" | "padding" | "paddingTop" | "nodeStyle" | "edgeStyle" | "nodeLabel" | "showLabels" | "labelMode" | "colorBy" | "colorScheme" | "edgeColorBy" | "edgeOpacity" | "colorByDepth" | "nodeSize" | "nodeSizeRange" | "decay" | "pulse" | "transition" | "staleness" | "thresholds" | "orbitMode" | "orbitSize" | "orbitSpeed" | "orbitRevolution" | "orbitRevolutionStyle" | "orbitEccentricity" | "orbitShowRings" | "orbitAnimated" | "clock" | "random" | "seed" | "customNetworkLayout" | "onLayoutError" | "layoutConfig"> & {
|
|
9
9
|
tensionConfig: NetworkPipelineConfig["tensionConfig"];
|
|
10
10
|
showParticles: boolean;
|
|
11
11
|
particleStyle: NetworkPipelineConfig["particleStyle"];
|
|
@@ -14,7 +14,7 @@ export type NetworkPipelineConfigSources = Pick<StreamNetworkFrameProps, "chartT
|
|
|
14
14
|
};
|
|
15
15
|
export declare function buildNetworkPipelineConfig(sources: NetworkPipelineConfigSources): NetworkPipelineConfig;
|
|
16
16
|
/** Fields that force re-ingest / re-layout when changed. */
|
|
17
|
-
export type NetworkLayoutConfigSignature = Pick<NetworkPipelineConfigSources, "chartType" | "nodeIDAccessor" | "sourceAccessor" | "targetAccessor" | "valueAccessor" | "edgeIdAccessor" | "childrenAccessor" | "hierarchySum" | "orientation" | "nodeAlign" | "nodePaddingRatio" | "nodeWidth" | "iterations" | "forceStrength" | "padAngle" | "groupWidth" | "sortGroups" | "edgeSort" | "treeOrientation" | "edgeType" | "padding" | "paddingTop" | "tensionConfig" | "customNetworkLayout"> & {
|
|
17
|
+
export type NetworkLayoutConfigSignature = Pick<NetworkPipelineConfigSources, "chartType" | "nodeIDAccessor" | "sourceAccessor" | "targetAccessor" | "valueAccessor" | "edgeIdAccessor" | "childrenAccessor" | "hierarchySum" | "orientation" | "nodeAlign" | "nodePaddingRatio" | "nodeWidth" | "iterations" | "forceStrength" | "padAngle" | "groupWidth" | "sortGroups" | "edgeSort" | "treeOrientation" | "edgeType" | "padding" | "paddingTop" | "random" | "seed" | "tensionConfig" | "customNetworkLayout"> & {
|
|
18
18
|
orbitMode?: NetworkPipelineConfigSources["orbitMode"];
|
|
19
19
|
orbitSize?: NetworkPipelineConfigSources["orbitSize"];
|
|
20
20
|
orbitEccentricity?: NetworkPipelineConfigSources["orbitEccentricity"];
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type ChangeSet, type Invalidation, type UpdateResult } from "./pipelineUpdateContract";
|
|
2
|
+
/**
|
|
3
|
+
* The retained topology is unchanged by most config updates. The distinction
|
|
4
|
+
* is public here because callers must not mistake a config patch for a new
|
|
5
|
+
* ingest: only accessor/chart-type patches need the retained raw graph
|
|
6
|
+
* re-derived before the declared layout work runs.
|
|
7
|
+
*/
|
|
8
|
+
export type NetworkRetainedDataEffect = "preserve" | "rebuild";
|
|
9
|
+
export interface NetworkConfigPatchDependency {
|
|
10
|
+
readonly retainedData: NetworkRetainedDataEffect;
|
|
11
|
+
readonly invalidations: readonly Invalidation[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Network's config dependency table. It is deliberately key-level rather
|
|
15
|
+
* than a single conservative fallback so an integration can inspect whether
|
|
16
|
+
* a patch rebuilds retained topology, relays out marks, repaints styles, or
|
|
17
|
+
* only changes future work. Unknown future keys retain the safe layout
|
|
18
|
+
* fallback below until they receive an explicit entry.
|
|
19
|
+
*/
|
|
20
|
+
export declare const NETWORK_CONFIG_PATCH_DEPENDENCIES: Readonly<Record<string, NetworkConfigPatchDependency>>;
|
|
21
|
+
export interface NetworkConfigPatchClassification {
|
|
22
|
+
readonly retainedData: NetworkRetainedDataEffect;
|
|
23
|
+
readonly invalidations: ReadonlySet<Invalidation>;
|
|
24
|
+
}
|
|
25
|
+
/** Union the declared effects for a patch after its effective keys are known. */
|
|
26
|
+
export declare function classifyNetworkConfigPatch(keys: readonly string[]): NetworkConfigPatchClassification;
|
|
27
|
+
type DataChangeKind = Extract<ChangeSet["kind"], "ingest" | "replace" | "remove" | "update" | "clear">;
|
|
28
|
+
/** Result bookkeeping and explicit config-patch dependency policy for Network. */
|
|
29
|
+
export declare class NetworkPipelineUpdateResults {
|
|
30
|
+
private tracker;
|
|
31
|
+
get last(): UpdateResult;
|
|
32
|
+
subscribe(listener: () => void): () => void;
|
|
33
|
+
recordData(kind: DataChangeKind, count?: number): UpdateResult;
|
|
34
|
+
recordNoop(kind: DataChangeKind | "restyle"): UpdateResult;
|
|
35
|
+
recordRestyle(hasCustomRestyle: boolean): UpdateResult;
|
|
36
|
+
recordConfig(keys: readonly string[]): UpdateResult;
|
|
37
|
+
}
|
|
38
|
+
export {};
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
2
|
+
import type { HoverData } from "../realtime/types";
|
|
3
|
+
import type { Datum } from "../charts/shared/datumTypes";
|
|
4
|
+
type NetworkDatumComparator = {
|
|
5
|
+
bivarianceHack(a: Datum, b: Datum): number;
|
|
6
|
+
}["bivarianceHack"];
|
|
7
|
+
type NetworkGroupComparator = (a: number, b: number) => number;
|
|
4
8
|
import type { LegendGroup, LegendLayout } from "../types/legendTypes";
|
|
5
|
-
import type { Style, DecayConfig, PulseConfig, TransitionConfig, StalenessConfig, ThemeSemanticColors, SceneDatum, SceneAccessibilityMetadata } from "./types";
|
|
9
|
+
import type { Style, DecayConfig, PulseConfig, TransitionConfig, StalenessConfig, ThemeSemanticColors, SceneDatum, SceneAccessibilityMetadata, SceneRenderMode } from "./types";
|
|
6
10
|
import type { AnimateProp } from "./pipelineTransitionUtils";
|
|
7
|
-
import type { Datum } from "../charts/shared/datumTypes";
|
|
8
|
-
import type { AutoPlaceAnnotations } from "../recipes/annotationLayout";
|
|
9
11
|
import type { NetworkSymbolName } from "./symbolPath";
|
|
10
12
|
import type { GlyphDef } from "./glyphDef";
|
|
13
|
+
import type { StreamNetworkFrameHandle } from "./networkFrameHandleTypes";
|
|
14
|
+
import type { StreamNetworkInteractionProps } from "./networkInteractionTypes";
|
|
11
15
|
export interface TensionConfig {
|
|
12
16
|
weightChange: number;
|
|
13
17
|
newEdge: number;
|
|
@@ -184,6 +188,8 @@ export interface RealtimeNetworkFrameProps {
|
|
|
184
188
|
tensionConfig?: Partial<TensionConfig>;
|
|
185
189
|
showParticles?: boolean;
|
|
186
190
|
particleStyle?: ParticleStyle;
|
|
191
|
+
/** Optional scene paint backend. Exact node and edge geometry remains interactive. */
|
|
192
|
+
renderMode?: SceneRenderMode<NetworkSceneNode | NetworkSceneEdge>;
|
|
187
193
|
colorBy?: string | ((d: RealtimeNode) => string);
|
|
188
194
|
colorScheme?: string | string[] | Record<string, string>;
|
|
189
195
|
edgeColorBy?: "source" | "target" | ((d: RealtimeEdge) => string);
|
|
@@ -445,6 +451,12 @@ export interface ThresholdAlertConfig {
|
|
|
445
451
|
}
|
|
446
452
|
export interface NetworkPipelineConfig {
|
|
447
453
|
chartType: NetworkChartType;
|
|
454
|
+
/** Frame-owned logical clock for ingest, live encodings, and transitions. */
|
|
455
|
+
clock?: import("./FrameRuntime").FrameClock;
|
|
456
|
+
/** Frame-local random source used by synchronous force layout. */
|
|
457
|
+
random?: import("./FrameRuntime").FrameRandom;
|
|
458
|
+
/** Serializable deterministic seed, including the force-worker protocol. */
|
|
459
|
+
seed?: number;
|
|
448
460
|
nodeIDAccessor?: string | ((d: Datum) => string);
|
|
449
461
|
sourceAccessor?: string | ((d: Datum) => string);
|
|
450
462
|
targetAccessor?: string | ((d: Datum) => string);
|
|
@@ -457,14 +469,14 @@ export interface NetworkPipelineConfig {
|
|
|
457
469
|
nodeAlign?: "justify" | "left" | "right" | "center";
|
|
458
470
|
nodePaddingRatio?: number;
|
|
459
471
|
nodeWidth?: number;
|
|
460
|
-
edgeSort?:
|
|
472
|
+
edgeSort?: NetworkDatumComparator;
|
|
461
473
|
iterations?: number;
|
|
462
474
|
forceStrength?: number;
|
|
463
475
|
/** @internal Skip simulation after worker-computed positions are applied. */
|
|
464
476
|
__skipForceSimulation?: boolean;
|
|
465
477
|
padAngle?: number;
|
|
466
478
|
groupWidth?: number;
|
|
467
|
-
sortGroups?:
|
|
479
|
+
sortGroups?: NetworkGroupComparator;
|
|
468
480
|
treeOrientation?: "vertical" | "horizontal" | "radial";
|
|
469
481
|
edgeType?: "line" | "curve";
|
|
470
482
|
padding?: number;
|
|
@@ -541,7 +553,7 @@ export interface NetworkPipelineConfig {
|
|
|
541
553
|
* `buildScene` (re-emitting dimmed marks) without a re-ingest or re-layout. */
|
|
542
554
|
layoutSelection?: import("./networkCustomLayout").NetworkLayoutSelection | null;
|
|
543
555
|
}
|
|
544
|
-
export interface StreamNetworkFrameProps<T = Datum> {
|
|
556
|
+
export interface StreamNetworkFrameProps<T = Datum> extends StreamNetworkInteractionProps<RealtimeNode, RealtimeEdge> {
|
|
545
557
|
chartType: NetworkChartType;
|
|
546
558
|
nodes?: T[];
|
|
547
559
|
edges?: T[] | T;
|
|
@@ -570,8 +582,10 @@ export interface StreamNetworkFrameProps<T = Datum> {
|
|
|
570
582
|
onLayoutStateChange?: (state: "pending" | "ready" | "error") => void;
|
|
571
583
|
padAngle?: number;
|
|
572
584
|
groupWidth?: number;
|
|
573
|
-
sortGroups?:
|
|
574
|
-
edgeSort?:
|
|
585
|
+
sortGroups?: NetworkGroupComparator;
|
|
586
|
+
edgeSort?: NetworkDatumComparator;
|
|
587
|
+
/** Optional scene paint backend. Exact node and edge geometry remains interactive. */
|
|
588
|
+
renderMode?: SceneRenderMode<NetworkSceneNode | NetworkSceneEdge>;
|
|
575
589
|
treeOrientation?: "vertical" | "horizontal" | "radial";
|
|
576
590
|
edgeType?: "line" | "curve";
|
|
577
591
|
padding?: number;
|
|
@@ -602,18 +616,6 @@ export interface StreamNetworkFrameProps<T = Datum> {
|
|
|
602
616
|
};
|
|
603
617
|
className?: string;
|
|
604
618
|
background?: string;
|
|
605
|
-
enableHover?: boolean;
|
|
606
|
-
tooltipContent?: (d: HoverData) => ReactNode;
|
|
607
|
-
customHoverBehavior?: (d: HoverData | null) => void;
|
|
608
|
-
customClickBehavior?: (d: HoverData | null) => void;
|
|
609
|
-
/** Observation callback — emits hover/click events to the ObservationStore and this callback */
|
|
610
|
-
onObservation?: OnObservationCallback;
|
|
611
|
-
/** Chart instance identifier for observation filtering */
|
|
612
|
-
chartId?: string;
|
|
613
|
-
onTopologyChange?: (nodes: RealtimeNode[], edges: RealtimeEdge[]) => void;
|
|
614
|
-
annotations?: Datum[];
|
|
615
|
-
autoPlaceAnnotations?: AutoPlaceAnnotations;
|
|
616
|
-
svgAnnotationRules?: (annotation: Datum, index: number, context: AnnotationContext) => ReactNode;
|
|
617
619
|
legend?: ReactNode | {
|
|
618
620
|
legendGroups: LegendGroup[];
|
|
619
621
|
};
|
|
@@ -638,6 +640,18 @@ export interface StreamNetworkFrameProps<T = Datum> {
|
|
|
638
640
|
* Set `{ intro: false }` to disable the intro animation. */
|
|
639
641
|
animate?: AnimateProp;
|
|
640
642
|
staleness?: StalenessConfig;
|
|
643
|
+
/** Optional rAF seam for deterministic host scheduling. */
|
|
644
|
+
frameScheduler?: import("./useFrame").FrameScheduler;
|
|
645
|
+
/** Monotonic wall-clock seam used to derive logical frame time. */
|
|
646
|
+
clock?: import("./FrameRuntime").FrameClock;
|
|
647
|
+
/** Injectable random source for force layout and particles. */
|
|
648
|
+
random?: import("./FrameRuntime").FrameRandom;
|
|
649
|
+
/** Serializable deterministic random seed. Ignored when `random` is supplied. */
|
|
650
|
+
seed?: number;
|
|
651
|
+
/** Freeze logical animation time and cancel queued work while paused. */
|
|
652
|
+
paused?: boolean;
|
|
653
|
+
/** Freeze logical animation time while the document is hidden. Defaults to true. */
|
|
654
|
+
suspendWhenHidden?: boolean;
|
|
641
655
|
thresholds?: ThresholdAlertConfig;
|
|
642
656
|
orbitMode?: "flat" | "solar" | "atomic" | number[];
|
|
643
657
|
orbitSize?: number | ((node: Datum) => number);
|
|
@@ -666,38 +680,5 @@ export interface StreamNetworkFrameProps<T = Datum> {
|
|
|
666
680
|
* `selection` / `linkedHover` wiring; render-only (no re-ingest on change). */
|
|
667
681
|
layoutSelection?: import("./networkCustomLayout").NetworkLayoutSelection | null;
|
|
668
682
|
}
|
|
669
|
-
export
|
|
670
|
-
push(edge: EdgePush): void;
|
|
671
|
-
pushMany(edges: EdgePush[]): void;
|
|
672
|
-
/** Remove a node by ID. Also removes connected edges. */
|
|
673
|
-
removeNode(id: string): boolean;
|
|
674
|
-
/** Remove edges by source+target, or by edge ID when edgeIdAccessor is configured. */
|
|
675
|
-
removeEdge(sourceIdOrEdgeId: string, targetId?: string): boolean;
|
|
676
|
-
/** Update a node's data by ID. Returns previous data. */
|
|
677
|
-
updateNode(id: string, updater: (data: Datum) => Datum): Datum | null;
|
|
678
|
-
/** Update all edges between source+target. Returns array of previous data. */
|
|
679
|
-
updateEdge(sourceId: string, targetId: string, updater: (data: Datum) => Datum): Datum[];
|
|
680
|
-
clear(): void;
|
|
681
|
-
getTopology(): {
|
|
682
|
-
nodes: RealtimeNode[];
|
|
683
|
-
edges: RealtimeEdge[];
|
|
684
|
-
};
|
|
685
|
-
getTopologyDiff(): {
|
|
686
|
-
addedNodes: string[];
|
|
687
|
-
removedNodes: string[];
|
|
688
|
-
addedEdges: string[];
|
|
689
|
-
removedEdges: string[];
|
|
690
|
-
};
|
|
691
|
-
relayout(): void;
|
|
692
|
-
getTension(): number;
|
|
693
|
-
/** The most recent custom layout result (sceneNodes/sceneEdges/overlays as
|
|
694
|
-
* returned by `customNetworkLayout`) — host readback so pages that need the
|
|
695
|
-
* computed placement don't re-run the layout. Null before the first layout
|
|
696
|
-
* or when no custom layout is configured. A failed retry retains the prior
|
|
697
|
-
* good result; inspect `getLayoutFailure()` to distinguish recovery. */
|
|
698
|
-
getCustomLayout(): import("./networkCustomLayout").NetworkLayoutResult | null;
|
|
699
|
-
/** The latest custom-layout failure, if any. Cleared by a successful layout,
|
|
700
|
-
* removing the custom layout, or `clear()`. */
|
|
701
|
-
getLayoutFailure(): import("./customLayoutFailure").CustomLayoutFailureDiagnostic | null;
|
|
702
|
-
}
|
|
683
|
+
export type { StreamNetworkFrameHandle } from "./networkFrameHandleTypes";
|
|
703
684
|
export type NetworkRendererFn = (ctx: CanvasRenderingContext2D, nodes: NetworkSceneNode[], edges: NetworkSceneEdge[], size: [number, number]) => void;
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
* Chart-type → canvas renderer dispatch for StreamOrdinalFrame.
|
|
3
3
|
* Connectors are always included when the chart type builds them into the scene.
|
|
4
4
|
*/
|
|
5
|
-
import type { OrdinalChartType } from "./ordinalTypes";
|
|
6
|
-
export type OrdinalAnyRendererFn =
|
|
5
|
+
import type { OrdinalChartType, OrdinalRendererFn } from "./ordinalTypes";
|
|
6
|
+
export type OrdinalAnyRendererFn = OrdinalRendererFn;
|
|
7
7
|
export declare const ORDINAL_CANVAS_RENDERERS: Record<OrdinalChartType, OrdinalAnyRendererFn[]>;
|
|
@@ -1,9 +1,28 @@
|
|
|
1
|
-
import { type ChangeSet, type UpdateResult } from "./pipelineUpdateContract";
|
|
1
|
+
import { type ChangeSet, type Invalidation, type UpdateResult } from "./pipelineUpdateContract";
|
|
2
|
+
/** Whether a config patch re-derives retained ordinal data resources. */
|
|
3
|
+
export type OrdinalRetainedDataEffect = "preserve" | "rebuild";
|
|
4
|
+
export interface OrdinalConfigPatchDependency {
|
|
5
|
+
readonly retainedData: OrdinalRetainedDataEffect;
|
|
6
|
+
readonly invalidations: readonly Invalidation[];
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Ordinal's key-level patch policy. Category/value/order accessors re-derive
|
|
10
|
+
* retained categorical state. Layout, style, and future-only controls expose
|
|
11
|
+
* distinct revision effects instead of the previous blanket scene rebuild.
|
|
12
|
+
*/
|
|
13
|
+
export declare const ORDINAL_CONFIG_PATCH_DEPENDENCIES: Readonly<Record<string, OrdinalConfigPatchDependency>>;
|
|
14
|
+
export interface OrdinalConfigPatchClassification {
|
|
15
|
+
readonly retainedData: OrdinalRetainedDataEffect;
|
|
16
|
+
readonly invalidations: ReadonlySet<Invalidation>;
|
|
17
|
+
}
|
|
18
|
+
/** Union the declared effects for a patch after its effective keys are known. */
|
|
19
|
+
export declare function classifyOrdinalConfigPatch(keys: readonly string[]): OrdinalConfigPatchClassification;
|
|
2
20
|
type DataChangeKind = Extract<ChangeSet["kind"], "ingest" | "replace" | "remove" | "update" | "clear">;
|
|
3
21
|
/** Result bookkeeping and invalidation policy for the Ordinal store pilot. */
|
|
4
22
|
export declare class OrdinalPipelineUpdateResults {
|
|
5
23
|
private tracker;
|
|
6
24
|
get last(): UpdateResult;
|
|
25
|
+
subscribe(listener: () => void): () => void;
|
|
7
26
|
recordData(kind: DataChangeKind, count?: number): UpdateResult;
|
|
8
27
|
recordNoop(kind: DataChangeKind | "restyle"): UpdateResult;
|
|
9
28
|
recordRestyle(hasCustomRestyle: boolean): UpdateResult;
|