diff --git a/apps/design-system/__registry__/default/block/chart-area-axes.tsx b/apps/design-system/__registry__/default/block/chart-area-axes.tsx
deleted file mode 100644
index 26713267cbd6d..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-area-axes.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis, YAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'An area chart with axes'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Axes
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
-
- } />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-area-default.tsx b/apps/design-system/__registry__/default/block/chart-area-default.tsx
deleted file mode 100644
index 0ccfe016d7c5d..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-area-default.tsx
+++ /dev/null
@@ -1,77 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A simple area chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-area-gradient.tsx b/apps/design-system/__registry__/default/block/chart-area-gradient.tsx
deleted file mode 100644
index d6e7ad9b62167..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-area-gradient.tsx
+++ /dev/null
@@ -1,100 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'An area chart with gradient fill'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Gradient
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-area-icons.tsx b/apps/design-system/__registry__/default/block/chart-area-icons.tsx
deleted file mode 100644
index bc9d01952533c..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-area-icons.tsx
+++ /dev/null
@@ -1,100 +0,0 @@
-'use client'
-
-import { TrendingDown, TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import {
- ChartConfig,
- ChartContainer,
- ChartLegend,
- ChartLegendContent,
- ChartTooltip,
- ChartTooltipContent,
-} from 'ui'
-
-export const description = 'An area chart with icons'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- icon: TrendingDown,
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- icon: TrendingUp,
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Icons
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
- } />
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-area-interactive.tsx b/apps/design-system/__registry__/default/block/chart-area-interactive.tsx
deleted file mode 100644
index df2579fe8f8de..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-area-interactive.tsx
+++ /dev/null
@@ -1,238 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from 'ui'
-import {
- ChartConfig,
- ChartContainer,
- ChartLegend,
- ChartLegendContent,
- ChartTooltip,
- ChartTooltipContent,
-} from 'ui'
-import {
- Select_Shadcn_,
- SelectContent_Shadcn_,
- SelectItem_Shadcn_,
- SelectTrigger_Shadcn_,
- SelectValue_Shadcn_,
-} from 'ui'
-
-export const description = 'An interactive area chart'
-
-const chartData = [
- { date: '2024-04-01', desktop: 222, mobile: 150 },
- { date: '2024-04-02', desktop: 97, mobile: 180 },
- { date: '2024-04-03', desktop: 167, mobile: 120 },
- { date: '2024-04-04', desktop: 242, mobile: 260 },
- { date: '2024-04-05', desktop: 373, mobile: 290 },
- { date: '2024-04-06', desktop: 301, mobile: 340 },
- { date: '2024-04-07', desktop: 245, mobile: 180 },
- { date: '2024-04-08', desktop: 409, mobile: 320 },
- { date: '2024-04-09', desktop: 59, mobile: 110 },
- { date: '2024-04-10', desktop: 261, mobile: 190 },
- { date: '2024-04-11', desktop: 327, mobile: 350 },
- { date: '2024-04-12', desktop: 292, mobile: 210 },
- { date: '2024-04-13', desktop: 342, mobile: 380 },
- { date: '2024-04-14', desktop: 137, mobile: 220 },
- { date: '2024-04-15', desktop: 120, mobile: 170 },
- { date: '2024-04-16', desktop: 138, mobile: 190 },
- { date: '2024-04-17', desktop: 446, mobile: 360 },
- { date: '2024-04-18', desktop: 364, mobile: 410 },
- { date: '2024-04-19', desktop: 243, mobile: 180 },
- { date: '2024-04-20', desktop: 89, mobile: 150 },
- { date: '2024-04-21', desktop: 137, mobile: 200 },
- { date: '2024-04-22', desktop: 224, mobile: 170 },
- { date: '2024-04-23', desktop: 138, mobile: 230 },
- { date: '2024-04-24', desktop: 387, mobile: 290 },
- { date: '2024-04-25', desktop: 215, mobile: 250 },
- { date: '2024-04-26', desktop: 75, mobile: 130 },
- { date: '2024-04-27', desktop: 383, mobile: 420 },
- { date: '2024-04-28', desktop: 122, mobile: 180 },
- { date: '2024-04-29', desktop: 315, mobile: 240 },
- { date: '2024-04-30', desktop: 454, mobile: 380 },
- { date: '2024-05-01', desktop: 165, mobile: 220 },
- { date: '2024-05-02', desktop: 293, mobile: 310 },
- { date: '2024-05-03', desktop: 247, mobile: 190 },
- { date: '2024-05-04', desktop: 385, mobile: 420 },
- { date: '2024-05-05', desktop: 481, mobile: 390 },
- { date: '2024-05-06', desktop: 498, mobile: 520 },
- { date: '2024-05-07', desktop: 388, mobile: 300 },
- { date: '2024-05-08', desktop: 149, mobile: 210 },
- { date: '2024-05-09', desktop: 227, mobile: 180 },
- { date: '2024-05-10', desktop: 293, mobile: 330 },
- { date: '2024-05-11', desktop: 335, mobile: 270 },
- { date: '2024-05-12', desktop: 197, mobile: 240 },
- { date: '2024-05-13', desktop: 197, mobile: 160 },
- { date: '2024-05-14', desktop: 448, mobile: 490 },
- { date: '2024-05-15', desktop: 473, mobile: 380 },
- { date: '2024-05-16', desktop: 338, mobile: 400 },
- { date: '2024-05-17', desktop: 499, mobile: 420 },
- { date: '2024-05-18', desktop: 315, mobile: 350 },
- { date: '2024-05-19', desktop: 235, mobile: 180 },
- { date: '2024-05-20', desktop: 177, mobile: 230 },
- { date: '2024-05-21', desktop: 82, mobile: 140 },
- { date: '2024-05-22', desktop: 81, mobile: 120 },
- { date: '2024-05-23', desktop: 252, mobile: 290 },
- { date: '2024-05-24', desktop: 294, mobile: 220 },
- { date: '2024-05-25', desktop: 201, mobile: 250 },
- { date: '2024-05-26', desktop: 213, mobile: 170 },
- { date: '2024-05-27', desktop: 420, mobile: 460 },
- { date: '2024-05-28', desktop: 233, mobile: 190 },
- { date: '2024-05-29', desktop: 78, mobile: 130 },
- { date: '2024-05-30', desktop: 340, mobile: 280 },
- { date: '2024-05-31', desktop: 178, mobile: 230 },
- { date: '2024-06-01', desktop: 178, mobile: 200 },
- { date: '2024-06-02', desktop: 470, mobile: 410 },
- { date: '2024-06-03', desktop: 103, mobile: 160 },
- { date: '2024-06-04', desktop: 439, mobile: 380 },
- { date: '2024-06-05', desktop: 88, mobile: 140 },
- { date: '2024-06-06', desktop: 294, mobile: 250 },
- { date: '2024-06-07', desktop: 323, mobile: 370 },
- { date: '2024-06-08', desktop: 385, mobile: 320 },
- { date: '2024-06-09', desktop: 438, mobile: 480 },
- { date: '2024-06-10', desktop: 155, mobile: 200 },
- { date: '2024-06-11', desktop: 92, mobile: 150 },
- { date: '2024-06-12', desktop: 492, mobile: 420 },
- { date: '2024-06-13', desktop: 81, mobile: 130 },
- { date: '2024-06-14', desktop: 426, mobile: 380 },
- { date: '2024-06-15', desktop: 307, mobile: 350 },
- { date: '2024-06-16', desktop: 371, mobile: 310 },
- { date: '2024-06-17', desktop: 475, mobile: 520 },
- { date: '2024-06-18', desktop: 107, mobile: 170 },
- { date: '2024-06-19', desktop: 341, mobile: 290 },
- { date: '2024-06-20', desktop: 408, mobile: 450 },
- { date: '2024-06-21', desktop: 169, mobile: 210 },
- { date: '2024-06-22', desktop: 317, mobile: 270 },
- { date: '2024-06-23', desktop: 480, mobile: 530 },
- { date: '2024-06-24', desktop: 132, mobile: 180 },
- { date: '2024-06-25', desktop: 141, mobile: 190 },
- { date: '2024-06-26', desktop: 434, mobile: 380 },
- { date: '2024-06-27', desktop: 448, mobile: 490 },
- { date: '2024-06-28', desktop: 149, mobile: 200 },
- { date: '2024-06-29', desktop: 103, mobile: 160 },
- { date: '2024-06-30', desktop: 446, mobile: 400 },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- const [timeRange, setTimeRange] = React.useState('90d')
-
- const filteredData = chartData.filter((item) => {
- const date = new Date(item.date)
- const now = new Date()
- let daysToSubtract = 90
- if (timeRange === '30d') {
- daysToSubtract = 30
- } else if (timeRange === '7d') {
- daysToSubtract = 7
- }
- now.setDate(now.getDate() - daysToSubtract)
- return date >= now
- })
-
- return (
-
-
-
- Area Chart - Interactive
- Showing total visitors for the last 3 months
-
-
-
-
-
-
-
- Last 3 months
-
-
- Last 30 days
-
-
- Last 7 days
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {
- const date = new Date(value)
- return date.toLocaleDateString('en-US', {
- month: 'short',
- day: 'numeric',
- })
- }}
- />
- {
- return new Date(value).toLocaleDateString('en-US', {
- month: 'short',
- day: 'numeric',
- })
- }}
- indicator="dot"
- />
- }
- />
-
-
- } />
-
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-area-legend.tsx b/apps/design-system/__registry__/default/block/chart-area-legend.tsx
deleted file mode 100644
index a58cfa9fbd9b5..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-area-legend.tsx
+++ /dev/null
@@ -1,98 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import {
- ChartConfig,
- ChartContainer,
- ChartLegend,
- ChartLegendContent,
- ChartTooltip,
- ChartTooltipContent,
-} from 'ui'
-
-export const description = 'An area chart with a legend'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Legend
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
- } />
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-area-linear.tsx b/apps/design-system/__registry__/default/block/chart-area-linear.tsx
deleted file mode 100644
index 8381711c7aa87..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-area-linear.tsx
+++ /dev/null
@@ -1,80 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A linear area chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Linear
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
- }
- />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-area-stacked-expand.tsx b/apps/design-system/__registry__/default/block/chart-area-stacked-expand.tsx
deleted file mode 100644
index eca0b1118f715..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-area-stacked-expand.tsx
+++ /dev/null
@@ -1,104 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A stacked area chart with expand stacking'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80, other: 45 },
- { month: 'February', desktop: 305, mobile: 200, other: 100 },
- { month: 'March', desktop: 237, mobile: 120, other: 150 },
- { month: 'April', desktop: 73, mobile: 190, other: 50 },
- { month: 'May', desktop: 209, mobile: 130, other: 100 },
- { month: 'June', desktop: 214, mobile: 140, other: 160 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-3))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Stacked Expanded
- Showing total visitors for the last 6months
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-area-stacked.tsx b/apps/design-system/__registry__/default/block/chart-area-stacked.tsx
deleted file mode 100644
index 22c0f58558b20..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-area-stacked.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A stacked area chart'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Stacked
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-area-step.tsx b/apps/design-system/__registry__/default/block/chart-area-step.tsx
deleted file mode 100644
index 5ac732aeaf428..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-area-step.tsx
+++ /dev/null
@@ -1,78 +0,0 @@
-'use client'
-
-import { Activity, TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A step area chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- icon: Activity,
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Step
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-bar-active.tsx b/apps/design-system/__registry__/default/block/chart-bar-active.tsx
deleted file mode 100644
index b1ab1d95e1a0c..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-bar-active.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, CartesianGrid, Rectangle, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A bar chart with an active bar'
-
-const chartData = [
- { browser: 'chrome', visitors: 187, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 275, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Active
- January - June 2024
-
-
-
-
-
- chartConfig[value as keyof typeof chartConfig]?.label}
- />
- } />
- {
- return (
-
- )
- }}
- />
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-bar-default.tsx b/apps/design-system/__registry__/default/block/chart-bar-default.tsx
deleted file mode 100644
index 1c0596e3b5732..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-bar-default.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A bar chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-bar-horizontal.tsx b/apps/design-system/__registry__/default/block/chart-bar-horizontal.tsx
deleted file mode 100644
index 2305d0a4e1c3c..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-bar-horizontal.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, XAxis, YAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A horizontal bar chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Horizontal
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-bar-label-custom.tsx b/apps/design-system/__registry__/default/block/chart-bar-label-custom.tsx
deleted file mode 100644
index 7867342bc6d53..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-bar-label-custom.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, CartesianGrid, LabelList, XAxis, YAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A bar chart with a custom label'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
- label: {
- color: 'hsl(var(--background))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Custom Label
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- hide
- />
-
- } />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-bar-label.tsx b/apps/design-system/__registry__/default/block/chart-bar-label.tsx
deleted file mode 100644
index 3bbdcc7a7eafa..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-bar-label.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, CartesianGrid, LabelList, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A bar chart with a label'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Label
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-bar-mixed.tsx b/apps/design-system/__registry__/default/block/chart-bar-mixed.tsx
deleted file mode 100644
index 1790507f73fe3..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-bar-mixed.tsx
+++ /dev/null
@@ -1,86 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, XAxis, YAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A mixed bar chart'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Mixed
- January - June 2024
-
-
-
-
- chartConfig[value as keyof typeof chartConfig]?.label}
- />
-
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-bar-multiple.tsx b/apps/design-system/__registry__/default/block/chart-bar-multiple.tsx
deleted file mode 100644
index ffb9c61679abd..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-bar-multiple.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A multiple bar chart'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Multiple
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-bar-negative.tsx b/apps/design-system/__registry__/default/block/chart-bar-negative.tsx
deleted file mode 100644
index 43f87ef07627d..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-bar-negative.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, CartesianGrid, Cell, LabelList } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A bar chart with negative values'
-
-const chartData = [
- { month: 'January', visitors: 186 },
- { month: 'February', visitors: 205 },
- { month: 'March', visitors: -207 },
- { month: 'April', visitors: 173 },
- { month: 'May', visitors: -209 },
- { month: 'June', visitors: 214 },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Negative
- January - June 2024
-
-
-
-
-
- }
- />
-
-
- {chartData.map((item) => (
- 0 ? 'hsl(var(--chart-1))' : 'hsl(var(--chart-2))'}
- />
- ))}
- |
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-bar-stacked.tsx b/apps/design-system/__registry__/default/block/chart-bar-stacked.tsx
deleted file mode 100644
index 34a7439e9827c..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-bar-stacked.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import {
- ChartConfig,
- ChartContainer,
- ChartLegend,
- ChartLegendContent,
- ChartTooltip,
- ChartTooltipContent,
-} from 'ui'
-
-export const description = 'A stacked bar chart with a legend'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Stacked + Legend
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
- } />
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-composed-actions.tsx b/apps/design-system/__registry__/default/block/chart-composed-actions.tsx
new file mode 100644
index 0000000000000..f6eac7312b247
--- /dev/null
+++ b/apps/design-system/__registry__/default/block/chart-composed-actions.tsx
@@ -0,0 +1,106 @@
+'use client'
+
+import {
+ Chart,
+ ChartActions,
+ ChartCard,
+ ChartContent,
+ ChartHeader,
+ ChartTitle,
+ ChartEmptyState,
+ ChartLoadingState,
+ ChartBar,
+ ChartLine,
+} from 'ui-patterns/Chart'
+import { BarChart2, ExternalLink, LineChart } from 'lucide-react'
+import { useState, useEffect } from 'react'
+
+export default function ChartComposedActions() {
+ const [isLoading, setIsLoading] = useState(true)
+ const [chartType, setChartType] = useState<'bar' | 'line'>('bar')
+
+ const actions = [
+ {
+ label: 'Open in Logs Explorer',
+ onClick: () => {
+ alert('Opening in Logs Explorer...')
+ },
+ icon: ,
+ },
+ {
+ label: 'Toggle Chart Type',
+ onClick: () => {
+ setChartType(chartType === 'bar' ? 'line' : 'bar')
+ },
+ icon: chartType === 'bar' ? : ,
+ },
+ ]
+
+ const data = Array.from({ length: 46 }, (_, i) => {
+ const date = new Date()
+ date.setMinutes(date.getMinutes() - i * 5) // Each point 5 minutes apart
+
+ return {
+ timestamp: date.toISOString(),
+ requests: Math.floor(Math.random() * 100),
+ }
+ }).reverse()
+
+ useEffect(() => {
+ setTimeout(() => {
+ setIsLoading(false)
+ }, 1000)
+ }, [])
+
+ return (
+
+
+
+
+ Total Requests
+
+
+ }
+ title="No data to show"
+ description="It may take up to 24 hours for data to refresh"
+ />
+ }
+ loadingState={ }
+ >
+
+ {chartType === 'bar' ? (
+ `${value}k`,
+ width: 80,
+ }}
+ isFullHeight={true}
+ />
+ ) : (
+ `${value}k`,
+ width: 80,
+ }}
+ isFullHeight={true}
+ />
+ )}
+
+
+
+
+
+ )
+}
diff --git a/apps/design-system/__registry__/default/block/chart-composed-basic.tsx b/apps/design-system/__registry__/default/block/chart-composed-basic.tsx
new file mode 100644
index 0000000000000..99778d63f438c
--- /dev/null
+++ b/apps/design-system/__registry__/default/block/chart-composed-basic.tsx
@@ -0,0 +1,122 @@
+'use client'
+
+import {
+ Chart,
+ ChartActions,
+ ChartCard,
+ ChartContent,
+ ChartHeader,
+ ChartTitle,
+ ChartEmptyState,
+ ChartLoadingState,
+ ChartBar,
+ ChartLine,
+} from 'ui-patterns/Chart'
+import { BarChart2, ExternalLink } from 'lucide-react'
+import { useState, useEffect } from 'react'
+
+export default function ComposedChartBasic() {
+ const [isLoading, setIsLoading] = useState(true)
+
+ const actions = [
+ {
+ label: 'Open in Logs Explorer',
+ onClick: () => {
+ alert('Ta da! You clicked me! 🎉')
+ },
+ icon: ,
+ },
+ ]
+
+ const data = Array.from({ length: 46 }, (_, i) => {
+ const date = new Date()
+ date.setMinutes(date.getMinutes() - i * 5) // Each point 5 minutes apart
+
+ return {
+ timestamp: date.toISOString(),
+ standard_score: Math.floor(Math.random() * 100),
+ }
+ }).reverse()
+
+ useEffect(() => {
+ setTimeout(() => {
+ setIsLoading(false)
+ }, 1000)
+ }, [])
+
+ return (
+
+
+
+
+ Standard Bar Chart
+
+
+
+
+ }
+ title="No data to show"
+ description="It may take up to 24 hours for data to refresh"
+ />
+ }
+ loadingState={ }
+ >
+
+ `${value}k`,
+ width: 80,
+ }}
+ isFullHeight={true}
+ />
+
+
+
+
+
+
+
+
+ Standard Line Chart
+
+
+
+
+ }
+ title="No data to show"
+ description="It may take up to 24 hours for data to refresh"
+ />
+ }
+ loadingState={ }
+ >
+
+ `${value}k`,
+ width: 80,
+ }}
+ isFullHeight={true}
+ />
+
+
+
+
+
+ )
+}
diff --git a/apps/design-system/__registry__/default/block/chart-composed-demo.tsx b/apps/design-system/__registry__/default/block/chart-composed-demo.tsx
new file mode 100644
index 0000000000000..c734900d39567
--- /dev/null
+++ b/apps/design-system/__registry__/default/block/chart-composed-demo.tsx
@@ -0,0 +1,73 @@
+'use client'
+
+import {
+ Chart,
+ ChartCard,
+ ChartContent,
+ ChartHeader,
+ ChartEmptyState,
+ ChartLoadingState,
+ ChartMetric,
+} from 'ui-patterns/Chart'
+import { BarChart2 } from 'lucide-react'
+import { LogsBarChart } from 'ui-patterns/LogsBarChart'
+import { useState, useEffect } from 'react'
+
+export default function ComposedChartDemo() {
+ const [isLoading, setIsLoading] = useState(true)
+
+ const data = Array.from({ length: 60 }, (_, i) => {
+ const date = new Date()
+ date.setMinutes(date.getMinutes() - i * 5) // Each point 5 minutes apart
+
+ return {
+ timestamp: date.toISOString(),
+ ok_count: Math.floor(Math.random() * 100), // Random value 0-99
+ error_count: Math.floor(Math.random() * 50), // Random value 0-50
+ warning_count: Math.floor(Math.random() * 50), // Random value 0-50
+ }
+ }).reverse()
+
+ const totalUsersValue = 4663
+
+ useEffect(() => {
+ setTimeout(() => {
+ setIsLoading(false)
+ }, 1000)
+ }, [])
+
+ return (
+
+
+
+
+
+
+
+
+
+
+ }
+ title="No data to show"
+ description="It may take up to 24 hours for data to refresh"
+ />
+ }
+ loadingState={ }
+ >
+
+
+
+
+
+
+
+ )
+}
diff --git a/apps/design-system/__registry__/default/block/chart-composed-metrics.tsx b/apps/design-system/__registry__/default/block/chart-composed-metrics.tsx
new file mode 100644
index 0000000000000..0c876d7e5898d
--- /dev/null
+++ b/apps/design-system/__registry__/default/block/chart-composed-metrics.tsx
@@ -0,0 +1,100 @@
+'use client'
+
+import {
+ Chart,
+ ChartCard,
+ ChartHeader,
+ ChartActions,
+ ChartContent,
+ ChartMetric,
+ ChartSparkline,
+} from 'ui-patterns/Chart'
+import { ExternalLink } from 'lucide-react'
+import { useState, useEffect } from 'react'
+import { Skeleton } from 'ui'
+
+export default function ChartComposedMetrics() {
+ const [data, setData] = useState>([])
+
+ const actions = [
+ {
+ label: 'Open in Logs Explorer',
+ onClick: () => {
+ alert('Ta da! You clicked me! 🎉')
+ },
+ icon: ,
+ },
+ ]
+
+ useEffect(() => {
+ const now = new Date()
+ setData(
+ Array.from({ length: 12 }, (_, i) => ({
+ value: Math.floor(4000 + i * 100 + (Math.random() * 2000 - 800)),
+ timestamp: new Date(now.getTime() - (11 - i) * 60 * 60 * 1000).toISOString(),
+ }))
+ )
+ }, [])
+
+ const averageValue = data.reduce((acc, curr) => acc + curr.value, 0) / data.length
+
+ const diff = data[data.length - 1]?.value - data[0]?.value || 0
+ const diffPercentage = (diff / averageValue) * 100
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+ >
+
+
+
+
+
+
+
+
+
+
+ }
+ >
+
+
+
+
+
+ )
+}
diff --git a/apps/design-system/__registry__/default/block/chart-composed-states.tsx b/apps/design-system/__registry__/default/block/chart-composed-states.tsx
new file mode 100644
index 0000000000000..4e5aa5d8bd5b4
--- /dev/null
+++ b/apps/design-system/__registry__/default/block/chart-composed-states.tsx
@@ -0,0 +1,92 @@
+'use client'
+
+import { BarChart2, ExternalLink } from 'lucide-react'
+import {
+ Chart,
+ ChartCard,
+ ChartHeader,
+ ChartTitle,
+ ChartActions,
+ ChartContent,
+ ChartEmptyState,
+ ChartLoadingState,
+ ChartDisabledState,
+} from 'ui-patterns/Chart'
+import { Badge } from 'ui'
+
+export default function ChartComposedStates() {
+ const actions = [
+ {
+ label: 'Open in Logs Explorer',
+ onClick: () => {
+ alert('Ta da! You clicked me! 🎉')
+ },
+ icon: ,
+ },
+ ]
+
+ const disabledActions = [
+ {
+ label: 'Upgrade to Pro',
+ href: '#',
+ },
+ ]
+
+ return (
+
+
+
+
+ Response Errors
+
+
+ }>My chart here...
+
+
+
+
+
+
+ Response Errors
+
+
+ }
+ title="No data to show"
+ description="It may take up to 24 hours for data to refresh"
+ />
+ }
+ loadingState={ }
+ >
+ My chart here...
+
+
+
+
+
+
+
+ Response Errors
+
+
+ }
+ disabledState={
+ Pro}
+ label="API Processing Time"
+ description="This chart is available on the Pro plan and above"
+ actions={disabledActions}
+ />
+ }
+ >
+ My chart here...
+
+
+
+
+ )
+}
diff --git a/apps/design-system/__registry__/default/block/chart-composed-table.tsx b/apps/design-system/__registry__/default/block/chart-composed-table.tsx
new file mode 100644
index 0000000000000..303114447e9e6
--- /dev/null
+++ b/apps/design-system/__registry__/default/block/chart-composed-table.tsx
@@ -0,0 +1,106 @@
+'use client'
+
+import {
+ Chart,
+ ChartActions,
+ ChartCard,
+ ChartContent,
+ ChartHeader,
+ ChartTitle,
+ ChartEmptyState,
+ ChartLoadingState,
+ ChartBar,
+ ChartFooter,
+} from 'ui-patterns/Chart'
+import { BarChart2, ExternalLink } from 'lucide-react'
+import { useState, useEffect } from 'react'
+import { Table, TableHead, TableBody, TableRow, TableCell, TableHeader } from 'ui'
+import { format } from 'date-fns'
+
+export default function ChartComposedTable() {
+ const [isLoading, setIsLoading] = useState(true)
+
+ const actions = [
+ {
+ label: 'Open in Logs Explorer',
+ onClick: () => {
+ alert('Opening in Logs Explorer...')
+ },
+ icon: ,
+ },
+ ]
+
+ const data = Array.from({ length: 46 }, (_, i) => {
+ const date = new Date()
+ date.setMinutes(date.getMinutes() - i * 5) // Each point 5 minutes apart
+
+ return {
+ timestamp: date.toISOString(),
+ standard_score: Math.floor(Math.random() * 100),
+ }
+ }).reverse()
+
+ useEffect(() => {
+ setTimeout(() => {
+ setIsLoading(false)
+ }, 1000)
+ }, [])
+
+ return (
+
+
+
+
+ Standard Bar Chart
+
+
+ }
+ title="No data to show"
+ description="It may take up to 24 hours for data to refresh"
+ />
+ }
+ loadingState={ }
+ >
+
+ `${value}k`,
+ width: 80,
+ }}
+ isFullHeight={true}
+ />
+
+
+
+
+
+
+ Timestamp
+ Standard Score
+
+
+
+ {data.slice(0, 3).map((item) => (
+
+
+ {format(new Date(item.timestamp), 'MMM d, yyyy h:mm a')}
+
+ {item.standard_score}
+
+ ))}
+
+
+
+
+
+
+ )
+}
diff --git a/apps/design-system/__registry__/default/block/chart-line-default.tsx b/apps/design-system/__registry__/default/block/chart-line-default.tsx
deleted file mode 100644
index 408dc1d6f9f35..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-line-default.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A line chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-line-dots-colors.tsx b/apps/design-system/__registry__/default/block/chart-line-dots-colors.tsx
deleted file mode 100644
index c8a55a0c44b1c..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-line-dots-colors.tsx
+++ /dev/null
@@ -1,100 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, Dot, Line, LineChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A line chart with dots and colors'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- color: 'hsl(var(--chart-2))',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Dots Colors
- January - June 2024
-
-
-
-
-
- }
- />
- {
- return (
-
- )
- }}
- />
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-line-dots-custom.tsx b/apps/design-system/__registry__/default/block/chart-line-dots-custom.tsx
deleted file mode 100644
index 87c693093198b..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-line-dots-custom.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-'use client'
-
-import { GitCommitVertical, TrendingUp } from 'lucide-react'
-import { CartesianGrid, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A line chart with custom dots'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Custom Dots
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
- {
- const r = 24
- return (
-
- )
- }}
- />
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-line-dots.tsx b/apps/design-system/__registry__/default/block/chart-line-dots.tsx
deleted file mode 100644
index cc211f2c2b49d..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-line-dots.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A line chart with dots'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Dots
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-line-interactive.tsx b/apps/design-system/__registry__/default/block/chart-line-interactive.tsx
deleted file mode 100644
index 5f9c92b9792bb..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-line-interactive.tsx
+++ /dev/null
@@ -1,208 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { CartesianGrid, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'An interactive line chart'
-
-const chartData = [
- { date: '2024-04-01', desktop: 222, mobile: 150 },
- { date: '2024-04-02', desktop: 97, mobile: 180 },
- { date: '2024-04-03', desktop: 167, mobile: 120 },
- { date: '2024-04-04', desktop: 242, mobile: 260 },
- { date: '2024-04-05', desktop: 373, mobile: 290 },
- { date: '2024-04-06', desktop: 301, mobile: 340 },
- { date: '2024-04-07', desktop: 245, mobile: 180 },
- { date: '2024-04-08', desktop: 409, mobile: 320 },
- { date: '2024-04-09', desktop: 59, mobile: 110 },
- { date: '2024-04-10', desktop: 261, mobile: 190 },
- { date: '2024-04-11', desktop: 327, mobile: 350 },
- { date: '2024-04-12', desktop: 292, mobile: 210 },
- { date: '2024-04-13', desktop: 342, mobile: 380 },
- { date: '2024-04-14', desktop: 137, mobile: 220 },
- { date: '2024-04-15', desktop: 120, mobile: 170 },
- { date: '2024-04-16', desktop: 138, mobile: 190 },
- { date: '2024-04-17', desktop: 446, mobile: 360 },
- { date: '2024-04-18', desktop: 364, mobile: 410 },
- { date: '2024-04-19', desktop: 243, mobile: 180 },
- { date: '2024-04-20', desktop: 89, mobile: 150 },
- { date: '2024-04-21', desktop: 137, mobile: 200 },
- { date: '2024-04-22', desktop: 224, mobile: 170 },
- { date: '2024-04-23', desktop: 138, mobile: 230 },
- { date: '2024-04-24', desktop: 387, mobile: 290 },
- { date: '2024-04-25', desktop: 215, mobile: 250 },
- { date: '2024-04-26', desktop: 75, mobile: 130 },
- { date: '2024-04-27', desktop: 383, mobile: 420 },
- { date: '2024-04-28', desktop: 122, mobile: 180 },
- { date: '2024-04-29', desktop: 315, mobile: 240 },
- { date: '2024-04-30', desktop: 454, mobile: 380 },
- { date: '2024-05-01', desktop: 165, mobile: 220 },
- { date: '2024-05-02', desktop: 293, mobile: 310 },
- { date: '2024-05-03', desktop: 247, mobile: 190 },
- { date: '2024-05-04', desktop: 385, mobile: 420 },
- { date: '2024-05-05', desktop: 481, mobile: 390 },
- { date: '2024-05-06', desktop: 498, mobile: 520 },
- { date: '2024-05-07', desktop: 388, mobile: 300 },
- { date: '2024-05-08', desktop: 149, mobile: 210 },
- { date: '2024-05-09', desktop: 227, mobile: 180 },
- { date: '2024-05-10', desktop: 293, mobile: 330 },
- { date: '2024-05-11', desktop: 335, mobile: 270 },
- { date: '2024-05-12', desktop: 197, mobile: 240 },
- { date: '2024-05-13', desktop: 197, mobile: 160 },
- { date: '2024-05-14', desktop: 448, mobile: 490 },
- { date: '2024-05-15', desktop: 473, mobile: 380 },
- { date: '2024-05-16', desktop: 338, mobile: 400 },
- { date: '2024-05-17', desktop: 499, mobile: 420 },
- { date: '2024-05-18', desktop: 315, mobile: 350 },
- { date: '2024-05-19', desktop: 235, mobile: 180 },
- { date: '2024-05-20', desktop: 177, mobile: 230 },
- { date: '2024-05-21', desktop: 82, mobile: 140 },
- { date: '2024-05-22', desktop: 81, mobile: 120 },
- { date: '2024-05-23', desktop: 252, mobile: 290 },
- { date: '2024-05-24', desktop: 294, mobile: 220 },
- { date: '2024-05-25', desktop: 201, mobile: 250 },
- { date: '2024-05-26', desktop: 213, mobile: 170 },
- { date: '2024-05-27', desktop: 420, mobile: 460 },
- { date: '2024-05-28', desktop: 233, mobile: 190 },
- { date: '2024-05-29', desktop: 78, mobile: 130 },
- { date: '2024-05-30', desktop: 340, mobile: 280 },
- { date: '2024-05-31', desktop: 178, mobile: 230 },
- { date: '2024-06-01', desktop: 178, mobile: 200 },
- { date: '2024-06-02', desktop: 470, mobile: 410 },
- { date: '2024-06-03', desktop: 103, mobile: 160 },
- { date: '2024-06-04', desktop: 439, mobile: 380 },
- { date: '2024-06-05', desktop: 88, mobile: 140 },
- { date: '2024-06-06', desktop: 294, mobile: 250 },
- { date: '2024-06-07', desktop: 323, mobile: 370 },
- { date: '2024-06-08', desktop: 385, mobile: 320 },
- { date: '2024-06-09', desktop: 438, mobile: 480 },
- { date: '2024-06-10', desktop: 155, mobile: 200 },
- { date: '2024-06-11', desktop: 92, mobile: 150 },
- { date: '2024-06-12', desktop: 492, mobile: 420 },
- { date: '2024-06-13', desktop: 81, mobile: 130 },
- { date: '2024-06-14', desktop: 426, mobile: 380 },
- { date: '2024-06-15', desktop: 307, mobile: 350 },
- { date: '2024-06-16', desktop: 371, mobile: 310 },
- { date: '2024-06-17', desktop: 475, mobile: 520 },
- { date: '2024-06-18', desktop: 107, mobile: 170 },
- { date: '2024-06-19', desktop: 341, mobile: 290 },
- { date: '2024-06-20', desktop: 408, mobile: 450 },
- { date: '2024-06-21', desktop: 169, mobile: 210 },
- { date: '2024-06-22', desktop: 317, mobile: 270 },
- { date: '2024-06-23', desktop: 480, mobile: 530 },
- { date: '2024-06-24', desktop: 132, mobile: 180 },
- { date: '2024-06-25', desktop: 141, mobile: 190 },
- { date: '2024-06-26', desktop: 434, mobile: 380 },
- { date: '2024-06-27', desktop: 448, mobile: 490 },
- { date: '2024-06-28', desktop: 149, mobile: 200 },
- { date: '2024-06-29', desktop: 103, mobile: 160 },
- { date: '2024-06-30', desktop: 446, mobile: 400 },
-]
-
-const chartConfig = {
- views: {
- label: 'Page Views',
- },
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- const [activeChart, setActiveChart] = React.useState('desktop')
-
- const total = React.useMemo(
- () => ({
- desktop: chartData.reduce((acc, curr) => acc + curr.desktop, 0),
- mobile: chartData.reduce((acc, curr) => acc + curr.mobile, 0),
- }),
- []
- )
-
- return (
-
-
-
- Line Chart - Interactive
- Showing total visitors for the last 3 months
-
-
- {['desktop', 'mobile'].map((key) => {
- const chart = key as keyof typeof chartConfig
- return (
- setActiveChart(chart)}
- >
- {chartConfig[chart].label}
-
- {total[key as keyof typeof total].toLocaleString()}
-
-
- )
- })}
-
-
-
-
-
-
- {
- const date = new Date(value)
- return date.toLocaleDateString('en-US', {
- month: 'short',
- day: 'numeric',
- })
- }}
- />
- {
- return new Date(value).toLocaleDateString('en-US', {
- month: 'short',
- day: 'numeric',
- year: 'numeric',
- })
- }}
- />
- }
- />
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-line-label-custom.tsx b/apps/design-system/__registry__/default/block/chart-line-label-custom.tsx
deleted file mode 100644
index 3d84fec03a38b..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-line-label-custom.tsx
+++ /dev/null
@@ -1,103 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, LabelList, Line, LineChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A line chart with a custom label'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- color: 'hsl(var(--chart-2))',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Custom Label
- January - June 2024
-
-
-
-
-
- }
- />
-
- chartConfig[value]?.label}
- />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-line-label.tsx b/apps/design-system/__registry__/default/block/chart-line-label.tsx
deleted file mode 100644
index 2c187e9596157..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-line-label.tsx
+++ /dev/null
@@ -1,85 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, LabelList, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A line chart with a label'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Label
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-line-linear.tsx b/apps/design-system/__registry__/default/block/chart-line-linear.tsx
deleted file mode 100644
index 9219a3c9de472..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-line-linear.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A linear line chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Linear
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-line-multiple.tsx b/apps/design-system/__registry__/default/block/chart-line-multiple.tsx
deleted file mode 100644
index f09714a273700..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-line-multiple.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A multiple line chart'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Multiple
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-line-step.tsx b/apps/design-system/__registry__/default/block/chart-line-step.tsx
deleted file mode 100644
index 0ab71e07d0911..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-line-step.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A line chart with step'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Step
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-pie-donut-active.tsx b/apps/design-system/__registry__/default/block/chart-pie-donut-active.tsx
deleted file mode 100644
index 2490b50f65f00..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-pie-donut-active.tsx
+++ /dev/null
@@ -1,81 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Label, Pie, PieChart, Sector } from 'recharts'
-import { PieSectorDataItem } from 'recharts/types/polar/Pie'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A donut chart with an active sector'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Donut Active
- January - June 2024
-
-
-
-
- } />
- (
-
- )}
- />
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-pie-donut-text.tsx b/apps/design-system/__registry__/default/block/chart-pie-donut-text.tsx
deleted file mode 100644
index cba1eee849211..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-pie-donut-text.tsx
+++ /dev/null
@@ -1,111 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { TrendingUp } from 'lucide-react'
-import { Label, Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A donut chart with text'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 287, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 190, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- const totalVisitors = React.useMemo(() => {
- return chartData.reduce((acc, curr) => acc + curr.visitors, 0)
- }, [])
-
- return (
-
-
- Pie Chart - Donut with Text
- January - June 2024
-
-
-
-
- } />
-
- {
- if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {
- return (
-
-
- {totalVisitors.toLocaleString()}
-
-
- Visitors
-
-
- )
- }
- }}
- />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-pie-donut.tsx b/apps/design-system/__registry__/default/block/chart-pie-donut.tsx
deleted file mode 100644
index 328fbd4b48a3b..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-pie-donut.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A donut chart'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Donut
- January - June 2024
-
-
-
-
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-pie-interactive.tsx b/apps/design-system/__registry__/default/block/chart-pie-interactive.tsx
deleted file mode 100644
index be05cbf8e415b..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-pie-interactive.tsx
+++ /dev/null
@@ -1,170 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { Label, Pie, PieChart, Sector } from 'recharts'
-import { PieSectorDataItem } from 'recharts/types/polar/Pie'
-
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartStyle, ChartTooltip, ChartTooltipContent } from 'ui'
-import {
- Select_Shadcn_,
- SelectContent_Shadcn_,
- SelectItem_Shadcn_,
- SelectTrigger_Shadcn_,
- SelectValue_Shadcn_,
-} from 'ui'
-
-export const description = 'An interactive pie chart'
-
-const desktopData = [
- { month: 'january', desktop: 186, fill: 'var(--color-january)' },
- { month: 'february', desktop: 305, fill: 'var(--color-february)' },
- { month: 'march', desktop: 237, fill: 'var(--color-march)' },
- { month: 'april', desktop: 173, fill: 'var(--color-april)' },
- { month: 'may', desktop: 209, fill: 'var(--color-may)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- desktop: {
- label: 'Desktop',
- },
- mobile: {
- label: 'Mobile',
- },
- january: {
- label: 'January',
- color: 'hsl(var(--chart-1))',
- },
- february: {
- label: 'February',
- color: 'hsl(var(--chart-2))',
- },
- march: {
- label: 'March',
- color: 'hsl(var(--chart-3))',
- },
- april: {
- label: 'April',
- color: 'hsl(var(--chart-4))',
- },
- may: {
- label: 'May',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- const id = 'pie-interactive'
- const [activeMonth, setActiveMonth] = React.useState(desktopData[0].month)
-
- const activeIndex = React.useMemo(
- () => desktopData.findIndex((item) => item.month === activeMonth),
- [activeMonth]
- )
- const months = React.useMemo(() => desktopData.map((item) => item.month), [])
-
- return (
-
-
-
-
- Pie Chart - Interactive
- January - June 2024
-
-
-
-
-
-
- {months.map((key) => {
- const config = chartConfig[key as keyof typeof chartConfig]
-
- if (!config) {
- return null
- }
-
- return (
-
-
-
- {config?.label}
-
-
- )
- })}
-
-
-
-
-
-
- } />
- (
-
-
-
-
- )}
- >
- {
- if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {
- return (
-
-
- {desktopData[activeIndex].desktop.toLocaleString()}
-
-
- Visitors
-
-
- )
- }
- }}
- />
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-pie-label-custom.tsx b/apps/design-system/__registry__/default/block/chart-pie-label-custom.tsx
deleted file mode 100644
index 5fcae35aabe69..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-pie-label-custom.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A pie chart with a custom label'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Custom Label
- January - June 2024
-
-
-
-
- } />
- {
- return (
-
- {`${
- chartConfig[payload.browser as keyof typeof chartConfig]?.label
- } (${payload.visitors})`}
-
- )
- }}
- nameKey="browser"
- />
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-pie-label-list.tsx b/apps/design-system/__registry__/default/block/chart-pie-label-list.tsx
deleted file mode 100644
index 814371c307e3c..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-pie-label-list.tsx
+++ /dev/null
@@ -1,78 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { LabelList, Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A pie chart with a label list'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Label List
- January - June 2024
-
-
-
-
- } />
-
- chartConfig[value]?.label}
- />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-pie-label.tsx b/apps/design-system/__registry__/default/block/chart-pie-label.tsx
deleted file mode 100644
index 408bd68fb9572..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-pie-label.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A pie chart with a label'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Label
- January - June 2024
-
-
-
-
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-pie-legend.tsx b/apps/design-system/__registry__/default/block/chart-pie-legend.tsx
deleted file mode 100644
index c72830caf1716..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-pie-legend.tsx
+++ /dev/null
@@ -1,64 +0,0 @@
-'use client'
-
-import { Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartLegend, ChartLegendContent } from 'ui'
-
-export const description = 'A pie chart with a legend'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Legend
- January - June 2024
-
-
-
-
-
- }
- className="-translate-y-2 flex-wrap gap-2 [&>*]:basis-1/4 [&>*]:justify-center"
- />
-
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-pie-separator-none.tsx b/apps/design-system/__registry__/default/block/chart-pie-separator-none.tsx
deleted file mode 100644
index ed00866c3b800..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-pie-separator-none.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A pie chart with no separator'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Separator None
- January - June 2024
-
-
-
-
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-pie-simple.tsx b/apps/design-system/__registry__/default/block/chart-pie-simple.tsx
deleted file mode 100644
index a16fb87ca5632..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-pie-simple.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A simple pie chart'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart
- January - June 2024
-
-
-
-
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-pie-stacked.tsx b/apps/design-system/__registry__/default/block/chart-pie-stacked.tsx
deleted file mode 100644
index a2ab16ba7115e..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-pie-stacked.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { TrendingUp } from 'lucide-react'
-import { Label, Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A pie chart with stacked sections'
-
-const desktopData = [
- { month: 'january', desktop: 186, fill: 'var(--color-january)' },
- { month: 'february', desktop: 305, fill: 'var(--color-february)' },
- { month: 'march', desktop: 237, fill: 'var(--color-march)' },
- { month: 'april', desktop: 173, fill: 'var(--color-april)' },
- { month: 'may', desktop: 209, fill: 'var(--color-may)' },
-]
-
-const mobileData = [
- { month: 'january', mobile: 80, fill: 'var(--color-january)' },
- { month: 'february', mobile: 200, fill: 'var(--color-february)' },
- { month: 'march', mobile: 120, fill: 'var(--color-march)' },
- { month: 'april', mobile: 190, fill: 'var(--color-april)' },
- { month: 'may', mobile: 130, fill: 'var(--color-may)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- desktop: {
- label: 'Desktop',
- },
- mobile: {
- label: 'Mobile',
- },
- january: {
- label: 'January',
- color: 'hsl(var(--chart-1))',
- },
- february: {
- label: 'February',
- color: 'hsl(var(--chart-2))',
- },
- march: {
- label: 'March',
- color: 'hsl(var(--chart-3))',
- },
- april: {
- label: 'April',
- color: 'hsl(var(--chart-4))',
- },
- may: {
- label: 'May',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Stacked
- January - June 2024
-
-
-
-
- {
- return chartConfig[payload?.[0].dataKey as keyof typeof chartConfig].label
- }}
- />
- }
- />
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radar-default.tsx b/apps/design-system/__registry__/default/block/chart-radar-default.tsx
deleted file mode 100644
index dc3d4e6d553ec..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radar-default.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 273 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radar-dots.tsx b/apps/design-system/__registry__/default/block/chart-radar-dots.tsx
deleted file mode 100644
index bedf14de29b6c..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radar-dots.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with dots'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 273 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Dots
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radar-grid-circle-fill.tsx b/apps/design-system/__registry__/default/block/chart-radar-grid-circle-fill.tsx
deleted file mode 100644
index d17d1536225be..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radar-grid-circle-fill.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with a grid and circle fill'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 285 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 203 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 264 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Grid Circle Filled
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radar-grid-circle-no-lines.tsx b/apps/design-system/__registry__/default/block/chart-radar-grid-circle-no-lines.tsx
deleted file mode 100644
index 3e602ac574507..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radar-grid-circle-no-lines.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with a grid and circle fill'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 203 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Grid Circle - No lines
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radar-grid-circle.tsx b/apps/design-system/__registry__/default/block/chart-radar-grid-circle.tsx
deleted file mode 100644
index 0cc0277a0c4f4..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radar-grid-circle.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with a grid and circle'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 273 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Grid Circle
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radar-grid-custom.tsx b/apps/design-system/__registry__/default/block/chart-radar-grid-custom.tsx
deleted file mode 100644
index 31614acc9a395..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radar-grid-custom.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with a custom grid'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 273 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Grid Custom
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radar-grid-fill.tsx b/apps/design-system/__registry__/default/block/chart-radar-grid-fill.tsx
deleted file mode 100644
index 7745a10fb1397..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radar-grid-fill.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with a grid filled'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 285 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 203 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 264 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Grid Filled
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radar-grid-none.tsx b/apps/design-system/__registry__/default/block/chart-radar-grid-none.tsx
deleted file mode 100644
index a75ac15da185b..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radar-grid-none.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with no grid'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 273 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Grid None
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radar-icons.tsx b/apps/design-system/__registry__/default/block/chart-radar-icons.tsx
deleted file mode 100644
index b2a83ad3934ae..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radar-icons.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-'use client'
-
-import { ArrowDownFromLine, ArrowUpFromLine, TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import {
- ChartConfig,
- ChartContainer,
- ChartLegend,
- ChartLegendContent,
- ChartTooltip,
- ChartTooltipContent,
-} from 'ui'
-
-export const description = 'A radar chart with icons'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- icon: ArrowDownFromLine,
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- icon: ArrowUpFromLine,
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Icons
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
- } />
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radar-label-custom.tsx b/apps/design-system/__registry__/default/block/chart-radar-label-custom.tsx
deleted file mode 100644
index 51edad285179b..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radar-label-custom.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with a custom label'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Custom Label
- Showing total visitors for the last 6 months
-
-
-
-
- } />
- {
- const data = chartData[index]
-
- return (
-
- {data.desktop}
- /
- {data.mobile}
-
- {data.month}
-
-
- )
- }}
- />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radar-legend.tsx b/apps/design-system/__registry__/default/block/chart-radar-legend.tsx
deleted file mode 100644
index 1500cc422a394..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radar-legend.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import {
- ChartConfig,
- ChartContainer,
- ChartLegend,
- ChartLegendContent,
- ChartTooltip,
- ChartTooltipContent,
-} from 'ui'
-
-export const description = 'A radar chart with a legend'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Legend
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
- } />
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radar-lines-only.tsx b/apps/design-system/__registry__/default/block/chart-radar-lines-only.tsx
deleted file mode 100644
index acb880c81c3be..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radar-lines-only.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with lines only'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 160 },
- { month: 'February', desktop: 185, mobile: 170 },
- { month: 'March', desktop: 207, mobile: 180 },
- { month: 'April', desktop: 173, mobile: 160 },
- { month: 'May', desktop: 160, mobile: 190 },
- { month: 'June', desktop: 174, mobile: 204 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Lines Only
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radar-multiple.tsx b/apps/design-system/__registry__/default/block/chart-radar-multiple.tsx
deleted file mode 100644
index 5cc44043950ed..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radar-multiple.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with multiple data'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Multiple
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radar-radius.tsx b/apps/design-system/__registry__/default/block/chart-radar-radius.tsx
deleted file mode 100644
index f6616c4ac002c..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radar-radius.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, PolarRadiusAxis, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with a radius axis'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Radius Axis
- Showing total visitors for the last 6 months
-
-
-
-
- }
- />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radial-grid.tsx b/apps/design-system/__registry__/default/block/chart-radial-grid.tsx
deleted file mode 100644
index fea6deab0c2f6..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radial-grid.tsx
+++ /dev/null
@@ -1,74 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarGrid, RadialBar, RadialBarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radial chart with a grid'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radial Chart - Grid
- January - June 2024
-
-
-
-
- }
- />
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radial-label.tsx b/apps/design-system/__registry__/default/block/chart-radial-label.tsx
deleted file mode 100644
index 073e8b4ed475e..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radial-label.tsx
+++ /dev/null
@@ -1,86 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { LabelList, RadialBar, RadialBarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radial chart with a label'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radial Chart - Label
- January - June 2024
-
-
-
-
- }
- />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radial-shape.tsx b/apps/design-system/__registry__/default/block/chart-radial-shape.tsx
deleted file mode 100644
index 120a2df88d4f6..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radial-shape.tsx
+++ /dev/null
@@ -1,85 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Label, PolarGrid, PolarRadiusAxis, RadialBar, RadialBarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer } from 'ui'
-
-export const description = 'A radial chart with a custom shape'
-
-const chartData = [{ browser: 'safari', visitors: 1260, fill: 'var(--color-safari)' }]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radial Chart - Shape
- January - June 2024
-
-
-
-
-
-
-
- {
- if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {
- return (
-
-
- {chartData[0].visitors.toLocaleString()}
-
-
- Visitors
-
-
- )
- }
- }}
- />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radial-simple.tsx b/apps/design-system/__registry__/default/block/chart-radial-simple.tsx
deleted file mode 100644
index 6c7590b257317..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radial-simple.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { RadialBar, RadialBarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radial chart'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radial Chart
- January - June 2024
-
-
-
-
- }
- />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radial-stacked.tsx b/apps/design-system/__registry__/default/block/chart-radial-stacked.tsx
deleted file mode 100644
index e38791f9bae54..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radial-stacked.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Label, PolarRadiusAxis, RadialBar, RadialBarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radial chart with stacked sections'
-
-const chartData = [{ month: 'january', desktop: 1260, mobile: 570 }]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- const totalVisitors = chartData[0].desktop + chartData[0].mobile
-
- return (
-
-
- Radial Chart - Stacked
- January - June 2024
-
-
-
-
- } />
-
- {
- if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {
- return (
-
-
- {totalVisitors.toLocaleString()}
-
-
- Visitors
-
-
- )
- }
- }}
- />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/default/block/chart-radial-text.tsx b/apps/design-system/__registry__/default/block/chart-radial-text.tsx
deleted file mode 100644
index 8dd238c505b20..0000000000000
--- a/apps/design-system/__registry__/default/block/chart-radial-text.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Label, PolarGrid, PolarRadiusAxis, RadialBar, RadialBarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer } from 'ui'
-
-export const description = 'A radial chart with text'
-
-const chartData = [{ browser: 'safari', visitors: 200, fill: 'var(--color-safari)' }]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radial Chart - Text
- January - June 2024
-
-
-
-
-
-
-
- {
- if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {
- return (
-
-
- {chartData[0].visitors.toLocaleString()}
-
-
- Visitors
-
-
- )
- }
- }}
- />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/__registry__/index.tsx b/apps/design-system/__registry__/index.tsx
index a98b01a6c46c5..cf1a7450a4902 100644
--- a/apps/design-system/__registry__/index.tsx
+++ b/apps/design-system/__registry__/index.tsx
@@ -2821,149 +2821,6 @@ export const Index: Record = {
subcategory: "undefined",
chunks: []
},
- "chart-area-axes": {
- name: "chart-area-axes",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-area-axes")),
- source: "__registry__/default/block/chart-area-axes.tsx",
- files: ["registry/default/block/chart-area-axes.tsx"],
- category: "Charts",
- subcategory: "Area",
- chunks: []
- },
- "chart-area-default": {
- name: "chart-area-default",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-area-default")),
- source: "__registry__/default/block/chart-area-default.tsx",
- files: ["registry/default/block/chart-area-default.tsx"],
- category: "Charts",
- subcategory: "Area",
- chunks: []
- },
- "chart-area-gradient": {
- name: "chart-area-gradient",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-area-gradient")),
- source: "__registry__/default/block/chart-area-gradient.tsx",
- files: ["registry/default/block/chart-area-gradient.tsx"],
- category: "Charts",
- subcategory: "Area",
- chunks: []
- },
- "chart-area-icons": {
- name: "chart-area-icons",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-area-icons")),
- source: "__registry__/default/block/chart-area-icons.tsx",
- files: ["registry/default/block/chart-area-icons.tsx"],
- category: "Charts",
- subcategory: "Area",
- chunks: []
- },
- "chart-area-interactive": {
- name: "chart-area-interactive",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-area-interactive")),
- source: "__registry__/default/block/chart-area-interactive.tsx",
- files: ["registry/default/block/chart-area-interactive.tsx"],
- category: "Charts",
- subcategory: "Area",
- chunks: []
- },
- "chart-area-legend": {
- name: "chart-area-legend",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-area-legend")),
- source: "__registry__/default/block/chart-area-legend.tsx",
- files: ["registry/default/block/chart-area-legend.tsx"],
- category: "Charts",
- subcategory: "Area",
- chunks: []
- },
- "chart-area-linear": {
- name: "chart-area-linear",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-area-linear")),
- source: "__registry__/default/block/chart-area-linear.tsx",
- files: ["registry/default/block/chart-area-linear.tsx"],
- category: "Charts",
- subcategory: "Area",
- chunks: []
- },
- "chart-area-stacked-expand": {
- name: "chart-area-stacked-expand",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-area-stacked-expand")),
- source: "__registry__/default/block/chart-area-stacked-expand.tsx",
- files: ["registry/default/block/chart-area-stacked-expand.tsx"],
- category: "Charts",
- subcategory: "Area",
- chunks: []
- },
- "chart-area-stacked": {
- name: "chart-area-stacked",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-area-stacked")),
- source: "__registry__/default/block/chart-area-stacked.tsx",
- files: ["registry/default/block/chart-area-stacked.tsx"],
- category: "Charts",
- subcategory: "Area",
- chunks: []
- },
- "chart-area-step": {
- name: "chart-area-step",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-area-step")),
- source: "__registry__/default/block/chart-area-step.tsx",
- files: ["registry/default/block/chart-area-step.tsx"],
- category: "Charts",
- subcategory: "Area",
- chunks: []
- },
- "chart-bar-active": {
- name: "chart-bar-active",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-bar-active")),
- source: "__registry__/default/block/chart-bar-active.tsx",
- files: ["registry/default/block/chart-bar-active.tsx"],
- category: "Charts",
- subcategory: "Bar",
- chunks: []
- },
- "chart-bar-default": {
- name: "chart-bar-default",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-bar-default")),
- source: "__registry__/default/block/chart-bar-default.tsx",
- files: ["registry/default/block/chart-bar-default.tsx"],
- category: "Charts",
- subcategory: "Bar",
- chunks: []
- },
- "chart-bar-horizontal": {
- name: "chart-bar-horizontal",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-bar-horizontal")),
- source: "__registry__/default/block/chart-bar-horizontal.tsx",
- files: ["registry/default/block/chart-bar-horizontal.tsx"],
- category: "Charts",
- subcategory: "Bar",
- chunks: []
- },
"chart-bar-interactive": {
name: "chart-bar-interactive",
type: "components:block",
@@ -2975,521 +2832,70 @@ export const Index: Record = {
subcategory: "Bar",
chunks: []
},
- "chart-bar-label-custom": {
- name: "chart-bar-label-custom",
+ "chart-composed-demo": {
+ name: "chart-composed-demo",
type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-bar-label-custom")),
- source: "__registry__/default/block/chart-bar-label-custom.tsx",
- files: ["registry/default/block/chart-bar-label-custom.tsx"],
+ registryDependencies: ["chart"],
+ component: React.lazy(() => import("@/registry/default/block/chart-composed-demo")),
+ source: "__registry__/default/block/chart-composed-demo.tsx",
+ files: ["registry/default/block/chart-composed-demo.tsx"],
category: "Charts",
- subcategory: "Bar",
+ subcategory: "Composed",
chunks: []
},
- "chart-bar-label": {
- name: "chart-bar-label",
+ "chart-composed-basic": {
+ name: "chart-composed-basic",
type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-bar-label")),
- source: "__registry__/default/block/chart-bar-label.tsx",
- files: ["registry/default/block/chart-bar-label.tsx"],
+ registryDependencies: ["chart"],
+ component: React.lazy(() => import("@/registry/default/block/chart-composed-basic")),
+ source: "__registry__/default/block/chart-composed-basic.tsx",
+ files: ["registry/default/block/chart-composed-basic.tsx"],
category: "Charts",
- subcategory: "Bar",
+ subcategory: "Composed",
chunks: []
},
- "chart-bar-mixed": {
- name: "chart-bar-mixed",
+ "chart-composed-states": {
+ name: "chart-composed-states",
type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-bar-mixed")),
- source: "__registry__/default/block/chart-bar-mixed.tsx",
- files: ["registry/default/block/chart-bar-mixed.tsx"],
- category: "Charts",
- subcategory: "Bar",
- chunks: []
- },
- "chart-bar-multiple": {
- name: "chart-bar-multiple",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-bar-multiple")),
- source: "__registry__/default/block/chart-bar-multiple.tsx",
- files: ["registry/default/block/chart-bar-multiple.tsx"],
- category: "Charts",
- subcategory: "Bar",
- chunks: []
- },
- "chart-bar-negative": {
- name: "chart-bar-negative",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-bar-negative")),
- source: "__registry__/default/block/chart-bar-negative.tsx",
- files: ["registry/default/block/chart-bar-negative.tsx"],
- category: "Charts",
- subcategory: "Bar",
- chunks: []
- },
- "chart-bar-stacked": {
- name: "chart-bar-stacked",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-bar-stacked")),
- source: "__registry__/default/block/chart-bar-stacked.tsx",
- files: ["registry/default/block/chart-bar-stacked.tsx"],
- category: "Charts",
- subcategory: "Bar",
- chunks: []
- },
- "chart-line-default": {
- name: "chart-line-default",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-line-default")),
- source: "__registry__/default/block/chart-line-default.tsx",
- files: ["registry/default/block/chart-line-default.tsx"],
- category: "Charts",
- subcategory: "Line",
- chunks: []
- },
- "chart-line-dots-colors": {
- name: "chart-line-dots-colors",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-line-dots-colors")),
- source: "__registry__/default/block/chart-line-dots-colors.tsx",
- files: ["registry/default/block/chart-line-dots-colors.tsx"],
+ registryDependencies: ["chart"],
+ component: React.lazy(() => import("@/registry/default/block/chart-composed-states")),
+ source: "__registry__/default/block/chart-composed-states.tsx",
+ files: ["registry/default/block/chart-composed-states.tsx"],
category: "Charts",
- subcategory: "Line",
+ subcategory: "Composed",
chunks: []
},
- "chart-line-dots-custom": {
- name: "chart-line-dots-custom",
+ "chart-composed-table": {
+ name: "chart-composed-table",
type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-line-dots-custom")),
- source: "__registry__/default/block/chart-line-dots-custom.tsx",
- files: ["registry/default/block/chart-line-dots-custom.tsx"],
+ registryDependencies: ["chart"],
+ component: React.lazy(() => import("@/registry/default/block/chart-composed-table")),
+ source: "__registry__/default/block/chart-composed-table.tsx",
+ files: ["registry/default/block/chart-composed-table.tsx"],
category: "Charts",
- subcategory: "Line",
+ subcategory: "Composed",
chunks: []
},
- "chart-line-dots": {
- name: "chart-line-dots",
+ "chart-composed-metrics": {
+ name: "chart-composed-metrics",
type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-line-dots")),
- source: "__registry__/default/block/chart-line-dots.tsx",
- files: ["registry/default/block/chart-line-dots.tsx"],
+ registryDependencies: ["chart"],
+ component: React.lazy(() => import("@/registry/default/block/chart-composed-metrics")),
+ source: "__registry__/default/block/chart-composed-metrics.tsx",
+ files: ["registry/default/block/chart-composed-metrics.tsx"],
category: "Charts",
- subcategory: "Line",
+ subcategory: "Composed",
chunks: []
},
- "chart-line-interactive": {
- name: "chart-line-interactive",
+ "chart-composed-actions": {
+ name: "chart-composed-actions",
type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-line-interactive")),
- source: "__registry__/default/block/chart-line-interactive.tsx",
- files: ["registry/default/block/chart-line-interactive.tsx"],
- category: "Charts",
- subcategory: "Line",
- chunks: []
- },
- "chart-line-label-custom": {
- name: "chart-line-label-custom",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-line-label-custom")),
- source: "__registry__/default/block/chart-line-label-custom.tsx",
- files: ["registry/default/block/chart-line-label-custom.tsx"],
- category: "Charts",
- subcategory: "Line",
- chunks: []
- },
- "chart-line-label": {
- name: "chart-line-label",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-line-label")),
- source: "__registry__/default/block/chart-line-label.tsx",
- files: ["registry/default/block/chart-line-label.tsx"],
- category: "Charts",
- subcategory: "Line",
- chunks: []
- },
- "chart-line-linear": {
- name: "chart-line-linear",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-line-linear")),
- source: "__registry__/default/block/chart-line-linear.tsx",
- files: ["registry/default/block/chart-line-linear.tsx"],
- category: "Charts",
- subcategory: "Line",
- chunks: []
- },
- "chart-line-multiple": {
- name: "chart-line-multiple",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-line-multiple")),
- source: "__registry__/default/block/chart-line-multiple.tsx",
- files: ["registry/default/block/chart-line-multiple.tsx"],
- category: "Charts",
- subcategory: "Line",
- chunks: []
- },
- "chart-line-step": {
- name: "chart-line-step",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-line-step")),
- source: "__registry__/default/block/chart-line-step.tsx",
- files: ["registry/default/block/chart-line-step.tsx"],
- category: "Charts",
- subcategory: "Line",
- chunks: []
- },
- "chart-pie-donut-active": {
- name: "chart-pie-donut-active",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-pie-donut-active")),
- source: "__registry__/default/block/chart-pie-donut-active.tsx",
- files: ["registry/default/block/chart-pie-donut-active.tsx"],
- category: "Charts",
- subcategory: "Pie",
- chunks: []
- },
- "chart-pie-donut-text": {
- name: "chart-pie-donut-text",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-pie-donut-text")),
- source: "__registry__/default/block/chart-pie-donut-text.tsx",
- files: ["registry/default/block/chart-pie-donut-text.tsx"],
- category: "Charts",
- subcategory: "Pie",
- chunks: []
- },
- "chart-pie-donut": {
- name: "chart-pie-donut",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-pie-donut")),
- source: "__registry__/default/block/chart-pie-donut.tsx",
- files: ["registry/default/block/chart-pie-donut.tsx"],
- category: "Charts",
- subcategory: "Pie",
- chunks: []
- },
- "chart-pie-interactive": {
- name: "chart-pie-interactive",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-pie-interactive")),
- source: "__registry__/default/block/chart-pie-interactive.tsx",
- files: ["registry/default/block/chart-pie-interactive.tsx"],
- category: "Charts",
- subcategory: "Pie",
- chunks: []
- },
- "chart-pie-label-custom": {
- name: "chart-pie-label-custom",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-pie-label-custom")),
- source: "__registry__/default/block/chart-pie-label-custom.tsx",
- files: ["registry/default/block/chart-pie-label-custom.tsx"],
- category: "Charts",
- subcategory: "Pie",
- chunks: []
- },
- "chart-pie-label-list": {
- name: "chart-pie-label-list",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-pie-label-list")),
- source: "__registry__/default/block/chart-pie-label-list.tsx",
- files: ["registry/default/block/chart-pie-label-list.tsx"],
- category: "Charts",
- subcategory: "Pie",
- chunks: []
- },
- "chart-pie-label": {
- name: "chart-pie-label",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-pie-label")),
- source: "__registry__/default/block/chart-pie-label.tsx",
- files: ["registry/default/block/chart-pie-label.tsx"],
- category: "Charts",
- subcategory: "Pie",
- chunks: []
- },
- "chart-pie-legend": {
- name: "chart-pie-legend",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-pie-legend")),
- source: "__registry__/default/block/chart-pie-legend.tsx",
- files: ["registry/default/block/chart-pie-legend.tsx"],
- category: "Charts",
- subcategory: "Pie",
- chunks: []
- },
- "chart-pie-separator-none": {
- name: "chart-pie-separator-none",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-pie-separator-none")),
- source: "__registry__/default/block/chart-pie-separator-none.tsx",
- files: ["registry/default/block/chart-pie-separator-none.tsx"],
- category: "Charts",
- subcategory: "Pie",
- chunks: []
- },
- "chart-pie-simple": {
- name: "chart-pie-simple",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-pie-simple")),
- source: "__registry__/default/block/chart-pie-simple.tsx",
- files: ["registry/default/block/chart-pie-simple.tsx"],
- category: "Charts",
- subcategory: "Pie",
- chunks: []
- },
- "chart-pie-stacked": {
- name: "chart-pie-stacked",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-pie-stacked")),
- source: "__registry__/default/block/chart-pie-stacked.tsx",
- files: ["registry/default/block/chart-pie-stacked.tsx"],
- category: "Charts",
- subcategory: "Pie",
- chunks: []
- },
- "chart-radar-default": {
- name: "chart-radar-default",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radar-default")),
- source: "__registry__/default/block/chart-radar-default.tsx",
- files: ["registry/default/block/chart-radar-default.tsx"],
- category: "Charts",
- subcategory: "Radar",
- chunks: []
- },
- "chart-radar-dots": {
- name: "chart-radar-dots",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radar-dots")),
- source: "__registry__/default/block/chart-radar-dots.tsx",
- files: ["registry/default/block/chart-radar-dots.tsx"],
- category: "Charts",
- subcategory: "Radar",
- chunks: []
- },
- "chart-radar-grid-circle-fill": {
- name: "chart-radar-grid-circle-fill",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radar-grid-circle-fill")),
- source: "__registry__/default/block/chart-radar-grid-circle-fill.tsx",
- files: ["registry/default/block/chart-radar-grid-circle-fill.tsx"],
- category: "Charts",
- subcategory: "Radar",
- chunks: []
- },
- "chart-radar-grid-circle-no-lines": {
- name: "chart-radar-grid-circle-no-lines",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radar-grid-circle-no-lines")),
- source: "__registry__/default/block/chart-radar-grid-circle-no-lines.tsx",
- files: ["registry/default/block/chart-radar-grid-circle-no-lines.tsx"],
- category: "Charts",
- subcategory: "Radar",
- chunks: []
- },
- "chart-radar-grid-circle": {
- name: "chart-radar-grid-circle",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radar-grid-circle")),
- source: "__registry__/default/block/chart-radar-grid-circle.tsx",
- files: ["registry/default/block/chart-radar-grid-circle.tsx"],
- category: "Charts",
- subcategory: "Radar",
- chunks: []
- },
- "chart-radar-grid-custom": {
- name: "chart-radar-grid-custom",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radar-grid-custom")),
- source: "__registry__/default/block/chart-radar-grid-custom.tsx",
- files: ["registry/default/block/chart-radar-grid-custom.tsx"],
- category: "Charts",
- subcategory: "Radar",
- chunks: []
- },
- "chart-radar-grid-fill": {
- name: "chart-radar-grid-fill",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radar-grid-fill")),
- source: "__registry__/default/block/chart-radar-grid-fill.tsx",
- files: ["registry/default/block/chart-radar-grid-fill.tsx"],
- category: "Charts",
- subcategory: "Radar",
- chunks: []
- },
- "chart-radar-grid-none": {
- name: "chart-radar-grid-none",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radar-grid-none")),
- source: "__registry__/default/block/chart-radar-grid-none.tsx",
- files: ["registry/default/block/chart-radar-grid-none.tsx"],
- category: "Charts",
- subcategory: "Radar",
- chunks: []
- },
- "chart-radar-icons": {
- name: "chart-radar-icons",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radar-icons")),
- source: "__registry__/default/block/chart-radar-icons.tsx",
- files: ["registry/default/block/chart-radar-icons.tsx"],
- category: "Charts",
- subcategory: "Radar",
- chunks: []
- },
- "chart-radar-label-custom": {
- name: "chart-radar-label-custom",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radar-label-custom")),
- source: "__registry__/default/block/chart-radar-label-custom.tsx",
- files: ["registry/default/block/chart-radar-label-custom.tsx"],
- category: "Charts",
- subcategory: "Radar",
- chunks: []
- },
- "chart-radar-legend": {
- name: "chart-radar-legend",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radar-legend")),
- source: "__registry__/default/block/chart-radar-legend.tsx",
- files: ["registry/default/block/chart-radar-legend.tsx"],
- category: "Charts",
- subcategory: "Radar",
- chunks: []
- },
- "chart-radar-lines-only": {
- name: "chart-radar-lines-only",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radar-lines-only")),
- source: "__registry__/default/block/chart-radar-lines-only.tsx",
- files: ["registry/default/block/chart-radar-lines-only.tsx"],
- category: "Charts",
- subcategory: "Radar",
- chunks: []
- },
- "chart-radar-multiple": {
- name: "chart-radar-multiple",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radar-multiple")),
- source: "__registry__/default/block/chart-radar-multiple.tsx",
- files: ["registry/default/block/chart-radar-multiple.tsx"],
- category: "Charts",
- subcategory: "Radar",
- chunks: []
- },
- "chart-radar-radius": {
- name: "chart-radar-radius",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radar-radius")),
- source: "__registry__/default/block/chart-radar-radius.tsx",
- files: ["registry/default/block/chart-radar-radius.tsx"],
- category: "Charts",
- subcategory: "Radar",
- chunks: []
- },
- "chart-radial-grid": {
- name: "chart-radial-grid",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radial-grid")),
- source: "__registry__/default/block/chart-radial-grid.tsx",
- files: ["registry/default/block/chart-radial-grid.tsx"],
- category: "Charts",
- subcategory: "Radial",
- chunks: []
- },
- "chart-radial-label": {
- name: "chart-radial-label",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radial-label")),
- source: "__registry__/default/block/chart-radial-label.tsx",
- files: ["registry/default/block/chart-radial-label.tsx"],
- category: "Charts",
- subcategory: "Radial",
- chunks: []
- },
- "chart-radial-shape": {
- name: "chart-radial-shape",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radial-shape")),
- source: "__registry__/default/block/chart-radial-shape.tsx",
- files: ["registry/default/block/chart-radial-shape.tsx"],
- category: "Charts",
- subcategory: "Radial",
- chunks: []
- },
- "chart-radial-simple": {
- name: "chart-radial-simple",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radial-simple")),
- source: "__registry__/default/block/chart-radial-simple.tsx",
- files: ["registry/default/block/chart-radial-simple.tsx"],
- category: "Charts",
- subcategory: "Radial",
- chunks: []
- },
- "chart-radial-stacked": {
- name: "chart-radial-stacked",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radial-stacked")),
- source: "__registry__/default/block/chart-radial-stacked.tsx",
- files: ["registry/default/block/chart-radial-stacked.tsx"],
- category: "Charts",
- subcategory: "Radial",
- chunks: []
- },
- "chart-radial-text": {
- name: "chart-radial-text",
- type: "components:block",
- registryDependencies: ["card","chart"],
- component: React.lazy(() => import("@/registry/default/block/chart-radial-text")),
- source: "__registry__/default/block/chart-radial-text.tsx",
- files: ["registry/default/block/chart-radial-text.tsx"],
+ registryDependencies: ["chart"],
+ component: React.lazy(() => import("@/registry/default/block/chart-composed-actions")),
+ source: "__registry__/default/block/chart-composed-actions.tsx",
+ files: ["registry/default/block/chart-composed-actions.tsx"],
category: "Charts",
- subcategory: "Radial",
+ subcategory: "Composed",
chunks: []
},
},
diff --git a/apps/design-system/components/source-panel.tsx b/apps/design-system/components/source-panel.tsx
index b3489b47c5a53..9bcaa0edf9c14 100644
--- a/apps/design-system/components/source-panel.tsx
+++ b/apps/design-system/components/source-panel.tsx
@@ -240,12 +240,70 @@ const SourcePanel = forwardRef &
}
}
+ const RechartsPanel = () => {
+ if (doc.source?.recharts) {
+ return (
+
+
+
+
+
+
+
This component uses Recharts
+ {doc.links ? (
+
+ {doc.links?.doc && (
+ }
+ >
+
+ Docs
+
+
+ )}
+ {doc.links?.api && (
+ }
+ >
+
+ API Reference
+
+
+ )}
+
+ ) : null}
+
+
+ )
+ }
+ }
+
return (
+
{/* */}
)
diff --git a/apps/design-system/config/docs.ts b/apps/design-system/config/docs.ts
index 2d5b6d2cd234e..7d14cc61da814 100644
--- a/apps/design-system/config/docs.ts
+++ b/apps/design-system/config/docs.ts
@@ -59,13 +59,8 @@ export const docsConfig: DocsConfig = {
priority: true,
},
{
- title: 'Navigation',
- href: '/docs/ui-patterns/navigation',
- items: [],
- },
- {
- title: 'Layout',
- href: '/docs/ui-patterns/layout',
+ title: 'Charts',
+ href: '/docs/ui-patterns/charts',
items: [],
},
{
@@ -78,6 +73,16 @@ export const docsConfig: DocsConfig = {
href: '/docs/ui-patterns/forms',
items: [],
},
+ {
+ title: 'Layout',
+ href: '/docs/ui-patterns/layout',
+ items: [],
+ },
+ {
+ title: 'Navigation',
+ href: '/docs/ui-patterns/navigation',
+ items: [],
+ },
],
},
{
@@ -243,11 +248,6 @@ export const docsConfig: DocsConfig = {
href: '/docs/components/carousel',
items: [],
},
- {
- title: 'Chart',
- href: '/docs/components/chart',
- items: [],
- },
{
title: 'Checkbox',
href: '/docs/components/checkbox',
diff --git a/apps/design-system/content/docs/ui-patterns/charts.mdx b/apps/design-system/content/docs/ui-patterns/charts.mdx
new file mode 100644
index 0000000000000..ef2b6cf8ad9b6
--- /dev/null
+++ b/apps/design-system/content/docs/ui-patterns/charts.mdx
@@ -0,0 +1,281 @@
+---
+title: Charts
+description: Composable charts for Reports, Dashboards and other visualizations.
+links:
+ doc: https://recharts.github.io/en-US/
+source:
+ recharts: true
+---
+
+
+
+## About
+
+Charts are an integral part of Observability at Supabase. Charts aim to be composable and reusable for frictionless setup.
+
+Our charts use a combination of our own presentational components and [Recharts](https://recharts.github.io/en-US/) for extensibility.
+
+## Best Practices
+
+1. **Use provided chart types first**: Always try to use the default provided charts first, otherwise passing Recharts compoennts to `` is possible but not recommended to avoid complexity.
+
+2. **Use the `useChart` context to show loading and disabled states**: The `useChart` context provides boolean flags for child components to show `isLoading` and `isDisabled` states.
+
+3. **Keep it simple**: Try to avoid abstracting the chart content too much. These components should cover most of your presentational needs.
+
+## Examples
+
+### Basic Chart Types
+
+
+
+### Chart States
+
+
+
+### Charts as Standalone Metrics
+
+
+
+### Charts with Actions
+
+
+
+### Chart with Table
+
+
+
+You can pass through our [Table](/docs/components/table) component to the `ChartFooter` and expect it to be styled correctly. There is no additional need to style the table, `ChartFooter` will handle the styling for you.
+
+## API
+
+### Chart
+
+The root container component that provides chart context to all child components.
+
+| Prop | Type | Default | Description |
+| ------------ | -------------------------------------- | ------- | ------------------------------------------------------------------ |
+| `children` | `React.ReactNode` | - | Chart child components |
+| `isLoading` | `boolean` | `false` | Shows loading state in child components via the `useChart` context |
+| `isDisabled` | `boolean` | `false` | Disables chart interactions via the `useChart` context |
+| `className` | `string` | - | Additional CSS classes |
+| `...props` | `React.HTMLAttributes` | - | All standard div props |
+
+### ChartCard
+
+A card wrapper for the chart. Can be used as a Card component or as a slot.
+
+| Prop | Type | Default | Description |
+| ----------- | -------------------------------------- | ------- | ----------------------------------------------------------------------------- |
+| `children` | `React.ReactNode` | - | Chart content |
+| `asChild` | `boolean` | - | Render as child component (uses Slot) - ideal for removing the `Card` wrapper |
+| `className` | `string` | - | Additional CSS classes |
+| `...props` | `React.HTMLAttributes` | - | All standard div props |
+
+### ChartHeader
+
+Container for chart header content like title and actions.
+
+| Prop | Type | Default | Description |
+| ----------- | -------------------------------------- | ---------- | ------------------------------------------------------------------- |
+| `children` | `React.ReactNode` | - | Header content (typically ChartTitle, ChartActions, or ChartMetric) |
+| `align` | `'start' \| 'center'` | `'center'` | Alignment of header content |
+| `className` | `string` | - | Additional CSS classes |
+| `...props` | `React.HTMLAttributes` | - | All standard div props |
+
+### ChartTitle
+
+Displays the chart title with optional tooltip.
+
+| Prop | Type | Default | Description |
+| ----------- | -------------------------------------- | ------- | ------------------------------------- |
+| `children` | `React.ReactNode` | - | Title text |
+| `tooltip` | `string` | - | Tooltip text shown on help icon hover |
+| `className` | `string` | - | Additional CSS classes |
+| `...props` | `React.HTMLAttributes` | - | All standard div props |
+
+### ChartActions
+
+Renders action buttons or links in the chart header.
+
+| Prop | Type | Default | Description |
+| ----------- | -------------------------------------- | ------- | ---------------------------------------------------------- |
+| `actions` | `ChartAction[]` | - | Array of action objects (see ChartAction type below) |
+| `children` | `React.ReactNode` | - | Custom action content (takes precedence over actions prop) |
+| `className` | `string` | - | Additional CSS classes |
+| `...props` | `React.HTMLAttributes` | - | All standard div props |
+
+#### ChartAction Type
+
+| Property | Type | Description |
+| ----------- | -------------------- | ----------------------------------------------- |
+| `label` | `string` | Accessible label for the action |
+| `icon` | `React.ReactNode` | Icon component to display |
+| `onClick` | `() => void` | Click handler for button actions |
+| `href` | `string` | URL for link actions |
+| `type` | `'button' \| 'link'` | Action type (auto-detected if href is provided) |
+| `className` | `string` | Additional CSS classes |
+
+### ChartMetric
+
+Displays a metric value with optional status indicator.
+
+| Prop | Type | Default | Description |
+| ----------- | ---------------------------------------------------- | --------- | --------------------------------------------------- |
+| `label` | `string` | - | Metric label text |
+| `value` | `string \| number \| null \| undefined` | - | Metric value to display |
+| `diffValue` | `string \| number \| null \| undefined` | - | Differential value to display (shown as +/- change) |
+| `status` | `'positive' \| 'negative' \| 'warning' \| 'default'` | - | Status indicator color |
+| `align` | `'start' \| 'end'` | `'start'` | Alignment of the metric |
+| `tooltip` | `string` | - | Tooltip text shown on help icon hover |
+| `className` | `string` | - | Additional CSS classes |
+| `...props` | `React.HTMLAttributes` | - | All standard div props |
+
+### ChartContent
+
+Container for the main chart visualization. Handles loading and empty states.
+
+| Prop | Type | Default | Description |
+| ----------------- | -------------------------------------- | ------- | -------------------------------------- |
+| `children` | `React.ReactNode` | - | Chart visualization content |
+| `isEmpty` | `boolean` | `false` | Whether to show empty state |
+| `emptyState` | `React.ReactNode` | - | Custom empty state component |
+| `loadingState` | `React.ReactNode` | - | Custom loading state component |
+| `disabledState` | `React.ReactNode` | - | Custom disabled state component |
+| `disabledActions` | `ChartAction[]` | - | Actions to show when chart is disabled |
+| `className` | `string` | - | Additional CSS classes |
+| `...props` | `React.HTMLAttributes` | - | All standard div props |
+
+### ChartEmptyState
+
+Pre-built empty state component for charts.
+
+| Prop | Type | Default | Description |
+| ------------- | -------------------------------------- | ------- | ------------------------ |
+| `title` | `string` | - | Empty state title |
+| `description` | `string` | - | Empty state description |
+| `icon` | `React.ReactNode` | - | Optional icon to display |
+| `className` | `string` | - | Additional CSS classes |
+| `...props` | `React.HTMLAttributes` | - | All standard div props |
+
+### ChartLoadingState
+
+Pre-built loading state component. Takes no props.
+
+### ChartFooter
+
+Container for footer content below the chart.
+
+| Prop | Type | Default | Description |
+| ----------- | -------------------------------------- | ------- | ---------------------- |
+| `children` | `React.ReactNode` | - | Footer content |
+| `className` | `string` | - | Additional CSS classes |
+| `...props` | `React.HTMLAttributes` | - | All standard div props |
+
+### ChartConfig
+
+Type definition for chart configuration used with Recharts components.
+
+```tsx
+type ChartConfig = {
+ [key: string]: {
+ label?: React.ReactNode
+ icon?: React.ComponentType
+ } & (
+ | { color?: string; theme?: never }
+ | { color?: never; theme: Record<'light' | 'dark', string> }
+ )
+}
+```
+
+| Property | Type | Description |
+| -------- | ----------------------------------- | -------------------------------------------------------- |
+| `label` | `React.ReactNode` | Label for the data series |
+| `icon` | `React.ComponentType` | Icon component for the data series |
+| `color` | `string` | Single color value (mutually exclusive with theme) |
+| `theme` | `Record<'light' \| 'dark', string>` | Theme-aware color values (mutually exclusive with color) |
+
+### ChartLine
+
+Line chart component for displaying time-series data.
+
+| Prop | Type | Default | Description |
+| ------------------- | --------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- |
+| `data` | `ChartLineTick[]` | - | Array of data points with timestamp |
+| `dataKey` | `string` | - | Key in data object to plot |
+| `config` | `ChartConfig?` | - | Chart configuration for styling |
+| `onLineClick` | `(datum: ChartLineTick, tooltipData?: CategoricalChartState) => void` | - | Click handler for line points |
+| `DateTimeFormat` | `string` | `'MMM D, YYYY, hh:mma'` | Date format for tooltips and labels |
+| `isFullHeight` | `boolean` | `false` | Whether chart should take full height |
+| `className` | `string` | - | Additional CSS classes |
+| `color` | `string` | `'hsl(var(--brand-default))'` | Line color |
+| `hoverColor` | `string` | `'hsl(var(--brand-500))'` | Line color on hover |
+| `chartHighlight` | `ChartHighlight` | - | Highlight selection configuration |
+| `updateDateRange` | `(from: string, to: string) => void` | - | Callback when date range is updated via highlight |
+| `highlightActions` | `ChartHighlightAction[]` | - | Actions to show when area is highlighted |
+| `syncId` | `string` | - | ID to sync multiple charts |
+| `showHighlightArea` | `boolean` | `true` | Whether to show highlight area |
+| `cursor` | `string` | - | Cursor style (defaults to 'crosshair' if chartHighlight provided) |
+| `showGrid` | `boolean` | `false` | Whether to show grid lines |
+| `showYAxis` | `boolean` | `false` | Whether to show Y-axis |
+| `YAxisProps` | `object` | - | Additional Y-axis props (tick, tickFormatter, width, etc.) |
+| `strokeWidth` | `number` | `1.5` | Line stroke width |
+
+#### ChartLineTick Type
+
+| Property | Type | Description |
+| --------------- | ------------------ | ---------------------------- |
+| `timestamp` | `string` | Timestamp for the data point |
+| `[key: string]` | `string \| number` | Additional data fields |
+
+#### ChartHighlight Type
+
+| Property | Type | Description |
+| ----------------- | ------------------------------------------------------------- | ------------------------------------ |
+| `handleMouseDown` | `(e: { activeLabel?: string; coordinates?: string }) => void` | Mouse down handler |
+| `handleMouseMove` | `(e: { activeLabel?: string; coordinates?: string }) => void` | Mouse move handler |
+| `handleMouseUp` | `(e: { chartX?: number; chartY?: number }) => void` | Mouse up handler |
+| `coordinates` | `{ left?: string; right?: string }` | Highlight area coordinates |
+| `clearHighlight` | `() => void?` | Optional function to clear highlight |
+
+#### ChartHighlightAction Type
+
+| Property | Type | Description |
+| ------------ | -------------------------------------------------------------------------------- | ---------------------------------------------------- |
+| `id` | `string` | Unique identifier for the action |
+| `label` | `string \| ((ctx: { start: string; end: string; clear: () => void }) => string)` | Action label or function that returns label |
+| `icon` | `ReactNode?` | Optional icon component |
+| `isDisabled` | `(ctx: { start: string; end: string; clear: () => void }) => boolean?` | Optional function to determine if action is disabled |
+| `onSelect` | `(ctx: { start: string; end: string; clear: () => void }) => void` | Action selection handler |
+
+### ChartBar
+
+Bar chart component for displaying time-series data.
+
+| Prop | Type | Default | Description |
+| ------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- |
+| `data` | `ChartBarTick[]` | - | Array of data points with timestamp |
+| `dataKey` | `string` | - | Key in data object to plot |
+| `config` | `ChartConfig?` | - | Chart configuration for styling |
+| `onBarClick` | `(datum: ChartBarTick, tooltipData?: CategoricalChartState) => void` | - | Click handler for bars |
+| `DateTimeFormat` | `string` | `'MMM D, YYYY, hh:mma'` | Date format for tooltips and labels |
+| `isFullHeight` | `boolean` | `false` | Whether chart should take full height |
+| `className` | `string` | - | Additional CSS classes |
+| `color` | `string` | `'hsl(var(--brand-default))'` | Bar color |
+| `hoverColor` | `string` | `'hsl(var(--brand-500))'` | Bar color on hover |
+| `chartHighlight` | `ChartHighlight` | - | Highlight selection configuration |
+| `updateDateRange` | `(from: string, to: string) => void` | - | Callback when date range is updated via highlight |
+| `highlightActions` | `ChartHighlightAction[]` | - | Actions to show when area is highlighted |
+| `syncId` | `string` | - | ID to sync multiple charts |
+| `showHighlightArea` | `boolean` | `true` | Whether to show highlight area |
+| `cursor` | `string` | - | Cursor style (defaults to 'crosshair' if chartHighlight provided) |
+| `showGrid` | `boolean` | `false` | Whether to show grid lines |
+| `showYAxis` | `boolean` | `false` | Whether to show Y-axis |
+| `YAxisProps` | `object` | - | Additional Y-axis props (tick, tickFormatter, width, etc.) |
+
+#### ChartBarTick Type
+
+| Property | Type | Description |
+| --------------- | ------------------ | ---------------------------- |
+| `timestamp` | `string` | Timestamp for the data point |
+| `[key: string]` | `string \| number` | Additional data fields |
diff --git a/apps/design-system/content/docs/ui-patterns/ui-patterns.mdx b/apps/design-system/content/docs/ui-patterns/ui-patterns.mdx
index 51fd64b26fa32..b89667e7750b2 100644
--- a/apps/design-system/content/docs/ui-patterns/ui-patterns.mdx
+++ b/apps/design-system/content/docs/ui-patterns/ui-patterns.mdx
@@ -7,7 +7,7 @@ UI patterns are reusable design solutions that combine multiple components from
These patterns help ensure consistency across Supabase products by establishing standard approaches for:
-- **Charts**: Visualizing data consistently using standardized chart types and styling.
+- **[Charts](/docs/ui-patterns/charts)**: Visualizing data consistently using standardized chart types and styling.
- **[Empty States](/docs/ui-patterns/empty-states)**: Communicating the absence of data and guiding users toward meaningful actions.
- **[Forms](/docs/ui-patterns/forms)**: Building cohesive form experiences in both page layouts and side panels.
- **[Layout](/docs/ui-patterns/layout)**: Creating consistent page structures with proper spacing, max-widths, and content organization.
diff --git a/apps/design-system/contentlayer.config.js b/apps/design-system/contentlayer.config.js
index edc30b91b1d81..4d12b6a0886cf 100644
--- a/apps/design-system/contentlayer.config.js
+++ b/apps/design-system/contentlayer.config.js
@@ -53,6 +53,9 @@ const NestedProperties = defineNestedType(() => ({
reactAccessibleTreeview: {
type: 'boolean',
},
+ recharts: {
+ type: 'boolean',
+ },
},
}))
diff --git a/apps/design-system/eslint.config.cjs b/apps/design-system/eslint.config.cjs
index fec3ac9b3ab84..e425bf679a930 100644
--- a/apps/design-system/eslint.config.cjs
+++ b/apps/design-system/eslint.config.cjs
@@ -1,4 +1,12 @@
const { defineConfig } = require('eslint/config')
const supabaseConfig = require('eslint-config-supabase/next')
-module.exports = defineConfig([supabaseConfig])
+module.exports = defineConfig([
+ supabaseConfig,
+ {
+ files: ['registry/**/*.tsx', '__registry__/**/*.tsx'],
+ rules: {
+ 'no-restricted-exports': 'off',
+ },
+ },
+])
diff --git a/apps/design-system/package.json b/apps/design-system/package.json
index 4bbe1a1a286fe..91f206c5a7635 100644
--- a/apps/design-system/package.json
+++ b/apps/design-system/package.json
@@ -19,8 +19,8 @@
"dependencies": {
"@hookform/resolvers": "^3.1.1",
"contentlayer2": "0.4.6",
- "dayjs": "1.11.13",
"date-fns": "^2.30.0",
+ "dayjs": "1.11.13",
"eslint-config-supabase": "workspace:*",
"icons": "workspace:*",
"jotai": "^2.8.0",
diff --git a/apps/design-system/registry/charts.ts b/apps/design-system/registry/charts.ts
index be6ab4c2b48be..9a42e5095a06e 100644
--- a/apps/design-system/registry/charts.ts
+++ b/apps/design-system/registry/charts.ts
@@ -1,113 +1,6 @@
import { Registry } from './schema'
export const charts: Registry = [
- // Area Charts
- {
- name: 'chart-area-axes',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-area-axes.tsx'],
- category: 'Charts',
- subcategory: 'Area',
- },
- {
- name: 'chart-area-default',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-area-default.tsx'],
- category: 'Charts',
- subcategory: 'Area',
- },
- {
- name: 'chart-area-gradient',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-area-gradient.tsx'],
- category: 'Charts',
- subcategory: 'Area',
- },
- {
- name: 'chart-area-icons',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-area-icons.tsx'],
- category: 'Charts',
- subcategory: 'Area',
- },
- {
- name: 'chart-area-interactive',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-area-interactive.tsx'],
- category: 'Charts',
- subcategory: 'Area',
- },
- {
- name: 'chart-area-legend',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-area-legend.tsx'],
- category: 'Charts',
- subcategory: 'Area',
- },
- {
- name: 'chart-area-linear',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-area-linear.tsx'],
- category: 'Charts',
- subcategory: 'Area',
- },
- {
- name: 'chart-area-stacked-expand',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-area-stacked-expand.tsx'],
- category: 'Charts',
- subcategory: 'Area',
- },
- {
- name: 'chart-area-stacked',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-area-stacked.tsx'],
- category: 'Charts',
- subcategory: 'Area',
- },
- {
- name: 'chart-area-step',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-area-step.tsx'],
- category: 'Charts',
- subcategory: 'Area',
- },
-
- // Bar Charts
- {
- name: 'chart-bar-active',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-bar-active.tsx'],
- category: 'Charts',
- subcategory: 'Bar',
- },
- {
- name: 'chart-bar-default',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-bar-default.tsx'],
- category: 'Charts',
- subcategory: 'Bar',
- },
- {
- name: 'chart-bar-horizontal',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-bar-horizontal.tsx'],
- category: 'Charts',
- subcategory: 'Bar',
- },
{
name: 'chart-bar-interactive',
type: 'components:block',
@@ -117,387 +10,51 @@ export const charts: Registry = [
subcategory: 'Bar',
},
{
- name: 'chart-bar-label-custom',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-bar-label-custom.tsx'],
- category: 'Charts',
- subcategory: 'Bar',
- },
- {
- name: 'chart-bar-label',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-bar-label.tsx'],
- category: 'Charts',
- subcategory: 'Bar',
- },
- {
- name: 'chart-bar-mixed',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-bar-mixed.tsx'],
- category: 'Charts',
- subcategory: 'Bar',
- },
- {
- name: 'chart-bar-multiple',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-bar-multiple.tsx'],
- category: 'Charts',
- subcategory: 'Bar',
- },
- {
- name: 'chart-bar-negative',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-bar-negative.tsx'],
- category: 'Charts',
- subcategory: 'Bar',
- },
- {
- name: 'chart-bar-stacked',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-bar-stacked.tsx'],
- category: 'Charts',
- subcategory: 'Bar',
- },
-
- // Line Charts
- {
- name: 'chart-line-default',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-line-default.tsx'],
- category: 'Charts',
- subcategory: 'Line',
- },
- {
- name: 'chart-line-dots-colors',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-line-dots-colors.tsx'],
- category: 'Charts',
- subcategory: 'Line',
- },
- {
- name: 'chart-line-dots-custom',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-line-dots-custom.tsx'],
- category: 'Charts',
- subcategory: 'Line',
- },
- {
- name: 'chart-line-dots',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-line-dots.tsx'],
- category: 'Charts',
- subcategory: 'Line',
- },
- {
- name: 'chart-line-interactive',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-line-interactive.tsx'],
- category: 'Charts',
- subcategory: 'Line',
- },
- {
- name: 'chart-line-label-custom',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-line-label-custom.tsx'],
- category: 'Charts',
- subcategory: 'Line',
- },
- {
- name: 'chart-line-label',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-line-label.tsx'],
- category: 'Charts',
- subcategory: 'Line',
- },
- {
- name: 'chart-line-linear',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-line-linear.tsx'],
- category: 'Charts',
- subcategory: 'Line',
- },
- {
- name: 'chart-line-multiple',
+ name: 'chart-composed-demo',
type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-line-multiple.tsx'],
+ registryDependencies: ['chart'],
+ files: ['block/chart-composed-demo.tsx'],
category: 'Charts',
- subcategory: 'Line',
+ subcategory: 'Composed',
},
{
- name: 'chart-line-step',
+ name: 'chart-composed-basic',
type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-line-step.tsx'],
+ registryDependencies: ['chart'],
+ files: ['block/chart-composed-basic.tsx'],
category: 'Charts',
- subcategory: 'Line',
+ subcategory: 'Composed',
},
-
- // Pie Charts
{
- name: 'chart-pie-donut-active',
+ name: 'chart-composed-states',
type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-pie-donut-active.tsx'],
+ registryDependencies: ['chart'],
+ files: ['block/chart-composed-states.tsx'],
category: 'Charts',
- subcategory: 'Pie',
+ subcategory: 'Composed',
},
{
- name: 'chart-pie-donut-text',
+ name: 'chart-composed-table',
type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-pie-donut-text.tsx'],
+ registryDependencies: ['chart'],
+ files: ['block/chart-composed-table.tsx'],
category: 'Charts',
- subcategory: 'Pie',
+ subcategory: 'Composed',
},
{
- name: 'chart-pie-donut',
+ name: 'chart-composed-metrics',
type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-pie-donut.tsx'],
- category: 'Charts',
- subcategory: 'Pie',
- },
- {
- name: 'chart-pie-interactive',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-pie-interactive.tsx'],
- category: 'Charts',
- subcategory: 'Pie',
- },
- {
- name: 'chart-pie-label-custom',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-pie-label-custom.tsx'],
- category: 'Charts',
- subcategory: 'Pie',
- },
- {
- name: 'chart-pie-label-list',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-pie-label-list.tsx'],
- category: 'Charts',
- subcategory: 'Pie',
- },
- {
- name: 'chart-pie-label',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-pie-label.tsx'],
- category: 'Charts',
- subcategory: 'Pie',
- },
- {
- name: 'chart-pie-legend',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-pie-legend.tsx'],
- category: 'Charts',
- subcategory: 'Pie',
- },
- {
- name: 'chart-pie-separator-none',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-pie-separator-none.tsx'],
- category: 'Charts',
- subcategory: 'Pie',
- },
- {
- name: 'chart-pie-simple',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-pie-simple.tsx'],
- category: 'Charts',
- subcategory: 'Pie',
- },
- {
- name: 'chart-pie-stacked',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-pie-stacked.tsx'],
- category: 'Charts',
- subcategory: 'Pie',
- },
-
- // Radar Charts
- {
- name: 'chart-radar-default',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radar-default.tsx'],
- category: 'Charts',
- subcategory: 'Radar',
- },
- {
- name: 'chart-radar-dots',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radar-dots.tsx'],
- category: 'Charts',
- subcategory: 'Radar',
- },
- {
- name: 'chart-radar-grid-circle-fill',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radar-grid-circle-fill.tsx'],
- category: 'Charts',
- subcategory: 'Radar',
- },
- {
- name: 'chart-radar-grid-circle-no-lines',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radar-grid-circle-no-lines.tsx'],
- category: 'Charts',
- subcategory: 'Radar',
- },
- {
- name: 'chart-radar-grid-circle',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radar-grid-circle.tsx'],
+ registryDependencies: ['chart'],
+ files: ['block/chart-composed-metrics.tsx'],
category: 'Charts',
- subcategory: 'Radar',
+ subcategory: 'Composed',
},
{
- name: 'chart-radar-grid-custom',
+ name: 'chart-composed-actions',
type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radar-grid-custom.tsx'],
- category: 'Charts',
- subcategory: 'Radar',
- },
- {
- name: 'chart-radar-grid-fill',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radar-grid-fill.tsx'],
- category: 'Charts',
- subcategory: 'Radar',
- },
- {
- name: 'chart-radar-grid-none',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radar-grid-none.tsx'],
- category: 'Charts',
- subcategory: 'Radar',
- },
- {
- name: 'chart-radar-icons',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radar-icons.tsx'],
- category: 'Charts',
- subcategory: 'Radar',
- },
- {
- name: 'chart-radar-label-custom',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radar-label-custom.tsx'],
- category: 'Charts',
- subcategory: 'Radar',
- },
- {
- name: 'chart-radar-legend',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radar-legend.tsx'],
- category: 'Charts',
- subcategory: 'Radar',
- },
- {
- name: 'chart-radar-lines-only',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radar-lines-only.tsx'],
- category: 'Charts',
- subcategory: 'Radar',
- },
- {
- name: 'chart-radar-multiple',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radar-multiple.tsx'],
- category: 'Charts',
- subcategory: 'Radar',
- },
- {
- name: 'chart-radar-radius',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radar-radius.tsx'],
- category: 'Charts',
- subcategory: 'Radar',
- },
-
- // Radial Charts
- {
- name: 'chart-radial-grid',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radial-grid.tsx'],
- category: 'Charts',
- subcategory: 'Radial',
- },
- {
- name: 'chart-radial-label',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radial-label.tsx'],
- category: 'Charts',
- subcategory: 'Radial',
- },
- {
- name: 'chart-radial-shape',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radial-shape.tsx'],
- category: 'Charts',
- subcategory: 'Radial',
- },
- {
- name: 'chart-radial-simple',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radial-simple.tsx'],
- category: 'Charts',
- subcategory: 'Radial',
- },
- {
- name: 'chart-radial-stacked',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radial-stacked.tsx'],
- category: 'Charts',
- subcategory: 'Radial',
- },
- {
- name: 'chart-radial-text',
- type: 'components:block',
- registryDependencies: ['card', 'chart'],
- files: ['block/chart-radial-text.tsx'],
+ registryDependencies: ['chart'],
+ files: ['block/chart-composed-actions.tsx'],
category: 'Charts',
- subcategory: 'Radial',
+ subcategory: 'Composed',
},
]
diff --git a/apps/design-system/registry/default/block/chart-area-axes.tsx b/apps/design-system/registry/default/block/chart-area-axes.tsx
deleted file mode 100644
index 26713267cbd6d..0000000000000
--- a/apps/design-system/registry/default/block/chart-area-axes.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis, YAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'An area chart with axes'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Axes
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
-
- } />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-area-default.tsx b/apps/design-system/registry/default/block/chart-area-default.tsx
deleted file mode 100644
index 0ccfe016d7c5d..0000000000000
--- a/apps/design-system/registry/default/block/chart-area-default.tsx
+++ /dev/null
@@ -1,77 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A simple area chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-area-gradient.tsx b/apps/design-system/registry/default/block/chart-area-gradient.tsx
deleted file mode 100644
index d6e7ad9b62167..0000000000000
--- a/apps/design-system/registry/default/block/chart-area-gradient.tsx
+++ /dev/null
@@ -1,100 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'An area chart with gradient fill'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Gradient
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-area-icons.tsx b/apps/design-system/registry/default/block/chart-area-icons.tsx
deleted file mode 100644
index bc9d01952533c..0000000000000
--- a/apps/design-system/registry/default/block/chart-area-icons.tsx
+++ /dev/null
@@ -1,100 +0,0 @@
-'use client'
-
-import { TrendingDown, TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import {
- ChartConfig,
- ChartContainer,
- ChartLegend,
- ChartLegendContent,
- ChartTooltip,
- ChartTooltipContent,
-} from 'ui'
-
-export const description = 'An area chart with icons'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- icon: TrendingDown,
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- icon: TrendingUp,
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Icons
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
- } />
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-area-interactive.tsx b/apps/design-system/registry/default/block/chart-area-interactive.tsx
deleted file mode 100644
index df2579fe8f8de..0000000000000
--- a/apps/design-system/registry/default/block/chart-area-interactive.tsx
+++ /dev/null
@@ -1,238 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from 'ui'
-import {
- ChartConfig,
- ChartContainer,
- ChartLegend,
- ChartLegendContent,
- ChartTooltip,
- ChartTooltipContent,
-} from 'ui'
-import {
- Select_Shadcn_,
- SelectContent_Shadcn_,
- SelectItem_Shadcn_,
- SelectTrigger_Shadcn_,
- SelectValue_Shadcn_,
-} from 'ui'
-
-export const description = 'An interactive area chart'
-
-const chartData = [
- { date: '2024-04-01', desktop: 222, mobile: 150 },
- { date: '2024-04-02', desktop: 97, mobile: 180 },
- { date: '2024-04-03', desktop: 167, mobile: 120 },
- { date: '2024-04-04', desktop: 242, mobile: 260 },
- { date: '2024-04-05', desktop: 373, mobile: 290 },
- { date: '2024-04-06', desktop: 301, mobile: 340 },
- { date: '2024-04-07', desktop: 245, mobile: 180 },
- { date: '2024-04-08', desktop: 409, mobile: 320 },
- { date: '2024-04-09', desktop: 59, mobile: 110 },
- { date: '2024-04-10', desktop: 261, mobile: 190 },
- { date: '2024-04-11', desktop: 327, mobile: 350 },
- { date: '2024-04-12', desktop: 292, mobile: 210 },
- { date: '2024-04-13', desktop: 342, mobile: 380 },
- { date: '2024-04-14', desktop: 137, mobile: 220 },
- { date: '2024-04-15', desktop: 120, mobile: 170 },
- { date: '2024-04-16', desktop: 138, mobile: 190 },
- { date: '2024-04-17', desktop: 446, mobile: 360 },
- { date: '2024-04-18', desktop: 364, mobile: 410 },
- { date: '2024-04-19', desktop: 243, mobile: 180 },
- { date: '2024-04-20', desktop: 89, mobile: 150 },
- { date: '2024-04-21', desktop: 137, mobile: 200 },
- { date: '2024-04-22', desktop: 224, mobile: 170 },
- { date: '2024-04-23', desktop: 138, mobile: 230 },
- { date: '2024-04-24', desktop: 387, mobile: 290 },
- { date: '2024-04-25', desktop: 215, mobile: 250 },
- { date: '2024-04-26', desktop: 75, mobile: 130 },
- { date: '2024-04-27', desktop: 383, mobile: 420 },
- { date: '2024-04-28', desktop: 122, mobile: 180 },
- { date: '2024-04-29', desktop: 315, mobile: 240 },
- { date: '2024-04-30', desktop: 454, mobile: 380 },
- { date: '2024-05-01', desktop: 165, mobile: 220 },
- { date: '2024-05-02', desktop: 293, mobile: 310 },
- { date: '2024-05-03', desktop: 247, mobile: 190 },
- { date: '2024-05-04', desktop: 385, mobile: 420 },
- { date: '2024-05-05', desktop: 481, mobile: 390 },
- { date: '2024-05-06', desktop: 498, mobile: 520 },
- { date: '2024-05-07', desktop: 388, mobile: 300 },
- { date: '2024-05-08', desktop: 149, mobile: 210 },
- { date: '2024-05-09', desktop: 227, mobile: 180 },
- { date: '2024-05-10', desktop: 293, mobile: 330 },
- { date: '2024-05-11', desktop: 335, mobile: 270 },
- { date: '2024-05-12', desktop: 197, mobile: 240 },
- { date: '2024-05-13', desktop: 197, mobile: 160 },
- { date: '2024-05-14', desktop: 448, mobile: 490 },
- { date: '2024-05-15', desktop: 473, mobile: 380 },
- { date: '2024-05-16', desktop: 338, mobile: 400 },
- { date: '2024-05-17', desktop: 499, mobile: 420 },
- { date: '2024-05-18', desktop: 315, mobile: 350 },
- { date: '2024-05-19', desktop: 235, mobile: 180 },
- { date: '2024-05-20', desktop: 177, mobile: 230 },
- { date: '2024-05-21', desktop: 82, mobile: 140 },
- { date: '2024-05-22', desktop: 81, mobile: 120 },
- { date: '2024-05-23', desktop: 252, mobile: 290 },
- { date: '2024-05-24', desktop: 294, mobile: 220 },
- { date: '2024-05-25', desktop: 201, mobile: 250 },
- { date: '2024-05-26', desktop: 213, mobile: 170 },
- { date: '2024-05-27', desktop: 420, mobile: 460 },
- { date: '2024-05-28', desktop: 233, mobile: 190 },
- { date: '2024-05-29', desktop: 78, mobile: 130 },
- { date: '2024-05-30', desktop: 340, mobile: 280 },
- { date: '2024-05-31', desktop: 178, mobile: 230 },
- { date: '2024-06-01', desktop: 178, mobile: 200 },
- { date: '2024-06-02', desktop: 470, mobile: 410 },
- { date: '2024-06-03', desktop: 103, mobile: 160 },
- { date: '2024-06-04', desktop: 439, mobile: 380 },
- { date: '2024-06-05', desktop: 88, mobile: 140 },
- { date: '2024-06-06', desktop: 294, mobile: 250 },
- { date: '2024-06-07', desktop: 323, mobile: 370 },
- { date: '2024-06-08', desktop: 385, mobile: 320 },
- { date: '2024-06-09', desktop: 438, mobile: 480 },
- { date: '2024-06-10', desktop: 155, mobile: 200 },
- { date: '2024-06-11', desktop: 92, mobile: 150 },
- { date: '2024-06-12', desktop: 492, mobile: 420 },
- { date: '2024-06-13', desktop: 81, mobile: 130 },
- { date: '2024-06-14', desktop: 426, mobile: 380 },
- { date: '2024-06-15', desktop: 307, mobile: 350 },
- { date: '2024-06-16', desktop: 371, mobile: 310 },
- { date: '2024-06-17', desktop: 475, mobile: 520 },
- { date: '2024-06-18', desktop: 107, mobile: 170 },
- { date: '2024-06-19', desktop: 341, mobile: 290 },
- { date: '2024-06-20', desktop: 408, mobile: 450 },
- { date: '2024-06-21', desktop: 169, mobile: 210 },
- { date: '2024-06-22', desktop: 317, mobile: 270 },
- { date: '2024-06-23', desktop: 480, mobile: 530 },
- { date: '2024-06-24', desktop: 132, mobile: 180 },
- { date: '2024-06-25', desktop: 141, mobile: 190 },
- { date: '2024-06-26', desktop: 434, mobile: 380 },
- { date: '2024-06-27', desktop: 448, mobile: 490 },
- { date: '2024-06-28', desktop: 149, mobile: 200 },
- { date: '2024-06-29', desktop: 103, mobile: 160 },
- { date: '2024-06-30', desktop: 446, mobile: 400 },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- const [timeRange, setTimeRange] = React.useState('90d')
-
- const filteredData = chartData.filter((item) => {
- const date = new Date(item.date)
- const now = new Date()
- let daysToSubtract = 90
- if (timeRange === '30d') {
- daysToSubtract = 30
- } else if (timeRange === '7d') {
- daysToSubtract = 7
- }
- now.setDate(now.getDate() - daysToSubtract)
- return date >= now
- })
-
- return (
-
-
-
- Area Chart - Interactive
- Showing total visitors for the last 3 months
-
-
-
-
-
-
-
- Last 3 months
-
-
- Last 30 days
-
-
- Last 7 days
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {
- const date = new Date(value)
- return date.toLocaleDateString('en-US', {
- month: 'short',
- day: 'numeric',
- })
- }}
- />
- {
- return new Date(value).toLocaleDateString('en-US', {
- month: 'short',
- day: 'numeric',
- })
- }}
- indicator="dot"
- />
- }
- />
-
-
- } />
-
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-area-legend.tsx b/apps/design-system/registry/default/block/chart-area-legend.tsx
deleted file mode 100644
index a58cfa9fbd9b5..0000000000000
--- a/apps/design-system/registry/default/block/chart-area-legend.tsx
+++ /dev/null
@@ -1,98 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import {
- ChartConfig,
- ChartContainer,
- ChartLegend,
- ChartLegendContent,
- ChartTooltip,
- ChartTooltipContent,
-} from 'ui'
-
-export const description = 'An area chart with a legend'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Legend
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
- } />
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-area-linear.tsx b/apps/design-system/registry/default/block/chart-area-linear.tsx
deleted file mode 100644
index 8381711c7aa87..0000000000000
--- a/apps/design-system/registry/default/block/chart-area-linear.tsx
+++ /dev/null
@@ -1,80 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A linear area chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Linear
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
- }
- />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-area-stacked-expand.tsx b/apps/design-system/registry/default/block/chart-area-stacked-expand.tsx
deleted file mode 100644
index eca0b1118f715..0000000000000
--- a/apps/design-system/registry/default/block/chart-area-stacked-expand.tsx
+++ /dev/null
@@ -1,104 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A stacked area chart with expand stacking'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80, other: 45 },
- { month: 'February', desktop: 305, mobile: 200, other: 100 },
- { month: 'March', desktop: 237, mobile: 120, other: 150 },
- { month: 'April', desktop: 73, mobile: 190, other: 50 },
- { month: 'May', desktop: 209, mobile: 130, other: 100 },
- { month: 'June', desktop: 214, mobile: 140, other: 160 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-3))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Stacked Expanded
- Showing total visitors for the last 6months
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-area-stacked.tsx b/apps/design-system/registry/default/block/chart-area-stacked.tsx
deleted file mode 100644
index 22c0f58558b20..0000000000000
--- a/apps/design-system/registry/default/block/chart-area-stacked.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A stacked area chart'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Stacked
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-area-step.tsx b/apps/design-system/registry/default/block/chart-area-step.tsx
deleted file mode 100644
index 5ac732aeaf428..0000000000000
--- a/apps/design-system/registry/default/block/chart-area-step.tsx
+++ /dev/null
@@ -1,78 +0,0 @@
-'use client'
-
-import { Activity, TrendingUp } from 'lucide-react'
-import { Area, AreaChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A step area chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- icon: Activity,
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Area Chart - Step
- Showing total visitors for the last 6 months
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-bar-active.tsx b/apps/design-system/registry/default/block/chart-bar-active.tsx
deleted file mode 100644
index b1ab1d95e1a0c..0000000000000
--- a/apps/design-system/registry/default/block/chart-bar-active.tsx
+++ /dev/null
@@ -1,94 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, CartesianGrid, Rectangle, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A bar chart with an active bar'
-
-const chartData = [
- { browser: 'chrome', visitors: 187, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 275, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Active
- January - June 2024
-
-
-
-
-
- chartConfig[value as keyof typeof chartConfig]?.label}
- />
- } />
- {
- return (
-
- )
- }}
- />
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-bar-default.tsx b/apps/design-system/registry/default/block/chart-bar-default.tsx
deleted file mode 100644
index 1c0596e3b5732..0000000000000
--- a/apps/design-system/registry/default/block/chart-bar-default.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A bar chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-bar-horizontal.tsx b/apps/design-system/registry/default/block/chart-bar-horizontal.tsx
deleted file mode 100644
index 2305d0a4e1c3c..0000000000000
--- a/apps/design-system/registry/default/block/chart-bar-horizontal.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, XAxis, YAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A horizontal bar chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Horizontal
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-bar-label-custom.tsx b/apps/design-system/registry/default/block/chart-bar-label-custom.tsx
deleted file mode 100644
index 7867342bc6d53..0000000000000
--- a/apps/design-system/registry/default/block/chart-bar-label-custom.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, CartesianGrid, LabelList, XAxis, YAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A bar chart with a custom label'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
- label: {
- color: 'hsl(var(--background))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Custom Label
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- hide
- />
-
- } />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-bar-label.tsx b/apps/design-system/registry/default/block/chart-bar-label.tsx
deleted file mode 100644
index 3bbdcc7a7eafa..0000000000000
--- a/apps/design-system/registry/default/block/chart-bar-label.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, CartesianGrid, LabelList, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A bar chart with a label'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Label
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-bar-mixed.tsx b/apps/design-system/registry/default/block/chart-bar-mixed.tsx
deleted file mode 100644
index 1790507f73fe3..0000000000000
--- a/apps/design-system/registry/default/block/chart-bar-mixed.tsx
+++ /dev/null
@@ -1,86 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, XAxis, YAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A mixed bar chart'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Mixed
- January - June 2024
-
-
-
-
- chartConfig[value as keyof typeof chartConfig]?.label}
- />
-
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-bar-multiple.tsx b/apps/design-system/registry/default/block/chart-bar-multiple.tsx
deleted file mode 100644
index ffb9c61679abd..0000000000000
--- a/apps/design-system/registry/default/block/chart-bar-multiple.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A multiple bar chart'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Multiple
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-bar-negative.tsx b/apps/design-system/registry/default/block/chart-bar-negative.tsx
deleted file mode 100644
index 43f87ef07627d..0000000000000
--- a/apps/design-system/registry/default/block/chart-bar-negative.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, CartesianGrid, Cell, LabelList } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A bar chart with negative values'
-
-const chartData = [
- { month: 'January', visitors: 186 },
- { month: 'February', visitors: 205 },
- { month: 'March', visitors: -207 },
- { month: 'April', visitors: 173 },
- { month: 'May', visitors: -209 },
- { month: 'June', visitors: 214 },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Negative
- January - June 2024
-
-
-
-
-
- }
- />
-
-
- {chartData.map((item) => (
- 0 ? 'hsl(var(--chart-1))' : 'hsl(var(--chart-2))'}
- />
- ))}
- |
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-bar-stacked.tsx b/apps/design-system/registry/default/block/chart-bar-stacked.tsx
deleted file mode 100644
index 34a7439e9827c..0000000000000
--- a/apps/design-system/registry/default/block/chart-bar-stacked.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Bar, BarChart, CartesianGrid, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import {
- ChartConfig,
- ChartContainer,
- ChartLegend,
- ChartLegendContent,
- ChartTooltip,
- ChartTooltipContent,
-} from 'ui'
-
-export const description = 'A stacked bar chart with a legend'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Bar Chart - Stacked + Legend
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
- } />
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-composed-actions.tsx b/apps/design-system/registry/default/block/chart-composed-actions.tsx
new file mode 100644
index 0000000000000..f6eac7312b247
--- /dev/null
+++ b/apps/design-system/registry/default/block/chart-composed-actions.tsx
@@ -0,0 +1,106 @@
+'use client'
+
+import {
+ Chart,
+ ChartActions,
+ ChartCard,
+ ChartContent,
+ ChartHeader,
+ ChartTitle,
+ ChartEmptyState,
+ ChartLoadingState,
+ ChartBar,
+ ChartLine,
+} from 'ui-patterns/Chart'
+import { BarChart2, ExternalLink, LineChart } from 'lucide-react'
+import { useState, useEffect } from 'react'
+
+export default function ChartComposedActions() {
+ const [isLoading, setIsLoading] = useState(true)
+ const [chartType, setChartType] = useState<'bar' | 'line'>('bar')
+
+ const actions = [
+ {
+ label: 'Open in Logs Explorer',
+ onClick: () => {
+ alert('Opening in Logs Explorer...')
+ },
+ icon: ,
+ },
+ {
+ label: 'Toggle Chart Type',
+ onClick: () => {
+ setChartType(chartType === 'bar' ? 'line' : 'bar')
+ },
+ icon: chartType === 'bar' ? : ,
+ },
+ ]
+
+ const data = Array.from({ length: 46 }, (_, i) => {
+ const date = new Date()
+ date.setMinutes(date.getMinutes() - i * 5) // Each point 5 minutes apart
+
+ return {
+ timestamp: date.toISOString(),
+ requests: Math.floor(Math.random() * 100),
+ }
+ }).reverse()
+
+ useEffect(() => {
+ setTimeout(() => {
+ setIsLoading(false)
+ }, 1000)
+ }, [])
+
+ return (
+
+
+
+
+ Total Requests
+
+
+ }
+ title="No data to show"
+ description="It may take up to 24 hours for data to refresh"
+ />
+ }
+ loadingState={ }
+ >
+
+ {chartType === 'bar' ? (
+ `${value}k`,
+ width: 80,
+ }}
+ isFullHeight={true}
+ />
+ ) : (
+ `${value}k`,
+ width: 80,
+ }}
+ isFullHeight={true}
+ />
+ )}
+
+
+
+
+
+ )
+}
diff --git a/apps/design-system/registry/default/block/chart-composed-basic.tsx b/apps/design-system/registry/default/block/chart-composed-basic.tsx
new file mode 100644
index 0000000000000..99778d63f438c
--- /dev/null
+++ b/apps/design-system/registry/default/block/chart-composed-basic.tsx
@@ -0,0 +1,122 @@
+'use client'
+
+import {
+ Chart,
+ ChartActions,
+ ChartCard,
+ ChartContent,
+ ChartHeader,
+ ChartTitle,
+ ChartEmptyState,
+ ChartLoadingState,
+ ChartBar,
+ ChartLine,
+} from 'ui-patterns/Chart'
+import { BarChart2, ExternalLink } from 'lucide-react'
+import { useState, useEffect } from 'react'
+
+export default function ComposedChartBasic() {
+ const [isLoading, setIsLoading] = useState(true)
+
+ const actions = [
+ {
+ label: 'Open in Logs Explorer',
+ onClick: () => {
+ alert('Ta da! You clicked me! 🎉')
+ },
+ icon: ,
+ },
+ ]
+
+ const data = Array.from({ length: 46 }, (_, i) => {
+ const date = new Date()
+ date.setMinutes(date.getMinutes() - i * 5) // Each point 5 minutes apart
+
+ return {
+ timestamp: date.toISOString(),
+ standard_score: Math.floor(Math.random() * 100),
+ }
+ }).reverse()
+
+ useEffect(() => {
+ setTimeout(() => {
+ setIsLoading(false)
+ }, 1000)
+ }, [])
+
+ return (
+
+
+
+
+ Standard Bar Chart
+
+
+
+
+ }
+ title="No data to show"
+ description="It may take up to 24 hours for data to refresh"
+ />
+ }
+ loadingState={ }
+ >
+
+ `${value}k`,
+ width: 80,
+ }}
+ isFullHeight={true}
+ />
+
+
+
+
+
+
+
+
+ Standard Line Chart
+
+
+
+
+ }
+ title="No data to show"
+ description="It may take up to 24 hours for data to refresh"
+ />
+ }
+ loadingState={ }
+ >
+
+ `${value}k`,
+ width: 80,
+ }}
+ isFullHeight={true}
+ />
+
+
+
+
+
+ )
+}
diff --git a/apps/design-system/registry/default/block/chart-composed-demo.tsx b/apps/design-system/registry/default/block/chart-composed-demo.tsx
new file mode 100644
index 0000000000000..c734900d39567
--- /dev/null
+++ b/apps/design-system/registry/default/block/chart-composed-demo.tsx
@@ -0,0 +1,73 @@
+'use client'
+
+import {
+ Chart,
+ ChartCard,
+ ChartContent,
+ ChartHeader,
+ ChartEmptyState,
+ ChartLoadingState,
+ ChartMetric,
+} from 'ui-patterns/Chart'
+import { BarChart2 } from 'lucide-react'
+import { LogsBarChart } from 'ui-patterns/LogsBarChart'
+import { useState, useEffect } from 'react'
+
+export default function ComposedChartDemo() {
+ const [isLoading, setIsLoading] = useState(true)
+
+ const data = Array.from({ length: 60 }, (_, i) => {
+ const date = new Date()
+ date.setMinutes(date.getMinutes() - i * 5) // Each point 5 minutes apart
+
+ return {
+ timestamp: date.toISOString(),
+ ok_count: Math.floor(Math.random() * 100), // Random value 0-99
+ error_count: Math.floor(Math.random() * 50), // Random value 0-50
+ warning_count: Math.floor(Math.random() * 50), // Random value 0-50
+ }
+ }).reverse()
+
+ const totalUsersValue = 4663
+
+ useEffect(() => {
+ setTimeout(() => {
+ setIsLoading(false)
+ }, 1000)
+ }, [])
+
+ return (
+
+
+
+
+
+
+
+
+
+
+ }
+ title="No data to show"
+ description="It may take up to 24 hours for data to refresh"
+ />
+ }
+ loadingState={ }
+ >
+
+
+
+
+
+
+
+ )
+}
diff --git a/apps/design-system/registry/default/block/chart-composed-metrics.tsx b/apps/design-system/registry/default/block/chart-composed-metrics.tsx
new file mode 100644
index 0000000000000..0c876d7e5898d
--- /dev/null
+++ b/apps/design-system/registry/default/block/chart-composed-metrics.tsx
@@ -0,0 +1,100 @@
+'use client'
+
+import {
+ Chart,
+ ChartCard,
+ ChartHeader,
+ ChartActions,
+ ChartContent,
+ ChartMetric,
+ ChartSparkline,
+} from 'ui-patterns/Chart'
+import { ExternalLink } from 'lucide-react'
+import { useState, useEffect } from 'react'
+import { Skeleton } from 'ui'
+
+export default function ChartComposedMetrics() {
+ const [data, setData] = useState>([])
+
+ const actions = [
+ {
+ label: 'Open in Logs Explorer',
+ onClick: () => {
+ alert('Ta da! You clicked me! 🎉')
+ },
+ icon: ,
+ },
+ ]
+
+ useEffect(() => {
+ const now = new Date()
+ setData(
+ Array.from({ length: 12 }, (_, i) => ({
+ value: Math.floor(4000 + i * 100 + (Math.random() * 2000 - 800)),
+ timestamp: new Date(now.getTime() - (11 - i) * 60 * 60 * 1000).toISOString(),
+ }))
+ )
+ }, [])
+
+ const averageValue = data.reduce((acc, curr) => acc + curr.value, 0) / data.length
+
+ const diff = data[data.length - 1]?.value - data[0]?.value || 0
+ const diffPercentage = (diff / averageValue) * 100
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+ >
+
+
+
+
+
+
+
+
+
+
+ }
+ >
+
+
+
+
+
+ )
+}
diff --git a/apps/design-system/registry/default/block/chart-composed-states.tsx b/apps/design-system/registry/default/block/chart-composed-states.tsx
new file mode 100644
index 0000000000000..4e5aa5d8bd5b4
--- /dev/null
+++ b/apps/design-system/registry/default/block/chart-composed-states.tsx
@@ -0,0 +1,92 @@
+'use client'
+
+import { BarChart2, ExternalLink } from 'lucide-react'
+import {
+ Chart,
+ ChartCard,
+ ChartHeader,
+ ChartTitle,
+ ChartActions,
+ ChartContent,
+ ChartEmptyState,
+ ChartLoadingState,
+ ChartDisabledState,
+} from 'ui-patterns/Chart'
+import { Badge } from 'ui'
+
+export default function ChartComposedStates() {
+ const actions = [
+ {
+ label: 'Open in Logs Explorer',
+ onClick: () => {
+ alert('Ta da! You clicked me! 🎉')
+ },
+ icon: ,
+ },
+ ]
+
+ const disabledActions = [
+ {
+ label: 'Upgrade to Pro',
+ href: '#',
+ },
+ ]
+
+ return (
+
+
+
+
+ Response Errors
+
+
+ }>My chart here...
+
+
+
+
+
+
+ Response Errors
+
+
+ }
+ title="No data to show"
+ description="It may take up to 24 hours for data to refresh"
+ />
+ }
+ loadingState={ }
+ >
+ My chart here...
+
+
+
+
+
+
+
+ Response Errors
+
+
+ }
+ disabledState={
+ Pro}
+ label="API Processing Time"
+ description="This chart is available on the Pro plan and above"
+ actions={disabledActions}
+ />
+ }
+ >
+ My chart here...
+
+
+
+
+ )
+}
diff --git a/apps/design-system/registry/default/block/chart-composed-table.tsx b/apps/design-system/registry/default/block/chart-composed-table.tsx
new file mode 100644
index 0000000000000..303114447e9e6
--- /dev/null
+++ b/apps/design-system/registry/default/block/chart-composed-table.tsx
@@ -0,0 +1,106 @@
+'use client'
+
+import {
+ Chart,
+ ChartActions,
+ ChartCard,
+ ChartContent,
+ ChartHeader,
+ ChartTitle,
+ ChartEmptyState,
+ ChartLoadingState,
+ ChartBar,
+ ChartFooter,
+} from 'ui-patterns/Chart'
+import { BarChart2, ExternalLink } from 'lucide-react'
+import { useState, useEffect } from 'react'
+import { Table, TableHead, TableBody, TableRow, TableCell, TableHeader } from 'ui'
+import { format } from 'date-fns'
+
+export default function ChartComposedTable() {
+ const [isLoading, setIsLoading] = useState(true)
+
+ const actions = [
+ {
+ label: 'Open in Logs Explorer',
+ onClick: () => {
+ alert('Opening in Logs Explorer...')
+ },
+ icon: ,
+ },
+ ]
+
+ const data = Array.from({ length: 46 }, (_, i) => {
+ const date = new Date()
+ date.setMinutes(date.getMinutes() - i * 5) // Each point 5 minutes apart
+
+ return {
+ timestamp: date.toISOString(),
+ standard_score: Math.floor(Math.random() * 100),
+ }
+ }).reverse()
+
+ useEffect(() => {
+ setTimeout(() => {
+ setIsLoading(false)
+ }, 1000)
+ }, [])
+
+ return (
+
+
+
+
+ Standard Bar Chart
+
+
+ }
+ title="No data to show"
+ description="It may take up to 24 hours for data to refresh"
+ />
+ }
+ loadingState={ }
+ >
+
+ `${value}k`,
+ width: 80,
+ }}
+ isFullHeight={true}
+ />
+
+
+
+
+
+
+ Timestamp
+ Standard Score
+
+
+
+ {data.slice(0, 3).map((item) => (
+
+
+ {format(new Date(item.timestamp), 'MMM d, yyyy h:mm a')}
+
+ {item.standard_score}
+
+ ))}
+
+
+
+
+
+
+ )
+}
diff --git a/apps/design-system/registry/default/block/chart-line-default.tsx b/apps/design-system/registry/default/block/chart-line-default.tsx
deleted file mode 100644
index 408dc1d6f9f35..0000000000000
--- a/apps/design-system/registry/default/block/chart-line-default.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A line chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-line-dots-colors.tsx b/apps/design-system/registry/default/block/chart-line-dots-colors.tsx
deleted file mode 100644
index c8a55a0c44b1c..0000000000000
--- a/apps/design-system/registry/default/block/chart-line-dots-colors.tsx
+++ /dev/null
@@ -1,100 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, Dot, Line, LineChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A line chart with dots and colors'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- color: 'hsl(var(--chart-2))',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Dots Colors
- January - June 2024
-
-
-
-
-
- }
- />
- {
- return (
-
- )
- }}
- />
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-line-dots-custom.tsx b/apps/design-system/registry/default/block/chart-line-dots-custom.tsx
deleted file mode 100644
index 87c693093198b..0000000000000
--- a/apps/design-system/registry/default/block/chart-line-dots-custom.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-'use client'
-
-import { GitCommitVertical, TrendingUp } from 'lucide-react'
-import { CartesianGrid, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A line chart with custom dots'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Custom Dots
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
- {
- const r = 24
- return (
-
- )
- }}
- />
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-line-dots.tsx b/apps/design-system/registry/default/block/chart-line-dots.tsx
deleted file mode 100644
index cc211f2c2b49d..0000000000000
--- a/apps/design-system/registry/default/block/chart-line-dots.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A line chart with dots'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Dots
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-line-interactive.tsx b/apps/design-system/registry/default/block/chart-line-interactive.tsx
deleted file mode 100644
index 5f9c92b9792bb..0000000000000
--- a/apps/design-system/registry/default/block/chart-line-interactive.tsx
+++ /dev/null
@@ -1,208 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { CartesianGrid, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'An interactive line chart'
-
-const chartData = [
- { date: '2024-04-01', desktop: 222, mobile: 150 },
- { date: '2024-04-02', desktop: 97, mobile: 180 },
- { date: '2024-04-03', desktop: 167, mobile: 120 },
- { date: '2024-04-04', desktop: 242, mobile: 260 },
- { date: '2024-04-05', desktop: 373, mobile: 290 },
- { date: '2024-04-06', desktop: 301, mobile: 340 },
- { date: '2024-04-07', desktop: 245, mobile: 180 },
- { date: '2024-04-08', desktop: 409, mobile: 320 },
- { date: '2024-04-09', desktop: 59, mobile: 110 },
- { date: '2024-04-10', desktop: 261, mobile: 190 },
- { date: '2024-04-11', desktop: 327, mobile: 350 },
- { date: '2024-04-12', desktop: 292, mobile: 210 },
- { date: '2024-04-13', desktop: 342, mobile: 380 },
- { date: '2024-04-14', desktop: 137, mobile: 220 },
- { date: '2024-04-15', desktop: 120, mobile: 170 },
- { date: '2024-04-16', desktop: 138, mobile: 190 },
- { date: '2024-04-17', desktop: 446, mobile: 360 },
- { date: '2024-04-18', desktop: 364, mobile: 410 },
- { date: '2024-04-19', desktop: 243, mobile: 180 },
- { date: '2024-04-20', desktop: 89, mobile: 150 },
- { date: '2024-04-21', desktop: 137, mobile: 200 },
- { date: '2024-04-22', desktop: 224, mobile: 170 },
- { date: '2024-04-23', desktop: 138, mobile: 230 },
- { date: '2024-04-24', desktop: 387, mobile: 290 },
- { date: '2024-04-25', desktop: 215, mobile: 250 },
- { date: '2024-04-26', desktop: 75, mobile: 130 },
- { date: '2024-04-27', desktop: 383, mobile: 420 },
- { date: '2024-04-28', desktop: 122, mobile: 180 },
- { date: '2024-04-29', desktop: 315, mobile: 240 },
- { date: '2024-04-30', desktop: 454, mobile: 380 },
- { date: '2024-05-01', desktop: 165, mobile: 220 },
- { date: '2024-05-02', desktop: 293, mobile: 310 },
- { date: '2024-05-03', desktop: 247, mobile: 190 },
- { date: '2024-05-04', desktop: 385, mobile: 420 },
- { date: '2024-05-05', desktop: 481, mobile: 390 },
- { date: '2024-05-06', desktop: 498, mobile: 520 },
- { date: '2024-05-07', desktop: 388, mobile: 300 },
- { date: '2024-05-08', desktop: 149, mobile: 210 },
- { date: '2024-05-09', desktop: 227, mobile: 180 },
- { date: '2024-05-10', desktop: 293, mobile: 330 },
- { date: '2024-05-11', desktop: 335, mobile: 270 },
- { date: '2024-05-12', desktop: 197, mobile: 240 },
- { date: '2024-05-13', desktop: 197, mobile: 160 },
- { date: '2024-05-14', desktop: 448, mobile: 490 },
- { date: '2024-05-15', desktop: 473, mobile: 380 },
- { date: '2024-05-16', desktop: 338, mobile: 400 },
- { date: '2024-05-17', desktop: 499, mobile: 420 },
- { date: '2024-05-18', desktop: 315, mobile: 350 },
- { date: '2024-05-19', desktop: 235, mobile: 180 },
- { date: '2024-05-20', desktop: 177, mobile: 230 },
- { date: '2024-05-21', desktop: 82, mobile: 140 },
- { date: '2024-05-22', desktop: 81, mobile: 120 },
- { date: '2024-05-23', desktop: 252, mobile: 290 },
- { date: '2024-05-24', desktop: 294, mobile: 220 },
- { date: '2024-05-25', desktop: 201, mobile: 250 },
- { date: '2024-05-26', desktop: 213, mobile: 170 },
- { date: '2024-05-27', desktop: 420, mobile: 460 },
- { date: '2024-05-28', desktop: 233, mobile: 190 },
- { date: '2024-05-29', desktop: 78, mobile: 130 },
- { date: '2024-05-30', desktop: 340, mobile: 280 },
- { date: '2024-05-31', desktop: 178, mobile: 230 },
- { date: '2024-06-01', desktop: 178, mobile: 200 },
- { date: '2024-06-02', desktop: 470, mobile: 410 },
- { date: '2024-06-03', desktop: 103, mobile: 160 },
- { date: '2024-06-04', desktop: 439, mobile: 380 },
- { date: '2024-06-05', desktop: 88, mobile: 140 },
- { date: '2024-06-06', desktop: 294, mobile: 250 },
- { date: '2024-06-07', desktop: 323, mobile: 370 },
- { date: '2024-06-08', desktop: 385, mobile: 320 },
- { date: '2024-06-09', desktop: 438, mobile: 480 },
- { date: '2024-06-10', desktop: 155, mobile: 200 },
- { date: '2024-06-11', desktop: 92, mobile: 150 },
- { date: '2024-06-12', desktop: 492, mobile: 420 },
- { date: '2024-06-13', desktop: 81, mobile: 130 },
- { date: '2024-06-14', desktop: 426, mobile: 380 },
- { date: '2024-06-15', desktop: 307, mobile: 350 },
- { date: '2024-06-16', desktop: 371, mobile: 310 },
- { date: '2024-06-17', desktop: 475, mobile: 520 },
- { date: '2024-06-18', desktop: 107, mobile: 170 },
- { date: '2024-06-19', desktop: 341, mobile: 290 },
- { date: '2024-06-20', desktop: 408, mobile: 450 },
- { date: '2024-06-21', desktop: 169, mobile: 210 },
- { date: '2024-06-22', desktop: 317, mobile: 270 },
- { date: '2024-06-23', desktop: 480, mobile: 530 },
- { date: '2024-06-24', desktop: 132, mobile: 180 },
- { date: '2024-06-25', desktop: 141, mobile: 190 },
- { date: '2024-06-26', desktop: 434, mobile: 380 },
- { date: '2024-06-27', desktop: 448, mobile: 490 },
- { date: '2024-06-28', desktop: 149, mobile: 200 },
- { date: '2024-06-29', desktop: 103, mobile: 160 },
- { date: '2024-06-30', desktop: 446, mobile: 400 },
-]
-
-const chartConfig = {
- views: {
- label: 'Page Views',
- },
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- const [activeChart, setActiveChart] = React.useState('desktop')
-
- const total = React.useMemo(
- () => ({
- desktop: chartData.reduce((acc, curr) => acc + curr.desktop, 0),
- mobile: chartData.reduce((acc, curr) => acc + curr.mobile, 0),
- }),
- []
- )
-
- return (
-
-
-
- Line Chart - Interactive
- Showing total visitors for the last 3 months
-
-
- {['desktop', 'mobile'].map((key) => {
- const chart = key as keyof typeof chartConfig
- return (
- setActiveChart(chart)}
- >
- {chartConfig[chart].label}
-
- {total[key as keyof typeof total].toLocaleString()}
-
-
- )
- })}
-
-
-
-
-
-
- {
- const date = new Date(value)
- return date.toLocaleDateString('en-US', {
- month: 'short',
- day: 'numeric',
- })
- }}
- />
- {
- return new Date(value).toLocaleDateString('en-US', {
- month: 'short',
- day: 'numeric',
- year: 'numeric',
- })
- }}
- />
- }
- />
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-line-label-custom.tsx b/apps/design-system/registry/default/block/chart-line-label-custom.tsx
deleted file mode 100644
index 3d84fec03a38b..0000000000000
--- a/apps/design-system/registry/default/block/chart-line-label-custom.tsx
+++ /dev/null
@@ -1,103 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, LabelList, Line, LineChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A line chart with a custom label'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- color: 'hsl(var(--chart-2))',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Custom Label
- January - June 2024
-
-
-
-
-
- }
- />
-
- chartConfig[value]?.label}
- />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-line-label.tsx b/apps/design-system/registry/default/block/chart-line-label.tsx
deleted file mode 100644
index 2c187e9596157..0000000000000
--- a/apps/design-system/registry/default/block/chart-line-label.tsx
+++ /dev/null
@@ -1,85 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, LabelList, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A line chart with a label'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Label
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-line-linear.tsx b/apps/design-system/registry/default/block/chart-line-linear.tsx
deleted file mode 100644
index 9219a3c9de472..0000000000000
--- a/apps/design-system/registry/default/block/chart-line-linear.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A linear line chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Linear
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-line-multiple.tsx b/apps/design-system/registry/default/block/chart-line-multiple.tsx
deleted file mode 100644
index f09714a273700..0000000000000
--- a/apps/design-system/registry/default/block/chart-line-multiple.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A multiple line chart'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Multiple
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-line-step.tsx b/apps/design-system/registry/default/block/chart-line-step.tsx
deleted file mode 100644
index 0ab71e07d0911..0000000000000
--- a/apps/design-system/registry/default/block/chart-line-step.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { CartesianGrid, Line, LineChart, XAxis } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A line chart with step'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 73 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Line Chart - Step
- January - June 2024
-
-
-
-
-
- value.slice(0, 3)}
- />
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-pie-donut-active.tsx b/apps/design-system/registry/default/block/chart-pie-donut-active.tsx
deleted file mode 100644
index 2490b50f65f00..0000000000000
--- a/apps/design-system/registry/default/block/chart-pie-donut-active.tsx
+++ /dev/null
@@ -1,81 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Label, Pie, PieChart, Sector } from 'recharts'
-import { PieSectorDataItem } from 'recharts/types/polar/Pie'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A donut chart with an active sector'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Donut Active
- January - June 2024
-
-
-
-
- } />
- (
-
- )}
- />
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-pie-donut-text.tsx b/apps/design-system/registry/default/block/chart-pie-donut-text.tsx
deleted file mode 100644
index cba1eee849211..0000000000000
--- a/apps/design-system/registry/default/block/chart-pie-donut-text.tsx
+++ /dev/null
@@ -1,111 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { TrendingUp } from 'lucide-react'
-import { Label, Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A donut chart with text'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 287, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 190, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- const totalVisitors = React.useMemo(() => {
- return chartData.reduce((acc, curr) => acc + curr.visitors, 0)
- }, [])
-
- return (
-
-
- Pie Chart - Donut with Text
- January - June 2024
-
-
-
-
- } />
-
- {
- if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {
- return (
-
-
- {totalVisitors.toLocaleString()}
-
-
- Visitors
-
-
- )
- }
- }}
- />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-pie-donut.tsx b/apps/design-system/registry/default/block/chart-pie-donut.tsx
deleted file mode 100644
index 328fbd4b48a3b..0000000000000
--- a/apps/design-system/registry/default/block/chart-pie-donut.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A donut chart'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Donut
- January - June 2024
-
-
-
-
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-pie-interactive.tsx b/apps/design-system/registry/default/block/chart-pie-interactive.tsx
deleted file mode 100644
index be05cbf8e415b..0000000000000
--- a/apps/design-system/registry/default/block/chart-pie-interactive.tsx
+++ /dev/null
@@ -1,170 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { Label, Pie, PieChart, Sector } from 'recharts'
-import { PieSectorDataItem } from 'recharts/types/polar/Pie'
-
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartStyle, ChartTooltip, ChartTooltipContent } from 'ui'
-import {
- Select_Shadcn_,
- SelectContent_Shadcn_,
- SelectItem_Shadcn_,
- SelectTrigger_Shadcn_,
- SelectValue_Shadcn_,
-} from 'ui'
-
-export const description = 'An interactive pie chart'
-
-const desktopData = [
- { month: 'january', desktop: 186, fill: 'var(--color-january)' },
- { month: 'february', desktop: 305, fill: 'var(--color-february)' },
- { month: 'march', desktop: 237, fill: 'var(--color-march)' },
- { month: 'april', desktop: 173, fill: 'var(--color-april)' },
- { month: 'may', desktop: 209, fill: 'var(--color-may)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- desktop: {
- label: 'Desktop',
- },
- mobile: {
- label: 'Mobile',
- },
- january: {
- label: 'January',
- color: 'hsl(var(--chart-1))',
- },
- february: {
- label: 'February',
- color: 'hsl(var(--chart-2))',
- },
- march: {
- label: 'March',
- color: 'hsl(var(--chart-3))',
- },
- april: {
- label: 'April',
- color: 'hsl(var(--chart-4))',
- },
- may: {
- label: 'May',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- const id = 'pie-interactive'
- const [activeMonth, setActiveMonth] = React.useState(desktopData[0].month)
-
- const activeIndex = React.useMemo(
- () => desktopData.findIndex((item) => item.month === activeMonth),
- [activeMonth]
- )
- const months = React.useMemo(() => desktopData.map((item) => item.month), [])
-
- return (
-
-
-
-
- Pie Chart - Interactive
- January - June 2024
-
-
-
-
-
-
- {months.map((key) => {
- const config = chartConfig[key as keyof typeof chartConfig]
-
- if (!config) {
- return null
- }
-
- return (
-
-
-
- {config?.label}
-
-
- )
- })}
-
-
-
-
-
-
- } />
- (
-
-
-
-
- )}
- >
- {
- if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {
- return (
-
-
- {desktopData[activeIndex].desktop.toLocaleString()}
-
-
- Visitors
-
-
- )
- }
- }}
- />
-
-
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-pie-label-custom.tsx b/apps/design-system/registry/default/block/chart-pie-label-custom.tsx
deleted file mode 100644
index 5fcae35aabe69..0000000000000
--- a/apps/design-system/registry/default/block/chart-pie-label-custom.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A pie chart with a custom label'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Custom Label
- January - June 2024
-
-
-
-
- } />
- {
- return (
-
- {`${
- chartConfig[payload.browser as keyof typeof chartConfig]?.label
- } (${payload.visitors})`}
-
- )
- }}
- nameKey="browser"
- />
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-pie-label-list.tsx b/apps/design-system/registry/default/block/chart-pie-label-list.tsx
deleted file mode 100644
index 814371c307e3c..0000000000000
--- a/apps/design-system/registry/default/block/chart-pie-label-list.tsx
+++ /dev/null
@@ -1,78 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { LabelList, Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A pie chart with a label list'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Label List
- January - June 2024
-
-
-
-
- } />
-
- chartConfig[value]?.label}
- />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-pie-label.tsx b/apps/design-system/registry/default/block/chart-pie-label.tsx
deleted file mode 100644
index 408bd68fb9572..0000000000000
--- a/apps/design-system/registry/default/block/chart-pie-label.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A pie chart with a label'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Label
- January - June 2024
-
-
-
-
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-pie-legend.tsx b/apps/design-system/registry/default/block/chart-pie-legend.tsx
deleted file mode 100644
index c72830caf1716..0000000000000
--- a/apps/design-system/registry/default/block/chart-pie-legend.tsx
+++ /dev/null
@@ -1,64 +0,0 @@
-'use client'
-
-import { Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartLegend, ChartLegendContent } from 'ui'
-
-export const description = 'A pie chart with a legend'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Legend
- January - June 2024
-
-
-
-
-
- }
- className="-translate-y-2 flex-wrap gap-2 [&>*]:basis-1/4 [&>*]:justify-center"
- />
-
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-pie-separator-none.tsx b/apps/design-system/registry/default/block/chart-pie-separator-none.tsx
deleted file mode 100644
index ed00866c3b800..0000000000000
--- a/apps/design-system/registry/default/block/chart-pie-separator-none.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A pie chart with no separator'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Separator None
- January - June 2024
-
-
-
-
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-pie-simple.tsx b/apps/design-system/registry/default/block/chart-pie-simple.tsx
deleted file mode 100644
index a16fb87ca5632..0000000000000
--- a/apps/design-system/registry/default/block/chart-pie-simple.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A simple pie chart'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart
- January - June 2024
-
-
-
-
- } />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-pie-stacked.tsx b/apps/design-system/registry/default/block/chart-pie-stacked.tsx
deleted file mode 100644
index a2ab16ba7115e..0000000000000
--- a/apps/design-system/registry/default/block/chart-pie-stacked.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-'use client'
-
-import * as React from 'react'
-import { TrendingUp } from 'lucide-react'
-import { Label, Pie, PieChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A pie chart with stacked sections'
-
-const desktopData = [
- { month: 'january', desktop: 186, fill: 'var(--color-january)' },
- { month: 'february', desktop: 305, fill: 'var(--color-february)' },
- { month: 'march', desktop: 237, fill: 'var(--color-march)' },
- { month: 'april', desktop: 173, fill: 'var(--color-april)' },
- { month: 'may', desktop: 209, fill: 'var(--color-may)' },
-]
-
-const mobileData = [
- { month: 'january', mobile: 80, fill: 'var(--color-january)' },
- { month: 'february', mobile: 200, fill: 'var(--color-february)' },
- { month: 'march', mobile: 120, fill: 'var(--color-march)' },
- { month: 'april', mobile: 190, fill: 'var(--color-april)' },
- { month: 'may', mobile: 130, fill: 'var(--color-may)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- desktop: {
- label: 'Desktop',
- },
- mobile: {
- label: 'Mobile',
- },
- january: {
- label: 'January',
- color: 'hsl(var(--chart-1))',
- },
- february: {
- label: 'February',
- color: 'hsl(var(--chart-2))',
- },
- march: {
- label: 'March',
- color: 'hsl(var(--chart-3))',
- },
- april: {
- label: 'April',
- color: 'hsl(var(--chart-4))',
- },
- may: {
- label: 'May',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Pie Chart - Stacked
- January - June 2024
-
-
-
-
- {
- return chartConfig[payload?.[0].dataKey as keyof typeof chartConfig].label
- }}
- />
- }
- />
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radar-default.tsx b/apps/design-system/registry/default/block/chart-radar-default.tsx
deleted file mode 100644
index dc3d4e6d553ec..0000000000000
--- a/apps/design-system/registry/default/block/chart-radar-default.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 273 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radar-dots.tsx b/apps/design-system/registry/default/block/chart-radar-dots.tsx
deleted file mode 100644
index bedf14de29b6c..0000000000000
--- a/apps/design-system/registry/default/block/chart-radar-dots.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with dots'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 273 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Dots
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radar-grid-circle-fill.tsx b/apps/design-system/registry/default/block/chart-radar-grid-circle-fill.tsx
deleted file mode 100644
index d17d1536225be..0000000000000
--- a/apps/design-system/registry/default/block/chart-radar-grid-circle-fill.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with a grid and circle fill'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 285 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 203 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 264 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Grid Circle Filled
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radar-grid-circle-no-lines.tsx b/apps/design-system/registry/default/block/chart-radar-grid-circle-no-lines.tsx
deleted file mode 100644
index 3e602ac574507..0000000000000
--- a/apps/design-system/registry/default/block/chart-radar-grid-circle-no-lines.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with a grid and circle fill'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 203 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Grid Circle - No lines
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radar-grid-circle.tsx b/apps/design-system/registry/default/block/chart-radar-grid-circle.tsx
deleted file mode 100644
index 0cc0277a0c4f4..0000000000000
--- a/apps/design-system/registry/default/block/chart-radar-grid-circle.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with a grid and circle'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 273 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Grid Circle
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radar-grid-custom.tsx b/apps/design-system/registry/default/block/chart-radar-grid-custom.tsx
deleted file mode 100644
index 31614acc9a395..0000000000000
--- a/apps/design-system/registry/default/block/chart-radar-grid-custom.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with a custom grid'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 273 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Grid Custom
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radar-grid-fill.tsx b/apps/design-system/registry/default/block/chart-radar-grid-fill.tsx
deleted file mode 100644
index 7745a10fb1397..0000000000000
--- a/apps/design-system/registry/default/block/chart-radar-grid-fill.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with a grid filled'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 285 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 203 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 264 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Grid Filled
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radar-grid-none.tsx b/apps/design-system/registry/default/block/chart-radar-grid-none.tsx
deleted file mode 100644
index a75ac15da185b..0000000000000
--- a/apps/design-system/registry/default/block/chart-radar-grid-none.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with no grid'
-
-const chartData = [
- { month: 'January', desktop: 186 },
- { month: 'February', desktop: 305 },
- { month: 'March', desktop: 237 },
- { month: 'April', desktop: 273 },
- { month: 'May', desktop: 209 },
- { month: 'June', desktop: 214 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Grid None
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radar-icons.tsx b/apps/design-system/registry/default/block/chart-radar-icons.tsx
deleted file mode 100644
index b2a83ad3934ae..0000000000000
--- a/apps/design-system/registry/default/block/chart-radar-icons.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-'use client'
-
-import { ArrowDownFromLine, ArrowUpFromLine, TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import {
- ChartConfig,
- ChartContainer,
- ChartLegend,
- ChartLegendContent,
- ChartTooltip,
- ChartTooltipContent,
-} from 'ui'
-
-export const description = 'A radar chart with icons'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- icon: ArrowDownFromLine,
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- icon: ArrowUpFromLine,
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Icons
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
- } />
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radar-label-custom.tsx b/apps/design-system/registry/default/block/chart-radar-label-custom.tsx
deleted file mode 100644
index 51edad285179b..0000000000000
--- a/apps/design-system/registry/default/block/chart-radar-label-custom.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with a custom label'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Custom Label
- Showing total visitors for the last 6 months
-
-
-
-
- } />
- {
- const data = chartData[index]
-
- return (
-
- {data.desktop}
- /
- {data.mobile}
-
- {data.month}
-
-
- )
- }}
- />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radar-legend.tsx b/apps/design-system/registry/default/block/chart-radar-legend.tsx
deleted file mode 100644
index 1500cc422a394..0000000000000
--- a/apps/design-system/registry/default/block/chart-radar-legend.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import {
- ChartConfig,
- ChartContainer,
- ChartLegend,
- ChartLegendContent,
- ChartTooltip,
- ChartTooltipContent,
-} from 'ui'
-
-export const description = 'A radar chart with a legend'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Legend
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
- } />
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radar-lines-only.tsx b/apps/design-system/registry/default/block/chart-radar-lines-only.tsx
deleted file mode 100644
index acb880c81c3be..0000000000000
--- a/apps/design-system/registry/default/block/chart-radar-lines-only.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with lines only'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 160 },
- { month: 'February', desktop: 185, mobile: 170 },
- { month: 'March', desktop: 207, mobile: 180 },
- { month: 'April', desktop: 173, mobile: 160 },
- { month: 'May', desktop: 160, mobile: 190 },
- { month: 'June', desktop: 174, mobile: 204 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Lines Only
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radar-multiple.tsx b/apps/design-system/registry/default/block/chart-radar-multiple.tsx
deleted file mode 100644
index 5cc44043950ed..0000000000000
--- a/apps/design-system/registry/default/block/chart-radar-multiple.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with multiple data'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Multiple
- Showing total visitors for the last 6 months
-
-
-
-
- } />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radar-radius.tsx b/apps/design-system/registry/default/block/chart-radar-radius.tsx
deleted file mode 100644
index f6616c4ac002c..0000000000000
--- a/apps/design-system/registry/default/block/chart-radar-radius.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarAngleAxis, PolarGrid, PolarRadiusAxis, Radar, RadarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radar chart with a radius axis'
-
-const chartData = [
- { month: 'January', desktop: 186, mobile: 80 },
- { month: 'February', desktop: 305, mobile: 200 },
- { month: 'March', desktop: 237, mobile: 120 },
- { month: 'April', desktop: 73, mobile: 190 },
- { month: 'May', desktop: 209, mobile: 130 },
- { month: 'June', desktop: 214, mobile: 140 },
-]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radar Chart - Radius Axis
- Showing total visitors for the last 6 months
-
-
-
-
- }
- />
-
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- January - June 2024
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radial-grid.tsx b/apps/design-system/registry/default/block/chart-radial-grid.tsx
deleted file mode 100644
index fea6deab0c2f6..0000000000000
--- a/apps/design-system/registry/default/block/chart-radial-grid.tsx
+++ /dev/null
@@ -1,74 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { PolarGrid, RadialBar, RadialBarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radial chart with a grid'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radial Chart - Grid
- January - June 2024
-
-
-
-
- }
- />
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radial-label.tsx b/apps/design-system/registry/default/block/chart-radial-label.tsx
deleted file mode 100644
index 073e8b4ed475e..0000000000000
--- a/apps/design-system/registry/default/block/chart-radial-label.tsx
+++ /dev/null
@@ -1,86 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { LabelList, RadialBar, RadialBarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radial chart with a label'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radial Chart - Label
- January - June 2024
-
-
-
-
- }
- />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radial-shape.tsx b/apps/design-system/registry/default/block/chart-radial-shape.tsx
deleted file mode 100644
index 120a2df88d4f6..0000000000000
--- a/apps/design-system/registry/default/block/chart-radial-shape.tsx
+++ /dev/null
@@ -1,85 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Label, PolarGrid, PolarRadiusAxis, RadialBar, RadialBarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer } from 'ui'
-
-export const description = 'A radial chart with a custom shape'
-
-const chartData = [{ browser: 'safari', visitors: 1260, fill: 'var(--color-safari)' }]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radial Chart - Shape
- January - June 2024
-
-
-
-
-
-
-
- {
- if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {
- return (
-
-
- {chartData[0].visitors.toLocaleString()}
-
-
- Visitors
-
-
- )
- }
- }}
- />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radial-simple.tsx b/apps/design-system/registry/default/block/chart-radial-simple.tsx
deleted file mode 100644
index 6c7590b257317..0000000000000
--- a/apps/design-system/registry/default/block/chart-radial-simple.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { RadialBar, RadialBarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radial chart'
-
-const chartData = [
- { browser: 'chrome', visitors: 275, fill: 'var(--color-chrome)' },
- { browser: 'safari', visitors: 200, fill: 'var(--color-safari)' },
- { browser: 'firefox', visitors: 187, fill: 'var(--color-firefox)' },
- { browser: 'edge', visitors: 173, fill: 'var(--color-edge)' },
- { browser: 'other', visitors: 90, fill: 'var(--color-other)' },
-]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- chrome: {
- label: 'Chrome',
- color: 'hsl(var(--chart-1))',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
- firefox: {
- label: 'Firefox',
- color: 'hsl(var(--chart-3))',
- },
- edge: {
- label: 'Edge',
- color: 'hsl(var(--chart-4))',
- },
- other: {
- label: 'Other',
- color: 'hsl(var(--chart-5))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radial Chart
- January - June 2024
-
-
-
-
- }
- />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radial-stacked.tsx b/apps/design-system/registry/default/block/chart-radial-stacked.tsx
deleted file mode 100644
index e38791f9bae54..0000000000000
--- a/apps/design-system/registry/default/block/chart-radial-stacked.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Label, PolarRadiusAxis, RadialBar, RadialBarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from 'ui'
-
-export const description = 'A radial chart with stacked sections'
-
-const chartData = [{ month: 'january', desktop: 1260, mobile: 570 }]
-
-const chartConfig = {
- desktop: {
- label: 'Desktop',
- color: 'hsl(var(--chart-1))',
- },
- mobile: {
- label: 'Mobile',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- const totalVisitors = chartData[0].desktop + chartData[0].mobile
-
- return (
-
-
- Radial Chart - Stacked
- January - June 2024
-
-
-
-
- } />
-
- {
- if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {
- return (
-
-
- {totalVisitors.toLocaleString()}
-
-
- Visitors
-
-
- )
- }
- }}
- />
-
-
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/block/chart-radial-text.tsx b/apps/design-system/registry/default/block/chart-radial-text.tsx
deleted file mode 100644
index 8dd238c505b20..0000000000000
--- a/apps/design-system/registry/default/block/chart-radial-text.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-'use client'
-
-import { TrendingUp } from 'lucide-react'
-import { Label, PolarGrid, PolarRadiusAxis, RadialBar, RadialBarChart } from 'recharts'
-
-import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from 'ui'
-import { ChartConfig, ChartContainer } from 'ui'
-
-export const description = 'A radial chart with text'
-
-const chartData = [{ browser: 'safari', visitors: 200, fill: 'var(--color-safari)' }]
-
-const chartConfig = {
- visitors: {
- label: 'Visitors',
- },
- safari: {
- label: 'Safari',
- color: 'hsl(var(--chart-2))',
- },
-} satisfies ChartConfig
-
-export default function Component() {
- return (
-
-
- Radial Chart - Text
- January - June 2024
-
-
-
-
-
-
-
- {
- if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {
- return (
-
-
- {chartData[0].visitors.toLocaleString()}
-
-
- Visitors
-
-
- )
- }
- }}
- />
-
-
-
-
-
-
- Trending up by 5.2% this month
-
-
- Showing total visitors for the last 6 months
-
-
-
- )
-}
diff --git a/apps/design-system/registry/default/example/logs-bar-chart.tsx b/apps/design-system/registry/default/example/logs-bar-chart.tsx
index 3b0a83db34eff..31c3473e43da8 100644
--- a/apps/design-system/registry/default/example/logs-bar-chart.tsx
+++ b/apps/design-system/registry/default/example/logs-bar-chart.tsx
@@ -16,7 +16,7 @@ export default function LogsBarChartDemo() {
}).reverse()
return (
-
+
)
diff --git a/apps/docs/content/troubleshooting/realtime-debugging-with-logger.mdx b/apps/docs/content/troubleshooting/realtime-debugging-with-logger.mdx
index c41e43d897894..34b07c2d6baab 100644
--- a/apps/docs/content/troubleshooting/realtime-debugging-with-logger.mdx
+++ b/apps/docs/content/troubleshooting/realtime-debugging-with-logger.mdx
@@ -1,10 +1,8 @@
---
title = "Debug Realtime with Logger and Log Levels"
-github_url = ""
date_created = "2025-11-28T00:00:00+00:00"
topics = [ "realtime" ]
keywords = [ "debug", "logger", "log_level", "troubleshooting", "diagnostics" ]
-database_id = ""
---
## What are logger and log_level parameters?
diff --git a/apps/docs/content/troubleshooting/realtime-heartbeat-messages.mdx b/apps/docs/content/troubleshooting/realtime-heartbeat-messages.mdx
index eb121cab7a301..6ebf1fe579df6 100644
--- a/apps/docs/content/troubleshooting/realtime-heartbeat-messages.mdx
+++ b/apps/docs/content/troubleshooting/realtime-heartbeat-messages.mdx
@@ -1,10 +1,8 @@
---
title = "Understanding and Monitoring Realtime Heartbeats"
-github_url = ""
date_created = "2025-11-28T00:00:00+00:00"
topics = [ "realtime" ]
keywords = [ "heartbeat", "connection", "websocket", "keep-alive", "timeout", "onHeartbeat", "heartbeatCallback", "reconnect" ]
-database_id = ""
---
## What are heartbeat messages?
diff --git a/apps/docs/content/troubleshooting/realtime-too-many-channels-error.mdx b/apps/docs/content/troubleshooting/realtime-too-many-channels-error.mdx
index af7bcdb05439f..ad1848d23e89f 100644
--- a/apps/docs/content/troubleshooting/realtime-too-many-channels-error.mdx
+++ b/apps/docs/content/troubleshooting/realtime-too-many-channels-error.mdx
@@ -1,10 +1,8 @@
---
title = "Fixing the TooManyChannels Error"
-github_url = ""
date_created = "2025-11-28T00:00:00+00:00"
topics = [ "realtime" ]
keywords = [ "channels", "useEffect", "react", "memory leak", "quota", "TooManyChannels", "ChannelRateLimitReached", "unsubscribe", "cleanup" ]
-database_id = ""
---
{/* supa-mdx-lint-disable Rule003Spelling */}
diff --git a/apps/docs/features/directives/CodeSample.test.ts b/apps/docs/features/directives/CodeSample.test.ts
index 3c8e83df2fb3f..459927fbd5e92 100644
--- a/apps/docs/features/directives/CodeSample.test.ts
+++ b/apps/docs/features/directives/CodeSample.test.ts
@@ -1,4 +1,4 @@
-import { afterAll, beforeAll, describe, it, expect, vi } from 'vitest'
+import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'
import { stripIndent } from 'common-tags'
import { fromMarkdown } from 'mdast-util-from-markdown'
@@ -593,35 +593,35 @@ Some more text.
const users = [
{ id: 1, name: 'John', email: 'john@example.com' },
{ id: 2, name: 'Jane' },
- ];
+ ]
function getUserById(id) {
- return users.find((user) => user.id === id);
+ return users.find((user) => user.id === id)
}
function createUser(name, email) {
- const newId = Math.max(...users.map((u) => u.id)) + 1;
- const newUser = { id: newId, name };
+ const newId = Math.max(...users.map((u) => u.id)) + 1
+ const newUser = { id: newId, name }
if (email) {
- newUser.email = email;
+ newUser.email = email
}
- users.push(newUser);
- return newUser;
+ users.push(newUser)
+ return newUser
}
class UserManager {
- users = [];
+ users = []
constructor(initialUsers = []) {
- this.users = initialUsers;
+ this.users = initialUsers
}
addUser(user) {
- this.users.push(user);
+ this.users.push(user)
}
getUsers() {
- return [...this.users];
+ return [...this.users]
}
}
\`\`\`
@@ -698,33 +698,33 @@ Some more text.
const users = [
{ id: 1, name: 'John', email: 'john@example.com' },
{ id: 2, name: 'Jane' },
- ];
+ ]
// ...
function createUser(name, email) {
- const newId = Math.max(...users.map((u) => u.id)) + 1;
- const newUser = { id: newId, name };
+ const newId = Math.max(...users.map((u) => u.id)) + 1
+ const newUser = { id: newId, name }
if (email) {
- newUser.email = email;
+ newUser.email = email
}
- users.push(newUser);
- return newUser;
+ users.push(newUser)
+ return newUser
}
class UserManager {
- users = [];
+ users = []
constructor(initialUsers = []) {
- this.users = initialUsers;
+ this.users = initialUsers
}
addUser(user) {
- this.users.push(user);
+ this.users.push(user)
}
getUsers() {
- return [...this.users];
+ return [...this.users]
}
}
\`\`\`
diff --git a/apps/docs/features/directives/CodeSample.ts b/apps/docs/features/directives/CodeSample.ts
index dc505c0bda1ba..04242278d6d41 100644
--- a/apps/docs/features/directives/CodeSample.ts
+++ b/apps/docs/features/directives/CodeSample.ts
@@ -33,12 +33,13 @@
import * as acorn from 'acorn'
import tsPlugin from 'acorn-typescript'
-import { type DefinitionContent, type BlockContent, type Code, type Root } from 'mdast'
+import amaro from 'amaro'
+import { type BlockContent, type Code, type DefinitionContent, type Root } from 'mdast'
import type { MdxJsxAttributeValueExpression, MdxJsxFlowElement } from 'mdast-util-mdx-jsx'
import assert from 'node:assert'
import { readFile } from 'node:fs/promises'
import { join } from 'node:path'
-import { removeTypes } from 'remove-types'
+import prettier from 'prettier'
import { type Parent } from 'unist'
import { visitParents } from 'unist-util-visit-parents'
import { z, type SafeParseError } from 'zod'
@@ -260,7 +261,11 @@ async function rewriteNodes(contentMap: Map
{
})
const formId = 'project-postgres-config'
- const hiddenSchema = ['auth', 'pgbouncer', 'hooks', 'extensions']
+ const hiddenSchema = [
+ 'auth',
+ 'pgbouncer',
+ 'hooks',
+ 'extensions',
+ 'vault',
+ 'storage',
+ 'realtime',
+ 'pgsodium',
+ 'pgsodium_masks',
+ ]
const { can: canUpdatePostgrestConfig, isSuccess: isPermissionsLoaded } =
useAsyncCheckPermissions(PermissionAction.UPDATE, 'custom_config_postgrest')
diff --git a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/ForeignKeySelector/ForeignKeySelector.tsx b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/ForeignKeySelector/ForeignKeySelector.tsx
index 2dd441c345d6f..273e3315df8f1 100644
--- a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/ForeignKeySelector/ForeignKeySelector.tsx
+++ b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/ForeignKeySelector/ForeignKeySelector.tsx
@@ -77,7 +77,7 @@ export const ForeignKeySelector = ({
includeColumns: false,
})
- const { data: selectedTable, isPending: isLoadingSelectedTable } = useTableQuery(
+ const { data: selectedTable, isLoading: isLoadingSelectedTable } = useTableQuery(
{
projectRef: project?.ref,
connectionString: project?.connectionString,
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index b23ac13078d36..302e884e8a481 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -11,7 +11,7 @@ services:
studio:
container_name: supabase-studio
- image: supabase/studio:2025.11.26-sha-8f096b5
+ image: supabase/studio:2025.12.09-sha-434634f
restart: unless-stopped
healthcheck:
test:
@@ -173,7 +173,7 @@ services:
rest:
container_name: supabase-rest
- image: postgrest/postgrest:v13.0.7
+ image: postgrest/postgrest:v14.1
restart: unless-stopped
depends_on:
db:
@@ -197,7 +197,7 @@ services:
realtime:
# This container name looks inconsistent but is correct because realtime constructs tenant id by parsing the subdomain
container_name: realtime-dev.supabase-realtime
- image: supabase/realtime:v2.65.3
+ image: supabase/realtime:v2.68.0
restart: unless-stopped
depends_on:
db:
@@ -235,7 +235,7 @@ services:
# To use S3 backed storage: docker compose -f docker-compose.yml -f docker-compose.s3.yml up
storage:
container_name: supabase-storage
- image: supabase/storage-api:v1.32.0
+ image: supabase/storage-api:v1.33.0
restart: unless-stopped
volumes:
- ./volumes/storage:/var/lib/storage:z
@@ -320,7 +320,7 @@ services:
functions:
container_name: supabase-edge-functions
- image: supabase/edge-runtime:v1.69.25
+ image: supabase/edge-runtime:v1.69.28
restart: unless-stopped
volumes:
- ./volumes/functions:/home/deno/functions:Z
@@ -344,7 +344,7 @@ services:
analytics:
container_name: supabase-analytics
- image: supabase/logflare:1.26.13
+ image: supabase/logflare:1.26.25
restart: unless-stopped
ports:
- 4000:4000
diff --git a/e2e/studio/playwright.config.ts b/e2e/studio/playwright.config.ts
index 8573e988dfe72..d8d2677353e87 100644
--- a/e2e/studio/playwright.config.ts
+++ b/e2e/studio/playwright.config.ts
@@ -41,7 +41,7 @@ export default defineConfig({
maxFailures: 3,
// Due to rate API rate limits run tests in serial mode on platform.
fullyParallel: !env.IS_PLATFORM,
- workers: env.IS_PLATFORM ? 1 : 5,
+ workers: env.IS_PLATFORM ? 1 : 3,
use: {
baseURL: env.STUDIO_URL,
screenshot: 'off',
diff --git a/packages/pg-meta/src/pg-format/reserved.ts b/packages/pg-meta/src/pg-format/reserved.ts
index 42e45df2e5a5a..bb639661b9161 100644
--- a/packages/pg-meta/src/pg-format/reserved.ts
+++ b/packages/pg-meta/src/pg-format/reserved.ts
@@ -33,7 +33,9 @@ export const POSTGRESQL_RESERVED_WORDS = new Set([
'CHECK',
'COALESCE',
'COLLATE',
+ 'COLLATION',
'COLUMN',
+ 'CONCURRENTLY',
'CONSTRAINT',
'CREATE',
'CREDENTIALS',
@@ -41,16 +43,18 @@ export const POSTGRESQL_RESERVED_WORDS = new Set([
'CURRENT_CATALOG',
'CURRENT_DATE',
'CURRENT_ROLE',
+ 'CURRENT_SCHEMA',
'CURRENT_TIME',
'CURRENT_TIMESTAMP',
- 'CURRENT_USER',
'CURRENT_USER_ID',
+ 'CURRENT_USER',
'DEC',
'DECIMAL',
'DEFAULT',
'DEFERRABLE',
'DEFLATE',
'DEFRAG',
+ 'DELETE',
'DELTA',
'DELTA32K',
'DESC',
@@ -91,6 +95,7 @@ export const POSTGRESQL_RESERVED_WORDS = new Set([
'INITIALLY',
'INNER',
'INOUT',
+ 'INSERT',
'INT',
'INTEGER',
'INTERSECT',
@@ -99,7 +104,6 @@ export const POSTGRESQL_RESERVED_WORDS = new Set([
'IS',
'ISNULL',
'JOIN',
- 'JSON',
'JSON_ARRAY',
'JSON_ARRAYAGG',
'JSON_EXISTS',
@@ -110,6 +114,7 @@ export const POSTGRESQL_RESERVED_WORDS = new Set([
'JSON_SERIALIZE',
'JSON_TABLE',
'JSON_VALUE',
+ 'JSON',
'LATERAL',
'LEADING',
'LEAST',
@@ -179,9 +184,10 @@ export const POSTGRESQL_RESERVED_WORDS = new Set([
'SUBSTRING',
'SYMMETRIC',
'SYSDATE',
- 'SYSTEM',
'SYSTEM_USER',
+ 'SYSTEM',
'TABLE',
+ 'TABLESAMPLE',
'TAG',
'TDES',
'TEXT255',
@@ -198,6 +204,7 @@ export const POSTGRESQL_RESERVED_WORDS = new Set([
'TRUNCATECOLUMNS',
'UNION',
'UNIQUE',
+ 'UPDATE',
'USER',
'USING',
'VALUES',
diff --git a/packages/pg-meta/test/pg-format.test.ts b/packages/pg-meta/test/pg-format.test.ts
new file mode 100644
index 0000000000000..23eca848f267a
--- /dev/null
+++ b/packages/pg-meta/test/pg-format.test.ts
@@ -0,0 +1,141 @@
+import { describe, expect, test } from 'vitest'
+import { ident, literal } from '../src/pg-format'
+
+describe('pg-format', () => {
+ describe('ident', () => {
+ describe('reserved keywords', () => {
+ test('should quote "collation" reserved keyword', () => {
+ expect(ident('collation')).toBe('"collation"')
+ expect(ident('COLLATION')).toBe('"COLLATION"')
+ expect(ident('Collation')).toBe('"Collation"')
+ })
+
+ test('should quote other reserved keywords', () => {
+ expect(ident('select')).toBe('"select"')
+ expect(ident('from')).toBe('"from"')
+ expect(ident('where')).toBe('"where"')
+ expect(ident('order')).toBe('"order"')
+ expect(ident('group')).toBe('"group"')
+ expect(ident('table')).toBe('"table"')
+ expect(ident('column')).toBe('"column"')
+ expect(ident('create')).toBe('"create"')
+ expect(ident('insert')).toBe('"insert"')
+ expect(ident('update')).toBe('"update"')
+ expect(ident('delete')).toBe('"delete"')
+ })
+
+ test('should not quote non-reserved identifiers', () => {
+ expect(ident('normal_column')).toBe('normal_column')
+ expect(ident('my_table')).toBe('my_table')
+ expect(ident('user_id')).toBe('user_id')
+ expect(ident('_private')).toBe('_private')
+ expect(ident('col1')).toBe('col1')
+ })
+
+ test('should quote identifiers with special characters', () => {
+ expect(ident('column with spaces')).toBe('"column with spaces"')
+ expect(ident('column-with-dashes')).toBe('"column-with-dashes"')
+ expect(ident('column.with.dots')).toBe('"column.with.dots"')
+ expect(ident('column$with$dollar')).toBe('column$with$dollar')
+ })
+
+ test('should handle double quotes in identifiers', () => {
+ expect(ident('quoted"column')).toBe('"quoted""column"')
+ expect(ident('"already quoted"')).toBe('"""already quoted"""')
+ })
+
+ test('should handle camelCase identifiers', () => {
+ expect(ident('camelCaseColumn')).toBe('"camelCaseColumn"')
+ expect(ident('PascalCase')).toBe('"PascalCase"')
+ })
+
+ test('should handle identifiers starting with numbers', () => {
+ expect(ident('123column')).toBe('"123column"')
+ expect(ident('1st_column')).toBe('"1st_column"')
+ })
+ })
+
+ describe('edge cases', () => {
+ test('should throw error for null or undefined', () => {
+ expect(() => ident(null)).toThrow('SQL identifier cannot be null or undefined')
+ expect(() => ident(undefined)).toThrow('SQL identifier cannot be null or undefined')
+ })
+
+ test('should handle boolean values', () => {
+ expect(ident(true)).toBe('"t"')
+ expect(ident(false)).toBe('"f"')
+ })
+
+ test('should handle arrays', () => {
+ expect(ident(['col1', 'col2'])).toBe('col1,col2')
+ expect(ident(['collation', 'select'])).toBe('"collation","select"')
+ })
+
+ test('should throw error for nested arrays', () => {
+ expect(() => ident([['col1']])).toThrow(
+ 'Nested array to grouped list conversion is not supported for SQL identifier'
+ )
+ })
+
+ test('should throw error for objects', () => {
+ expect(() => ident({ name: 'test' })).toThrow('SQL identifier cannot be an object')
+ })
+ })
+ })
+
+ describe('literal', () => {
+ test('should handle null and undefined', () => {
+ expect(literal(null)).toBe('NULL')
+ expect(literal(undefined)).toBe('NULL')
+ })
+
+ test('should handle strings', () => {
+ expect(literal('simple string')).toBe("'simple string'")
+ expect(literal("string with 'quotes'")).toBe("'string with ''quotes'''")
+ expect(literal('string with "double quotes"')).toBe('\'string with "double quotes"\'')
+ })
+
+ test('should handle numbers', () => {
+ expect(literal(123)).toBe('123')
+ expect(literal(0)).toBe('0')
+ expect(literal(-42)).toBe('-42')
+ expect(literal(3.14)).toBe('3.14')
+ })
+
+ test('should handle booleans', () => {
+ expect(literal(true)).toBe("'t'")
+ expect(literal(false)).toBe("'f'")
+ })
+
+ test('should handle special number values', () => {
+ expect(literal(Number.POSITIVE_INFINITY)).toBe("'Infinity'")
+ expect(literal(Number.NEGATIVE_INFINITY)).toBe("'-Infinity'")
+ expect(literal(Number.NaN)).toBe("'NaN'")
+ })
+
+ test('should handle bigint', () => {
+ expect(literal(BigInt(123))).toBe('123')
+ expect(literal(BigInt('9007199254740991'))).toBe('9007199254740991')
+ })
+
+ test('should handle dates', () => {
+ const date = new Date('2024-01-01T00:00:00Z')
+ expect(literal(date)).toBe("'2024-01-01 00:00:00.000+00'")
+ })
+
+ test('should handle arrays', () => {
+ expect(literal([1, 2, 3])).toBe('1,2,3')
+ expect(literal(['a', 'b', 'c'])).toBe("'a','b','c'")
+ })
+
+ test('should handle objects as JSON', () => {
+ expect(literal({ name: 'test' })).toBe('\'{"name":"test"}\'::jsonb')
+ expect(literal({ id: 1, name: 'test' })).toBe('\'{"id":1,"name":"test"}\'::jsonb')
+ })
+
+ test('should handle strings with backslashes', () => {
+ expect(literal('path\\to\\file')).toBe("E'path\\\\to\\\\file'")
+ expect(literal('C:\\Users\\test')).toBe("E'C:\\\\Users\\\\test'")
+ })
+ })
+})
diff --git a/packages/pg-meta/test/query/table-row-query.test.ts b/packages/pg-meta/test/query/table-row-query.test.ts
index 8a48b97539122..3d6b55e837e30 100644
--- a/packages/pg-meta/test/query/table-row-query.test.ts
+++ b/packages/pg-meta/test/query/table-row-query.test.ts
@@ -1752,4 +1752,98 @@ describe('Table Row Query', () => {
expect(largeRowCustom.PPG).toHaveLength(10) // multi-dimentional array are truncated
expect(largeRowCustom.ACC).toHaveLength(10)
})
+
+ withTestDatabase('should handle reserved keyword "collation" as column name', async (db) => {
+ // Create a table with a column named "collation" (a PostgreSQL reserved keyword)
+ await db.executeQuery(`
+ CREATE TABLE IF NOT EXISTS "public"."test" (
+ id SERIAL PRIMARY KEY,
+ "collation" TEXT
+ );
+
+ DELETE FROM "public"."test";
+ INSERT INTO "public"."test" ("collation")
+ VALUES
+ ('value1'),
+ ('value2'),
+ ('value3');
+ `)
+
+ // Get table metadata
+ const { sql: tablesSql, zod: tablesZod } = pgMeta.tables.list()
+ const tables = tablesZod.parse(await db.executeQuery(tablesSql))
+ const testTable = tables.find((table) => table.name === 'test')
+
+ expect(testTable).toBeDefined()
+
+ // Generate SQL - this should properly quote the "collation" column name
+ const sql = getTableRowsSql({
+ table: testTable!,
+ page: 1,
+ limit: 100,
+ })
+
+ // Verify SQL generation - the "collation" column should be properly quoted
+ expect(sql).toMatchInlineSnapshot(`
+ "with _base_query as (select * from public.test order by test.id asc nulls last limit 100 offset 0)
+ select id,case
+ when octet_length("collation"::text) > 10240
+ then left("collation"::text, 10240) || '...'
+ else "collation"::text
+ end as "collation" from _base_query;"
+ `)
+
+ // Execute the generated SQL and verify the results
+ const queryResult = await db.executeQuery(sql)
+ expect(queryResult.length).toBe(3)
+ expect(queryResult[0].collation).toBe('value1')
+ expect(queryResult[1].collation).toBe('value2')
+ expect(queryResult[2].collation).toBe('value3')
+
+ // Test with ORDER BY on the collation column
+ const sqlWithOrder = getTableRowsSql({
+ table: testTable!,
+ page: 1,
+ limit: 100,
+ sorts: [{ table: 'test', column: 'collation', ascending: true, nullsFirst: false }],
+ })
+
+ // Verify the ORDER BY clause properly quotes the collation column
+ expect(sqlWithOrder).toMatchInlineSnapshot(`
+ "with _base_query as (select * from public.test order by test."collation" asc nulls last limit 100 offset 0)
+ select id,case
+ when octet_length("collation"::text) > 10240
+ then left("collation"::text, 10240) || '...'
+ else "collation"::text
+ end as "collation" from _base_query;"
+ `)
+
+ const queryResultWithOrder = await db.executeQuery(sqlWithOrder)
+ expect(queryResultWithOrder.length).toBe(3)
+ expect(queryResultWithOrder[0].collation).toBe('value1')
+ expect(queryResultWithOrder[1].collation).toBe('value2')
+ expect(queryResultWithOrder[2].collation).toBe('value3')
+
+ // Test with FILTER on the collation column
+ const sqlWithFilter = getTableRowsSql({
+ table: testTable!,
+ page: 1,
+ limit: 100,
+ filters: [{ column: 'collation', operator: '=', value: 'value2' }],
+ })
+
+ // Verify the WHERE clause properly quotes the collation column
+ expect(sqlWithFilter).toMatchInlineSnapshot(`
+ "with _base_query as (select * from public.test where "collation" = 'value2' order by test.id asc nulls last limit 100 offset 0)
+ select id,case
+ when octet_length("collation"::text) > 10240
+ then left("collation"::text, 10240) || '...'
+ else "collation"::text
+ end as "collation" from _base_query;"
+ `)
+
+ const queryResultWithFilter = await db.executeQuery(sqlWithFilter)
+ expect(queryResultWithFilter.length).toBe(1)
+ expect(queryResultWithFilter[0].collation).toBe('value2')
+ })
})
diff --git a/packages/ui-patterns/package.json b/packages/ui-patterns/package.json
index d63410dd7e3b1..915a6e99e924c 100644
--- a/packages/ui-patterns/package.json
+++ b/packages/ui-patterns/package.json
@@ -605,11 +605,16 @@
"./MetricCard": {
"import": "./src/MetricCard/index.tsx",
"types": "./src/MetricCard/index.tsx"
+ },
+ "./Chart": {
+ "import": "./src/Chart/index.tsx",
+ "types": "./src/Chart/index.tsx"
}
},
"dependencies": {
"@hookform/resolvers": "^3.1.1",
"@monaco-editor/react": "^4.6.0",
+ "@radix-ui/react-slot": "^1.2.4",
"@radix-ui/react-visually-hidden": "^1.1.3",
"@std/toml": "jsr:^1.0.11",
"@supabase/sql-to-rest": "^0.1.6",
diff --git a/packages/ui-patterns/src/Chart/charts/chart-bar.tsx b/packages/ui-patterns/src/Chart/charts/chart-bar.tsx
new file mode 100644
index 0000000000000..a55bbf7001a3d
--- /dev/null
+++ b/packages/ui-patterns/src/Chart/charts/chart-bar.tsx
@@ -0,0 +1,230 @@
+'use client'
+
+import { useState, ReactNode } from 'react'
+import {
+ Bar,
+ Cell,
+ BarChart as RechartBarChart,
+ XAxis,
+ YAxis,
+ ReferenceArea,
+ CartesianGrid,
+} from 'recharts'
+import type { CategoricalChartState } from 'recharts/types/chart/types'
+import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent, cn } from 'ui'
+import dayjs from 'dayjs'
+import { useTheme } from 'next-themes'
+
+const CHART_COLORS = {
+ TICK: 'hsl(var(--background-overlay-hover))',
+ AXIS: 'hsl(var(--background-overlay-hover))',
+ BRAND: 'hsl(var(--brand-default))',
+ BRAND_HOVER: 'hsl(var(--brand-500))',
+}
+
+export type ChartBarTick = {
+ timestamp: string
+ [key: string]: string | number
+}
+
+export type ChartHighlight = {
+ handleMouseDown: (e: { activeLabel?: string; coordinates?: string }) => void
+ handleMouseMove: (e: { activeLabel?: string; coordinates?: string }) => void
+ handleMouseUp: (e: { chartX?: number; chartY?: number }) => void
+ coordinates: { left?: string; right?: string }
+ clearHighlight?: () => void
+}
+
+export type ChartHighlightAction = {
+ id: string
+ label: string | ((ctx: { start: string; end: string; clear: () => void }) => string)
+ icon?: ReactNode
+ isDisabled?: (ctx: { start: string; end: string; clear: () => void }) => boolean
+ onSelect: (ctx: { start: string; end: string; clear: () => void }) => void
+}
+
+export interface ChartBarProps {
+ data: ChartBarTick[]
+ dataKey: string
+ config?: ChartConfig
+ onBarClick?: (datum: ChartBarTick, tooltipData?: CategoricalChartState) => void
+ DateTimeFormat?: string
+ isFullHeight?: boolean
+ className?: string
+ color?: string
+ hoverColor?: string
+ chartHighlight?: ChartHighlight
+ updateDateRange?: (from: string, to: string) => void
+ highlightActions?: ChartHighlightAction[]
+ syncId?: string
+ showHighlightArea?: boolean
+ cursor?: string
+ showGrid?: boolean
+ showYAxis?: boolean
+ YAxisProps?: {
+ tick?: boolean
+ tickFormatter?: (value: any) => string
+ width?: number
+ [key: string]: any
+ }
+}
+
+export const ChartBar = ({
+ data,
+ dataKey,
+ config,
+ onBarClick,
+ DateTimeFormat = 'MMM D, YYYY, hh:mma',
+ isFullHeight = false,
+ className,
+ color = CHART_COLORS.BRAND,
+ hoverColor = CHART_COLORS.BRAND_HOVER,
+ chartHighlight,
+ updateDateRange,
+ highlightActions,
+ syncId,
+ showHighlightArea = true,
+ cursor,
+ showGrid = false,
+ showYAxis = false,
+ YAxisProps,
+}: ChartBarProps) => {
+ const [focusDataIndex, setFocusDataIndex] = useState(null)
+ const { resolvedTheme } = useTheme()
+ const isDarkMode = resolvedTheme?.includes('dark')
+
+ if (data.length === 0) {
+ return null
+ }
+
+ const chartConfig: ChartConfig = config || {
+ [dataKey]: {
+ label: dataKey,
+ },
+ }
+
+ const showHighlightActions =
+ showHighlightArea &&
+ chartHighlight?.coordinates.left &&
+ chartHighlight?.coordinates.right &&
+ chartHighlight?.coordinates.left !== chartHighlight?.coordinates.right
+
+ const chartCursor = cursor || (chartHighlight ? 'crosshair' : 'default')
+
+ const yAxisConfig = {
+ tick: showYAxis,
+ hide: !showYAxis,
+ tickMargin: showYAxis ? YAxisProps?.tickMargin ?? 4 : 0,
+ width: showYAxis ? YAxisProps?.width ?? undefined : 0,
+ axisLine: { stroke: CHART_COLORS.AXIS },
+ tickLine: { stroke: CHART_COLORS.AXIS },
+ ...YAxisProps,
+ }
+
+ const margin = {
+ top: 0,
+ right: 0,
+ left: showYAxis ? -40 : 0,
+ bottom: 0,
+ }
+
+ return (
+
+
+ {
+ if (e.activeTooltipIndex !== focusDataIndex) {
+ setFocusDataIndex(e.activeTooltipIndex)
+ }
+
+ if (chartHighlight) {
+ const activeTimestamp = data[e.activeTooltipIndex]?.timestamp
+ chartHighlight.handleMouseMove({
+ activeLabel: activeTimestamp?.toString(),
+ coordinates: e.activeLabel,
+ })
+ }
+ }}
+ onMouseDown={(e: any) => {
+ if (chartHighlight && e.activeTooltipIndex !== undefined) {
+ const activeTimestamp = data[e.activeTooltipIndex]?.timestamp
+ chartHighlight.handleMouseDown({
+ activeLabel: activeTimestamp?.toString(),
+ coordinates: e.activeLabel,
+ })
+ }
+ }}
+ onMouseUp={(e: any) => {
+ if (chartHighlight) {
+ chartHighlight.handleMouseUp({
+ chartX: e?.chartX,
+ chartY: e?.chartY,
+ })
+ }
+ }}
+ onMouseLeave={() => {
+ setFocusDataIndex(null)
+ if (chartHighlight?.clearHighlight) {
+ chartHighlight.clearHighlight()
+ }
+ }}
+ onClick={(tooltipData) => {
+ const datum = tooltipData?.activePayload?.[0]?.payload
+ if (onBarClick) onBarClick(datum, tooltipData)
+ }}
+ >
+ {showGrid && }
+
+
+ dayjs(v).format(DateTimeFormat)}
+ />
+ }
+ />
+ {/* Selection highlight area */}
+ {showHighlightActions && (
+
+ )}
+
+ {data?.map((_entry: ChartBarTick, index: number) => (
+ |
+ ))}
+
+
+
+ {data && data.length > 0 && (
+
+ {dayjs(data[0]['timestamp']).format(DateTimeFormat)}
+ {dayjs(data[data.length - 1]?.['timestamp']).format(DateTimeFormat)}
+
+ )}
+
+ )
+}
diff --git a/packages/ui-patterns/src/Chart/charts/chart-line.tsx b/packages/ui-patterns/src/Chart/charts/chart-line.tsx
new file mode 100644
index 0000000000000..2acf85578c495
--- /dev/null
+++ b/packages/ui-patterns/src/Chart/charts/chart-line.tsx
@@ -0,0 +1,230 @@
+'use client'
+
+import { useState, ReactNode } from 'react'
+import {
+ Area,
+ AreaChart as RechartAreaChart,
+ XAxis,
+ YAxis,
+ ReferenceArea,
+ CartesianGrid,
+} from 'recharts'
+import type { CategoricalChartState } from 'recharts/types/chart/types'
+import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent, cn } from 'ui'
+import dayjs from 'dayjs'
+import { useTheme } from 'next-themes'
+
+const CHART_COLORS = {
+ TICK: 'hsl(var(--background-overlay-hover))',
+ AXIS: 'hsl(var(--background-overlay-hover))',
+ BRAND: 'hsl(var(--brand-default))',
+ BRAND_HOVER: 'hsl(var(--brand-500))',
+}
+
+export type ChartLineTick = {
+ timestamp: string
+ [key: string]: string | number
+}
+
+export type ChartHighlight = {
+ handleMouseDown: (e: { activeLabel?: string; coordinates?: string }) => void
+ handleMouseMove: (e: { activeLabel?: string; coordinates?: string }) => void
+ handleMouseUp: (e: { chartX?: number; chartY?: number }) => void
+ coordinates: { left?: string; right?: string }
+ clearHighlight?: () => void
+}
+
+export type ChartHighlightAction = {
+ id: string
+ label: string | ((ctx: { start: string; end: string; clear: () => void }) => string)
+ icon?: ReactNode
+ isDisabled?: (ctx: { start: string; end: string; clear: () => void }) => boolean
+ onSelect: (ctx: { start: string; end: string; clear: () => void }) => void
+}
+
+export interface ChartLineProps {
+ data: ChartLineTick[]
+ dataKey: string
+ config?: ChartConfig
+ onLineClick?: (datum: ChartLineTick, tooltipData?: CategoricalChartState) => void
+ DateTimeFormat?: string
+ isFullHeight?: boolean
+ className?: string
+ color?: string
+ hoverColor?: string
+ chartHighlight?: ChartHighlight
+ updateDateRange?: (from: string, to: string) => void
+ highlightActions?: ChartHighlightAction[]
+ syncId?: string
+ showHighlightArea?: boolean
+ cursor?: string
+ showGrid?: boolean
+ showYAxis?: boolean
+ YAxisProps?: {
+ tick?: boolean
+ tickFormatter?: (value: any) => string
+ width?: number
+ [key: string]: any
+ }
+ strokeWidth?: number
+}
+
+export const ChartLine = ({
+ data,
+ dataKey,
+ config,
+ onLineClick,
+ DateTimeFormat = 'MMM D, YYYY, hh:mma',
+ isFullHeight = false,
+ className,
+ color = CHART_COLORS.BRAND,
+ hoverColor = CHART_COLORS.BRAND_HOVER,
+ chartHighlight,
+ updateDateRange,
+ highlightActions,
+ syncId,
+ showHighlightArea = true,
+ cursor,
+ showGrid = false,
+ showYAxis = false,
+ YAxisProps,
+ strokeWidth = 1.5,
+}: ChartLineProps) => {
+ const [focusDataIndex, setFocusDataIndex] = useState(null)
+ const { resolvedTheme } = useTheme()
+ const isDarkMode = resolvedTheme?.includes('dark')
+
+ if (data.length === 0) {
+ return null
+ }
+
+ const chartConfig: ChartConfig = config || {
+ [dataKey]: {
+ label: dataKey,
+ },
+ }
+
+ const showHighlightActions =
+ showHighlightArea &&
+ chartHighlight?.coordinates.left &&
+ chartHighlight?.coordinates.right &&
+ chartHighlight?.coordinates.left !== chartHighlight?.coordinates.right
+
+ const chartCursor = cursor || (chartHighlight ? 'crosshair' : 'default')
+
+ const yAxisConfig = {
+ tick: showYAxis,
+ hide: !showYAxis,
+ tickMargin: showYAxis ? YAxisProps?.tickMargin ?? 4 : 0,
+ width: showYAxis ? YAxisProps?.width ?? undefined : 0,
+ axisLine: { stroke: CHART_COLORS.AXIS },
+ tickLine: { stroke: CHART_COLORS.AXIS },
+ ...YAxisProps,
+ }
+
+ const margin = {
+ top: 0,
+ right: 0,
+ left: showYAxis ? -40 : 0,
+ bottom: 0,
+ }
+
+ return (
+
+
+ {
+ if (e.activeTooltipIndex !== focusDataIndex) {
+ setFocusDataIndex(e.activeTooltipIndex)
+ }
+
+ if (chartHighlight) {
+ const activeTimestamp = data[e.activeTooltipIndex]?.timestamp
+ chartHighlight.handleMouseMove({
+ activeLabel: activeTimestamp?.toString(),
+ coordinates: e.activeLabel,
+ })
+ }
+ }}
+ onMouseDown={(e: any) => {
+ if (chartHighlight && e.activeTooltipIndex !== undefined) {
+ const activeTimestamp = data[e.activeTooltipIndex]?.timestamp
+ chartHighlight.handleMouseDown({
+ activeLabel: activeTimestamp?.toString(),
+ coordinates: e.activeLabel,
+ })
+ }
+ }}
+ onMouseUp={(e: any) => {
+ if (chartHighlight) {
+ chartHighlight.handleMouseUp({
+ chartX: e?.chartX,
+ chartY: e?.chartY,
+ })
+ }
+ }}
+ onMouseLeave={() => {
+ setFocusDataIndex(null)
+ if (chartHighlight?.clearHighlight) {
+ chartHighlight.clearHighlight()
+ }
+ }}
+ onClick={(tooltipData) => {
+ const datum = tooltipData?.activePayload?.[0]?.payload
+ if (onLineClick) onLineClick(datum, tooltipData)
+ }}
+ >
+ {showGrid && }
+
+
+ dayjs(v).format(DateTimeFormat)}
+ />
+ }
+ />
+ {/* Selection highlight area */}
+ {showHighlightActions && (
+
+ )}
+
+
+
+ {data && data.length > 0 && (
+
+ {dayjs(data[0]['timestamp']).format(DateTimeFormat)}
+ {dayjs(data[data.length - 1]?.['timestamp']).format(DateTimeFormat)}
+
+ )}
+
+ )
+}
diff --git a/packages/ui-patterns/src/Chart/index.tsx b/packages/ui-patterns/src/Chart/index.tsx
new file mode 100644
index 0000000000000..6ad5bd1f72491
--- /dev/null
+++ b/packages/ui-patterns/src/Chart/index.tsx
@@ -0,0 +1,611 @@
+'use client'
+
+import * as React from 'react'
+import { useContext, useState, useMemo, useRef } from 'react'
+import { Slot } from '@radix-ui/react-slot'
+import {
+ Button,
+ Card,
+ Tooltip,
+ TooltipContent,
+ TooltipTrigger,
+ Skeleton,
+ ChartContainer,
+ cn,
+} from 'ui'
+import { HelpCircle, Loader2 } from 'lucide-react'
+import Link from 'next/link'
+import {
+ BarChart,
+ Bar,
+ XAxis,
+ YAxis,
+ ResponsiveContainer,
+ Area,
+ AreaChart,
+ Tooltip as RechartsTooltip,
+ TooltipProps as RechartsTooltipProps,
+} from 'recharts'
+import dayjs from 'dayjs'
+
+/* Chart Config */
+export type ChartConfig = {
+ [key: string]: {
+ label?: React.ReactNode
+ icon?: React.ComponentType
+ } & (
+ | { color?: string; theme?: never }
+ | { color?: never; theme: Record<'light' | 'dark', string> } /* come back to this */
+ )
+}
+
+/* Chart Context */
+interface ChartContextValue {
+ isLoading?: boolean
+ isDisabled?: boolean
+}
+
+const ChartContext = React.createContext({
+ isLoading: false,
+ isDisabled: false,
+})
+
+export const useChart = () => {
+ return useContext(ChartContext)
+}
+
+/* Chart Base */
+interface ChartProps extends React.HTMLAttributes {
+ children: React.ReactNode
+ isLoading?: boolean
+ isDisabled?: boolean
+ className?: string
+}
+
+const Chart = React.forwardRef(
+ ({ children, isLoading = false, isDisabled = false, className, ...props }, ref) => {
+ return (
+
+
+ {children}
+
+
+ )
+ }
+)
+Chart.displayName = 'Chart'
+
+/* Chart Card */
+interface ChartCardProps extends React.HTMLAttributes {
+ asChild?: boolean
+ children: React.ReactNode
+ className?: string
+}
+
+const ChartCard = React.forwardRef(
+ ({ children, className, asChild, ...props }, ref) => {
+ const Comp = asChild ? Slot : Card
+ return (
+
+ {children}
+
+ )
+ }
+)
+ChartCard.displayName = 'ChartCard'
+
+/* Chart Header Components */
+interface ChartHeaderProps extends React.HTMLAttributes {
+ align?: 'start' | 'center'
+ children: React.ReactNode
+}
+
+const ChartHeader = React.forwardRef(
+ ({ children, className, align = 'center', ...props }, ref) => {
+ return (
+
+ {children}
+
+ )
+ }
+)
+ChartHeader.displayName = 'ChartHeader'
+
+interface ChartTitleProps extends React.HTMLAttributes {
+ children: React.ReactNode
+ tooltip?: string
+}
+
+const ChartTitle = React.forwardRef(
+ ({ children, className, tooltip, ...props }, ref) => {
+ return (
+
+ {children}
+ {tooltip && (
+
+
+
+
+ {tooltip}
+
+ )}
+
+ )
+ }
+)
+ChartTitle.displayName = 'ChartTitle'
+
+export type ChartAction = {
+ label: string
+ icon?: React.ReactNode
+ onClick?: () => void
+ href?: string
+ type?: 'button' | 'link'
+ className?: string
+}
+
+interface ChartActionsProps extends React.HTMLAttributes {
+ actions?: ChartAction[]
+ children?: React.ReactNode
+}
+
+const ChartActions = React.forwardRef(
+ ({ actions, children, className, ...props }, ref) => {
+ if (children) {
+ return (
+
+ {children}
+
+ )
+ }
+
+ if (actions && actions.length > 0) {
+ return (
+
+ {actions.map((action, index) => {
+ const isLink = !!action.href
+
+ return (
+
+
+
+ {isLink ? (
+
+ {action.icon}
+ {action.label}
+
+ ) : (
+ <>
+ {action.icon}
+ {action.label}
+ >
+ )}
+
+
+ {action.label}
+
+ )
+ })}
+
+ )
+ }
+
+ return null
+ }
+)
+ChartActions.displayName = 'ChartActions'
+
+/* Chart Metric */
+interface ChartMetricProps extends React.HTMLAttributes {
+ label: string
+ value: string | number | null | undefined
+ diffValue?: string | number | null | undefined
+ status?: 'positive' | 'negative' | 'warning' | 'default'
+ align?: 'start' | 'end'
+ tooltip?: string
+ className?: string
+}
+
+const ChartMetric = React.forwardRef(
+ ({ label, value, diffValue, className, status, align = 'start', tooltip, ...props }, ref) => {
+ const { isLoading } = useChart()
+
+ const { variant, formattedDiffValue } = useMemo(() => {
+ if (diffValue === null || diffValue === undefined) {
+ return { variant: 'default' as const, formattedDiffValue: null }
+ }
+
+ const numValue = typeof diffValue === 'string' ? parseFloat(diffValue) : diffValue
+
+ if (isNaN(numValue)) {
+ return { variant: 'default' as const, formattedDiffValue: String(diffValue) }
+ }
+
+ const variant: 'positive' | 'negative' | 'default' =
+ numValue > 0 ? 'positive' : numValue < 0 ? 'negative' : 'default'
+
+ const formattedDiffValue = numValue > 0 ? `+${diffValue}` : String(diffValue)
+
+ return { variant, formattedDiffValue }
+ }, [diffValue])
+
+ return (
+
+
+ {status && (
+
+ )}
+
+ {label}
+ {tooltip && (
+
+
+
+
+ {tooltip}
+
+ )}
+
+
+
+ {isLoading ? : value}
+
+ {diffValue !== null && diffValue !== undefined && !isLoading && (
+
{formattedDiffValue}
+ )}
+
+ )
+ }
+)
+ChartMetric.displayName = 'ChartMetric'
+
+/* Chart Content */
+interface ChartContentProps extends React.HTMLAttributes {
+ children: React.ReactNode
+ className?: string
+ isEmpty?: boolean
+ emptyState?: React.ReactNode
+ loadingState?: React.ReactNode
+ disabledState?: React.ReactNode
+ disabledActions?: ChartAction[]
+}
+
+const ChartContent = React.forwardRef(
+ (
+ {
+ children,
+ className,
+ isEmpty = false,
+ emptyState,
+ loadingState,
+ disabledState,
+ disabledActions,
+ ...props
+ },
+ ref
+ ) => {
+ const { isLoading, isDisabled } = useChart()
+ let content: React.ReactNode
+
+ if (isDisabled) {
+ content = disabledState
+ } else if (isLoading) {
+ content = loadingState
+ } else if (isEmpty) {
+ content = emptyState
+ } else {
+ content = children
+ }
+
+ return (
+
+ {content}
+
+ )
+ }
+)
+ChartContent.displayName = 'ChartContent'
+
+/* Chart Empty State */
+interface ChartEmptyStateProps extends React.HTMLAttributes {
+ className?: string
+ icon?: React.ReactNode
+ title: string
+ description: string
+}
+
+const ChartEmptyState = React.forwardRef(
+ ({ className, icon, title, description, ...props }, ref) => {
+ return (
+
+ {icon && (
+
+ {icon}
+
+ )}
+
{title}
+
{description}
+
+ )
+ }
+)
+ChartEmptyState.displayName = 'ChartEmptyState'
+
+/* Chart Loading State */
+const ChartLoadingState = () => {
+ return (
+
+
+
+ )
+}
+ChartLoadingState.displayName = 'ChartLoadingState'
+
+/* Chart Disabled State */
+type ChartDisabledStateActions = {
+ icon?: React.ReactNode
+ label: string
+ href?: string
+ onClick?: () => void
+ type?: 'button' | 'link'
+ className?: string
+}
+interface ChartDisabledStateProps extends React.HTMLAttributes {
+ icon?: React.ReactNode
+ label: string
+ description: string
+ actions?: ChartDisabledStateActions[]
+}
+
+const ChartDisabledState = ({ icon, label, description, actions }: ChartDisabledStateProps) => {
+ const [isHoveringButton, setIsHoveringButton] = useState(false)
+ const startDate = '2025-01-01'
+
+ const getExpDemoChartData = useMemo(() => {
+ return new Array(20).fill(0).map((_, index) => ({
+ period_start: new Date(startDate).getTime() + index * 1000,
+ demo: Math.floor(Math.pow(1.25, index) * 10),
+ max_demo: 1000,
+ }))
+ }, [])
+
+ const getDemoChartData = useRef(
+ new Array(20).fill(0).map((_, index) => ({
+ period_start: new Date(startDate).getTime() + index * 1000,
+ demo: Math.floor(Math.random() * 10) + 1,
+ max_demo: 1000,
+ }))
+ )
+
+ const demoData = isHoveringButton ? getExpDemoChartData : getDemoChartData.current
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+ {icon && (
+
+ {icon}
+
+ )}
+
{label}
+
{description}
+ {actions && actions.length > 0 && (
+
+ {actions.map((action, index) => (
+ setIsHoveringButton(true)}
+ onMouseLeave={() => setIsHoveringButton(false)}
+ >
+ {action.href ? {action.label} : <>{action.label}>}
+
+ ))}
+
+ )}
+
+ >
+ )
+}
+ChartDisabledState.displayName = 'ChartDisabledState'
+
+/* Chart Footer */
+const chartTableClasses = `[&_tr]:border-b [&_tr]:border-border [&_thead_tr]:!bg-transparent [&_thead_th]:!py-2 [&_thead_th]:h-auto [&_tbody_td]:py-2.5 [&_tbody_td]:text-xs [&_table]:mb-1 [&_table]:border-b [&_table]:border-border`
+
+interface ChartFooterProps extends React.HTMLAttributes {
+ children: React.ReactNode
+}
+
+const ChartFooter = React.forwardRef(
+ ({ children, className, ...props }, ref) => {
+ return (
+
+ {children}
+
+ )
+ }
+)
+ChartFooter.displayName = 'ChartFooter'
+
+/* Metric Chart Components */
+interface ChartValueDifferentialProps extends React.HTMLAttributes {
+ variant?: 'positive' | 'negative' | 'default'
+}
+
+const ChartValueDifferential = React.forwardRef(
+ ({ className, variant = 'default', ...props }, ref) => {
+ const { isLoading } = useChart()
+
+ if (isLoading) {
+ return
+ }
+
+ return (
+
+ )
+ }
+)
+ChartValueDifferential.displayName = 'ChartValueDifferential'
+
+const ChartSparklineTooltip = ({ active, payload, label }: RechartsTooltipProps) => {
+ if (!active || !payload || !payload.length) return null
+
+ const formatTimestamp = (timestamp: string) => {
+ const date = dayjs(timestamp)
+ const hour = date.hour()
+ const period = hour >= 12 ? 'pm' : 'am'
+ const displayHour = hour % 12 || 12
+
+ return `${date.format('MMM D')}, ${displayHour}${period}`
+ }
+
+ return (
+
+ {label && (
+
+ {formatTimestamp(payload[0].payload.timestamp)}
+
+ )}
+
{payload[0].value.toLocaleString(undefined, { maximumFractionDigits: 0 })}
+
+ )
+}
+
+interface ChartSparklineProps extends React.HTMLAttributes {
+ data?: Array<{ value: number; [key: string]: any }>
+ dataKey?: string
+ className?: string
+}
+
+const ChartSparkline = React.forwardRef(
+ ({ className, data, dataKey, ...props }, ref) => {
+ if (!data || data.length === 0) {
+ return null
+ }
+
+ return (
+
+
+
+
+
+
+
+
+
+ } />
+
+
+
+
+ )
+ }
+)
+ChartSparkline.displayName = 'ChartSparkline'
+
+/* Exports */
+export {
+ Chart,
+ ChartCard,
+ ChartHeader,
+ ChartTitle,
+ ChartActions,
+ ChartMetric,
+ ChartContent,
+ ChartEmptyState,
+ ChartLoadingState,
+ ChartDisabledState,
+ ChartFooter,
+ ChartValueDifferential,
+ ChartSparklineTooltip,
+ ChartSparkline,
+}
+export { ChartBar, type ChartBarTick, type ChartBarProps } from './charts/chart-bar'
+export { ChartLine, type ChartLineTick, type ChartLineProps } from './charts/chart-line'
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 9477b821c8aa4..13cb583684fa6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -583,9 +583,6 @@ importers:
remark-math:
specifier: ^6.0.0
version: 6.0.0(supports-color@8.1.1)
- remove-types:
- specifier: 1.0.0
- version: 1.0.0(supports-color@8.1.1)
server-only:
specifier: ^0.0.1
version: 0.0.1
@@ -677,6 +674,9 @@ importers:
'@types/uuid':
specifier: ^10.0.0
version: 10.0.0
+ amaro:
+ specifier: ^1.1.5
+ version: 1.1.5
api-types:
specifier: workspace:*
version: link:../../packages/api-types
@@ -2462,6 +2462,9 @@ importers:
'@monaco-editor/react':
specifier: ^4.6.0
version: 4.6.0(monaco-editor@0.52.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@radix-ui/react-slot':
+ specifier: ^1.2.4
+ version: 1.2.4(@types/react@18.3.3)(react@18.3.1)
'@radix-ui/react-visually-hidden':
specifier: ^1.1.3
version: 1.2.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -3079,10 +3082,6 @@ packages:
resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-plugin-utils@7.26.5':
- resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-plugin-utils@7.27.1':
resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
engines: {node: '>=6.9.0'}
@@ -3123,12 +3122,6 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/plugin-syntax-decorators@7.25.9':
- resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
'@babel/plugin-syntax-import-assertions@7.26.0':
resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==}
engines: {node: '>=6.9.0'}
@@ -3165,12 +3158,6 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-typescript@7.27.0':
- resolution: {integrity: sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
'@babel/plugin-transform-typescript@7.28.0':
resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==}
engines: {node: '>=6.9.0'}
@@ -7321,6 +7308,15 @@ packages:
'@types/react':
optional: true
+ '@radix-ui/react-slot@1.2.4':
+ resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
'@radix-ui/react-switch@1.0.3':
resolution: {integrity: sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==}
peerDependencies:
@@ -9846,6 +9842,10 @@ packages:
alien-signals@2.0.7:
resolution: {integrity: sha512-wE7y3jmYeb0+h6mr5BOovuqhFv22O/MV9j5p0ndJsa7z1zJNPGQ4ph5pQk/kTTCWRC3xsA4SmtwmkzQO+7NCNg==}
+ amaro@1.1.5:
+ resolution: {integrity: sha512-oo72OEYOSfSPe+96V+jh41gaFWfl9HddXFAHMFM+emjdZkzbtcg0bFWoYaWf8IMlqmZ0VM8F13frI8Ktt3+ADA==}
+ engines: {node: '>=22'}
+
amazon-cognito-identity-js@6.3.15:
resolution: {integrity: sha512-G2mzTlGYHKYh9oZDO0Gk94xVQ4iY9GYWBaYScbDYvz05ps6dqi0IvdNx1Lxi7oA3tjS5X+mUN7/svFJJdOB9YA==}
@@ -16943,9 +16943,6 @@ packages:
remove-trailing-spaces@1.0.9:
resolution: {integrity: sha512-xzG7w5IRijvIkHIjDk65URsJJ7k4J95wmcArY5PRcmjldIOl7oTvG8+X2Ag690R7SfwiOcHrWZKVc1Pp5WIOzA==}
- remove-types@1.0.0:
- resolution: {integrity: sha512-G7Hk1Q+UJ5DvlNAoJZObxANkBZGiGdp589rVcTW/tYqJWJ5rwfraSnKSQaETN8Epaytw8J40nS/zC7bcHGv36w==}
-
rename-keys@1.2.0:
resolution: {integrity: sha512-U7XpAktpbSgHTRSNRrjKSrjYkZKuhUukfoBlXWXUExCAqhzh1TU3BDRAfJmarcl5voKS+pbKU9MvyLWKZ4UEEg==}
engines: {node: '>= 0.8.0'}
@@ -20529,8 +20526,6 @@ snapshots:
dependencies:
'@babel/types': 7.28.4
- '@babel/helper-plugin-utils@7.26.5': {}
-
'@babel/helper-plugin-utils@7.27.1': {}
'@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4(supports-color@8.1.1))(supports-color@8.1.1)':
@@ -20568,11 +20563,6 @@ snapshots:
dependencies:
'@babel/types': 7.28.4
- '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.28.4(supports-color@8.1.1))':
- dependencies:
- '@babel/core': 7.28.4(supports-color@8.1.1)
- '@babel/helper-plugin-utils': 7.27.1
-
'@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.28.4(supports-color@8.1.1))':
dependencies:
'@babel/core': 7.28.4(supports-color@8.1.1)
@@ -20606,17 +20596,6 @@ snapshots:
'@babel/core': 7.28.4(supports-color@8.1.1)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.28.4(supports-color@8.1.1))(supports-color@8.1.1)':
- dependencies:
- '@babel/core': 7.28.4(supports-color@8.1.1)
- '@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4(supports-color@8.1.1))(supports-color@8.1.1)
- '@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-skip-transparent-expression-wrappers': 7.27.1(supports-color@8.1.1)
- '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4(supports-color@8.1.1))
- transitivePeerDependencies:
- - supports-color
-
'@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.4(supports-color@8.1.1))(supports-color@8.1.1)':
dependencies:
'@babel/core': 7.28.4(supports-color@8.1.1)
@@ -21591,7 +21570,7 @@ snapshots:
'@graphql-codegen/client-preset@4.8.0(encoding@0.1.13)(graphql-sock@1.0.1(graphql@16.11.0))(graphql@16.11.0)':
dependencies:
- '@babel/helper-plugin-utils': 7.26.5
+ '@babel/helper-plugin-utils': 7.27.1
'@babel/template': 7.27.2
'@graphql-codegen/add': 5.0.3(graphql@16.11.0)
'@graphql-codegen/gql-tag-operations': 4.0.17(encoding@0.1.13)(graphql@16.11.0)
@@ -25741,6 +25720,13 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.3
+ '@radix-ui/react-slot@1.2.4(@types/react@18.3.3)(react@18.3.1)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.3)(react@18.3.1)
+ react: 18.3.1
+ optionalDependencies:
+ '@types/react': 18.3.3
+
'@radix-ui/react-switch@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@babel/runtime': 7.26.10
@@ -29253,6 +29239,8 @@ snapshots:
alien-signals@2.0.7: {}
+ amaro@1.1.5: {}
+
amazon-cognito-identity-js@6.3.15(encoding@0.1.13):
dependencies:
'@aws-crypto/sha256-js': 1.2.2
@@ -38017,15 +38005,6 @@ snapshots:
remove-trailing-spaces@1.0.9: {}
- remove-types@1.0.0(supports-color@8.1.1):
- dependencies:
- '@babel/core': 7.28.4(supports-color@8.1.1)
- '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.28.4(supports-color@8.1.1))
- '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.28.4(supports-color@8.1.1))(supports-color@8.1.1)
- prettier: 2.8.8
- transitivePeerDependencies:
- - supports-color
-
rename-keys@1.2.0: {}
repeat-element@1.1.4: {}