import type { Meta, StoryObj } from "@storybook/react-vite"; import { PointProgressionChart } from "./PointProgressionChart"; import type { ChartDataPoint } from "./PointProgressionChart"; const meta: Meta = { title: "Standings/PointProgressionChart", component: PointProgressionChart, parameters: { layout: "padded", docs: { description: { component: "Multi-line chart showing team point progression over time. Features monotone curve rendering, interactive legend hover highlighting to isolate individual team lines, and legend sorted by current ranking.", }, }, }, }; export default meta; type Story = StoryObj; export const Empty: Story = { args: { chartData: [], teams: [], }, }; const twoTeams = [ { id: "team1", name: "Thunderhawks" }, { id: "team2", name: "Storm Chasers" }, ]; const twoTeamData = [ { date: "2024-01-01", Thunderhawks: 25, "Storm Chasers": 20 }, { date: "2024-01-02", Thunderhawks: 50, "Storm Chasers": 40 }, { date: "2024-01-03", Thunderhawks: 75, "Storm Chasers": 60 }, { date: "2024-01-04", Thunderhawks: 100, "Storm Chasers": 80 }, { date: "2024-01-05", Thunderhawks: 125, "Storm Chasers": 105 }, ]; export const TwoTeams: Story = { args: { chartData: twoTeamData, teams: twoTeams, }, }; const fiveTeams = [ { id: "team1", name: "Thunderhawks" }, { id: "team2", name: "Storm Chasers" }, { id: "team3", name: "Golden Eagles" }, { id: "team4", name: "Lightning Bolts" }, { id: "team5", name: "Iron Wolves" }, ]; const fiveTeamData = [ { date: "2024-01-01", Thunderhawks: 25, "Storm Chasers": 20, "Golden Eagles": 30, "Lightning Bolts": 15, "Iron Wolves": 10 }, { date: "2024-01-02", Thunderhawks: 50, "Storm Chasers": 45, "Golden Eagles": 40, "Lightning Bolts": 35, "Iron Wolves": 25 }, { date: "2024-01-03", Thunderhawks: 75, "Storm Chasers": 70, "Golden Eagles": 55, "Lightning Bolts": 65, "Iron Wolves": 50 }, { date: "2024-01-04", Thunderhawks: 100, "Storm Chasers": 95, "Golden Eagles": 85, "Lightning Bolts": 90, "Iron Wolves": 80 }, { date: "2024-01-05", Thunderhawks: 125, "Storm Chasers": 115, "Golden Eagles": 105, "Lightning Bolts": 110, "Iron Wolves": 100 }, ]; export const FiveTeams: Story = { args: { chartData: fiveTeamData, teams: fiveTeams, }, }; const overlappingTeams = [ { id: "team1", name: "Alpha" }, { id: "team2", name: "Beta" }, { id: "team3", name: "Gamma" }, ]; const overlappingData: ChartDataPoint[] = [ { date: "2024-01-01", Alpha: 100, Beta: 100, Gamma: 100 }, { date: "2024-01-02", Alpha: 110, Beta: 110, Gamma: 105 }, { date: "2024-01-03", Alpha: 120, Beta: 115, Gamma: 120 }, { date: "2024-01-04", Alpha: 125, Beta: 125, Gamma: 125 }, ]; export const OverlappingPoints: Story = { name: "Overlapping Points (Hover Legend)", args: { chartData: overlappingData, teams: overlappingTeams, }, parameters: { docs: { description: { story: "Demonstrates interactive highlighting via the legend and legend sorted by current ranking. Hover over a team name in the legend to isolate that team's line and dim the others.", }, }, }, }; const soloTeam = [{ id: "team1", name: "Solo Team" }]; const soloTeamData = [ { date: "2024-01-01", "Solo Team": 10 }, { date: "2024-01-02", "Solo Team": 20 }, { date: "2024-01-03", "Solo Team": 30 }, { date: "2024-01-04", "Solo Team": 40 }, { date: "2024-01-05", "Solo Team": 50 }, ]; export const SingleTeam: Story = { args: { chartData: soloTeamData, teams: soloTeam, }, }; const manyTeams = Array.from({ length: 12 }, (_, i) => ({ id: `team${i}`, name: `Team ${i + 1}`, })); const manyTeamData = [ { date: "2024-01-01", ...Object.fromEntries(manyTeams.map((t, i) => [t.name, (i + 1) * 10])) }, { date: "2024-01-02", ...Object.fromEntries(manyTeams.map((t, i) => [t.name, (i + 1) * 10 + 15])) }, { date: "2024-01-03", ...Object.fromEntries(manyTeams.map((t, i) => [t.name, (i + 1) * 10 + 30])) }, ]; export const ManyTeams: Story = { args: { chartData: manyTeamData, teams: manyTeams, }, }; const lateStartTeams = [ { id: "team1", name: "Early Birds" }, { id: "team2", name: "Late Bloomer" }, ]; const lateStartData: ChartDataPoint[] = [ { date: "2024-01-01", "Early Birds": 25, "Late Bloomer": 0 }, { date: "2024-01-02", "Early Birds": 50, "Late Bloomer": 5 }, { date: "2024-01-03", "Early Birds": 75, "Late Bloomer": 25 }, { date: "2024-01-04", "Early Birds": 100, "Late Bloomer": 60 }, { date: "2024-01-05", "Early Birds": 125, "Late Bloomer": 110 }, ]; export const LateStart: Story = { args: { chartData: lateStartData, teams: lateStartTeams, }, };