{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "parallel-coordinates",
  "type": "registry:component",
  "title": "Parallel coordinates",
  "description": "Many items across many measures. Sample data: five models on accuracy, speed, cost, safety and context.",
  "registryDependencies": [
    "@chartory/core",
    "@chartory/plot-parallel"
  ],
  "files": [
    {
      "path": "registry/chartory/components/parallel-coordinates.tsx",
      "type": "registry:component",
      "target": "components/chartory/parallel-coordinates.tsx",
      "content": "// SPDX-License-Identifier: MIT · Copyright (c) 2026 BEY AGENCY LTD · Chartory, usechartory.com\n// Parallel coordinates (Chartory chart 049): sizes xs | s | m | l, laid out again from the data at each\n// size; collection \"hearth\" (default) or \"signal\" (with @chartory/signal, Code and Complete). Data in the type's shape (default: the sample). Docs:\n// https://usechartory.com/docs/charts/parallel-coordinates\nimport { ChartView, type ChartViewProps } from \"@/lib/chartory/charts/chart-view\"\nimport { registerChart } from \"@/lib/chartory/charts/defs\"\nimport { data as sample } from \"@/lib/chartory/charts/types/049-parallel-coordinates/data\"\nimport { def } from \"@/lib/chartory/charts/types/049-parallel-coordinates/layout\"\n\nregisterChart(def, sample)\n\nexport type ParallelCoordinatesData = typeof sample\nexport type ParallelCoordinatesProps = Omit<ChartViewProps, \"def\" | \"data\" | \"states\"> & {\n  /** the data to draw (default: the sample) */\n  data?: ParallelCoordinatesData\n  /** further data states: the chart morphs to them (update) or ticks through them (live, with interval) */\n  states?: ParallelCoordinatesData[]\n}\n\nexport function ParallelCoordinates(props: ParallelCoordinatesProps) {\n  return <ChartView def={def} {...props} />\n}\n"
    },
    {
      "path": "registry/chartory/charts/types/049-parallel-coordinates/data.ts",
      "type": "registry:lib",
      "target": "lib/chartory/charts/types/049-parallel-coordinates/data.ts",
      "content": "// SPDX-License-Identifier: MIT · Copyright (c) 2026 BEY AGENCY LTD · Chartory, usechartory.com\n// 049 Parallel coordinates · sample data (Figma chart/049, AI: model eval scores 0–100 per measure, Atlas 3 in focus).\nimport type { ParallelData } from \"../../plots/parallel\";\n\nexport const data: ParallelData = {\n  focus: \"Atlas 3\",\n  axes: [\"ACCURACY\", \"SPEED\", \"COST\", \"SAFETY\", \"CONTEXT\"],\n  rows: [\n    { label: \"Kite 2 Pro\", tok: \"data/cat-2\", vals: [86, 82, 71, 90, 70] },\n    { label: \"Orion XL\", tok: \"data/cat-3\", vals: [95, 38, 30, 93, 96] },\n    { label: \"Vega 1.5\", tok: \"data/cat-4\", vals: [74, 94, 90, 85, 52] },\n    { label: \"Nova\", tok: \"data/cat-5\", vals: [80, 70, 62, 78, 64] },\n    { label: \"Atlas 3\", tok: \"data/primary\", vals: [92, 64, 48, 95, 88] },\n  ],\n};\n"
    },
    {
      "path": "registry/chartory/charts/types/049-parallel-coordinates/layout.ts",
      "type": "registry:lib",
      "target": "lib/chartory/charts/types/049-parallel-coordinates/layout.ts",
      "content": "// SPDX-License-Identifier: MIT · Copyright (c) 2026 BEY AGENCY LTD · Chartory, usechartory.com\n// 049 Parallel coordinates (Figma chart/049): C.parallel on the model eval sample.\nimport type { ChartDef, TooltipSpec } from \"../../core/shell\";\nimport { parallel } from \"../../plots/parallel\";\nimport { data } from \"./data\";\n\nconst axis = (s: string) => s.charAt(0) + s.slice(1).toLowerCase();\nconst focus = data.rows.find((r) => r.label === data.focus)!;\n\n/** Tooltip for one model (group = its line, with points for the focus model): its score on every measure. */\nfunction tipOf(o: typeof data, g: number): TooltipSpec | null {\n  const r = o.rows[g];\n  if (!r) return null;\n  return { kind: \"series\", caps: `${r.label.toUpperCase()} · SCORE / 100`, rows: o.axes.map((a, i) => ({ label: axis(a), value: String(r.vals[i]), swatch: r.tok })) };\n}\n\nexport const def: ChartDef = {\n  no: 49,\n  slug: \"parallel-coordinates\",\n  legend: [[\"data/primary\", \"Atlas 3\"], [\"data/cat-2\", \"Kite 2 Pro\"], [\"data/cat-3\", \"Orion XL\"], [\"data/cat-4\", \"Vega 1.5\"], [\"data/cat-5\", \"Nova\"]],\n  // update: the next eval run; every score moves up to ±8 points (whole numbers, 0–100)\n  update: (d, step) => {\n    const o = d as typeof data;\n    return { ...o, rows: o.rows.map((r, ri) => ({ ...r, vals: r.vals.map((v, i) => Math.max(1, Math.min(99, Math.round(v + 8 * Math.sin(step * 1.7 + ri * 1.3 + i * 0.9))))) })) };\n  },\n  plot: (K, p, w, d) => parallel(K, p, w, (d as typeof data | undefined) ?? data),\n  tip: (d, g) => tipOf(d as typeof data, g),\n  describe: {\n    title: \"Model trade-offs\",\n    summary: `Eval scores out of 100 for ${data.rows.length} models on ${data.axes.length} measures; ${focus.label} scores ${data.axes.map((a, i) => `${focus.vals[i]} on ${axis(a).toLowerCase()}`).join(\", \")}.`,\n    table: { head: [\"Model\", ...data.axes.map(axis)], rows: data.rows.map((r) => [r.label, ...r.vals]) },\n  },\n};\n"
    }
  ],
  "categories": [
    "charts",
    "relationship"
  ],
  "meta": {
    "access": "free",
    "no": 49,
    "family": "Relationship"
  }
}
