UNPKG

@nivo/polar-bar

Version:
1 lines 33.3 kB
{"version":3,"file":"nivo-polar-bar.mjs","sources":["../src/PolarBarTooltip.tsx","../src/defaults.ts","../src/PolarBarArcs.tsx","../src/PolarBar.tsx","../src/hooks.ts","../src/ResponsivePolarBar.tsx"],"sourcesContent":["import { BasicTooltip } from '@nivo/tooltip'\nimport { PolarBarTooltipProps } from './types'\n\nexport const PolarBarTooltip = ({ arc }: PolarBarTooltipProps) => {\n return (\n <BasicTooltip\n enableChip\n id={\n <span>\n {arc.index} - {arc.key}\n </span>\n }\n value={arc.formattedValue}\n color={arc.color}\n />\n )\n}\n","import { ArcTransitionMode } from '@nivo/arcs'\nimport { PolarBarTooltip } from './PolarBarTooltip'\nimport { PolarBarCommonProps } from './types'\n\nexport const defaultProps: Omit<\n PolarBarCommonProps<any>,\n | 'margin'\n | 'theme'\n | 'arcLabelsComponent'\n | 'onClick'\n | 'onMouseEnter'\n | 'onMouseMove'\n | 'onMouseLeave'\n | 'forwardLegendData'\n | 'renderWrapper'\n | 'ariaLabel'\n | 'ariaLabelledBy'\n | 'ariaDescribedBy'\n> = {\n indexBy: 'id',\n keys: ['value'],\n adjustValueRange: true,\n\n startAngle: 0,\n endAngle: 360,\n innerRadius: 0,\n cornerRadius: 0,\n\n layers: ['grid', 'arcs', 'axes', 'labels', 'legends'],\n\n colors: { scheme: 'nivo' },\n borderWidth: 0,\n borderColor: { theme: 'background' },\n\n enableArcLabels: false,\n arcLabel: 'formattedValue',\n arcLabelsSkipAngle: 0,\n arcLabelsSkipRadius: 0,\n arcLabelsRadiusOffset: 0.5,\n arcLabelsTextColor: { theme: 'labels.text.fill' },\n\n enableRadialGrid: true,\n enableCircularGrid: true,\n radialAxis: null,\n circularAxisInner: null,\n circularAxisOuter: {},\n\n legends: [],\n\n isInteractive: true,\n tooltip: PolarBarTooltip,\n\n role: 'img',\n}\n\nexport const svgDefaultProps = {\n ...defaultProps,\n animate: true,\n motionConfig: 'gentle',\n transitionMode: 'outerRadius' as ArcTransitionMode,\n}\n","import { createElement, MouseEvent, useCallback } from 'react'\nimport { ArcsLayer, ArcGenerator } from '@nivo/arcs'\nimport { useTooltip } from '@nivo/tooltip'\nimport { PolarBarSvgProps, PolarBarDatum, PolarBarComputedDatum } from './types'\n\ninterface PolarBarArcsProps<RawDatum extends PolarBarDatum> {\n center: [number, number]\n arcs: any[]\n borderWidth: Exclude<PolarBarSvgProps<RawDatum>['borderWidth'], undefined>\n borderColor: Exclude<PolarBarSvgProps<RawDatum>['borderColor'], undefined>\n arcGenerator: ArcGenerator\n isInteractive: PolarBarSvgProps<RawDatum>['isInteractive']\n tooltip: Exclude<PolarBarSvgProps<RawDatum>['tooltip'], undefined>\n onClick?: PolarBarSvgProps<RawDatum>['onClick']\n onMouseEnter?: PolarBarSvgProps<RawDatum>['onMouseEnter']\n onMouseMove?: PolarBarSvgProps<RawDatum>['onMouseMove']\n onMouseLeave?: PolarBarSvgProps<RawDatum>['onMouseLeave']\n transitionMode: Exclude<PolarBarSvgProps<RawDatum>['transitionMode'], undefined>\n}\n\nexport const PolarBarArcs = <RawDatum extends PolarBarDatum>({\n center,\n arcs,\n borderWidth,\n borderColor,\n arcGenerator,\n isInteractive,\n tooltip,\n onClick,\n onMouseEnter,\n onMouseMove,\n onMouseLeave,\n transitionMode,\n}: PolarBarArcsProps<RawDatum>) => {\n const { showTooltipFromEvent, hideTooltip } = useTooltip()\n\n const handleClick = useCallback(\n (arc: PolarBarComputedDatum, event: MouseEvent) => {\n onClick?.(arc, event)\n },\n [onClick]\n )\n\n const handleMouseEnter = useCallback(\n (arc: PolarBarComputedDatum, event: MouseEvent) => {\n showTooltipFromEvent(createElement(tooltip, { arc }), event)\n onMouseEnter?.(arc, event)\n },\n [showTooltipFromEvent, tooltip, onMouseEnter]\n )\n\n const handleMouseMove = useCallback(\n (arc: PolarBarComputedDatum, event: MouseEvent) => {\n showTooltipFromEvent(createElement(tooltip, { arc }), event)\n onMouseMove?.(arc, event)\n },\n [showTooltipFromEvent, tooltip, onMouseMove]\n )\n\n const handleMouseLeave = useCallback(\n (arc: PolarBarComputedDatum, event: MouseEvent) => {\n hideTooltip()\n onMouseLeave?.(arc, event)\n },\n [hideTooltip, onMouseLeave]\n )\n\n return (\n <ArcsLayer<PolarBarComputedDatum>\n center={center}\n data={arcs}\n arcGenerator={arcGenerator}\n borderWidth={borderWidth}\n borderColor={borderColor}\n transitionMode={transitionMode}\n onClick={isInteractive ? handleClick : undefined}\n onMouseEnter={isInteractive ? handleMouseEnter : undefined}\n onMouseMove={isInteractive ? handleMouseMove : undefined}\n onMouseLeave={isInteractive ? handleMouseLeave : undefined}\n />\n )\n}\n","import {\n createElement,\n ForwardedRef,\n forwardRef,\n Fragment,\n ReactElement,\n ReactNode,\n Ref,\n} from 'react'\nimport { useDimensions, Container, SvgWrapper } from '@nivo/core'\nimport { BoxLegendSvg } from '@nivo/legends'\nimport { ArcLabelsLayer } from '@nivo/arcs'\nimport { PolarGrid, RadialAxis, CircularAxis } from '@nivo/polar-axes'\nimport { PolarBarSvgProps, PolarBarDatum, PolarBarLayerId, PolarBarComputedDatum } from './types'\nimport { svgDefaultProps } from './defaults'\nimport { usePolarBar } from './hooks'\nimport { PolarBarArcs } from './PolarBarArcs'\n\nconst InnerPolarBar = <RawDatum extends PolarBarDatum>({\n data,\n indexBy = svgDefaultProps.indexBy,\n keys = svgDefaultProps.keys,\n valueSteps,\n adjustValueRange = svgDefaultProps.adjustValueRange,\n valueFormat,\n layers = svgDefaultProps.layers,\n width,\n height,\n margin: partialMargin,\n startAngle = svgDefaultProps.startAngle,\n endAngle = svgDefaultProps.endAngle,\n innerRadius: innerRadiusRatio = svgDefaultProps.innerRadius,\n cornerRadius = svgDefaultProps.cornerRadius,\n colors = svgDefaultProps.colors,\n borderWidth = svgDefaultProps.borderWidth,\n borderColor = svgDefaultProps.borderColor,\n enableArcLabels = svgDefaultProps.enableArcLabels,\n arcLabel = svgDefaultProps.arcLabel,\n arcLabelsSkipAngle = svgDefaultProps.arcLabelsSkipAngle,\n arcLabelsSkipRadius = svgDefaultProps.arcLabelsSkipRadius,\n arcLabelsTextColor = svgDefaultProps.arcLabelsTextColor,\n arcLabelsRadiusOffset = svgDefaultProps.arcLabelsRadiusOffset,\n arcLabelsComponent,\n enableRadialGrid = svgDefaultProps.enableRadialGrid,\n enableCircularGrid = svgDefaultProps.enableCircularGrid,\n radialAxis = svgDefaultProps.radialAxis,\n circularAxisInner = svgDefaultProps.circularAxisInner,\n circularAxisOuter = svgDefaultProps.circularAxisOuter,\n legends = svgDefaultProps.legends,\n forwardLegendData,\n isInteractive = svgDefaultProps.isInteractive,\n tooltip = svgDefaultProps.tooltip,\n onClick,\n onMouseEnter,\n onMouseMove,\n onMouseLeave,\n transitionMode = svgDefaultProps.transitionMode,\n role = svgDefaultProps.role,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n forwardedRef,\n}: PolarBarSvgProps<RawDatum> & {\n forwardedRef: Ref<SVGSVGElement>\n}) => {\n const { innerWidth, innerHeight, outerWidth, outerHeight, margin } = useDimensions(\n width,\n height,\n partialMargin\n )\n\n const {\n center,\n innerRadius,\n outerRadius,\n angleScale,\n radiusScale,\n arcGenerator,\n arcs,\n legendData,\n customLayerProps,\n } = usePolarBar<RawDatum>({\n data,\n indexBy,\n keys,\n valueSteps,\n adjustValueRange,\n valueFormat,\n width: innerWidth,\n height: innerHeight,\n startAngle,\n endAngle,\n innerRadius: innerRadiusRatio,\n cornerRadius,\n colors,\n forwardLegendData,\n })\n\n const layerById: Record<PolarBarLayerId, ReactNode> = {\n grid: null,\n arcs: null,\n axes: null,\n labels: null,\n legends: null,\n }\n\n if (layers.includes('grid')) {\n layerById.grid = (\n <PolarGrid\n key=\"grid\"\n center={center}\n enableRadialGrid={enableRadialGrid}\n angleScale={angleScale}\n startAngle={startAngle}\n endAngle={endAngle}\n enableCircularGrid={enableCircularGrid}\n radiusScale={radiusScale}\n circularGridTicks={valueSteps}\n />\n )\n }\n\n if (layers.includes('arcs')) {\n layerById.arcs = (\n <PolarBarArcs<RawDatum>\n key=\"arcs\"\n arcs={arcs}\n center={center}\n arcGenerator={arcGenerator}\n isInteractive={isInteractive}\n borderColor={borderColor}\n borderWidth={borderWidth}\n tooltip={tooltip}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseMove={onMouseMove}\n onMouseLeave={onMouseLeave}\n transitionMode={transitionMode}\n />\n )\n }\n\n if (layers.includes('axes')) {\n layerById.axes = (\n <Fragment key=\"axes\">\n {circularAxisInner && innerRadius > 0 && (\n <CircularAxis\n type=\"inner\"\n center={center}\n radius={innerRadius}\n startAngle={startAngle}\n endAngle={endAngle}\n scale={angleScale}\n {...circularAxisInner}\n />\n )}\n {circularAxisOuter && (\n <CircularAxis\n type=\"outer\"\n center={center}\n radius={outerRadius}\n startAngle={startAngle}\n endAngle={endAngle}\n scale={angleScale}\n {...circularAxisOuter}\n />\n )}\n {radialAxis && (\n <RadialAxis\n center={center}\n scale={radiusScale}\n ticks={valueSteps}\n {...radialAxis}\n />\n )}\n </Fragment>\n )\n }\n\n if (enableArcLabels && layers.includes('labels')) {\n layerById.labels = (\n <ArcLabelsLayer<PolarBarComputedDatum>\n key=\"labels\"\n center={center}\n data={arcs}\n label={arcLabel}\n radiusOffset={arcLabelsRadiusOffset}\n skipAngle={arcLabelsSkipAngle}\n skipRadius={arcLabelsSkipRadius}\n textColor={arcLabelsTextColor}\n transitionMode={transitionMode}\n component={arcLabelsComponent}\n />\n )\n }\n\n if (layers.includes('legends') && legends.length > 0) {\n layerById.legends = (\n <Fragment key=\"legends\">\n {legends.map((legend, i) => (\n <BoxLegendSvg\n key={i}\n {...legend}\n containerWidth={innerWidth}\n containerHeight={innerHeight}\n data={legendData}\n />\n ))}\n </Fragment>\n )\n }\n\n return (\n <SvgWrapper\n width={outerWidth}\n height={outerHeight}\n margin={margin}\n role={role}\n ariaLabel={ariaLabel}\n ariaLabelledBy={ariaLabelledBy}\n ariaDescribedBy={ariaDescribedBy}\n ref={forwardedRef}\n >\n {layers.map((layer, i) => {\n if (typeof layer === 'function') {\n return <Fragment key={i}>{createElement(layer, customLayerProps)}</Fragment>\n }\n\n return layerById?.[layer] ?? null\n })}\n </SvgWrapper>\n )\n}\n\nexport const PolarBar = forwardRef(\n <RawDatum extends PolarBarDatum>(\n {\n isInteractive = svgDefaultProps.isInteractive,\n animate = svgDefaultProps.animate,\n motionConfig = svgDefaultProps.motionConfig,\n theme,\n renderWrapper,\n ...props\n }: PolarBarSvgProps<RawDatum>,\n ref: Ref<SVGSVGElement>\n ) => (\n <Container\n {...{\n animate,\n isInteractive,\n motionConfig,\n renderWrapper,\n theme,\n }}\n >\n <InnerPolarBar isInteractive={isInteractive} {...props} forwardedRef={ref} />\n </Container>\n )\n) as <RawDatum extends PolarBarDatum>(\n props: PolarBarSvgProps<RawDatum> & {\n ref?: ForwardedRef<SVGSVGElement>\n }\n) => ReactElement\n","import { useEffect, useMemo, useRef } from 'react'\nimport { scaleBand, scaleLinear } from 'd3-scale'\nimport { arc as d3Arc, stack as d3Stack } from 'd3-shape'\nimport { degreesToRadians, usePropertyAccessor, useValueFormatter } from '@nivo/core'\nimport { castBandScale, castLinearScale } from '@nivo/scales'\nimport { useOrdinalColorScale } from '@nivo/colors'\nimport {\n PolarBarDatum,\n PolarBarDataProps,\n PolarBarCommonProps,\n PolarBarComputedDatum,\n PolarBarCustomLayerProps,\n} from './types'\nimport { defaultProps } from './defaults'\n\nexport const usePolarBar = <RawDatum extends PolarBarDatum>({\n data,\n indexBy = defaultProps.indexBy,\n keys = defaultProps.keys,\n valueSteps,\n adjustValueRange = defaultProps.adjustValueRange,\n valueFormat,\n width,\n height,\n startAngle = defaultProps.startAngle,\n endAngle = defaultProps.endAngle,\n innerRadius: innerRadiusRatio = defaultProps.innerRadius,\n cornerRadius = defaultProps.cornerRadius,\n colors = defaultProps.colors,\n forwardLegendData,\n}: Pick<\n Partial<PolarBarCommonProps<RawDatum>>,\n | 'valueSteps'\n | 'adjustValueRange'\n | 'valueFormat'\n | 'startAngle'\n | 'endAngle'\n | 'innerRadius'\n | 'cornerRadius'\n | 'colors'\n | 'forwardLegendData'\n> & {\n data: PolarBarDataProps<RawDatum>['data']\n indexBy?: PolarBarCommonProps<RawDatum>['indexBy']\n keys?: PolarBarCommonProps<RawDatum>['keys']\n width: number\n height: number\n}) => {\n const getIndex = usePropertyAccessor<RawDatum, string>(indexBy)\n const indices = useMemo(() => data.map(getIndex), [data, getIndex])\n\n const [rawSeries, maxStackedValue] = useMemo(() => {\n const stack = d3Stack<RawDatum>().keys(keys)\n const _rawSeries = stack(data)\n const _maxStackedValue = Math.max(..._rawSeries.flatMap(layer => layer.map(([, y1]) => y1)))\n\n return [_rawSeries, _maxStackedValue]\n }, [data, keys])\n\n const center: [number, number] = useMemo(() => [width / 2, height / 2], [width, height])\n\n const outerRadius = Math.min(...center)\n const innerRadius = outerRadius * Math.min(innerRadiusRatio, 1)\n\n const angleScale = useMemo(() => {\n return castBandScale<string>(\n scaleBand<string>().domain(indices).range([startAngle, endAngle])\n )\n }, [indices, startAngle, endAngle])\n\n const radiusScale = useMemo(() => {\n const scale = castLinearScale<number, number>(\n scaleLinear<number, number>()\n .domain([0, maxStackedValue])\n .range([innerRadius, outerRadius])\n .clamp(true)\n )\n\n if (adjustValueRange) {\n scale.nice(typeof valueSteps === 'number' ? valueSteps : undefined)\n }\n\n return scale\n }, [innerRadius, outerRadius, maxStackedValue, adjustValueRange, valueSteps])\n\n const formatValue = useValueFormatter<number>(valueFormat)\n\n const getColor = useOrdinalColorScale(colors, 'key')\n\n const arcs = useMemo(() => {\n return rawSeries\n .map(series => {\n const key = series.key\n\n return series.map((datum, indexIndex) => {\n const index = indices[indexIndex]\n const value = datum.data[key] as number\n const startAngle = degreesToRadians(angleScale(index) ?? 0)\n\n const arc: PolarBarComputedDatum = {\n index,\n key,\n id: `${index}.${key}`,\n value,\n formattedValue: formatValue(value),\n color: '',\n arc: {\n startAngle,\n endAngle: startAngle + degreesToRadians(angleScale.bandwidth()),\n innerRadius: radiusScale(datum[0]),\n outerRadius: radiusScale(datum[1]),\n },\n }\n arc.color = getColor(arc)\n\n return arc\n })\n })\n .flat()\n }, [indices, rawSeries, angleScale, radiusScale, formatValue, getColor])\n\n const arcGenerator = useMemo(\n () =>\n d3Arc<PolarBarComputedDatum['arc']>()\n .startAngle(d => d.startAngle)\n .endAngle(d => d.endAngle)\n .innerRadius(d => d.innerRadius)\n .outerRadius(d => d.outerRadius)\n .cornerRadius(cornerRadius),\n [cornerRadius]\n )\n\n // Colors are extracted from the computed arcs, to avoid\n // duplicating the colors function, but if the color logic is custom for each arc,\n // this might lead to inconsistent values for the legends.\n // Maybe we could allow passing custom legend data to fix that.\n const legendData = useMemo(\n () =>\n keys.map(key => {\n const arcWithKey = arcs.find(arc => arc.key === key)\n const color = arcWithKey ? arcWithKey.color : 'transparent'\n\n return {\n id: key,\n label: key,\n color,\n }\n }),\n [keys, arcs]\n )\n\n const forwardLegendDataRef = useRef(forwardLegendData)\n useEffect(() => {\n if (typeof forwardLegendDataRef.current !== 'function') return\n forwardLegendDataRef.current(legendData)\n }, [forwardLegendDataRef, legendData])\n\n const customLayerProps: PolarBarCustomLayerProps = useMemo(\n () => ({\n center,\n innerRadius,\n outerRadius,\n arcs,\n arcGenerator,\n radiusScale,\n angleScale,\n }),\n [center, innerRadius, outerRadius, arcs, arcGenerator, radiusScale, angleScale]\n )\n\n return {\n center,\n innerRadius,\n outerRadius,\n angleScale,\n radiusScale,\n arcGenerator,\n arcs,\n legendData,\n customLayerProps,\n }\n}\n","import { forwardRef, ReactElement, Ref } from 'react'\nimport { ResponsiveWrapper, ResponsiveProps, WithChartRef } from '@nivo/core'\nimport { PolarBar } from './PolarBar'\nimport { PolarBarSvgProps, PolarBarDatum } from './types'\n\nexport const ResponsivePolarBar = forwardRef(\n <RawDatum extends PolarBarDatum>(\n {\n defaultWidth,\n defaultHeight,\n onResize,\n debounceResize,\n ...props\n }: ResponsiveProps<PolarBarSvgProps<RawDatum>>,\n ref: Ref<SVGSVGElement>\n ) => (\n <ResponsiveWrapper\n defaultWidth={defaultWidth}\n defaultHeight={defaultHeight}\n onResize={onResize}\n debounceResize={debounceResize}\n >\n {({ width, height }: { width: number; height: number }) => (\n <PolarBar<RawDatum> width={width} height={height} {...props} ref={ref} />\n )}\n </ResponsiveWrapper>\n )\n) as <RawDatum extends PolarBarDatum>(\n props: WithChartRef<ResponsiveProps<PolarBarSvgProps<RawDatum>>, SVGSVGElement>\n) => ReactElement\n"],"names":["defaultProps","indexBy","keys","adjustValueRange","startAngle","endAngle","innerRadius","cornerRadius","layers","colors","scheme","borderWidth","borderColor","theme","enableArcLabels","arcLabel","arcLabelsSkipAngle","arcLabelsSkipRadius","arcLabelsRadiusOffset","arcLabelsTextColor","enableRadialGrid","enableCircularGrid","radialAxis","circularAxisInner","circularAxisOuter","legends","isInteractive","tooltip","_ref","arc","_jsx","BasicTooltip","enableChip","id","_jsxs","children","index","key","value","formattedValue","color","role","svgDefaultProps","_extends","animate","motionConfig","transitionMode","PolarBarArcs","center","arcs","arcGenerator","onClick","onMouseEnter","onMouseMove","onMouseLeave","_useTooltip","useTooltip","showTooltipFromEvent","hideTooltip","handleClick","useCallback","event","handleMouseEnter","createElement","handleMouseMove","handleMouseLeave","ArcsLayer","data","undefined","InnerPolarBar","_ref$indexBy","_ref$keys","valueSteps","_ref$adjustValueRange","valueFormat","_ref$layers","width","height","partialMargin","margin","_ref$startAngle","_ref$endAngle","_ref$innerRadius","innerRadiusRatio","_ref$cornerRadius","_ref$colors","_ref$borderWidth","_ref$borderColor","_ref$enableArcLabels","_ref$arcLabel","_ref$arcLabelsSkipAng","_ref$arcLabelsSkipRad","_ref$arcLabelsTextCol","_ref$arcLabelsRadiusO","arcLabelsComponent","_ref$enableRadialGrid","_ref$enableCircularGr","_ref$radialAxis","_ref$circularAxisInne","_ref$circularAxisOute","_ref$legends","forwardLegendData","_ref$isInteractive","_ref$tooltip","_ref$transitionMode","_ref$role","ariaLabel","ariaLabelledBy","ariaDescribedBy","forwardedRef","_useDimensions","useDimensions","innerWidth","innerHeight","outerWidth","outerHeight","_usePolarBar","getIndex","usePropertyAccessor","indices","useMemo","map","_useMemo","_rawSeries","d3Stack","stack","_maxStackedValue","Math","max","apply","flatMap","layer","_ref2","rawSeries","maxStackedValue","outerRadius","min","angleScale","castBandScale","scaleBand","domain","range","radiusScale","scale","castLinearScale","scaleLinear","clamp","nice","formatValue","useValueFormatter","getColor","useOrdinalColorScale","series","datum","indexIndex","_angleScale","degreesToRadians","bandwidth","flat","d3Arc","d","legendData","arcWithKey","find","label","forwardLegendDataRef","useRef","useEffect","current","customLayerProps","usePolarBar","layerById","grid","axes","labels","includes","PolarGrid","circularGridTicks","Fragment","CircularAxis","type","radius","RadialAxis","ticks","ArcLabelsLayer","radiusOffset","skipAngle","skipRadius","textColor","component","length","legend","i","BoxLegendSvg","containerWidth","containerHeight","SvgWrapper","ref","_layerById$layer","PolarBar","forwardRef","_ref2$isInteractive","_ref2$animate","_ref2$motionConfig","renderWrapper","props","_objectWithoutPropertiesLoose","_excluded","Container","ResponsivePolarBar","defaultWidth","defaultHeight","onResize","debounceResize","ResponsiveWrapper"],"mappings":"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"}