@splunk/visualizations 28.6.0 → 28.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Area.js +2 -2
- package/Bar.js +2 -2
- package/Bubble.js +2 -2
- package/CHANGELOG.external.md +19 -50
- package/ChoroplethSvg.js +2 -2
- package/Column.js +2 -2
- package/Ellipse.js +2 -2
- package/Events/PureEvents/FieldSummaryTooltip.d.ts +8 -31
- package/Events/PureEvents/FieldSummaryTooltip.d.ts.map +1 -1
- package/Events/PureEvents/PureEvents.d.ts.map +1 -1
- package/Events/PureEvents/TimeControlsPopover.d.ts +6 -25
- package/Events/PureEvents/TimeControlsPopover.d.ts.map +1 -1
- package/Events.js +27 -101
- package/Events.js.map +2 -2
- package/FillerGauge.js +2 -2
- package/Image.js +2 -2
- package/Line.js +2 -2
- package/LinkGraph.js +2 -2
- package/Map/Map.d.ts +1 -0
- package/Map/Map.d.ts.map +1 -1
- package/Map/PureMap/BubbleLayer.d.ts +22 -4
- package/Map/PureMap/BubbleLayer.d.ts.map +1 -1
- package/Map/PureMap/ChoroplethLayer.d.ts +9 -1
- package/Map/PureMap/ChoroplethLayer.d.ts.map +1 -1
- package/Map/PureMap/ClusterLayer.d.ts +3 -1
- package/Map/PureMap/ClusterLayer.d.ts.map +1 -1
- package/Map/PureMap/LocalChoroplethLayer.d.ts +1 -0
- package/Map/PureMap/LocalChoroplethLayer.d.ts.map +1 -1
- package/Map/PureMap/MapContext.d.ts +13 -0
- package/Map/PureMap/MapContext.d.ts.map +1 -0
- package/Map/PureMap/MarkerLayer.d.ts +19 -2
- package/Map/PureMap/MarkerLayer.d.ts.map +1 -1
- package/Map/PureMap/MarkerWrapper.d.ts +3 -2
- package/Map/PureMap/MarkerWrapper.d.ts.map +1 -1
- package/Map/PureMap/PureMap.d.ts +1 -0
- package/Map/PureMap/PureMap.d.ts.map +1 -1
- package/Map/PureMap/PureMapContainer.d.ts.map +1 -1
- package/Map/PureMap/Tooltip.d.ts +6 -1
- package/Map/PureMap/Tooltip.d.ts.map +1 -1
- package/Map/PureMap/keyboardConstants.d.ts +11 -0
- package/Map/PureMap/keyboardConstants.d.ts.map +1 -0
- package/Map/PureMap/useRovingTabindex.d.ts +18 -0
- package/Map/PureMap/useRovingTabindex.d.ts.map +1 -0
- package/Map.js +1317 -478
- package/Map.js.map +4 -4
- package/Markdown/Markdown.d.ts.map +1 -1
- package/Markdown.js +23 -6
- package/Markdown.js.map +2 -2
- package/MarkerGauge.js +2 -2
- package/NetworkGraph/NetworkGraph.d.ts +2 -5
- package/NetworkGraph/NetworkGraph.d.ts.map +1 -1
- package/NetworkGraph/PureNetworkGraph/PureNetworkGraph.d.ts.map +1 -1
- package/NetworkGraph/PureNetworkGraph/components/NetworkGraphSvg.d.ts +1 -0
- package/NetworkGraph/PureNetworkGraph/components/NetworkGraphSvg.d.ts.map +1 -1
- package/NetworkGraph/PureNetworkGraph/components/Node.d.ts +1 -0
- package/NetworkGraph/PureNetworkGraph/components/Node.d.ts.map +1 -1
- package/NetworkGraph/PureNetworkGraph/components/Tooltip.d.ts +1 -1
- package/NetworkGraph/PureNetworkGraph/components/Tooltip.d.ts.map +1 -1
- package/NetworkGraph/PureNetworkGraph/components/ZoomControls.d.ts +1 -0
- package/NetworkGraph/PureNetworkGraph/components/ZoomControls.d.ts.map +1 -1
- package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts +23 -0
- package/NetworkGraph/PureNetworkGraph/utils/networkGraphUtils.d.ts.map +1 -1
- package/NetworkGraph.config.js +2 -0
- package/NetworkGraph.config.js.map +2 -2
- package/NetworkGraph.js +353 -40
- package/NetworkGraph.js.map +4 -4
- package/ParallelCoordinates.js +2 -2
- package/Pie.js +2 -2
- package/ProcessTree/ProcessTree.d.ts +3 -1
- package/ProcessTree/ProcessTree.d.ts.map +1 -1
- package/ProcessTree/PureProcessTree/PureProcessTree.d.ts +1 -0
- package/ProcessTree/PureProcessTree/PureProcessTree.d.ts.map +1 -1
- package/ProcessTree/PureProcessTree/components/ProcessTreeLeftPanel.d.ts +2 -0
- package/ProcessTree/PureProcessTree/components/ProcessTreeLeftPanel.d.ts.map +1 -1
- package/ProcessTree/PureProcessTree/components/ProcessTreeRightPanel.d.ts.map +1 -1
- package/ProcessTree/PureProcessTree/hooks/useProcessTreeGraphData.d.ts +3 -1
- package/ProcessTree/PureProcessTree/hooks/useProcessTreeGraphData.d.ts.map +1 -1
- package/ProcessTree/PureProcessTree/mockdata/data.d.ts.map +1 -1
- package/ProcessTree/PureProcessTree/utils/processTreeUtils.d.ts +3 -1
- package/ProcessTree/PureProcessTree/utils/processTreeUtils.d.ts.map +1 -1
- package/ProcessTree.js +101 -31
- package/ProcessTree.js.map +3 -3
- package/Punchcard.js +2 -2
- package/README.md +2 -0
- package/Rectangle.js +2 -2
- package/RichText.js +2 -2
- package/Sankey.js +2 -2
- package/Scatter.js +2 -2
- package/SingleValue.js +368 -471
- package/SingleValue.js.map +4 -4
- package/SingleValueIcon.js +2 -2
- package/SingleValueRadial.js +2 -2
- package/SparkLine/SparkLine.d.ts +57 -0
- package/SparkLine/SparkLine.d.ts.map +1 -0
- package/SparkLine/index.d.ts +1 -1
- package/SparkLine/index.d.ts.map +1 -1
- package/SparkLine.js +384 -485
- package/SparkLine.js.map +4 -4
- package/Table/PureTable.d.ts.map +1 -1
- package/Table/hooks.d.ts +1 -1
- package/Table/hooks.d.ts.map +1 -1
- package/Table.js +391 -493
- package/Table.js.map +4 -4
- package/Timeline.js +2 -2
- package/common/OptionsDoc.js.map +1 -1
- package/common/utils/mapUtils.js +512 -179
- package/common/utils/mapUtils.js.map +4 -4
- package/common/utils/shadowDomUtils.d.ts +2 -0
- package/common/utils/shadowDomUtils.d.ts.map +1 -0
- package/common/utils/shadowDomUtils.js +39 -0
- package/common/utils/shadowDomUtils.js.map +7 -0
- package/common/withDashboardViz.js +2 -2
- package/docs-llm/INDEX.md +118 -0
- package/docs-llm/area/examples-json.md +3854 -0
- package/docs-llm/area/examples-react.md +2816 -0
- package/docs-llm/area/options.md +97 -0
- package/docs-llm/area/overview.md +27 -0
- package/docs-llm/bar/examples-json.md +3380 -0
- package/docs-llm/bar/examples-react.md +2352 -0
- package/docs-llm/bar/options.md +89 -0
- package/docs-llm/bar/overview.md +25 -0
- package/docs-llm/bubble/examples-json.md +4082 -0
- package/docs-llm/bubble/examples-react.md +3977 -0
- package/docs-llm/bubble/options.md +62 -0
- package/docs-llm/bubble/overview.md +26 -0
- package/docs-llm/choropleth-svg/examples-json.md +397 -0
- package/docs-llm/choropleth-svg/examples-react.md +389 -0
- package/docs-llm/choropleth-svg/options.md +15 -0
- package/docs-llm/choropleth-svg/overview.md +23 -0
- package/docs-llm/column/examples-json.md +3898 -0
- package/docs-llm/column/examples-react.md +2653 -0
- package/docs-llm/column/options.md +94 -0
- package/docs-llm/column/overview.md +31 -0
- package/docs-llm/dsl/examples-json.md +43 -0
- package/docs-llm/dsl/examples-react.md +78 -0
- package/docs-llm/dsl/formatters/format-by-type-examples-json.md +58 -0
- package/docs-llm/dsl/formatters/format-by-type-examples-react.md +43 -0
- package/docs-llm/dsl/formatters/format-by-type.md +38 -0
- package/docs-llm/dsl/formatters/frame-examples-json.md +42 -0
- package/docs-llm/dsl/formatters/frame-examples-react.md +24 -0
- package/docs-llm/dsl/formatters/frame.md +6 -0
- package/docs-llm/dsl/formatters/gradient-examples-json.md +98 -0
- package/docs-llm/dsl/formatters/gradient-examples-react.md +44 -0
- package/docs-llm/dsl/formatters/gradient.md +23 -0
- package/docs-llm/dsl/formatters/lerp-examples-json.md +40 -0
- package/docs-llm/dsl/formatters/lerp-examples-react.md +28 -0
- package/docs-llm/dsl/formatters/lerp.md +19 -0
- package/docs-llm/dsl/formatters/match-value-examples-json.md +65 -0
- package/docs-llm/dsl/formatters/match-value-examples-react.md +37 -0
- package/docs-llm/dsl/formatters/match-value.md +13 -0
- package/docs-llm/dsl/formatters/max-contrast-examples-json.md +39 -0
- package/docs-llm/dsl/formatters/max-contrast-examples-react.md +27 -0
- package/docs-llm/dsl/formatters/max-contrast.md +9 -0
- package/docs-llm/dsl/formatters/multi-format-examples-json.md +67 -0
- package/docs-llm/dsl/formatters/multi-format-examples-react.md +49 -0
- package/docs-llm/dsl/formatters/multi-format.md +12 -0
- package/docs-llm/dsl/formatters/objects-examples-json.md +49 -0
- package/docs-llm/dsl/formatters/objects-examples-react.md +37 -0
- package/docs-llm/dsl/formatters/objects.md +3 -0
- package/docs-llm/dsl/formatters/pick-examples-json.md +59 -0
- package/docs-llm/dsl/formatters/pick-examples-react.md +30 -0
- package/docs-llm/dsl/formatters/pick.md +9 -0
- package/docs-llm/dsl/formatters/prefix-examples-json.md +29 -0
- package/docs-llm/dsl/formatters/prefix-examples-react.md +19 -0
- package/docs-llm/dsl/formatters/prefix.md +3 -0
- package/docs-llm/dsl/formatters/prepend-examples-json.md +51 -0
- package/docs-llm/dsl/formatters/prepend-examples-react.md +33 -0
- package/docs-llm/dsl/formatters/prepend.md +9 -0
- package/docs-llm/dsl/formatters/range-value-examples-json.md +48 -0
- package/docs-llm/dsl/formatters/range-value-examples-react.md +34 -0
- package/docs-llm/dsl/formatters/range-value.md +15 -0
- package/docs-llm/dsl/formatters/set-color-channel-examples-json.md +40 -0
- package/docs-llm/dsl/formatters/set-color-channel-examples-react.md +31 -0
- package/docs-llm/dsl/formatters/set-color-channel.md +9 -0
- package/docs-llm/dsl/formatters/suffix-examples-json.md +29 -0
- package/docs-llm/dsl/formatters/suffix-examples-react.md +19 -0
- package/docs-llm/dsl/formatters/suffix.md +3 -0
- package/docs-llm/dsl/formatters/type-examples-json.md +37 -0
- package/docs-llm/dsl/formatters/type-examples-react.md +20 -0
- package/docs-llm/dsl/formatters/type.md +3 -0
- package/docs-llm/dsl/overview.md +41 -0
- package/docs-llm/dsl/selectors/abs.md +7 -0
- package/docs-llm/dsl/selectors/ceil.md +7 -0
- package/docs-llm/dsl/selectors/data-frame-average-examples-json.md +41 -0
- package/docs-llm/dsl/selectors/data-frame-average-examples-react.md +36 -0
- package/docs-llm/dsl/selectors/data-frame-average.md +7 -0
- package/docs-llm/dsl/selectors/data-frame-count-examples-json.md +41 -0
- package/docs-llm/dsl/selectors/data-frame-count-examples-react.md +36 -0
- package/docs-llm/dsl/selectors/data-frame-count.md +7 -0
- package/docs-llm/dsl/selectors/data-frame-examples-json.md +830 -0
- package/docs-llm/dsl/selectors/data-frame-examples-react.md +929 -0
- package/docs-llm/dsl/selectors/data-frame-get-field-examples-json.md +89 -0
- package/docs-llm/dsl/selectors/data-frame-get-field-examples-react.md +124 -0
- package/docs-llm/dsl/selectors/data-frame-get-field.md +5 -0
- package/docs-llm/dsl/selectors/data-frame-get-raw-value.md +5 -0
- package/docs-llm/dsl/selectors/data-frame-get-type.md +5 -0
- package/docs-llm/dsl/selectors/data-frame-get-value.md +5 -0
- package/docs-llm/dsl/selectors/data-frame-max-examples-json.md +51 -0
- package/docs-llm/dsl/selectors/data-frame-max-examples-react.md +41 -0
- package/docs-llm/dsl/selectors/data-frame-max.md +7 -0
- package/docs-llm/dsl/selectors/data-frame-min-examples-json.md +51 -0
- package/docs-llm/dsl/selectors/data-frame-min-examples-react.md +41 -0
- package/docs-llm/dsl/selectors/data-frame-min.md +7 -0
- package/docs-llm/dsl/selectors/data-frame-percentile-examples-json.md +41 -0
- package/docs-llm/dsl/selectors/data-frame-percentile-examples-react.md +36 -0
- package/docs-llm/dsl/selectors/data-frame-percentile.md +8 -0
- package/docs-llm/dsl/selectors/data-frame-set-value.md +5 -0
- package/docs-llm/dsl/selectors/data-frame-sum-examples-json.md +51 -0
- package/docs-llm/dsl/selectors/data-frame-sum-examples-react.md +41 -0
- package/docs-llm/dsl/selectors/data-frame-sum.md +7 -0
- package/docs-llm/dsl/selectors/data-frame.md +4 -0
- package/docs-llm/dsl/selectors/data-point-get-field.md +5 -0
- package/docs-llm/dsl/selectors/data-point-get-raw-value.md +4 -0
- package/docs-llm/dsl/selectors/data-point-get-type.md +5 -0
- package/docs-llm/dsl/selectors/data-point-get-value.md +5 -0
- package/docs-llm/dsl/selectors/data-point-set-value.md +4 -0
- package/docs-llm/dsl/selectors/data-point.md +5 -0
- package/docs-llm/dsl/selectors/data-series-average.md +22 -0
- package/docs-llm/dsl/selectors/data-series-count.md +14 -0
- package/docs-llm/dsl/selectors/data-series-get-field.md +5 -0
- package/docs-llm/dsl/selectors/data-series-get-raw-value.md +4 -0
- package/docs-llm/dsl/selectors/data-series-get-type.md +5 -0
- package/docs-llm/dsl/selectors/data-series-get-value.md +4 -0
- package/docs-llm/dsl/selectors/data-series-max.md +5 -0
- package/docs-llm/dsl/selectors/data-series-min.md +5 -0
- package/docs-llm/dsl/selectors/data-series-percentile.md +17 -0
- package/docs-llm/dsl/selectors/data-series-set-value.md +4 -0
- package/docs-llm/dsl/selectors/data-series-sum.md +24 -0
- package/docs-llm/dsl/selectors/data-series.md +4 -0
- package/docs-llm/dsl/selectors/delta.md +7 -0
- package/docs-llm/dsl/selectors/divide.md +8 -0
- package/docs-llm/dsl/selectors/first-point.md +5 -0
- package/docs-llm/dsl/selectors/floor.md +7 -0
- package/docs-llm/dsl/selectors/frame-by-series-index-range-examples-json.md +89 -0
- package/docs-llm/dsl/selectors/frame-by-series-index-range-examples-react.md +88 -0
- package/docs-llm/dsl/selectors/frame-by-series-index-range.md +10 -0
- package/docs-llm/dsl/selectors/frame-by-series-indexes-examples-json.md +88 -0
- package/docs-llm/dsl/selectors/frame-by-series-indexes-examples-react.md +87 -0
- package/docs-llm/dsl/selectors/frame-by-series-indexes.md +9 -0
- package/docs-llm/dsl/selectors/frame-by-series-names-examples-json.md +89 -0
- package/docs-llm/dsl/selectors/frame-by-series-names-examples-react.md +88 -0
- package/docs-llm/dsl/selectors/frame-by-series-names-or-indexes-examples-json.md +89 -0
- package/docs-llm/dsl/selectors/frame-by-series-names-or-indexes-examples-react.md +88 -0
- package/docs-llm/dsl/selectors/frame-by-series-names-or-indexes.md +9 -0
- package/docs-llm/dsl/selectors/frame-by-series-names.md +9 -0
- package/docs-llm/dsl/selectors/frame-by-series-types-examples-json.md +89 -0
- package/docs-llm/dsl/selectors/frame-by-series-types-examples-react.md +88 -0
- package/docs-llm/dsl/selectors/frame-by-series-types.md +9 -0
- package/docs-llm/dsl/selectors/frame-without-internal-fields-examples-json.md +137 -0
- package/docs-llm/dsl/selectors/frame-without-internal-fields-examples-react.md +135 -0
- package/docs-llm/dsl/selectors/frame-without-internal-fields-except-examples-json.md +157 -0
- package/docs-llm/dsl/selectors/frame-without-internal-fields-except-examples-react.md +155 -0
- package/docs-llm/dsl/selectors/frame-without-internal-fields-except.md +21 -0
- package/docs-llm/dsl/selectors/frame-without-internal-fields.md +17 -0
- package/docs-llm/dsl/selectors/frame-without-series-names.md +8 -0
- package/docs-llm/dsl/selectors/last-point.md +5 -0
- package/docs-llm/dsl/selectors/minus.md +8 -0
- package/docs-llm/dsl/selectors/multiply.md +8 -0
- package/docs-llm/dsl/selectors/plus.md +8 -0
- package/docs-llm/dsl/selectors/point-by-index.md +6 -0
- package/docs-llm/dsl/selectors/points-by-indexes.md +6 -0
- package/docs-llm/dsl/selectors/round.md +7 -0
- package/docs-llm/dsl/selectors/series-by-index-examples-json.md +49 -0
- package/docs-llm/dsl/selectors/series-by-index-examples-react.md +39 -0
- package/docs-llm/dsl/selectors/series-by-index.md +8 -0
- package/docs-llm/dsl/selectors/series-by-name-examples-json.md +49 -0
- package/docs-llm/dsl/selectors/series-by-name-examples-react.md +39 -0
- package/docs-llm/dsl/selectors/series-by-name.md +8 -0
- package/docs-llm/dsl/selectors/series-by-prioritized-types-examples-json.md +47 -0
- package/docs-llm/dsl/selectors/series-by-prioritized-types-examples-react.md +39 -0
- package/docs-llm/dsl/selectors/series-by-prioritized-types.md +10 -0
- package/docs-llm/dsl/selectors/series-by-type-examples-json.md +49 -0
- package/docs-llm/dsl/selectors/series-by-type-examples-react.md +39 -0
- package/docs-llm/dsl/selectors/series-by-type.md +10 -0
- package/docs-llm/dsl/selectors/series-by-types.md +6 -0
- package/docs-llm/ellipse/examples-json.md +5 -0
- package/docs-llm/ellipse/examples-react.md +5 -0
- package/docs-llm/ellipse/options.md +16 -0
- package/docs-llm/ellipse/overview.md +5 -0
- package/docs-llm/events/examples-json.md +705 -0
- package/docs-llm/events/examples-react.md +536 -0
- package/docs-llm/events/options.md +18 -0
- package/docs-llm/events/overview.md +5 -0
- package/docs-llm/filler-gauge/examples-json.md +376 -0
- package/docs-llm/filler-gauge/examples-react.md +274 -0
- package/docs-llm/filler-gauge/options.md +26 -0
- package/docs-llm/filler-gauge/overview.md +5 -0
- package/docs-llm/image/examples-json.md +39 -0
- package/docs-llm/image/examples-react.md +65 -0
- package/docs-llm/image/options.md +13 -0
- package/docs-llm/image/overview.md +5 -0
- package/docs-llm/line/examples-json.md +3724 -0
- package/docs-llm/line/examples-react.md +2683 -0
- package/docs-llm/line/options.md +95 -0
- package/docs-llm/line/overview.md +29 -0
- package/docs-llm/link-graph/examples-json.md +5 -0
- package/docs-llm/link-graph/examples-react.md +5 -0
- package/docs-llm/link-graph/options.md +26 -0
- package/docs-llm/link-graph/overview.md +16 -0
- package/docs-llm/map/examples-json.md +13973 -0
- package/docs-llm/map/examples-react.md +6154 -0
- package/docs-llm/map/options.md +22 -0
- package/docs-llm/map/overview.md +32 -0
- package/docs-llm/markdown/examples-json.md +63 -0
- package/docs-llm/markdown/examples-react.md +98 -0
- package/docs-llm/markdown/options.md +17 -0
- package/docs-llm/markdown/overview.md +5 -0
- package/docs-llm/marker-gauge/examples-json.md +436 -0
- package/docs-llm/marker-gauge/examples-react.md +367 -0
- package/docs-llm/marker-gauge/options.md +26 -0
- package/docs-llm/marker-gauge/overview.md +5 -0
- package/docs-llm/network-graph/examples-json.md +8843 -0
- package/docs-llm/network-graph/examples-react.md +7339 -0
- package/docs-llm/network-graph/options.md +50 -0
- package/docs-llm/network-graph/overview.md +28 -0
- package/docs-llm/parallel-coordinates/examples-json.md +8376 -0
- package/docs-llm/parallel-coordinates/examples-react.md +2771 -0
- package/docs-llm/parallel-coordinates/options.md +14 -0
- package/docs-llm/parallel-coordinates/overview.md +22 -0
- package/docs-llm/pie/examples-json.md +851 -0
- package/docs-llm/pie/examples-react.md +606 -0
- package/docs-llm/pie/options.md +34 -0
- package/docs-llm/pie/overview.md +23 -0
- package/docs-llm/process-tree/options.md +32 -0
- package/docs-llm/punchcard/examples-json.md +6134 -0
- package/docs-llm/punchcard/examples-react.md +4562 -0
- package/docs-llm/punchcard/options.md +33 -0
- package/docs-llm/punchcard/overview.md +5 -0
- package/docs-llm/pure-rich-text/options.md +28 -0
- package/docs-llm/rectangle/examples-json.md +5 -0
- package/docs-llm/rectangle/examples-react.md +5 -0
- package/docs-llm/rectangle/options.md +19 -0
- package/docs-llm/rectangle/overview.md +5 -0
- package/docs-llm/rich-text/examples-json.md +96 -0
- package/docs-llm/rich-text/examples-react.md +119 -0
- package/docs-llm/rich-text/options.md +28 -0
- package/docs-llm/rich-text/overview.md +5 -0
- package/docs-llm/sankey/examples-json.md +844 -0
- package/docs-llm/sankey/examples-react.md +546 -0
- package/docs-llm/sankey/options.md +19 -0
- package/docs-llm/sankey/overview.md +24 -0
- package/docs-llm/scatter/examples-json.md +4012 -0
- package/docs-llm/scatter/examples-react.md +3914 -0
- package/docs-llm/scatter/options.md +68 -0
- package/docs-llm/scatter/overview.md +25 -0
- package/docs-llm/single-value/examples-json.md +2613 -0
- package/docs-llm/single-value/examples-react.md +2296 -0
- package/docs-llm/single-value/options.md +49 -0
- package/docs-llm/single-value/overview.md +23 -0
- package/docs-llm/single-value-icon/examples-json.md +1686 -0
- package/docs-llm/single-value-icon/examples-react.md +1573 -0
- package/docs-llm/single-value-icon/options.md +43 -0
- package/docs-llm/single-value-icon/overview.md +5 -0
- package/docs-llm/single-value-radial/examples-json.md +1178 -0
- package/docs-llm/single-value-radial/examples-react.md +1028 -0
- package/docs-llm/single-value-radial/options.md +41 -0
- package/docs-llm/single-value-radial/overview.md +5 -0
- package/docs-llm/table/examples-json.md +5 -0
- package/docs-llm/table/examples-react.md +5 -0
- package/docs-llm/table/options.md +25 -0
- package/docs-llm/table/overview.md +24 -0
- package/docs-llm/timeline/examples-json.md +5 -0
- package/docs-llm/timeline/examples-react.md +5 -0
- package/docs-llm/timeline/options.md +27 -0
- package/docs-llm/timeline/overview.md +24 -0
- package/package.json +28 -24
package/NetworkGraph.js
CHANGED
|
@@ -1674,7 +1674,7 @@ var Cover = styled_components_default.div`
|
|
|
1674
1674
|
bottom: 0;
|
|
1675
1675
|
`;
|
|
1676
1676
|
var Blocker = styled_components_default.div.attrs({
|
|
1677
|
-
"data-splunk-visualization-version": "28.
|
|
1677
|
+
"data-splunk-visualization-version": "28.7.0 - d7b18cab6"
|
|
1678
1678
|
})`
|
|
1679
1679
|
position: relative;
|
|
1680
1680
|
width: 100%;
|
|
@@ -1785,7 +1785,7 @@ var withFixedSizeContainer = (Viz) => {
|
|
|
1785
1785
|
FixSizeItem,
|
|
1786
1786
|
{
|
|
1787
1787
|
"data-test": "fix-size-item",
|
|
1788
|
-
"data-splunk-visualization-version": "28.
|
|
1788
|
+
"data-splunk-visualization-version": "28.7.0 - d7b18cab6",
|
|
1789
1789
|
width,
|
|
1790
1790
|
height,
|
|
1791
1791
|
backgroundColor
|
|
@@ -4117,6 +4117,9 @@ var RECT_TOP_MARGIN = 4;
|
|
|
4117
4117
|
var LABEL_FONT_SIZE = 12;
|
|
4118
4118
|
var FONT = `${LABEL_FONT_SIZE}px ${VIZ_FONT_FAMILY}`;
|
|
4119
4119
|
var DIM_OPACITY = 0.25;
|
|
4120
|
+
var NODE_FOCUS_RING_PADDING = 4;
|
|
4121
|
+
var NODE_FOCUS_RING_STROKE_WIDTH = 3;
|
|
4122
|
+
var NODE_FOCUS_RING_SCREEN_PADDING = NODE_FOCUS_RING_STROKE_WIDTH / 2;
|
|
4120
4123
|
var MIN_NODE_SPACING = 4;
|
|
4121
4124
|
var MIN_EDGE_LENGTH = 48;
|
|
4122
4125
|
var MIN_NODE_CONTAINER_SIZE = DEFAULT_NODE_RADIUS * 2 + MIN_EDGE_LENGTH;
|
|
@@ -4547,9 +4550,10 @@ var truncateTextToMaxLines = (text = "", font = `12px ${VIZ_FONT_FAMILY}`, maxWi
|
|
|
4547
4550
|
}
|
|
4548
4551
|
return outputLines;
|
|
4549
4552
|
};
|
|
4550
|
-
var getNodeBounds = (node) => {
|
|
4553
|
+
var getNodeBounds = (node, options = {}) => {
|
|
4551
4554
|
var _a, _b;
|
|
4552
4555
|
if (!node) return void 0;
|
|
4556
|
+
if (!Number.isFinite(node.x) || !Number.isFinite(node.y)) return void 0;
|
|
4553
4557
|
const truncatedText = truncateTextToMaxLines((_a = node.label) != null ? _a : "", FONT, MAX_TEXT_WIDTH, 2);
|
|
4554
4558
|
const textWidth = truncatedText.length ? Math.max(...truncatedText.map((line) => computeTextWidth(line, FONT))) : 0;
|
|
4555
4559
|
const labelHeight = truncatedText.length > 0 ? RECT_VERTICAL_PADDING * 2 + LINE_HEIGHT * truncatedText.length : 0;
|
|
@@ -4557,13 +4561,156 @@ var getNodeBounds = (node) => {
|
|
|
4557
4561
|
const nodeLabelWidth = textWidth + RECT_HORIZONTAL_PADDING * 2;
|
|
4558
4562
|
const nodeDiameter = (_b = node.size) != null ? _b : DEFAULT_NODE_RADIUS * 2;
|
|
4559
4563
|
const nodeRadius = nodeDiameter / 2;
|
|
4564
|
+
const nodeCircleRadius = options.includeFocusRing ? nodeRadius + NODE_FOCUS_RING_PADDING : nodeRadius;
|
|
4565
|
+
const nodeLeft = node.x - Math.max(nodeCircleRadius, nodeLabelWidth / 2);
|
|
4566
|
+
const nodeWidth = Math.max(nodeCircleRadius * 2, nodeLabelWidth);
|
|
4560
4567
|
return {
|
|
4561
|
-
x:
|
|
4562
|
-
y: node.y -
|
|
4563
|
-
x2:
|
|
4564
|
-
y2: node.y + nodeRadius + nodeLabelHeightWithMargin
|
|
4568
|
+
x: nodeLeft,
|
|
4569
|
+
y: node.y - nodeCircleRadius,
|
|
4570
|
+
x2: nodeLeft + nodeWidth,
|
|
4571
|
+
y2: Math.max(node.y + nodeCircleRadius, node.y + nodeRadius + nodeLabelHeightWithMargin)
|
|
4565
4572
|
};
|
|
4566
4573
|
};
|
|
4574
|
+
var getScreenBounds = (node, transform, options = {}) => {
|
|
4575
|
+
const bounds = getNodeBounds(node, options);
|
|
4576
|
+
if (!bounds) {
|
|
4577
|
+
return null;
|
|
4578
|
+
}
|
|
4579
|
+
const screenPadding = options.includeFocusRing ? NODE_FOCUS_RING_SCREEN_PADDING : 0;
|
|
4580
|
+
const left = bounds.x * transform.k + transform.x - screenPadding;
|
|
4581
|
+
const top = bounds.y * transform.k + transform.y - screenPadding;
|
|
4582
|
+
const right = bounds.x2 * transform.k + transform.x + screenPadding;
|
|
4583
|
+
const bottom = bounds.y2 * transform.k + transform.y + screenPadding;
|
|
4584
|
+
return {
|
|
4585
|
+
left,
|
|
4586
|
+
top,
|
|
4587
|
+
right,
|
|
4588
|
+
bottom,
|
|
4589
|
+
width: right - left,
|
|
4590
|
+
height: bottom - top
|
|
4591
|
+
};
|
|
4592
|
+
};
|
|
4593
|
+
var isNodePartiallyVisible = (node, transform, viewportWidth, viewportHeight) => {
|
|
4594
|
+
const bounds = getScreenBounds(node, transform);
|
|
4595
|
+
if (!bounds) {
|
|
4596
|
+
return false;
|
|
4597
|
+
}
|
|
4598
|
+
return bounds.right >= 0 && bounds.left <= viewportWidth && bounds.bottom >= 0 && bounds.top <= viewportHeight;
|
|
4599
|
+
};
|
|
4600
|
+
var getOrderedNodesWithPositions = (nodeMap) => Object.values(nodeMap).filter((node) => Number.isFinite(node.x) && Number.isFinite(node.y)).sort((a, b) => a.index - b.index);
|
|
4601
|
+
var getCentermostNodeId = (nodeMap, transform, viewportWidth, viewportHeight) => {
|
|
4602
|
+
const nodesWithPositions = getOrderedNodesWithPositions(nodeMap);
|
|
4603
|
+
if (nodesWithPositions.length === 0) {
|
|
4604
|
+
return null;
|
|
4605
|
+
}
|
|
4606
|
+
const visibleNodes = nodesWithPositions.filter(
|
|
4607
|
+
(node) => isNodePartiallyVisible(node, transform, viewportWidth, viewportHeight)
|
|
4608
|
+
);
|
|
4609
|
+
const candidates = visibleNodes.length > 0 ? visibleNodes : nodesWithPositions;
|
|
4610
|
+
const viewportCenterX = viewportWidth / 2;
|
|
4611
|
+
const viewportCenterY = viewportHeight / 2;
|
|
4612
|
+
return candidates.reduce((closestNode, node) => {
|
|
4613
|
+
const closestDistance = __pow(closestNode.x * transform.k + transform.x - viewportCenterX, 2) + __pow(closestNode.y * transform.k + transform.y - viewportCenterY, 2);
|
|
4614
|
+
const distance = __pow(node.x * transform.k + transform.x - viewportCenterX, 2) + __pow(node.y * transform.k + transform.y - viewportCenterY, 2);
|
|
4615
|
+
if (distance < closestDistance) {
|
|
4616
|
+
return node;
|
|
4617
|
+
}
|
|
4618
|
+
return closestNode;
|
|
4619
|
+
}, candidates[0]).id;
|
|
4620
|
+
};
|
|
4621
|
+
var getNextNodeIdInDirection = (nodeMap, currentNodeId, direction) => {
|
|
4622
|
+
if (!currentNodeId || !nodeMap[currentNodeId]) {
|
|
4623
|
+
return null;
|
|
4624
|
+
}
|
|
4625
|
+
const currentNode = nodeMap[currentNodeId];
|
|
4626
|
+
if (!Number.isFinite(currentNode.x) || !Number.isFinite(currentNode.y)) {
|
|
4627
|
+
return null;
|
|
4628
|
+
}
|
|
4629
|
+
const candidates = getOrderedNodesWithPositions(nodeMap).filter((node) => node.id !== currentNodeId);
|
|
4630
|
+
const directionalCandidates = candidates.map((node) => {
|
|
4631
|
+
const dx = node.x - currentNode.x;
|
|
4632
|
+
const dy = node.y - currentNode.y;
|
|
4633
|
+
let primaryDistance;
|
|
4634
|
+
let secondaryDistance;
|
|
4635
|
+
switch (direction) {
|
|
4636
|
+
case "ArrowLeft":
|
|
4637
|
+
primaryDistance = -dx;
|
|
4638
|
+
secondaryDistance = Math.abs(dy);
|
|
4639
|
+
break;
|
|
4640
|
+
case "ArrowRight":
|
|
4641
|
+
primaryDistance = dx;
|
|
4642
|
+
secondaryDistance = Math.abs(dy);
|
|
4643
|
+
break;
|
|
4644
|
+
case "ArrowUp":
|
|
4645
|
+
primaryDistance = -dy;
|
|
4646
|
+
secondaryDistance = Math.abs(dx);
|
|
4647
|
+
break;
|
|
4648
|
+
case "ArrowDown":
|
|
4649
|
+
primaryDistance = dy;
|
|
4650
|
+
secondaryDistance = Math.abs(dx);
|
|
4651
|
+
break;
|
|
4652
|
+
default:
|
|
4653
|
+
primaryDistance = Number.NaN;
|
|
4654
|
+
secondaryDistance = Number.NaN;
|
|
4655
|
+
}
|
|
4656
|
+
return {
|
|
4657
|
+
node,
|
|
4658
|
+
primaryDistance,
|
|
4659
|
+
secondaryDistance,
|
|
4660
|
+
navigationScore: primaryDistance + secondaryDistance * 4,
|
|
4661
|
+
distance: __pow(dx, 2) + __pow(dy, 2),
|
|
4662
|
+
isDirectionallyAligned: primaryDistance >= secondaryDistance
|
|
4663
|
+
};
|
|
4664
|
+
}).filter(({ primaryDistance }) => primaryDistance > 0);
|
|
4665
|
+
if (directionalCandidates.length === 0) {
|
|
4666
|
+
return null;
|
|
4667
|
+
}
|
|
4668
|
+
const alignedCandidates = directionalCandidates.filter(
|
|
4669
|
+
({ isDirectionallyAligned }) => isDirectionallyAligned
|
|
4670
|
+
);
|
|
4671
|
+
const candidatesToSort = alignedCandidates.length > 0 ? alignedCandidates : directionalCandidates;
|
|
4672
|
+
candidatesToSort.sort((a, b) => {
|
|
4673
|
+
if (a.navigationScore !== b.navigationScore) {
|
|
4674
|
+
return a.navigationScore - b.navigationScore;
|
|
4675
|
+
}
|
|
4676
|
+
if (a.secondaryDistance !== b.secondaryDistance) {
|
|
4677
|
+
return a.secondaryDistance - b.secondaryDistance;
|
|
4678
|
+
}
|
|
4679
|
+
return a.node.index - b.node.index;
|
|
4680
|
+
});
|
|
4681
|
+
return candidatesToSort[0].node.id;
|
|
4682
|
+
};
|
|
4683
|
+
var getPanDeltaToRevealNode = (node, transform, viewportWidth, viewportHeight) => {
|
|
4684
|
+
const bounds = getScreenBounds(node, transform, { includeFocusRing: true });
|
|
4685
|
+
if (!bounds) {
|
|
4686
|
+
return { dx: 0, dy: 0 };
|
|
4687
|
+
}
|
|
4688
|
+
let dx = 0;
|
|
4689
|
+
let dy = 0;
|
|
4690
|
+
if (bounds.width <= viewportWidth) {
|
|
4691
|
+
if (bounds.left < 0) {
|
|
4692
|
+
dx = -bounds.left;
|
|
4693
|
+
} else if (bounds.right > viewportWidth) {
|
|
4694
|
+
dx = viewportWidth - bounds.right;
|
|
4695
|
+
}
|
|
4696
|
+
} else if (bounds.left > 0) {
|
|
4697
|
+
dx = -bounds.left;
|
|
4698
|
+
} else if (bounds.right < viewportWidth) {
|
|
4699
|
+
dx = viewportWidth - bounds.right;
|
|
4700
|
+
}
|
|
4701
|
+
if (bounds.height <= viewportHeight) {
|
|
4702
|
+
if (bounds.top < 0) {
|
|
4703
|
+
dy = -bounds.top;
|
|
4704
|
+
} else if (bounds.bottom > viewportHeight) {
|
|
4705
|
+
dy = viewportHeight - bounds.bottom;
|
|
4706
|
+
}
|
|
4707
|
+
} else if (bounds.top > 0) {
|
|
4708
|
+
dy = -bounds.top;
|
|
4709
|
+
} else if (bounds.bottom < viewportHeight) {
|
|
4710
|
+
dy = viewportHeight - bounds.bottom;
|
|
4711
|
+
}
|
|
4712
|
+
return { dx, dy };
|
|
4713
|
+
};
|
|
4567
4714
|
var getFullVizBoundsWithPadding = (nodeMap, padding) => {
|
|
4568
4715
|
let minX = Infinity;
|
|
4569
4716
|
let minY = Infinity;
|
|
@@ -5146,7 +5293,18 @@ var NodeCircle = styled_components_default.circle`
|
|
|
5146
5293
|
var _a;
|
|
5147
5294
|
return (_a = props.color) != null ? _a : themes_exports.variables.neutral100;
|
|
5148
5295
|
}};
|
|
5149
|
-
cursor: pointer;
|
|
5296
|
+
cursor: ${(props) => props.$isClickable ? "pointer" : "default"};
|
|
5297
|
+
|
|
5298
|
+
&:focus {
|
|
5299
|
+
outline: none;
|
|
5300
|
+
}
|
|
5301
|
+
`;
|
|
5302
|
+
var NodeFocusRing = styled_components_default.circle`
|
|
5303
|
+
fill: none;
|
|
5304
|
+
stroke: ${themes_exports.variables.focusColor};
|
|
5305
|
+
stroke-width: ${NODE_FOCUS_RING_STROKE_WIDTH}px;
|
|
5306
|
+
pointer-events: none;
|
|
5307
|
+
vector-effect: non-scaling-stroke;
|
|
5150
5308
|
`;
|
|
5151
5309
|
var IconElement = (_a) => {
|
|
5152
5310
|
var _b = _a, { icon } = _b, iconProps = __objRest(_b, ["icon"]);
|
|
@@ -5185,7 +5343,8 @@ var Node = (0, react_exports.memo)(function Node2(props) {
|
|
|
5185
5343
|
handleOpen,
|
|
5186
5344
|
handleAnchor,
|
|
5187
5345
|
handleRequestClose,
|
|
5188
|
-
isDragging = false
|
|
5346
|
+
isDragging = false,
|
|
5347
|
+
tabIndex = 0
|
|
5189
5348
|
} = props;
|
|
5190
5349
|
const circleRef = (0, react_exports.useRef)(null);
|
|
5191
5350
|
const truncatedText = truncateTextToMaxLines(label, FONT, MAX_TEXT_WIDTH, 2);
|
|
@@ -5203,6 +5362,8 @@ var Node = (0, react_exports.memo)(function Node2(props) {
|
|
|
5203
5362
|
const { iconUrl, shouldRenderRemoteIcon } = (0, react_exports.useMemo)(() => getIconRenderInfo(icon), [icon]);
|
|
5204
5363
|
const builtInIcon = (0, react_exports.useMemo)(() => isBuiltInIcon(icon) ? icon : null, [icon]);
|
|
5205
5364
|
const [IconComponent, setIconComponent] = react_exports.useState(null);
|
|
5365
|
+
const [isFocused, setIsFocused] = react_exports.useState(false);
|
|
5366
|
+
const isClickable = typeof handleNodeClick === "function";
|
|
5206
5367
|
react_exports.useEffect(() => {
|
|
5207
5368
|
if (!builtInIcon) {
|
|
5208
5369
|
setIconComponent(null);
|
|
@@ -5234,6 +5395,8 @@ var Node = (0, react_exports.memo)(function Node2(props) {
|
|
|
5234
5395
|
};
|
|
5235
5396
|
}, [builtInIcon]);
|
|
5236
5397
|
const nodeClickHandler = (0, react_exports.useCallback)(() => {
|
|
5398
|
+
var _a2;
|
|
5399
|
+
(_a2 = circleRef.current) == null ? void 0 : _a2.focus();
|
|
5237
5400
|
if (handleNodeClick) {
|
|
5238
5401
|
handleNodeClick({ id, value, index });
|
|
5239
5402
|
}
|
|
@@ -5285,12 +5448,29 @@ var Node = (0, react_exports.memo)(function Node2(props) {
|
|
|
5285
5448
|
}
|
|
5286
5449
|
handleRequestClose();
|
|
5287
5450
|
}, [handleNodeMouseOut, nodeWithPosition, setHighlightedNode, handleRequestClose, isDragging]);
|
|
5451
|
+
const onFocus = (0, react_exports.useCallback)(() => {
|
|
5452
|
+
setIsFocused(true);
|
|
5453
|
+
onMouseEnter();
|
|
5454
|
+
}, [onMouseEnter]);
|
|
5455
|
+
const onBlur = (0, react_exports.useCallback)(() => {
|
|
5456
|
+
setIsFocused(false);
|
|
5457
|
+
onMouseLeave();
|
|
5458
|
+
}, [onMouseLeave]);
|
|
5288
5459
|
react_exports.useEffect(() => {
|
|
5289
5460
|
if (isDragging) {
|
|
5290
5461
|
handleRequestClose();
|
|
5291
5462
|
}
|
|
5292
5463
|
}, [isDragging, handleRequestClose]);
|
|
5293
|
-
return /* @__PURE__ */ react_exports.createElement(react_exports.Fragment, null, /* @__PURE__ */ react_exports.createElement(
|
|
5464
|
+
return /* @__PURE__ */ react_exports.createElement(react_exports.Fragment, null, isFocused && /* @__PURE__ */ react_exports.createElement(
|
|
5465
|
+
NodeFocusRing,
|
|
5466
|
+
{
|
|
5467
|
+
"data-test": "node-focus-ring",
|
|
5468
|
+
r: radius + NODE_FOCUS_RING_PADDING,
|
|
5469
|
+
cx: x,
|
|
5470
|
+
cy: y,
|
|
5471
|
+
opacity
|
|
5472
|
+
}
|
|
5473
|
+
), /* @__PURE__ */ react_exports.createElement(
|
|
5294
5474
|
NodeCircle,
|
|
5295
5475
|
{
|
|
5296
5476
|
"data-test": "node",
|
|
@@ -5301,17 +5481,18 @@ var Node = (0, react_exports.memo)(function Node2(props) {
|
|
|
5301
5481
|
height: diameter,
|
|
5302
5482
|
id: sanitizedId,
|
|
5303
5483
|
ref: circleRef,
|
|
5304
|
-
tabIndex
|
|
5305
|
-
role: "button",
|
|
5484
|
+
tabIndex,
|
|
5485
|
+
role: isClickable ? "button" : "graphics-object",
|
|
5306
5486
|
"aria-label": label || (0, i18n_exports._)("Node"),
|
|
5487
|
+
$isClickable: isClickable,
|
|
5307
5488
|
color,
|
|
5308
5489
|
opacity,
|
|
5309
|
-
onClick: nodeClickHandler,
|
|
5310
|
-
onKeyDown,
|
|
5490
|
+
onClick: isClickable ? nodeClickHandler : void 0,
|
|
5491
|
+
onKeyDown: isClickable ? onKeyDown : void 0,
|
|
5311
5492
|
onMouseEnter,
|
|
5312
5493
|
onMouseLeave,
|
|
5313
|
-
onFocus
|
|
5314
|
-
onBlur
|
|
5494
|
+
onFocus,
|
|
5495
|
+
onBlur
|
|
5315
5496
|
}
|
|
5316
5497
|
), !!IconComponent && !shouldHideIcon && /* @__PURE__ */ react_exports.createElement(
|
|
5317
5498
|
NodeIcon,
|
|
@@ -5483,6 +5664,19 @@ var defaultImport114 = __toESM(require("@splunk/react-ui/Popover"));
|
|
|
5483
5664
|
__reExport(Popover_exports, require("@splunk/react-ui/Popover"));
|
|
5484
5665
|
var Popover_default = "default" in defaultImport114 ? defaultImport114.default : defaultImport114;
|
|
5485
5666
|
|
|
5667
|
+
// src/common/utils/shadowDomUtils.ts
|
|
5668
|
+
init_define_global();
|
|
5669
|
+
var getFloatingLayerStyleTarget = (anchor) => {
|
|
5670
|
+
if (!anchor || typeof anchor.getRootNode !== "function") {
|
|
5671
|
+
return void 0;
|
|
5672
|
+
}
|
|
5673
|
+
const rootNode = anchor.getRootNode();
|
|
5674
|
+
if (typeof ShadowRoot !== "undefined" && rootNode instanceof ShadowRoot) {
|
|
5675
|
+
return anchor.ownerDocument.head;
|
|
5676
|
+
}
|
|
5677
|
+
return void 0;
|
|
5678
|
+
};
|
|
5679
|
+
|
|
5486
5680
|
// src/NetworkGraph/PureNetworkGraph/components/Tooltip.tsx
|
|
5487
5681
|
var StyledPopover = styled_components_default(Popover_default)`
|
|
5488
5682
|
font-size: ${themes_exports.variables.fontSizeSmall};
|
|
@@ -5525,17 +5719,24 @@ var Tooltip = ({
|
|
|
5525
5719
|
headerValue,
|
|
5526
5720
|
nodeFields = {},
|
|
5527
5721
|
onRequestClose
|
|
5528
|
-
}) =>
|
|
5529
|
-
|
|
5530
|
-
|
|
5531
|
-
|
|
5532
|
-
|
|
5533
|
-
|
|
5534
|
-
|
|
5535
|
-
|
|
5536
|
-
|
|
5537
|
-
|
|
5538
|
-
|
|
5722
|
+
}) => {
|
|
5723
|
+
if (!open || !anchor) {
|
|
5724
|
+
return null;
|
|
5725
|
+
}
|
|
5726
|
+
const styleTarget = getFloatingLayerStyleTarget(anchor);
|
|
5727
|
+
const popover = /* @__PURE__ */ react_exports.createElement(
|
|
5728
|
+
StyledPopover,
|
|
5729
|
+
{
|
|
5730
|
+
"data-test": "network-graph-tooltip",
|
|
5731
|
+
open,
|
|
5732
|
+
anchor,
|
|
5733
|
+
onRequestClose,
|
|
5734
|
+
defaultPlacement: "above"
|
|
5735
|
+
},
|
|
5736
|
+
/* @__PURE__ */ react_exports.createElement(StyledWrapper, null, /* @__PURE__ */ react_exports.createElement(Title, null, headerValue), /* @__PURE__ */ react_exports.createElement(StyledTable, null, /* @__PURE__ */ react_exports.createElement("tbody", null, Object.entries(nodeFields).map(([field, value]) => /* @__PURE__ */ react_exports.createElement("tr", { key: field }, /* @__PURE__ */ react_exports.createElement(StyledLabelCell, null, (0, i18n_exports._)(field)), /* @__PURE__ */ react_exports.createElement(StyledValueCell, null, (0, i18n_exports._)(String(value))))))))
|
|
5737
|
+
);
|
|
5738
|
+
return styleTarget ? /* @__PURE__ */ react_exports.createElement(styled_components_exports.StyleSheetManager, { target: styleTarget }, popover) : popover;
|
|
5739
|
+
};
|
|
5539
5740
|
var Tooltip_default = Tooltip;
|
|
5540
5741
|
|
|
5541
5742
|
// src/NetworkGraph/PureNetworkGraph/components/NetworkGraphSvg.tsx
|
|
@@ -5559,7 +5760,8 @@ var NetworkGraphSvg = (0, react_exports.memo)(function NetworkGraphSvg2({
|
|
|
5559
5760
|
handleNodeMouseOut,
|
|
5560
5761
|
highlightedNode,
|
|
5561
5762
|
setHighlightedNode = () => void 0,
|
|
5562
|
-
isDragging = false
|
|
5763
|
+
isDragging = false,
|
|
5764
|
+
activeNodeId
|
|
5563
5765
|
}) {
|
|
5564
5766
|
var _a, _b;
|
|
5565
5767
|
const graphId = (0, react_exports.useId)();
|
|
@@ -5593,6 +5795,15 @@ var NetworkGraphSvg = (0, react_exports.memo)(function NetworkGraphSvg2({
|
|
|
5593
5795
|
const anchorNodeVisual = anchorId ? nodeMapVisual[anchorId] : void 0;
|
|
5594
5796
|
const headerValue = (_a = anchorNodeVisual == null ? void 0 : anchorNodeVisual.tooltipHeader) != null ? _a : "";
|
|
5595
5797
|
const nodeFields = (_b = anchorNodeVisual == null ? void 0 : anchorNodeVisual.tooltipFields) != null ? _b : {};
|
|
5798
|
+
const getNodeTabIndex = (0, react_exports.useCallback)(
|
|
5799
|
+
(id) => {
|
|
5800
|
+
if (activeNodeId === void 0) {
|
|
5801
|
+
return 0;
|
|
5802
|
+
}
|
|
5803
|
+
return activeNodeId === id ? 0 : -1;
|
|
5804
|
+
},
|
|
5805
|
+
[activeNodeId]
|
|
5806
|
+
);
|
|
5596
5807
|
(0, react_exports.useEffect)(() => {
|
|
5597
5808
|
if (isReadyToRender) {
|
|
5598
5809
|
(0, d3_selection_exports.select)(svgRef == null ? void 0 : svgRef.current).selectAll("circle").on("mousedown", (event) => {
|
|
@@ -5697,7 +5908,8 @@ var NetworkGraphSvg = (0, react_exports.memo)(function NetworkGraphSvg2({
|
|
|
5697
5908
|
handleOpen,
|
|
5698
5909
|
handleAnchor,
|
|
5699
5910
|
handleRequestClose,
|
|
5700
|
-
isDragging
|
|
5911
|
+
isDragging,
|
|
5912
|
+
tabIndex: getNodeTabIndex(id)
|
|
5701
5913
|
}
|
|
5702
5914
|
);
|
|
5703
5915
|
}))
|
|
@@ -5801,7 +6013,8 @@ var ZoomControls = (0, react_exports.memo)(function ZoomControls2(props) {
|
|
|
5801
6013
|
hideReset = false,
|
|
5802
6014
|
hideZoomControls = false,
|
|
5803
6015
|
disableZoomIn = false,
|
|
5804
|
-
disableZoomOut = false
|
|
6016
|
+
disableZoomOut = false,
|
|
6017
|
+
buttonTabIndex
|
|
5805
6018
|
} = props;
|
|
5806
6019
|
return /* @__PURE__ */ react_exports.createElement(StyledZoomControlsContainer, { "data-test": "zoom-controls-container" }, !hideZoomControls && /* @__PURE__ */ react_exports.createElement(StyledBaseContainer, { "data-test": "zoom-buttons-container" }, /* @__PURE__ */ react_exports.createElement(Tooltip_default2, { contentRelationship: "label", content: (0, i18n_exports._)("Zoom in") }, /* @__PURE__ */ react_exports.createElement(
|
|
5807
6020
|
StyledZoomInButton,
|
|
@@ -5810,7 +6023,8 @@ var ZoomControls = (0, react_exports.memo)(function ZoomControls2(props) {
|
|
|
5810
6023
|
appearance: "subtle",
|
|
5811
6024
|
onClick: handleZoomIn,
|
|
5812
6025
|
disabled: disableZoomIn,
|
|
5813
|
-
"data-test": "zoom-in-button"
|
|
6026
|
+
"data-test": "zoom-in-button",
|
|
6027
|
+
tabIndex: buttonTabIndex
|
|
5814
6028
|
}
|
|
5815
6029
|
)), /* @__PURE__ */ react_exports.createElement(Tooltip_default2, { contentRelationship: "label", content: (0, i18n_exports._)("Zoom out") }, /* @__PURE__ */ react_exports.createElement(
|
|
5816
6030
|
StyledZoomOutButton,
|
|
@@ -5819,7 +6033,8 @@ var ZoomControls = (0, react_exports.memo)(function ZoomControls2(props) {
|
|
|
5819
6033
|
appearance: "subtle",
|
|
5820
6034
|
onClick: handleZoomOut,
|
|
5821
6035
|
disabled: disableZoomOut,
|
|
5822
|
-
"data-test": "zoom-out-button"
|
|
6036
|
+
"data-test": "zoom-out-button",
|
|
6037
|
+
tabIndex: buttonTabIndex
|
|
5823
6038
|
}
|
|
5824
6039
|
))), !hideReset && /* @__PURE__ */ react_exports.createElement(StyledResetContainer, { moveToTop: hideZoomControls, "data-test": "reset-button-container" }, /* @__PURE__ */ react_exports.createElement(Tooltip_default2, { contentRelationship: "label", content: (0, i18n_exports._)("Reset zoom") }, /* @__PURE__ */ react_exports.createElement(
|
|
5825
6040
|
StyledButton,
|
|
@@ -5827,7 +6042,8 @@ var ZoomControls = (0, react_exports.memo)(function ZoomControls2(props) {
|
|
|
5827
6042
|
icon: /* @__PURE__ */ react_exports.createElement(SquareAndCorners_default, null),
|
|
5828
6043
|
appearance: "subtle",
|
|
5829
6044
|
onClick: handleReset,
|
|
5830
|
-
"data-test": "reset-button"
|
|
6045
|
+
"data-test": "reset-button",
|
|
6046
|
+
tabIndex: buttonTabIndex
|
|
5831
6047
|
}
|
|
5832
6048
|
))));
|
|
5833
6049
|
});
|
|
@@ -5847,6 +6063,11 @@ var forwardMouseDownEvent = (event, container) => {
|
|
|
5847
6063
|
const forwarded = new MouseEvent("mousedown", event);
|
|
5848
6064
|
container == null ? void 0 : container.dispatchEvent(forwarded);
|
|
5849
6065
|
};
|
|
6066
|
+
var getNodeIdFromEventTarget = (target) => {
|
|
6067
|
+
const nodeElement = target instanceof Element ? target.closest('[data-test="node"]') : null;
|
|
6068
|
+
return (nodeElement == null ? void 0 : nodeElement.id) ? unsanitizeSvgId(nodeElement.id) : null;
|
|
6069
|
+
};
|
|
6070
|
+
var isKeyboardNavigationDirection = (key) => key === "ArrowLeft" || key === "ArrowRight" || key === "ArrowUp" || key === "ArrowDown";
|
|
5850
6071
|
var PureNetworkGraph = ({
|
|
5851
6072
|
width = DEFAULT_CHART_WIDTH,
|
|
5852
6073
|
height = DEFAULT_CHART_HEIGHT,
|
|
@@ -5889,7 +6110,7 @@ var PureNetworkGraph = ({
|
|
|
5889
6110
|
tooltipNodeFields = EMPTY_ARRAY,
|
|
5890
6111
|
tooltipHeaderFieldName = "",
|
|
5891
6112
|
onOptionsChange = lodash_exports.noop,
|
|
5892
|
-
onNodeClick
|
|
6113
|
+
onNodeClick,
|
|
5893
6114
|
onNodeMouseOver = lodash_exports.noop,
|
|
5894
6115
|
onNodeMouseOut = lodash_exports.noop,
|
|
5895
6116
|
onNodeDrag = lodash_exports.noop
|
|
@@ -5911,6 +6132,7 @@ var PureNetworkGraph = ({
|
|
|
5911
6132
|
x: null,
|
|
5912
6133
|
y: null
|
|
5913
6134
|
});
|
|
6135
|
+
const hasNodeClickHandler = typeof onNodeClick === "function";
|
|
5914
6136
|
const frozenNodeMapForZoomRef = (0, react_exports.useRef)(null);
|
|
5915
6137
|
const dragOffsetRef = (0, react_exports.useRef)(null);
|
|
5916
6138
|
const baseNodeMapRef = (0, react_exports.useRef)(null);
|
|
@@ -6017,6 +6239,7 @@ var PureNetworkGraph = ({
|
|
|
6017
6239
|
const [hideReset, setHideReset] = (0, react_exports.useState)(true);
|
|
6018
6240
|
const [isReadyToRender, setIsReadyToRender] = (0, react_exports.useState)(false);
|
|
6019
6241
|
const [highlightedNode, setHighlightedNode] = (0, react_exports.useState)(null);
|
|
6242
|
+
const [focusedNodeId, setFocusedNodeId] = (0, react_exports.useState)(null);
|
|
6020
6243
|
const numberWidth = typeof width === "string" ? containerSize.width : width;
|
|
6021
6244
|
const numberHeight = typeof height === "string" ? containerSize.height : height;
|
|
6022
6245
|
const effectiveWidth = Math.max(numberWidth, 0);
|
|
@@ -6032,6 +6255,22 @@ var PureNetworkGraph = ({
|
|
|
6032
6255
|
() => d3_zoom_exports.zoomIdentity.translate(effectiveWidth / 2, effectiveHeight / 2).scale(autoZoomLevel).translate(-autoCenter[0], -autoCenter[1]),
|
|
6033
6256
|
[autoCenter, autoZoomLevel, effectiveWidth, effectiveHeight]
|
|
6034
6257
|
);
|
|
6258
|
+
const currentKeyboardTransform = (0, react_exports.useMemo)(
|
|
6259
|
+
() => {
|
|
6260
|
+
var _a2, _b2, _c, _d, _e, _f, _g;
|
|
6261
|
+
return {
|
|
6262
|
+
k: (_c = (_b2 = (_a2 = parentZoomAndPanState.zoom) != null ? _a2 : initialTransform.k) != null ? _b2 : autoZoomLevel) != null ? _c : 1,
|
|
6263
|
+
x: (_e = (_d = parentZoomAndPanState.x) != null ? _d : initialTransform.x) != null ? _e : 0,
|
|
6264
|
+
y: (_g = (_f = parentZoomAndPanState.y) != null ? _f : initialTransform.y) != null ? _g : 0
|
|
6265
|
+
};
|
|
6266
|
+
},
|
|
6267
|
+
[autoZoomLevel, initialTransform, parentZoomAndPanState]
|
|
6268
|
+
);
|
|
6269
|
+
const centermostNodeId = (0, react_exports.useMemo)(
|
|
6270
|
+
() => getCentermostNodeId(nodeMapStruct, currentKeyboardTransform, effectiveWidth, effectiveHeight),
|
|
6271
|
+
[currentKeyboardTransform, effectiveHeight, effectiveWidth, nodeMapStruct]
|
|
6272
|
+
);
|
|
6273
|
+
const activeNodeId = focusedNodeId && nodeMapStruct[focusedNodeId] ? focusedNodeId : centermostNodeId;
|
|
6035
6274
|
const { disableZoomIn, disableZoomOut } = (0, react_exports.useMemo)(
|
|
6036
6275
|
() => getZoomDisableState(parentZoomAndPanState.zoom, autoZoomLevel, minZoomLevel),
|
|
6037
6276
|
[parentZoomAndPanState.zoom, autoZoomLevel, minZoomLevel]
|
|
@@ -6085,6 +6324,11 @@ var PureNetworkGraph = ({
|
|
|
6085
6324
|
const shouldHideReset = (!parentZoomAndPanState.zoom || nearlyEqual(parentZoomAndPanState.zoom, initialTransform.k, 0.01, true)) && (!parentZoomAndPanState.x || nearlyEqual(parentZoomAndPanState.x, initialTransform.x)) && (!parentZoomAndPanState.y || nearlyEqual(parentZoomAndPanState.y, initialTransform.y));
|
|
6086
6325
|
setHideReset(shouldHideReset);
|
|
6087
6326
|
}, [parentZoomAndPanState, initialTransform]);
|
|
6327
|
+
(0, react_exports.useEffect)(() => {
|
|
6328
|
+
if (focusedNodeId && !nodeMapStruct[focusedNodeId]) {
|
|
6329
|
+
setFocusedNodeId(null);
|
|
6330
|
+
}
|
|
6331
|
+
}, [focusedNodeId, nodeMapStruct]);
|
|
6088
6332
|
(0, react_exports.useEffect)(() => {
|
|
6089
6333
|
if ((0, d3_selection_exports.select)(svgRef.current).on) (0, d3_selection_exports.select)(svgRef.current).on(".zoom", null);
|
|
6090
6334
|
const minTopLeft = [autoCenter[0] - minZoomWidth / 2, autoCenter[1] - minZoomHeight / 2];
|
|
@@ -6136,8 +6380,68 @@ var PureNetworkGraph = ({
|
|
|
6136
6380
|
},
|
|
6137
6381
|
[zoomFunc]
|
|
6138
6382
|
);
|
|
6383
|
+
const handleAutoPan = (0, react_exports.useCallback)(
|
|
6384
|
+
(dx, dy) => {
|
|
6385
|
+
if (!svgRef.current || !dx && !dy) {
|
|
6386
|
+
return;
|
|
6387
|
+
}
|
|
6388
|
+
const transform = (0, d3_zoom_exports.zoomTransform)(svgRef.current);
|
|
6389
|
+
const zoomLevel = Number.isFinite(transform.k) && transform.k > 0 ? transform.k : currentKeyboardTransform.k;
|
|
6390
|
+
(0, d3_selection_exports.select)(svgRef.current).call(zoomFunc.translateBy, dx / zoomLevel, dy / zoomLevel);
|
|
6391
|
+
},
|
|
6392
|
+
[currentKeyboardTransform.k, zoomFunc]
|
|
6393
|
+
);
|
|
6394
|
+
const focusNodeById = (0, react_exports.useCallback)((nodeId) => {
|
|
6395
|
+
var _a2;
|
|
6396
|
+
const nodeElement = (_a2 = svgRef.current) == null ? void 0 : _a2.querySelector(`#${sanitizeSvgId(nodeId)}`);
|
|
6397
|
+
nodeElement == null ? void 0 : nodeElement.focus();
|
|
6398
|
+
}, []);
|
|
6399
|
+
const ensureNodeVisible = (0, react_exports.useCallback)(
|
|
6400
|
+
(nodeId) => {
|
|
6401
|
+
const node = nodeMapStruct[nodeId];
|
|
6402
|
+
if (!node) {
|
|
6403
|
+
return;
|
|
6404
|
+
}
|
|
6405
|
+
const { dx, dy } = getPanDeltaToRevealNode(
|
|
6406
|
+
node,
|
|
6407
|
+
currentKeyboardTransform,
|
|
6408
|
+
effectiveWidth,
|
|
6409
|
+
effectiveHeight
|
|
6410
|
+
);
|
|
6411
|
+
handleAutoPan(dx, dy);
|
|
6412
|
+
},
|
|
6413
|
+
[currentKeyboardTransform, effectiveHeight, effectiveWidth, handleAutoPan, nodeMapStruct]
|
|
6414
|
+
);
|
|
6415
|
+
const handleFocus = (0, react_exports.useCallback)(
|
|
6416
|
+
(e) => {
|
|
6417
|
+
const nodeId = getNodeIdFromEventTarget(e.target);
|
|
6418
|
+
setFocusedNodeId(nodeId);
|
|
6419
|
+
if (nodeId) {
|
|
6420
|
+
ensureNodeVisible(nodeId);
|
|
6421
|
+
}
|
|
6422
|
+
},
|
|
6423
|
+
[ensureNodeVisible]
|
|
6424
|
+
);
|
|
6425
|
+
const handleBlur = (0, react_exports.useCallback)((e) => {
|
|
6426
|
+
var _a2;
|
|
6427
|
+
const nextTarget = e.relatedTarget;
|
|
6428
|
+
if (!nextTarget || !((_a2 = containerRef.current) == null ? void 0 : _a2.contains(nextTarget))) {
|
|
6429
|
+
setFocusedNodeId(null);
|
|
6430
|
+
}
|
|
6431
|
+
}, []);
|
|
6139
6432
|
const handleKeyDown = (0, react_exports.useCallback)(
|
|
6140
6433
|
(e) => {
|
|
6434
|
+
const nodeId = getNodeIdFromEventTarget(e.target);
|
|
6435
|
+
if (nodeId && isKeyboardNavigationDirection(e.key)) {
|
|
6436
|
+
const nextNodeId = getNextNodeIdInDirection(nodeMapStruct, nodeId, e.key);
|
|
6437
|
+
e.preventDefault();
|
|
6438
|
+
e.stopPropagation();
|
|
6439
|
+
if (nextNodeId) {
|
|
6440
|
+
setFocusedNodeId(nextNodeId);
|
|
6441
|
+
focusNodeById(nextNodeId);
|
|
6442
|
+
}
|
|
6443
|
+
return;
|
|
6444
|
+
}
|
|
6141
6445
|
switch (e.key) {
|
|
6142
6446
|
case "+":
|
|
6143
6447
|
case "=":
|
|
@@ -6163,7 +6467,7 @@ var PureNetworkGraph = ({
|
|
|
6163
6467
|
}
|
|
6164
6468
|
e.preventDefault();
|
|
6165
6469
|
},
|
|
6166
|
-
[handlePan, handleZoomIn, handleZoomOut]
|
|
6470
|
+
[focusNodeById, handlePan, handleZoomIn, handleZoomOut, nodeMapStruct]
|
|
6167
6471
|
);
|
|
6168
6472
|
const handleMouseDown = (0, react_exports.useCallback)(
|
|
6169
6473
|
// mousedown uses event from d3 which is typed to any
|
|
@@ -6248,7 +6552,7 @@ var PureNetworkGraph = ({
|
|
|
6248
6552
|
);
|
|
6249
6553
|
const handleNodeClick = (0, react_exports.useCallback)(
|
|
6250
6554
|
(node) => {
|
|
6251
|
-
if (node) {
|
|
6555
|
+
if (node && typeof onNodeClick === "function") {
|
|
6252
6556
|
const metadataForNode = metadata[node.index] || {};
|
|
6253
6557
|
onNodeClick({
|
|
6254
6558
|
type: "node.click",
|
|
@@ -6317,7 +6621,9 @@ var PureNetworkGraph = ({
|
|
|
6317
6621
|
width: cssWidth,
|
|
6318
6622
|
height: cssHeight,
|
|
6319
6623
|
tabIndex: 0,
|
|
6320
|
-
onKeyDown: handleKeyDown
|
|
6624
|
+
onKeyDown: handleKeyDown,
|
|
6625
|
+
onFocus: handleFocus,
|
|
6626
|
+
onBlur: handleBlur
|
|
6321
6627
|
},
|
|
6322
6628
|
nodeMapVisual && nodeMapStruct && /* @__PURE__ */ react_default.createElement(react_default.Fragment, null, isReadyToRender && /* @__PURE__ */ react_default.createElement(
|
|
6323
6629
|
ZoomControls_default,
|
|
@@ -6347,12 +6653,13 @@ var PureNetworkGraph = ({
|
|
|
6347
6653
|
handleMouseDown,
|
|
6348
6654
|
handleMouseUp,
|
|
6349
6655
|
handleDrag,
|
|
6350
|
-
handleNodeClick,
|
|
6656
|
+
handleNodeClick: hasNodeClickHandler ? handleNodeClick : void 0,
|
|
6351
6657
|
handleNodeMouseOver,
|
|
6352
6658
|
handleNodeMouseOut,
|
|
6353
6659
|
highlightedNode,
|
|
6354
6660
|
setHighlightedNode,
|
|
6355
|
-
isDragging: isDragging.dragStarted
|
|
6661
|
+
isDragging: isDragging.dragStarted,
|
|
6662
|
+
activeNodeId
|
|
6356
6663
|
}
|
|
6357
6664
|
))
|
|
6358
6665
|
);
|
|
@@ -7221,7 +7528,13 @@ var computeVizProps = (_a) => {
|
|
|
7221
7528
|
};
|
|
7222
7529
|
var withTooltipFields = (Viz) => {
|
|
7223
7530
|
const VizWithTooltipFields = (_a) => {
|
|
7224
|
-
var _b = _a, {
|
|
7531
|
+
var _b = _a, {
|
|
7532
|
+
dataSources,
|
|
7533
|
+
options
|
|
7534
|
+
} = _b, otherProps = __objRest(_b, [
|
|
7535
|
+
"dataSources",
|
|
7536
|
+
"options"
|
|
7537
|
+
]);
|
|
7225
7538
|
var _a2;
|
|
7226
7539
|
if (!((_a2 = dataSources == null ? void 0 : dataSources.primary) == null ? void 0 : _a2.data)) {
|
|
7227
7540
|
return /* @__PURE__ */ react_exports.createElement(Viz, __spreadProps(__spreadValues({}, otherProps), { options }));
|