Skip to content
Domphy

chartRadarIcons

A Charts block/component from shadcn/ui — clean-room reimplemented for Domphy (see methodology). Call chartRadarIcons() with no arguments for a working demo, or edit the code below live.

Props

PropTypeDescription
dataRadarPoint[]—
seriesRadarSeriesConfig[]—
titlestring—
descriptionstring—
trendTextstring—
trendDirectionChartTrendDirection—
captionTextstring—
Implementation notes

Legend entries reuse the same chartLegendRow icon field (and chartTrendIcon glyph) already used by the trend footer across every chart family in this package, so the up/down arrows are original geometric glyphs, not a copied icon set. Desktop assigned the down arrow and Mobile the up arrow - an arbitrary but internally consistent choice, since the spec only describes 'one down, one up' without saying which series gets which.

Status: ported · Reference: shadcn/ui original

// shadcn/ui "charts/radar-icons" recipe — clean-room reimplementation.
//
// Identical to chartRadarLegend, except each legend entry swaps its plain
// color swatch for a small directional arrow icon (a downward arrow for one
// series, an upward arrow for the other). Upstream renders both arrows in a
// single muted-foreground gray via ChartLegendContent's `[&>svg]:text-muted-
// foreground` — the icon is a per-series glyph *shape*, not a per-series
// color — so the legend entries pass "neutral" here rather than each series'
// own accent color.

import type { DomphyElement } from "@domphy/core";
import {
  type ChartLegendEntry,
  type ChartTrendDirection,
  chartTrendFooter,
} from "./chart-area-shared.js";
import {
  createRadarTooltip,
  RADAR_MONTHLY_MULTI_DATA,
  RADAR_MULTI_SERIES,
  type RadarPoint,
  type RadarSeriesConfig,
  radarCardShell,
  renderRadarChart,
} from "./chart-radar-shared.js";

export interface ChartRadarIconsProps {
  data?: RadarPoint[];
  series?: RadarSeriesConfig[];
  title?: string;
  description?: string;
  trendText?: string;
  trendDirection?: ChartTrendDirection;
  captionText?: string;
}

/**
 * shadcn/ui "charts/radar-icons" recipe — the Legend recipe with directional
 * arrow icons instead of plain swatches. Call with no arguments for a
 * working demo.
 */
function chartRadarIcons(
  props: ChartRadarIconsProps = {},
): DomphyElement<"div"> {
  const {
    data = RADAR_MONTHLY_MULTI_DATA,
    series = RADAR_MULTI_SERIES,
    title = "Radar Chart - Icons",
    description = "Showing total visitors for the last 6 months",
    trendText = "Trending up by 5.2% this month",
    trendDirection = "up",
    captionText = "January - June 2026",
  } = props;

  const tooltip = createRadarTooltip();
  const legendEntries: ChartLegendEntry[] = series.map((entry) => ({
    label: entry.label,
    // Upstream ChartLegendContent colors the icon glyph muted-foreground for
    // every series, not the series' accent color — so pass "neutral".
    color: "neutral",
    icon: entry.icon ?? "up",
  }));

  return radarCardShell({
    title,
    description,
    content: {
      div: [
        renderRadarChart({
          data,
          series,
          tooltip,
          tooltipShowLabel: true,
          tooltipIndicator: "line",
          legend: legendEntries,
        }),
      ],
    },
    footer: chartTrendFooter({
      trendText,
      direction: trendDirection,
      captionText,
    }),
  });
}

export { chartRadarIcons };

← Back to shadcn/ui catalog