Caleb Fahlgren
commited on
Commit
·
08cd799
1
Parent(s):
6b6f639
add duckdb wasm, shadcn chart with hf growth each month
Browse files- app/page.tsx +91 -4
- components/area-chart.tsx +118 -0
- components/ui/card.tsx +79 -0
- components/ui/chart.tsx +363 -0
- package-lock.json +629 -6
- package.json +3 -1
- styles/globals.css +60 -1
app/page.tsx
CHANGED
@@ -1,12 +1,99 @@
|
|
1 |
-
|
2 |
|
3 |
-
import {
|
4 |
-
import {
|
|
|
5 |
|
6 |
export default function IndexPage() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
return (
|
8 |
<section className="container grid items-center gap-6 pb-8 pt-6 md:py-10">
|
9 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
</section>
|
11 |
)
|
12 |
}
|
|
|
1 |
+
"use client"
|
2 |
|
3 |
+
import { AreaChartStacked, ChartDataPoint } from "@/components/area-chart"
|
4 |
+
import { useEffect, useState } from 'react'
|
5 |
+
import * as duckdb from '@duckdb/duckdb-wasm'
|
6 |
|
7 |
export default function IndexPage() {
|
8 |
+
const [db, setDb] = useState<duckdb.AsyncDuckDB | null>(null)
|
9 |
+
const [chartData, setChartData] = useState<ChartDataPoint[]>([])
|
10 |
+
|
11 |
+
useEffect(() => {
|
12 |
+
const initDB = async () => {
|
13 |
+
const CDN_BASE = `https://cdn.jsdelivr.net/npm/@duckdb/duckdb-wasm@next`
|
14 |
+
|
15 |
+
const JSDELIVR_BUNDLES = {
|
16 |
+
mvp: {
|
17 |
+
mainModule: `${CDN_BASE}/dist/duckdb-mvp.wasm`,
|
18 |
+
mainWorker: `${CDN_BASE}/dist/duckdb-browser-mvp.worker.js`
|
19 |
+
},
|
20 |
+
eh: {
|
21 |
+
mainModule: `${CDN_BASE}/dist/duckdb-eh.wasm`,
|
22 |
+
mainWorker: `${CDN_BASE}/dist/duckdb-browser-eh.worker.js`
|
23 |
+
}
|
24 |
+
}
|
25 |
+
|
26 |
+
const bundle = await duckdb.selectBundle(JSDELIVR_BUNDLES)
|
27 |
+
const worker_url = URL.createObjectURL(
|
28 |
+
new Blob([`importScripts("${bundle.mainWorker}");`], { type: 'text/javascript' })
|
29 |
+
)
|
30 |
+
|
31 |
+
const worker = new Worker(worker_url)
|
32 |
+
const logger = new duckdb.ConsoleLogger()
|
33 |
+
const db = new duckdb.AsyncDuckDB(logger, worker)
|
34 |
+
await db.instantiate(bundle.mainModule)
|
35 |
+
|
36 |
+
const conn = await db.connect()
|
37 |
+
|
38 |
+
// create views from hf parquet files
|
39 |
+
await conn.query(`
|
40 |
+
CREATE VIEW models AS SELECT * FROM read_parquet('https://huggingface.co/datasets/cfahlgren1/hub-stats/resolve/refs%2Fconvert%2Fparquet/models/train/0000.parquet?download=true');
|
41 |
+
CREATE VIEW datasets AS SELECT * FROM read_parquet('https://huggingface.co/datasets/cfahlgren1/hub-stats/resolve/refs%2Fconvert%2Fparquet/datasets/train/0000.parquet?download=true');
|
42 |
+
CREATE VIEW spaces AS SELECT * FROM read_parquet('https://huggingface.co/datasets/cfahlgren1/hub-stats/resolve/refs%2Fconvert%2Fparquet/spaces/train/0000.parquet?download=true');
|
43 |
+
`)
|
44 |
+
|
45 |
+
setDb(db)
|
46 |
+
await fetchChartData(db)
|
47 |
+
}
|
48 |
+
|
49 |
+
initDB()
|
50 |
+
}, [])
|
51 |
+
|
52 |
+
const fetchChartData = async (db: duckdb.AsyncDuckDB) => {
|
53 |
+
const conn = await db.connect()
|
54 |
+
|
55 |
+
const result = await conn.query(`
|
56 |
+
WITH all_data AS (
|
57 |
+
SELECT DATE_TRUNC('month', CAST(createdAt AS DATE)) AS month, 'model' AS type FROM models
|
58 |
+
UNION ALL
|
59 |
+
SELECT DATE_TRUNC('month', CAST(createdAt AS DATE)) AS month, 'dataset' AS type FROM datasets
|
60 |
+
UNION ALL
|
61 |
+
SELECT DATE_TRUNC('month', CAST(createdAt AS DATE)) AS month, 'space' AS type FROM spaces
|
62 |
+
)
|
63 |
+
SELECT
|
64 |
+
month,
|
65 |
+
COUNT(*) FILTER (WHERE type = 'model') AS models,
|
66 |
+
COUNT(*) FILTER (WHERE type = 'dataset') AS datasets,
|
67 |
+
COUNT(*) FILTER (WHERE type = 'space') AS spaces
|
68 |
+
FROM all_data
|
69 |
+
GROUP BY month
|
70 |
+
ORDER BY month
|
71 |
+
`)
|
72 |
+
|
73 |
+
const data: ChartDataPoint[] = result.toArray().map(row => ({
|
74 |
+
month: new Date(row.month),
|
75 |
+
models: Number(row.models),
|
76 |
+
datasets: Number(row.datasets),
|
77 |
+
spaces: Number(row.spaces)
|
78 |
+
}))
|
79 |
+
|
80 |
+
console.log(data)
|
81 |
+
|
82 |
+
await conn.close()
|
83 |
+
|
84 |
+
setChartData(data)
|
85 |
+
}
|
86 |
+
|
87 |
return (
|
88 |
<section className="container grid items-center gap-6 pb-8 pt-6 md:py-10">
|
89 |
+
<div className="flex flex-col gap-4">
|
90 |
+
<h1 className="text-3xl text-center font-extrabold leading-tight tracking-tighter md:text-4xl">
|
91 |
+
Hugging Face Hub Stats
|
92 |
+
</h1>
|
93 |
+
</div>
|
94 |
+
<div className="flex flex-col gap-4 max-w-6xl mt-10 w-full mx-auto">
|
95 |
+
{chartData.length > 0 ? <AreaChartStacked data={chartData} /> : <p>Loading...</p>}
|
96 |
+
</div>
|
97 |
</section>
|
98 |
)
|
99 |
}
|
components/area-chart.tsx
ADDED
@@ -0,0 +1,118 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"use client"
|
2 |
+
|
3 |
+
import { Area, AreaChart, CartesianGrid, XAxis } from "recharts"
|
4 |
+
|
5 |
+
import {
|
6 |
+
Card,
|
7 |
+
CardContent,
|
8 |
+
CardDescription,
|
9 |
+
CardHeader,
|
10 |
+
CardTitle,
|
11 |
+
} from "@/components/ui/card"
|
12 |
+
import {
|
13 |
+
ChartConfig,
|
14 |
+
ChartContainer,
|
15 |
+
ChartLegend,
|
16 |
+
ChartLegendContent,
|
17 |
+
ChartTooltip,
|
18 |
+
ChartTooltipContent,
|
19 |
+
} from "@/components/ui/chart"
|
20 |
+
|
21 |
+
export interface ChartDataPoint {
|
22 |
+
month: Date;
|
23 |
+
models: number;
|
24 |
+
datasets: number;
|
25 |
+
spaces: number;
|
26 |
+
}
|
27 |
+
|
28 |
+
interface AreaChartStackedProps {
|
29 |
+
data: ChartDataPoint[];
|
30 |
+
}
|
31 |
+
|
32 |
+
const chartConfig = {
|
33 |
+
models: {
|
34 |
+
label: "Models",
|
35 |
+
color: "hsl(0, 70%, 70%)", // Light red
|
36 |
+
},
|
37 |
+
datasets: {
|
38 |
+
label: "Datasets",
|
39 |
+
color: "hsl(120, 70%, 40%)", // Darker green
|
40 |
+
},
|
41 |
+
spaces: {
|
42 |
+
label: "Spaces",
|
43 |
+
color: "hsl(210, 70%, 70%)", // Light blue
|
44 |
+
},
|
45 |
+
} satisfies ChartConfig
|
46 |
+
|
47 |
+
export function AreaChartStacked({ data }: AreaChartStackedProps) {
|
48 |
+
const sortedData = [...data].sort((a, b) => a.month.getTime() - b.month.getTime());
|
49 |
+
|
50 |
+
return (
|
51 |
+
<Card>
|
52 |
+
<CardHeader>
|
53 |
+
<CardTitle>Hugging Face Hub Growth</CardTitle>
|
54 |
+
<CardDescription>
|
55 |
+
Monthly creation trends for models, datasets, and spaces
|
56 |
+
</CardDescription>
|
57 |
+
</CardHeader>
|
58 |
+
<CardContent>
|
59 |
+
<ChartContainer config={chartConfig}>
|
60 |
+
<AreaChart
|
61 |
+
accessibilityLayer
|
62 |
+
data={sortedData}
|
63 |
+
margin={{
|
64 |
+
left: 12,
|
65 |
+
right: 12,
|
66 |
+
}}
|
67 |
+
>
|
68 |
+
<CartesianGrid vertical={false} />
|
69 |
+
<XAxis
|
70 |
+
dataKey="month"
|
71 |
+
tickLine={false}
|
72 |
+
axisLine={false}
|
73 |
+
tickMargin={8}
|
74 |
+
tickFormatter={(value) => {
|
75 |
+
const date = new Date(value);
|
76 |
+
return date.toLocaleString('default', { month: 'short', year: 'numeric' });
|
77 |
+
}}
|
78 |
+
/>
|
79 |
+
<ChartTooltip
|
80 |
+
cursor={true}
|
81 |
+
content={
|
82 |
+
<ChartTooltipContent
|
83 |
+
indicator="line"
|
84 |
+
hideLabel
|
85 |
+
/>
|
86 |
+
}
|
87 |
+
/>
|
88 |
+
<Area
|
89 |
+
dataKey="spaces"
|
90 |
+
type="natural"
|
91 |
+
fill="hsl(210, 70%, 70%)"
|
92 |
+
fillOpacity={0.4}
|
93 |
+
stroke="hsl(210, 70%, 70%)"
|
94 |
+
stackId="a"
|
95 |
+
/>
|
96 |
+
<Area
|
97 |
+
dataKey="datasets"
|
98 |
+
type="natural"
|
99 |
+
fill="hsl(120, 70%, 40%)"
|
100 |
+
fillOpacity={0.2}
|
101 |
+
stroke="hsl(120, 70%, 40%)"
|
102 |
+
stackId="a"
|
103 |
+
/>
|
104 |
+
<Area
|
105 |
+
dataKey="models"
|
106 |
+
type="natural"
|
107 |
+
fill="hsl(0, 70%, 70%)"
|
108 |
+
fillOpacity={0.4}
|
109 |
+
stroke="hsl(0, 70%, 70%)"
|
110 |
+
stackId="a"
|
111 |
+
/>
|
112 |
+
<ChartLegend content={<ChartLegendContent />} />
|
113 |
+
</AreaChart>
|
114 |
+
</ChartContainer>
|
115 |
+
</CardContent>
|
116 |
+
</Card>
|
117 |
+
)
|
118 |
+
}
|
components/ui/card.tsx
ADDED
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import * as React from "react"
|
2 |
+
|
3 |
+
import { cn } from "@/lib/utils"
|
4 |
+
|
5 |
+
const Card = React.forwardRef<
|
6 |
+
HTMLDivElement,
|
7 |
+
React.HTMLAttributes<HTMLDivElement>
|
8 |
+
>(({ className, ...props }, ref) => (
|
9 |
+
<div
|
10 |
+
ref={ref}
|
11 |
+
className={cn(
|
12 |
+
"rounded-lg border bg-card text-card-foreground shadow-sm",
|
13 |
+
className
|
14 |
+
)}
|
15 |
+
{...props}
|
16 |
+
/>
|
17 |
+
))
|
18 |
+
Card.displayName = "Card"
|
19 |
+
|
20 |
+
const CardHeader = React.forwardRef<
|
21 |
+
HTMLDivElement,
|
22 |
+
React.HTMLAttributes<HTMLDivElement>
|
23 |
+
>(({ className, ...props }, ref) => (
|
24 |
+
<div
|
25 |
+
ref={ref}
|
26 |
+
className={cn("flex flex-col space-y-1.5 p-6", className)}
|
27 |
+
{...props}
|
28 |
+
/>
|
29 |
+
))
|
30 |
+
CardHeader.displayName = "CardHeader"
|
31 |
+
|
32 |
+
const CardTitle = React.forwardRef<
|
33 |
+
HTMLParagraphElement,
|
34 |
+
React.HTMLAttributes<HTMLHeadingElement>
|
35 |
+
>(({ className, ...props }, ref) => (
|
36 |
+
<h3
|
37 |
+
ref={ref}
|
38 |
+
className={cn(
|
39 |
+
"text-2xl font-semibold leading-none tracking-tight",
|
40 |
+
className
|
41 |
+
)}
|
42 |
+
{...props}
|
43 |
+
/>
|
44 |
+
))
|
45 |
+
CardTitle.displayName = "CardTitle"
|
46 |
+
|
47 |
+
const CardDescription = React.forwardRef<
|
48 |
+
HTMLParagraphElement,
|
49 |
+
React.HTMLAttributes<HTMLParagraphElement>
|
50 |
+
>(({ className, ...props }, ref) => (
|
51 |
+
<p
|
52 |
+
ref={ref}
|
53 |
+
className={cn("text-sm text-muted-foreground", className)}
|
54 |
+
{...props}
|
55 |
+
/>
|
56 |
+
))
|
57 |
+
CardDescription.displayName = "CardDescription"
|
58 |
+
|
59 |
+
const CardContent = React.forwardRef<
|
60 |
+
HTMLDivElement,
|
61 |
+
React.HTMLAttributes<HTMLDivElement>
|
62 |
+
>(({ className, ...props }, ref) => (
|
63 |
+
<div ref={ref} className={cn("p-6 pt-0", className)} {...props} />
|
64 |
+
))
|
65 |
+
CardContent.displayName = "CardContent"
|
66 |
+
|
67 |
+
const CardFooter = React.forwardRef<
|
68 |
+
HTMLDivElement,
|
69 |
+
React.HTMLAttributes<HTMLDivElement>
|
70 |
+
>(({ className, ...props }, ref) => (
|
71 |
+
<div
|
72 |
+
ref={ref}
|
73 |
+
className={cn("flex items-center p-6 pt-0", className)}
|
74 |
+
{...props}
|
75 |
+
/>
|
76 |
+
))
|
77 |
+
CardFooter.displayName = "CardFooter"
|
78 |
+
|
79 |
+
export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
|
components/ui/chart.tsx
ADDED
@@ -0,0 +1,363 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import * as React from "react"
|
2 |
+
import * as RechartsPrimitive from "recharts"
|
3 |
+
|
4 |
+
import { cn } from "@/lib/utils"
|
5 |
+
|
6 |
+
// Format: { THEME_NAME: CSS_SELECTOR }
|
7 |
+
const THEMES = { light: "", dark: ".dark" } as const
|
8 |
+
|
9 |
+
export type ChartConfig = {
|
10 |
+
[k in string]: {
|
11 |
+
label?: React.ReactNode
|
12 |
+
icon?: React.ComponentType
|
13 |
+
} & (
|
14 |
+
| { color?: string; theme?: never }
|
15 |
+
| { color?: never; theme: Record<keyof typeof THEMES, string> }
|
16 |
+
)
|
17 |
+
}
|
18 |
+
|
19 |
+
type ChartContextProps = {
|
20 |
+
config: ChartConfig
|
21 |
+
}
|
22 |
+
|
23 |
+
const ChartContext = React.createContext<ChartContextProps | null>(null)
|
24 |
+
|
25 |
+
function useChart() {
|
26 |
+
const context = React.useContext(ChartContext)
|
27 |
+
|
28 |
+
if (!context) {
|
29 |
+
throw new Error("useChart must be used within a <ChartContainer />")
|
30 |
+
}
|
31 |
+
|
32 |
+
return context
|
33 |
+
}
|
34 |
+
|
35 |
+
const ChartContainer = React.forwardRef<
|
36 |
+
HTMLDivElement,
|
37 |
+
React.ComponentProps<"div"> & {
|
38 |
+
config: ChartConfig
|
39 |
+
children: React.ComponentProps<
|
40 |
+
typeof RechartsPrimitive.ResponsiveContainer
|
41 |
+
>["children"]
|
42 |
+
}
|
43 |
+
>(({ id, className, children, config, ...props }, ref) => {
|
44 |
+
const uniqueId = React.useId()
|
45 |
+
const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`
|
46 |
+
|
47 |
+
return (
|
48 |
+
<ChartContext.Provider value={{ config }}>
|
49 |
+
<div
|
50 |
+
data-chart={chartId}
|
51 |
+
ref={ref}
|
52 |
+
className={cn(
|
53 |
+
"flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",
|
54 |
+
className
|
55 |
+
)}
|
56 |
+
{...props}
|
57 |
+
>
|
58 |
+
<ChartStyle id={chartId} config={config} />
|
59 |
+
<RechartsPrimitive.ResponsiveContainer>
|
60 |
+
{children}
|
61 |
+
</RechartsPrimitive.ResponsiveContainer>
|
62 |
+
</div>
|
63 |
+
</ChartContext.Provider>
|
64 |
+
)
|
65 |
+
})
|
66 |
+
ChartContainer.displayName = "Chart"
|
67 |
+
|
68 |
+
const ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {
|
69 |
+
const colorConfig = Object.entries(config).filter(
|
70 |
+
([_, config]) => config.theme || config.color
|
71 |
+
)
|
72 |
+
|
73 |
+
if (!colorConfig.length) {
|
74 |
+
return null
|
75 |
+
}
|
76 |
+
|
77 |
+
return (
|
78 |
+
<style
|
79 |
+
dangerouslySetInnerHTML={{
|
80 |
+
__html: Object.entries(THEMES)
|
81 |
+
.map(
|
82 |
+
([theme, prefix]) => `
|
83 |
+
${prefix} [data-chart=${id}] {
|
84 |
+
${colorConfig
|
85 |
+
.map(([key, itemConfig]) => {
|
86 |
+
const color =
|
87 |
+
itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||
|
88 |
+
itemConfig.color
|
89 |
+
return color ? ` --color-${key}: ${color};` : null
|
90 |
+
})
|
91 |
+
.join("\n")}
|
92 |
+
}
|
93 |
+
`
|
94 |
+
)
|
95 |
+
.join("\n"),
|
96 |
+
}}
|
97 |
+
/>
|
98 |
+
)
|
99 |
+
}
|
100 |
+
|
101 |
+
const ChartTooltip = RechartsPrimitive.Tooltip
|
102 |
+
|
103 |
+
const ChartTooltipContent = React.forwardRef<
|
104 |
+
HTMLDivElement,
|
105 |
+
React.ComponentProps<typeof RechartsPrimitive.Tooltip> &
|
106 |
+
React.ComponentProps<"div"> & {
|
107 |
+
hideLabel?: boolean
|
108 |
+
hideIndicator?: boolean
|
109 |
+
indicator?: "line" | "dot" | "dashed"
|
110 |
+
nameKey?: string
|
111 |
+
labelKey?: string
|
112 |
+
}
|
113 |
+
>(
|
114 |
+
(
|
115 |
+
{
|
116 |
+
active,
|
117 |
+
payload,
|
118 |
+
className,
|
119 |
+
indicator = "dot",
|
120 |
+
hideLabel = false,
|
121 |
+
hideIndicator = false,
|
122 |
+
label,
|
123 |
+
labelFormatter,
|
124 |
+
labelClassName,
|
125 |
+
formatter,
|
126 |
+
color,
|
127 |
+
nameKey,
|
128 |
+
labelKey,
|
129 |
+
},
|
130 |
+
ref
|
131 |
+
) => {
|
132 |
+
const { config } = useChart()
|
133 |
+
|
134 |
+
const tooltipLabel = React.useMemo(() => {
|
135 |
+
if (hideLabel || !payload?.length) {
|
136 |
+
return null
|
137 |
+
}
|
138 |
+
|
139 |
+
const [item] = payload
|
140 |
+
const key = `${labelKey || item.dataKey || item.name || "value"}`
|
141 |
+
const itemConfig = getPayloadConfigFromPayload(config, item, key)
|
142 |
+
const value =
|
143 |
+
!labelKey && typeof label === "string"
|
144 |
+
? config[label as keyof typeof config]?.label || label
|
145 |
+
: itemConfig?.label
|
146 |
+
|
147 |
+
if (labelFormatter) {
|
148 |
+
return (
|
149 |
+
<div className={cn("font-medium", labelClassName)}>
|
150 |
+
{labelFormatter(value, payload)}
|
151 |
+
</div>
|
152 |
+
)
|
153 |
+
}
|
154 |
+
|
155 |
+
if (!value) {
|
156 |
+
return null
|
157 |
+
}
|
158 |
+
|
159 |
+
return <div className={cn("font-medium", labelClassName)}>{value}</div>
|
160 |
+
}, [
|
161 |
+
label,
|
162 |
+
labelFormatter,
|
163 |
+
payload,
|
164 |
+
hideLabel,
|
165 |
+
labelClassName,
|
166 |
+
config,
|
167 |
+
labelKey,
|
168 |
+
])
|
169 |
+
|
170 |
+
if (!active || !payload?.length) {
|
171 |
+
return null
|
172 |
+
}
|
173 |
+
|
174 |
+
const nestLabel = payload.length === 1 && indicator !== "dot"
|
175 |
+
|
176 |
+
return (
|
177 |
+
<div
|
178 |
+
ref={ref}
|
179 |
+
className={cn(
|
180 |
+
"grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",
|
181 |
+
className
|
182 |
+
)}
|
183 |
+
>
|
184 |
+
{!nestLabel ? tooltipLabel : null}
|
185 |
+
<div className="grid gap-1.5">
|
186 |
+
{payload.map((item, index) => {
|
187 |
+
const key = `${nameKey || item.name || item.dataKey || "value"}`
|
188 |
+
const itemConfig = getPayloadConfigFromPayload(config, item, key)
|
189 |
+
const indicatorColor = color || item.payload.fill || item.color
|
190 |
+
|
191 |
+
return (
|
192 |
+
<div
|
193 |
+
key={item.dataKey}
|
194 |
+
className={cn(
|
195 |
+
"flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",
|
196 |
+
indicator === "dot" && "items-center"
|
197 |
+
)}
|
198 |
+
>
|
199 |
+
{formatter && item?.value !== undefined && item.name ? (
|
200 |
+
formatter(item.value, item.name, item, index, item.payload)
|
201 |
+
) : (
|
202 |
+
<>
|
203 |
+
{itemConfig?.icon ? (
|
204 |
+
<itemConfig.icon />
|
205 |
+
) : (
|
206 |
+
!hideIndicator && (
|
207 |
+
<div
|
208 |
+
className={cn(
|
209 |
+
"shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",
|
210 |
+
{
|
211 |
+
"h-2.5 w-2.5": indicator === "dot",
|
212 |
+
"w-1": indicator === "line",
|
213 |
+
"w-0 border-[1.5px] border-dashed bg-transparent":
|
214 |
+
indicator === "dashed",
|
215 |
+
"my-0.5": nestLabel && indicator === "dashed",
|
216 |
+
}
|
217 |
+
)}
|
218 |
+
style={
|
219 |
+
{
|
220 |
+
"--color-bg": indicatorColor,
|
221 |
+
"--color-border": indicatorColor,
|
222 |
+
} as React.CSSProperties
|
223 |
+
}
|
224 |
+
/>
|
225 |
+
)
|
226 |
+
)}
|
227 |
+
<div
|
228 |
+
className={cn(
|
229 |
+
"flex flex-1 justify-between leading-none",
|
230 |
+
nestLabel ? "items-end" : "items-center"
|
231 |
+
)}
|
232 |
+
>
|
233 |
+
<div className="grid gap-1.5">
|
234 |
+
{nestLabel ? tooltipLabel : null}
|
235 |
+
<span className="text-muted-foreground">
|
236 |
+
{itemConfig?.label || item.name}
|
237 |
+
</span>
|
238 |
+
</div>
|
239 |
+
{item.value && (
|
240 |
+
<span className="font-mono font-medium tabular-nums text-foreground">
|
241 |
+
{item.value.toLocaleString()}
|
242 |
+
</span>
|
243 |
+
)}
|
244 |
+
</div>
|
245 |
+
</>
|
246 |
+
)}
|
247 |
+
</div>
|
248 |
+
)
|
249 |
+
})}
|
250 |
+
</div>
|
251 |
+
</div>
|
252 |
+
)
|
253 |
+
}
|
254 |
+
)
|
255 |
+
ChartTooltipContent.displayName = "ChartTooltip"
|
256 |
+
|
257 |
+
const ChartLegend = RechartsPrimitive.Legend
|
258 |
+
|
259 |
+
const ChartLegendContent = React.forwardRef<
|
260 |
+
HTMLDivElement,
|
261 |
+
React.ComponentProps<"div"> &
|
262 |
+
Pick<RechartsPrimitive.LegendProps, "payload" | "verticalAlign"> & {
|
263 |
+
hideIcon?: boolean
|
264 |
+
nameKey?: string
|
265 |
+
}
|
266 |
+
>(
|
267 |
+
(
|
268 |
+
{ className, hideIcon = false, payload, verticalAlign = "bottom", nameKey },
|
269 |
+
ref
|
270 |
+
) => {
|
271 |
+
const { config } = useChart()
|
272 |
+
|
273 |
+
if (!payload?.length) {
|
274 |
+
return null
|
275 |
+
}
|
276 |
+
|
277 |
+
return (
|
278 |
+
<div
|
279 |
+
ref={ref}
|
280 |
+
className={cn(
|
281 |
+
"flex items-center justify-center gap-4",
|
282 |
+
verticalAlign === "top" ? "pb-3" : "pt-3",
|
283 |
+
className
|
284 |
+
)}
|
285 |
+
>
|
286 |
+
{payload.map((item) => {
|
287 |
+
const key = `${nameKey || item.dataKey || "value"}`
|
288 |
+
const itemConfig = getPayloadConfigFromPayload(config, item, key)
|
289 |
+
|
290 |
+
return (
|
291 |
+
<div
|
292 |
+
key={item.value}
|
293 |
+
className={cn(
|
294 |
+
"flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"
|
295 |
+
)}
|
296 |
+
>
|
297 |
+
{itemConfig?.icon && !hideIcon ? (
|
298 |
+
<itemConfig.icon />
|
299 |
+
) : (
|
300 |
+
<div
|
301 |
+
className="h-2 w-2 shrink-0 rounded-[2px]"
|
302 |
+
style={{
|
303 |
+
backgroundColor: item.color,
|
304 |
+
}}
|
305 |
+
/>
|
306 |
+
)}
|
307 |
+
{itemConfig?.label}
|
308 |
+
</div>
|
309 |
+
)
|
310 |
+
})}
|
311 |
+
</div>
|
312 |
+
)
|
313 |
+
}
|
314 |
+
)
|
315 |
+
ChartLegendContent.displayName = "ChartLegend"
|
316 |
+
|
317 |
+
// Helper to extract item config from a payload.
|
318 |
+
function getPayloadConfigFromPayload(
|
319 |
+
config: ChartConfig,
|
320 |
+
payload: unknown,
|
321 |
+
key: string
|
322 |
+
) {
|
323 |
+
if (typeof payload !== "object" || payload === null) {
|
324 |
+
return undefined
|
325 |
+
}
|
326 |
+
|
327 |
+
const payloadPayload =
|
328 |
+
"payload" in payload &&
|
329 |
+
typeof payload.payload === "object" &&
|
330 |
+
payload.payload !== null
|
331 |
+
? payload.payload
|
332 |
+
: undefined
|
333 |
+
|
334 |
+
let configLabelKey: string = key
|
335 |
+
|
336 |
+
if (
|
337 |
+
key in payload &&
|
338 |
+
typeof payload[key as keyof typeof payload] === "string"
|
339 |
+
) {
|
340 |
+
configLabelKey = payload[key as keyof typeof payload] as string
|
341 |
+
} else if (
|
342 |
+
payloadPayload &&
|
343 |
+
key in payloadPayload &&
|
344 |
+
typeof payloadPayload[key as keyof typeof payloadPayload] === "string"
|
345 |
+
) {
|
346 |
+
configLabelKey = payloadPayload[
|
347 |
+
key as keyof typeof payloadPayload
|
348 |
+
] as string
|
349 |
+
}
|
350 |
+
|
351 |
+
return configLabelKey in config
|
352 |
+
? config[configLabelKey]
|
353 |
+
: config[key as keyof typeof config]
|
354 |
+
}
|
355 |
+
|
356 |
+
export {
|
357 |
+
ChartContainer,
|
358 |
+
ChartTooltip,
|
359 |
+
ChartTooltipContent,
|
360 |
+
ChartLegend,
|
361 |
+
ChartLegendContent,
|
362 |
+
ChartStyle,
|
363 |
+
}
|
package-lock.json
CHANGED
@@ -8,14 +8,16 @@
|
|
8 |
"name": "next-template",
|
9 |
"version": "0.0.2",
|
10 |
"dependencies": {
|
|
|
11 |
"@radix-ui/react-slot": "^1.0.2",
|
12 |
"class-variance-authority": "^0.4.0",
|
13 |
"clsx": "^1.2.1",
|
14 |
-
"lucide-react": "0.105.0-alpha.4",
|
15 |
"next": "^13.4.8",
|
16 |
"next-themes": "^0.2.1",
|
17 |
"react": "^18.2.0",
|
18 |
"react-dom": "^18.2.0",
|
|
|
19 |
"sharp": "^0.31.3",
|
20 |
"tailwind-merge": "^1.13.2",
|
21 |
"tailwindcss-animate": "^1.0.6"
|
@@ -38,6 +40,26 @@
|
|
38 |
"typescript": "^4.9.5"
|
39 |
}
|
40 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
"node_modules/@alloc/quick-lru": {
|
42 |
"version": "5.2.0",
|
43 |
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
|
@@ -306,6 +328,17 @@
|
|
306 |
"node": ">=6.0.0"
|
307 |
}
|
308 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
309 |
"node_modules/@babel/template": {
|
310 |
"version": "7.24.7",
|
311 |
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz",
|
@@ -355,6 +388,14 @@
|
|
355 |
"node": ">=6.9.0"
|
356 |
}
|
357 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
358 |
"node_modules/@eslint-community/eslint-utils": {
|
359 |
"version": "4.4.0",
|
360 |
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
|
@@ -805,6 +846,70 @@
|
|
805 |
"tslib": "^2.4.0"
|
806 |
}
|
807 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
808 |
"node_modules/@types/json5": {
|
809 |
"version": "0.0.29",
|
810 |
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
|
@@ -817,6 +922,11 @@
|
|
817 |
"integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==",
|
818 |
"dev": true
|
819 |
},
|
|
|
|
|
|
|
|
|
|
|
820 |
"node_modules/@types/prop-types": {
|
821 |
"version": "15.7.12",
|
822 |
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz",
|
@@ -1035,6 +1145,31 @@
|
|
1035 |
"node": ">= 8"
|
1036 |
}
|
1037 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1038 |
"node_modules/arg": {
|
1039 |
"version": "5.0.2",
|
1040 |
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
|
@@ -1055,6 +1190,14 @@
|
|
1055 |
"deep-equal": "^2.0.5"
|
1056 |
}
|
1057 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1058 |
"node_modules/array-buffer-byte-length": {
|
1059 |
"version": "1.0.1",
|
1060 |
"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
|
@@ -1491,6 +1634,84 @@
|
|
1491 |
"node": ">=4"
|
1492 |
}
|
1493 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1494 |
"node_modules/chokidar": {
|
1495 |
"version": "3.6.0",
|
1496 |
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
|
@@ -1610,6 +1831,50 @@
|
|
1610 |
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
1611 |
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
1612 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1613 |
"node_modules/commander": {
|
1614 |
"version": "4.1.1",
|
1615 |
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
|
@@ -1657,8 +1922,117 @@
|
|
1657 |
"node_modules/csstype": {
|
1658 |
"version": "3.1.3",
|
1659 |
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
|
1660 |
-
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
|
1661 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1662 |
},
|
1663 |
"node_modules/damerau-levenshtein": {
|
1664 |
"version": "1.0.8",
|
@@ -1734,6 +2108,11 @@
|
|
1734 |
}
|
1735 |
}
|
1736 |
},
|
|
|
|
|
|
|
|
|
|
|
1737 |
"node_modules/decompress-response": {
|
1738 |
"version": "6.0.0",
|
1739 |
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
|
@@ -1870,6 +2249,15 @@
|
|
1870 |
"node": ">=6.0.0"
|
1871 |
}
|
1872 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1873 |
"node_modules/eastasianwidth": {
|
1874 |
"version": "0.2.0",
|
1875 |
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
@@ -2625,6 +3013,11 @@
|
|
2625 |
"node": ">=0.10.0"
|
2626 |
}
|
2627 |
},
|
|
|
|
|
|
|
|
|
|
|
2628 |
"node_modules/expand-template": {
|
2629 |
"version": "2.0.3",
|
2630 |
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
|
@@ -2639,6 +3032,14 @@
|
|
2639 |
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
2640 |
"dev": true
|
2641 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2642 |
"node_modules/fast-glob": {
|
2643 |
"version": "3.3.2",
|
2644 |
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
|
@@ -2708,6 +3109,17 @@
|
|
2708 |
"node": ">=8"
|
2709 |
}
|
2710 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2711 |
"node_modules/find-up": {
|
2712 |
"version": "5.0.0",
|
2713 |
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
|
@@ -2738,6 +3150,11 @@
|
|
2738 |
"node": "^10.12.0 || >=12.0.0"
|
2739 |
}
|
2740 |
},
|
|
|
|
|
|
|
|
|
|
|
2741 |
"node_modules/flatted": {
|
2742 |
"version": "3.3.1",
|
2743 |
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
|
@@ -3163,6 +3580,14 @@
|
|
3163 |
"node": ">= 0.4"
|
3164 |
}
|
3165 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3166 |
"node_modules/is-arguments": {
|
3167 |
"version": "1.1.1",
|
3168 |
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
|
@@ -3629,6 +4054,14 @@
|
|
3629 |
"node": ">=4"
|
3630 |
}
|
3631 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3632 |
"node_modules/json-buffer": {
|
3633 |
"version": "3.0.1",
|
3634 |
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
|
@@ -3742,6 +4175,21 @@
|
|
3742 |
"url": "https://github.com/sponsors/sindresorhus"
|
3743 |
}
|
3744 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3745 |
"node_modules/lodash.clone": {
|
3746 |
"version": "4.5.0",
|
3747 |
"resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
|
@@ -4222,6 +4670,17 @@
|
|
4222 |
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
|
4223 |
"integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw=="
|
4224 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4225 |
"node_modules/parent-module": {
|
4226 |
"version": "1.0.1",
|
4227 |
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
|
@@ -4535,7 +4994,6 @@
|
|
4535 |
"version": "15.8.1",
|
4536 |
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
|
4537 |
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
|
4538 |
-
"dev": true,
|
4539 |
"dependencies": {
|
4540 |
"loose-envify": "^1.4.0",
|
4541 |
"object-assign": "^4.1.1",
|
@@ -4627,8 +5085,36 @@
|
|
4627 |
"node_modules/react-is": {
|
4628 |
"version": "16.13.1",
|
4629 |
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
4630 |
-
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
|
4631 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4632 |
},
|
4633 |
"node_modules/read-cache": {
|
4634 |
"version": "1.0.0",
|
@@ -4662,6 +5148,44 @@
|
|
4662 |
"node": ">=8.10.0"
|
4663 |
}
|
4664 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4665 |
"node_modules/reflect.getprototypeof": {
|
4666 |
"version": "1.0.6",
|
4667 |
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
|
@@ -4683,6 +5207,11 @@
|
|
4683 |
"url": "https://github.com/sponsors/ljharb"
|
4684 |
}
|
4685 |
},
|
|
|
|
|
|
|
|
|
|
|
4686 |
"node_modules/regexp.prototype.flags": {
|
4687 |
"version": "1.5.2",
|
4688 |
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
|
@@ -4701,6 +5230,14 @@
|
|
4701 |
"url": "https://github.com/sponsors/ljharb"
|
4702 |
}
|
4703 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4704 |
"node_modules/resolve": {
|
4705 |
"version": "1.22.8",
|
4706 |
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
|
@@ -5037,6 +5574,14 @@
|
|
5037 |
"node": ">= 0.4"
|
5038 |
}
|
5039 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5040 |
"node_modules/streamsearch": {
|
5041 |
"version": "1.1.0",
|
5042 |
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
|
@@ -5359,6 +5904,42 @@
|
|
5359 |
"url": "https://github.com/sponsors/ljharb"
|
5360 |
}
|
5361 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5362 |
"node_modules/tailwind-merge": {
|
5363 |
"version": "1.14.0",
|
5364 |
"resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz",
|
@@ -5463,6 +6044,11 @@
|
|
5463 |
"node": ">=0.8"
|
5464 |
}
|
5465 |
},
|
|
|
|
|
|
|
|
|
|
|
5466 |
"node_modules/to-fast-properties": {
|
5467 |
"version": "2.0.0",
|
5468 |
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
@@ -5659,6 +6245,14 @@
|
|
5659 |
"node": ">=4.2.0"
|
5660 |
}
|
5661 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5662 |
"node_modules/unbox-primitive": {
|
5663 |
"version": "1.0.2",
|
5664 |
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
|
@@ -5718,6 +6312,27 @@
|
|
5718 |
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
5719 |
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
|
5720 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5721 |
"node_modules/watchpack": {
|
5722 |
"version": "2.4.0",
|
5723 |
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
|
@@ -5832,6 +6447,14 @@
|
|
5832 |
"node": ">=0.10.0"
|
5833 |
}
|
5834 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5835 |
"node_modules/wrap-ansi": {
|
5836 |
"version": "8.1.0",
|
5837 |
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
|
|
|
8 |
"name": "next-template",
|
9 |
"version": "0.0.2",
|
10 |
"dependencies": {
|
11 |
+
"@duckdb/duckdb-wasm": "^1.28.1-dev106.0",
|
12 |
"@radix-ui/react-slot": "^1.0.2",
|
13 |
"class-variance-authority": "^0.4.0",
|
14 |
"clsx": "^1.2.1",
|
15 |
+
"lucide-react": "^0.105.0-alpha.4",
|
16 |
"next": "^13.4.8",
|
17 |
"next-themes": "^0.2.1",
|
18 |
"react": "^18.2.0",
|
19 |
"react-dom": "^18.2.0",
|
20 |
+
"recharts": "^2.12.7",
|
21 |
"sharp": "^0.31.3",
|
22 |
"tailwind-merge": "^1.13.2",
|
23 |
"tailwindcss-animate": "^1.0.6"
|
|
|
40 |
"typescript": "^4.9.5"
|
41 |
}
|
42 |
},
|
43 |
+
"node_modules/@75lb/deep-merge": {
|
44 |
+
"version": "1.1.1",
|
45 |
+
"resolved": "https://registry.npmjs.org/@75lb/deep-merge/-/deep-merge-1.1.1.tgz",
|
46 |
+
"integrity": "sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==",
|
47 |
+
"dependencies": {
|
48 |
+
"lodash.assignwith": "^4.2.0",
|
49 |
+
"typical": "^7.1.1"
|
50 |
+
},
|
51 |
+
"engines": {
|
52 |
+
"node": ">=12.17"
|
53 |
+
}
|
54 |
+
},
|
55 |
+
"node_modules/@75lb/deep-merge/node_modules/typical": {
|
56 |
+
"version": "7.1.1",
|
57 |
+
"resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz",
|
58 |
+
"integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==",
|
59 |
+
"engines": {
|
60 |
+
"node": ">=12.17"
|
61 |
+
}
|
62 |
+
},
|
63 |
"node_modules/@alloc/quick-lru": {
|
64 |
"version": "5.2.0",
|
65 |
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
|
|
|
328 |
"node": ">=6.0.0"
|
329 |
}
|
330 |
},
|
331 |
+
"node_modules/@babel/runtime": {
|
332 |
+
"version": "7.24.8",
|
333 |
+
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz",
|
334 |
+
"integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==",
|
335 |
+
"dependencies": {
|
336 |
+
"regenerator-runtime": "^0.14.0"
|
337 |
+
},
|
338 |
+
"engines": {
|
339 |
+
"node": ">=6.9.0"
|
340 |
+
}
|
341 |
+
},
|
342 |
"node_modules/@babel/template": {
|
343 |
"version": "7.24.7",
|
344 |
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz",
|
|
|
388 |
"node": ">=6.9.0"
|
389 |
}
|
390 |
},
|
391 |
+
"node_modules/@duckdb/duckdb-wasm": {
|
392 |
+
"version": "1.28.1-dev106.0",
|
393 |
+
"resolved": "https://registry.npmjs.org/@duckdb/duckdb-wasm/-/duckdb-wasm-1.28.1-dev106.0.tgz",
|
394 |
+
"integrity": "sha512-HcA9q/Yq1t8nAIg2rl8DmOTjKy1tAHSdBGHlCcWAm5StsfAjcm+f0STBEH3hmWPk0qEtOJF30OR+GfeyUOP+hA==",
|
395 |
+
"dependencies": {
|
396 |
+
"apache-arrow": "^14.0.1"
|
397 |
+
}
|
398 |
+
},
|
399 |
"node_modules/@eslint-community/eslint-utils": {
|
400 |
"version": "4.4.0",
|
401 |
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
|
|
|
846 |
"tslib": "^2.4.0"
|
847 |
}
|
848 |
},
|
849 |
+
"node_modules/@types/command-line-args": {
|
850 |
+
"version": "5.2.0",
|
851 |
+
"resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz",
|
852 |
+
"integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA=="
|
853 |
+
},
|
854 |
+
"node_modules/@types/command-line-usage": {
|
855 |
+
"version": "5.0.2",
|
856 |
+
"resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz",
|
857 |
+
"integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg=="
|
858 |
+
},
|
859 |
+
"node_modules/@types/d3-array": {
|
860 |
+
"version": "3.2.1",
|
861 |
+
"resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
|
862 |
+
"integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg=="
|
863 |
+
},
|
864 |
+
"node_modules/@types/d3-color": {
|
865 |
+
"version": "3.1.3",
|
866 |
+
"resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
|
867 |
+
"integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="
|
868 |
+
},
|
869 |
+
"node_modules/@types/d3-ease": {
|
870 |
+
"version": "3.0.2",
|
871 |
+
"resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
|
872 |
+
"integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="
|
873 |
+
},
|
874 |
+
"node_modules/@types/d3-interpolate": {
|
875 |
+
"version": "3.0.4",
|
876 |
+
"resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
|
877 |
+
"integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
|
878 |
+
"dependencies": {
|
879 |
+
"@types/d3-color": "*"
|
880 |
+
}
|
881 |
+
},
|
882 |
+
"node_modules/@types/d3-path": {
|
883 |
+
"version": "3.1.0",
|
884 |
+
"resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz",
|
885 |
+
"integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ=="
|
886 |
+
},
|
887 |
+
"node_modules/@types/d3-scale": {
|
888 |
+
"version": "4.0.8",
|
889 |
+
"resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz",
|
890 |
+
"integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==",
|
891 |
+
"dependencies": {
|
892 |
+
"@types/d3-time": "*"
|
893 |
+
}
|
894 |
+
},
|
895 |
+
"node_modules/@types/d3-shape": {
|
896 |
+
"version": "3.1.6",
|
897 |
+
"resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz",
|
898 |
+
"integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==",
|
899 |
+
"dependencies": {
|
900 |
+
"@types/d3-path": "*"
|
901 |
+
}
|
902 |
+
},
|
903 |
+
"node_modules/@types/d3-time": {
|
904 |
+
"version": "3.0.3",
|
905 |
+
"resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz",
|
906 |
+
"integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw=="
|
907 |
+
},
|
908 |
+
"node_modules/@types/d3-timer": {
|
909 |
+
"version": "3.0.2",
|
910 |
+
"resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
|
911 |
+
"integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="
|
912 |
+
},
|
913 |
"node_modules/@types/json5": {
|
914 |
"version": "0.0.29",
|
915 |
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
|
|
|
922 |
"integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==",
|
923 |
"dev": true
|
924 |
},
|
925 |
+
"node_modules/@types/pad-left": {
|
926 |
+
"version": "2.1.1",
|
927 |
+
"resolved": "https://registry.npmjs.org/@types/pad-left/-/pad-left-2.1.1.tgz",
|
928 |
+
"integrity": "sha512-Xd22WCRBydkGSApl5Bw0PhAOHKSVjNL3E3AwzKaps96IMraPqy5BvZIsBVK6JLwdybUzjHnuWVwpDd0JjTfHXA=="
|
929 |
+
},
|
930 |
"node_modules/@types/prop-types": {
|
931 |
"version": "15.7.12",
|
932 |
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz",
|
|
|
1145 |
"node": ">= 8"
|
1146 |
}
|
1147 |
},
|
1148 |
+
"node_modules/apache-arrow": {
|
1149 |
+
"version": "14.0.2",
|
1150 |
+
"resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-14.0.2.tgz",
|
1151 |
+
"integrity": "sha512-EBO2xJN36/XoY81nhLcwCJgFwkboDZeyNQ+OPsG7bCoQjc2BT0aTyH/MR6SrL+LirSNz+cYqjGRlupMMlP1aEg==",
|
1152 |
+
"dependencies": {
|
1153 |
+
"@types/command-line-args": "5.2.0",
|
1154 |
+
"@types/command-line-usage": "5.0.2",
|
1155 |
+
"@types/node": "20.3.0",
|
1156 |
+
"@types/pad-left": "2.1.1",
|
1157 |
+
"command-line-args": "5.2.1",
|
1158 |
+
"command-line-usage": "7.0.1",
|
1159 |
+
"flatbuffers": "23.5.26",
|
1160 |
+
"json-bignum": "^0.0.3",
|
1161 |
+
"pad-left": "^2.1.0",
|
1162 |
+
"tslib": "^2.5.3"
|
1163 |
+
},
|
1164 |
+
"bin": {
|
1165 |
+
"arrow2csv": "bin/arrow2csv.js"
|
1166 |
+
}
|
1167 |
+
},
|
1168 |
+
"node_modules/apache-arrow/node_modules/@types/node": {
|
1169 |
+
"version": "20.3.0",
|
1170 |
+
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.0.tgz",
|
1171 |
+
"integrity": "sha512-cumHmIAf6On83X7yP+LrsEyUOf/YlociZelmpRYaGFydoaPdxdt80MAbu6vWerQT2COCp2nPvHdsbD7tHn/YlQ=="
|
1172 |
+
},
|
1173 |
"node_modules/arg": {
|
1174 |
"version": "5.0.2",
|
1175 |
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
|
|
|
1190 |
"deep-equal": "^2.0.5"
|
1191 |
}
|
1192 |
},
|
1193 |
+
"node_modules/array-back": {
|
1194 |
+
"version": "3.1.0",
|
1195 |
+
"resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz",
|
1196 |
+
"integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==",
|
1197 |
+
"engines": {
|
1198 |
+
"node": ">=6"
|
1199 |
+
}
|
1200 |
+
},
|
1201 |
"node_modules/array-buffer-byte-length": {
|
1202 |
"version": "1.0.1",
|
1203 |
"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
|
|
|
1634 |
"node": ">=4"
|
1635 |
}
|
1636 |
},
|
1637 |
+
"node_modules/chalk-template": {
|
1638 |
+
"version": "0.4.0",
|
1639 |
+
"resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz",
|
1640 |
+
"integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==",
|
1641 |
+
"dependencies": {
|
1642 |
+
"chalk": "^4.1.2"
|
1643 |
+
},
|
1644 |
+
"engines": {
|
1645 |
+
"node": ">=12"
|
1646 |
+
},
|
1647 |
+
"funding": {
|
1648 |
+
"url": "https://github.com/chalk/chalk-template?sponsor=1"
|
1649 |
+
}
|
1650 |
+
},
|
1651 |
+
"node_modules/chalk-template/node_modules/ansi-styles": {
|
1652 |
+
"version": "4.3.0",
|
1653 |
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
1654 |
+
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
1655 |
+
"dependencies": {
|
1656 |
+
"color-convert": "^2.0.1"
|
1657 |
+
},
|
1658 |
+
"engines": {
|
1659 |
+
"node": ">=8"
|
1660 |
+
},
|
1661 |
+
"funding": {
|
1662 |
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
1663 |
+
}
|
1664 |
+
},
|
1665 |
+
"node_modules/chalk-template/node_modules/chalk": {
|
1666 |
+
"version": "4.1.2",
|
1667 |
+
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
1668 |
+
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
1669 |
+
"dependencies": {
|
1670 |
+
"ansi-styles": "^4.1.0",
|
1671 |
+
"supports-color": "^7.1.0"
|
1672 |
+
},
|
1673 |
+
"engines": {
|
1674 |
+
"node": ">=10"
|
1675 |
+
},
|
1676 |
+
"funding": {
|
1677 |
+
"url": "https://github.com/chalk/chalk?sponsor=1"
|
1678 |
+
}
|
1679 |
+
},
|
1680 |
+
"node_modules/chalk-template/node_modules/color-convert": {
|
1681 |
+
"version": "2.0.1",
|
1682 |
+
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
1683 |
+
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
1684 |
+
"dependencies": {
|
1685 |
+
"color-name": "~1.1.4"
|
1686 |
+
},
|
1687 |
+
"engines": {
|
1688 |
+
"node": ">=7.0.0"
|
1689 |
+
}
|
1690 |
+
},
|
1691 |
+
"node_modules/chalk-template/node_modules/color-name": {
|
1692 |
+
"version": "1.1.4",
|
1693 |
+
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
1694 |
+
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
1695 |
+
},
|
1696 |
+
"node_modules/chalk-template/node_modules/has-flag": {
|
1697 |
+
"version": "4.0.0",
|
1698 |
+
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
1699 |
+
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
1700 |
+
"engines": {
|
1701 |
+
"node": ">=8"
|
1702 |
+
}
|
1703 |
+
},
|
1704 |
+
"node_modules/chalk-template/node_modules/supports-color": {
|
1705 |
+
"version": "7.2.0",
|
1706 |
+
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
1707 |
+
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
1708 |
+
"dependencies": {
|
1709 |
+
"has-flag": "^4.0.0"
|
1710 |
+
},
|
1711 |
+
"engines": {
|
1712 |
+
"node": ">=8"
|
1713 |
+
}
|
1714 |
+
},
|
1715 |
"node_modules/chokidar": {
|
1716 |
"version": "3.6.0",
|
1717 |
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
|
|
|
1831 |
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
1832 |
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
1833 |
},
|
1834 |
+
"node_modules/command-line-args": {
|
1835 |
+
"version": "5.2.1",
|
1836 |
+
"resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz",
|
1837 |
+
"integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==",
|
1838 |
+
"dependencies": {
|
1839 |
+
"array-back": "^3.1.0",
|
1840 |
+
"find-replace": "^3.0.0",
|
1841 |
+
"lodash.camelcase": "^4.3.0",
|
1842 |
+
"typical": "^4.0.0"
|
1843 |
+
},
|
1844 |
+
"engines": {
|
1845 |
+
"node": ">=4.0.0"
|
1846 |
+
}
|
1847 |
+
},
|
1848 |
+
"node_modules/command-line-usage": {
|
1849 |
+
"version": "7.0.1",
|
1850 |
+
"resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.1.tgz",
|
1851 |
+
"integrity": "sha512-NCyznE//MuTjwi3y84QVUGEOT+P5oto1e1Pk/jFPVdPPfsG03qpTIl3yw6etR+v73d0lXsoojRpvbru2sqePxQ==",
|
1852 |
+
"dependencies": {
|
1853 |
+
"array-back": "^6.2.2",
|
1854 |
+
"chalk-template": "^0.4.0",
|
1855 |
+
"table-layout": "^3.0.0",
|
1856 |
+
"typical": "^7.1.1"
|
1857 |
+
},
|
1858 |
+
"engines": {
|
1859 |
+
"node": ">=12.20.0"
|
1860 |
+
}
|
1861 |
+
},
|
1862 |
+
"node_modules/command-line-usage/node_modules/array-back": {
|
1863 |
+
"version": "6.2.2",
|
1864 |
+
"resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz",
|
1865 |
+
"integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==",
|
1866 |
+
"engines": {
|
1867 |
+
"node": ">=12.17"
|
1868 |
+
}
|
1869 |
+
},
|
1870 |
+
"node_modules/command-line-usage/node_modules/typical": {
|
1871 |
+
"version": "7.1.1",
|
1872 |
+
"resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz",
|
1873 |
+
"integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==",
|
1874 |
+
"engines": {
|
1875 |
+
"node": ">=12.17"
|
1876 |
+
}
|
1877 |
+
},
|
1878 |
"node_modules/commander": {
|
1879 |
"version": "4.1.1",
|
1880 |
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
|
|
|
1922 |
"node_modules/csstype": {
|
1923 |
"version": "3.1.3",
|
1924 |
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
|
1925 |
+
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
|
1926 |
+
},
|
1927 |
+
"node_modules/d3-array": {
|
1928 |
+
"version": "3.2.4",
|
1929 |
+
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
|
1930 |
+
"integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
|
1931 |
+
"dependencies": {
|
1932 |
+
"internmap": "1 - 2"
|
1933 |
+
},
|
1934 |
+
"engines": {
|
1935 |
+
"node": ">=12"
|
1936 |
+
}
|
1937 |
+
},
|
1938 |
+
"node_modules/d3-color": {
|
1939 |
+
"version": "3.1.0",
|
1940 |
+
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
|
1941 |
+
"integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
|
1942 |
+
"engines": {
|
1943 |
+
"node": ">=12"
|
1944 |
+
}
|
1945 |
+
},
|
1946 |
+
"node_modules/d3-ease": {
|
1947 |
+
"version": "3.0.1",
|
1948 |
+
"resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
|
1949 |
+
"integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
|
1950 |
+
"engines": {
|
1951 |
+
"node": ">=12"
|
1952 |
+
}
|
1953 |
+
},
|
1954 |
+
"node_modules/d3-format": {
|
1955 |
+
"version": "3.1.0",
|
1956 |
+
"resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
|
1957 |
+
"integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
|
1958 |
+
"engines": {
|
1959 |
+
"node": ">=12"
|
1960 |
+
}
|
1961 |
+
},
|
1962 |
+
"node_modules/d3-interpolate": {
|
1963 |
+
"version": "3.0.1",
|
1964 |
+
"resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
|
1965 |
+
"integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
|
1966 |
+
"dependencies": {
|
1967 |
+
"d3-color": "1 - 3"
|
1968 |
+
},
|
1969 |
+
"engines": {
|
1970 |
+
"node": ">=12"
|
1971 |
+
}
|
1972 |
+
},
|
1973 |
+
"node_modules/d3-path": {
|
1974 |
+
"version": "3.1.0",
|
1975 |
+
"resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
|
1976 |
+
"integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
|
1977 |
+
"engines": {
|
1978 |
+
"node": ">=12"
|
1979 |
+
}
|
1980 |
+
},
|
1981 |
+
"node_modules/d3-scale": {
|
1982 |
+
"version": "4.0.2",
|
1983 |
+
"resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
|
1984 |
+
"integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
|
1985 |
+
"dependencies": {
|
1986 |
+
"d3-array": "2.10.0 - 3",
|
1987 |
+
"d3-format": "1 - 3",
|
1988 |
+
"d3-interpolate": "1.2.0 - 3",
|
1989 |
+
"d3-time": "2.1.1 - 3",
|
1990 |
+
"d3-time-format": "2 - 4"
|
1991 |
+
},
|
1992 |
+
"engines": {
|
1993 |
+
"node": ">=12"
|
1994 |
+
}
|
1995 |
+
},
|
1996 |
+
"node_modules/d3-shape": {
|
1997 |
+
"version": "3.2.0",
|
1998 |
+
"resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
|
1999 |
+
"integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
|
2000 |
+
"dependencies": {
|
2001 |
+
"d3-path": "^3.1.0"
|
2002 |
+
},
|
2003 |
+
"engines": {
|
2004 |
+
"node": ">=12"
|
2005 |
+
}
|
2006 |
+
},
|
2007 |
+
"node_modules/d3-time": {
|
2008 |
+
"version": "3.1.0",
|
2009 |
+
"resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
|
2010 |
+
"integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
|
2011 |
+
"dependencies": {
|
2012 |
+
"d3-array": "2 - 3"
|
2013 |
+
},
|
2014 |
+
"engines": {
|
2015 |
+
"node": ">=12"
|
2016 |
+
}
|
2017 |
+
},
|
2018 |
+
"node_modules/d3-time-format": {
|
2019 |
+
"version": "4.1.0",
|
2020 |
+
"resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
|
2021 |
+
"integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
|
2022 |
+
"dependencies": {
|
2023 |
+
"d3-time": "1 - 3"
|
2024 |
+
},
|
2025 |
+
"engines": {
|
2026 |
+
"node": ">=12"
|
2027 |
+
}
|
2028 |
+
},
|
2029 |
+
"node_modules/d3-timer": {
|
2030 |
+
"version": "3.0.1",
|
2031 |
+
"resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
|
2032 |
+
"integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
|
2033 |
+
"engines": {
|
2034 |
+
"node": ">=12"
|
2035 |
+
}
|
2036 |
},
|
2037 |
"node_modules/damerau-levenshtein": {
|
2038 |
"version": "1.0.8",
|
|
|
2108 |
}
|
2109 |
}
|
2110 |
},
|
2111 |
+
"node_modules/decimal.js-light": {
|
2112 |
+
"version": "2.5.1",
|
2113 |
+
"resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
|
2114 |
+
"integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="
|
2115 |
+
},
|
2116 |
"node_modules/decompress-response": {
|
2117 |
"version": "6.0.0",
|
2118 |
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
|
|
|
2249 |
"node": ">=6.0.0"
|
2250 |
}
|
2251 |
},
|
2252 |
+
"node_modules/dom-helpers": {
|
2253 |
+
"version": "5.2.1",
|
2254 |
+
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
|
2255 |
+
"integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
|
2256 |
+
"dependencies": {
|
2257 |
+
"@babel/runtime": "^7.8.7",
|
2258 |
+
"csstype": "^3.0.2"
|
2259 |
+
}
|
2260 |
+
},
|
2261 |
"node_modules/eastasianwidth": {
|
2262 |
"version": "0.2.0",
|
2263 |
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
|
|
3013 |
"node": ">=0.10.0"
|
3014 |
}
|
3015 |
},
|
3016 |
+
"node_modules/eventemitter3": {
|
3017 |
+
"version": "4.0.7",
|
3018 |
+
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
|
3019 |
+
"integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
|
3020 |
+
},
|
3021 |
"node_modules/expand-template": {
|
3022 |
"version": "2.0.3",
|
3023 |
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
|
|
|
3032 |
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
3033 |
"dev": true
|
3034 |
},
|
3035 |
+
"node_modules/fast-equals": {
|
3036 |
+
"version": "5.0.1",
|
3037 |
+
"resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz",
|
3038 |
+
"integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==",
|
3039 |
+
"engines": {
|
3040 |
+
"node": ">=6.0.0"
|
3041 |
+
}
|
3042 |
+
},
|
3043 |
"node_modules/fast-glob": {
|
3044 |
"version": "3.3.2",
|
3045 |
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
|
|
|
3109 |
"node": ">=8"
|
3110 |
}
|
3111 |
},
|
3112 |
+
"node_modules/find-replace": {
|
3113 |
+
"version": "3.0.0",
|
3114 |
+
"resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz",
|
3115 |
+
"integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==",
|
3116 |
+
"dependencies": {
|
3117 |
+
"array-back": "^3.0.1"
|
3118 |
+
},
|
3119 |
+
"engines": {
|
3120 |
+
"node": ">=4.0.0"
|
3121 |
+
}
|
3122 |
+
},
|
3123 |
"node_modules/find-up": {
|
3124 |
"version": "5.0.0",
|
3125 |
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
|
|
|
3150 |
"node": "^10.12.0 || >=12.0.0"
|
3151 |
}
|
3152 |
},
|
3153 |
+
"node_modules/flatbuffers": {
|
3154 |
+
"version": "23.5.26",
|
3155 |
+
"resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-23.5.26.tgz",
|
3156 |
+
"integrity": "sha512-vE+SI9vrJDwi1oETtTIFldC/o9GsVKRM+s6EL0nQgxXlYV1Vc4Tk30hj4xGICftInKQKj1F3up2n8UbIVobISQ=="
|
3157 |
+
},
|
3158 |
"node_modules/flatted": {
|
3159 |
"version": "3.3.1",
|
3160 |
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
|
|
|
3580 |
"node": ">= 0.4"
|
3581 |
}
|
3582 |
},
|
3583 |
+
"node_modules/internmap": {
|
3584 |
+
"version": "2.0.3",
|
3585 |
+
"resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
|
3586 |
+
"integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
|
3587 |
+
"engines": {
|
3588 |
+
"node": ">=12"
|
3589 |
+
}
|
3590 |
+
},
|
3591 |
"node_modules/is-arguments": {
|
3592 |
"version": "1.1.1",
|
3593 |
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
|
|
|
4054 |
"node": ">=4"
|
4055 |
}
|
4056 |
},
|
4057 |
+
"node_modules/json-bignum": {
|
4058 |
+
"version": "0.0.3",
|
4059 |
+
"resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz",
|
4060 |
+
"integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==",
|
4061 |
+
"engines": {
|
4062 |
+
"node": ">=0.8"
|
4063 |
+
}
|
4064 |
+
},
|
4065 |
"node_modules/json-buffer": {
|
4066 |
"version": "3.0.1",
|
4067 |
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
|
|
|
4175 |
"url": "https://github.com/sponsors/sindresorhus"
|
4176 |
}
|
4177 |
},
|
4178 |
+
"node_modules/lodash": {
|
4179 |
+
"version": "4.17.21",
|
4180 |
+
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
4181 |
+
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
|
4182 |
+
},
|
4183 |
+
"node_modules/lodash.assignwith": {
|
4184 |
+
"version": "4.2.0",
|
4185 |
+
"resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz",
|
4186 |
+
"integrity": "sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g=="
|
4187 |
+
},
|
4188 |
+
"node_modules/lodash.camelcase": {
|
4189 |
+
"version": "4.3.0",
|
4190 |
+
"resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
|
4191 |
+
"integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
|
4192 |
+
},
|
4193 |
"node_modules/lodash.clone": {
|
4194 |
"version": "4.5.0",
|
4195 |
"resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
|
|
|
4670 |
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
|
4671 |
"integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw=="
|
4672 |
},
|
4673 |
+
"node_modules/pad-left": {
|
4674 |
+
"version": "2.1.0",
|
4675 |
+
"resolved": "https://registry.npmjs.org/pad-left/-/pad-left-2.1.0.tgz",
|
4676 |
+
"integrity": "sha512-HJxs9K9AztdIQIAIa/OIazRAUW/L6B9hbQDxO4X07roW3eo9XqZc2ur9bn1StH9CnbbI9EgvejHQX7CBpCF1QA==",
|
4677 |
+
"dependencies": {
|
4678 |
+
"repeat-string": "^1.5.4"
|
4679 |
+
},
|
4680 |
+
"engines": {
|
4681 |
+
"node": ">=0.10.0"
|
4682 |
+
}
|
4683 |
+
},
|
4684 |
"node_modules/parent-module": {
|
4685 |
"version": "1.0.1",
|
4686 |
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
|
|
|
4994 |
"version": "15.8.1",
|
4995 |
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
|
4996 |
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
|
|
|
4997 |
"dependencies": {
|
4998 |
"loose-envify": "^1.4.0",
|
4999 |
"object-assign": "^4.1.1",
|
|
|
5085 |
"node_modules/react-is": {
|
5086 |
"version": "16.13.1",
|
5087 |
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
5088 |
+
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
|
5089 |
+
},
|
5090 |
+
"node_modules/react-smooth": {
|
5091 |
+
"version": "4.0.1",
|
5092 |
+
"resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz",
|
5093 |
+
"integrity": "sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==",
|
5094 |
+
"dependencies": {
|
5095 |
+
"fast-equals": "^5.0.1",
|
5096 |
+
"prop-types": "^15.8.1",
|
5097 |
+
"react-transition-group": "^4.4.5"
|
5098 |
+
},
|
5099 |
+
"peerDependencies": {
|
5100 |
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0",
|
5101 |
+
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
5102 |
+
}
|
5103 |
+
},
|
5104 |
+
"node_modules/react-transition-group": {
|
5105 |
+
"version": "4.4.5",
|
5106 |
+
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
|
5107 |
+
"integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
|
5108 |
+
"dependencies": {
|
5109 |
+
"@babel/runtime": "^7.5.5",
|
5110 |
+
"dom-helpers": "^5.0.1",
|
5111 |
+
"loose-envify": "^1.4.0",
|
5112 |
+
"prop-types": "^15.6.2"
|
5113 |
+
},
|
5114 |
+
"peerDependencies": {
|
5115 |
+
"react": ">=16.6.0",
|
5116 |
+
"react-dom": ">=16.6.0"
|
5117 |
+
}
|
5118 |
},
|
5119 |
"node_modules/read-cache": {
|
5120 |
"version": "1.0.0",
|
|
|
5148 |
"node": ">=8.10.0"
|
5149 |
}
|
5150 |
},
|
5151 |
+
"node_modules/recharts": {
|
5152 |
+
"version": "2.12.7",
|
5153 |
+
"resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.7.tgz",
|
5154 |
+
"integrity": "sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ==",
|
5155 |
+
"dependencies": {
|
5156 |
+
"clsx": "^2.0.0",
|
5157 |
+
"eventemitter3": "^4.0.1",
|
5158 |
+
"lodash": "^4.17.21",
|
5159 |
+
"react-is": "^16.10.2",
|
5160 |
+
"react-smooth": "^4.0.0",
|
5161 |
+
"recharts-scale": "^0.4.4",
|
5162 |
+
"tiny-invariant": "^1.3.1",
|
5163 |
+
"victory-vendor": "^36.6.8"
|
5164 |
+
},
|
5165 |
+
"engines": {
|
5166 |
+
"node": ">=14"
|
5167 |
+
},
|
5168 |
+
"peerDependencies": {
|
5169 |
+
"react": "^16.0.0 || ^17.0.0 || ^18.0.0",
|
5170 |
+
"react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0"
|
5171 |
+
}
|
5172 |
+
},
|
5173 |
+
"node_modules/recharts-scale": {
|
5174 |
+
"version": "0.4.5",
|
5175 |
+
"resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz",
|
5176 |
+
"integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==",
|
5177 |
+
"dependencies": {
|
5178 |
+
"decimal.js-light": "^2.4.1"
|
5179 |
+
}
|
5180 |
+
},
|
5181 |
+
"node_modules/recharts/node_modules/clsx": {
|
5182 |
+
"version": "2.1.1",
|
5183 |
+
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
|
5184 |
+
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
|
5185 |
+
"engines": {
|
5186 |
+
"node": ">=6"
|
5187 |
+
}
|
5188 |
+
},
|
5189 |
"node_modules/reflect.getprototypeof": {
|
5190 |
"version": "1.0.6",
|
5191 |
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
|
|
|
5207 |
"url": "https://github.com/sponsors/ljharb"
|
5208 |
}
|
5209 |
},
|
5210 |
+
"node_modules/regenerator-runtime": {
|
5211 |
+
"version": "0.14.1",
|
5212 |
+
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
|
5213 |
+
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
|
5214 |
+
},
|
5215 |
"node_modules/regexp.prototype.flags": {
|
5216 |
"version": "1.5.2",
|
5217 |
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
|
|
|
5230 |
"url": "https://github.com/sponsors/ljharb"
|
5231 |
}
|
5232 |
},
|
5233 |
+
"node_modules/repeat-string": {
|
5234 |
+
"version": "1.6.1",
|
5235 |
+
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
|
5236 |
+
"integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
|
5237 |
+
"engines": {
|
5238 |
+
"node": ">=0.10"
|
5239 |
+
}
|
5240 |
+
},
|
5241 |
"node_modules/resolve": {
|
5242 |
"version": "1.22.8",
|
5243 |
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
|
|
|
5574 |
"node": ">= 0.4"
|
5575 |
}
|
5576 |
},
|
5577 |
+
"node_modules/stream-read-all": {
|
5578 |
+
"version": "3.0.1",
|
5579 |
+
"resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz",
|
5580 |
+
"integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==",
|
5581 |
+
"engines": {
|
5582 |
+
"node": ">=10"
|
5583 |
+
}
|
5584 |
+
},
|
5585 |
"node_modules/streamsearch": {
|
5586 |
"version": "1.1.0",
|
5587 |
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
|
|
|
5904 |
"url": "https://github.com/sponsors/ljharb"
|
5905 |
}
|
5906 |
},
|
5907 |
+
"node_modules/table-layout": {
|
5908 |
+
"version": "3.0.2",
|
5909 |
+
"resolved": "https://registry.npmjs.org/table-layout/-/table-layout-3.0.2.tgz",
|
5910 |
+
"integrity": "sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw==",
|
5911 |
+
"dependencies": {
|
5912 |
+
"@75lb/deep-merge": "^1.1.1",
|
5913 |
+
"array-back": "^6.2.2",
|
5914 |
+
"command-line-args": "^5.2.1",
|
5915 |
+
"command-line-usage": "^7.0.0",
|
5916 |
+
"stream-read-all": "^3.0.1",
|
5917 |
+
"typical": "^7.1.1",
|
5918 |
+
"wordwrapjs": "^5.1.0"
|
5919 |
+
},
|
5920 |
+
"bin": {
|
5921 |
+
"table-layout": "bin/cli.js"
|
5922 |
+
},
|
5923 |
+
"engines": {
|
5924 |
+
"node": ">=12.17"
|
5925 |
+
}
|
5926 |
+
},
|
5927 |
+
"node_modules/table-layout/node_modules/array-back": {
|
5928 |
+
"version": "6.2.2",
|
5929 |
+
"resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz",
|
5930 |
+
"integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==",
|
5931 |
+
"engines": {
|
5932 |
+
"node": ">=12.17"
|
5933 |
+
}
|
5934 |
+
},
|
5935 |
+
"node_modules/table-layout/node_modules/typical": {
|
5936 |
+
"version": "7.1.1",
|
5937 |
+
"resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz",
|
5938 |
+
"integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==",
|
5939 |
+
"engines": {
|
5940 |
+
"node": ">=12.17"
|
5941 |
+
}
|
5942 |
+
},
|
5943 |
"node_modules/tailwind-merge": {
|
5944 |
"version": "1.14.0",
|
5945 |
"resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz",
|
|
|
6044 |
"node": ">=0.8"
|
6045 |
}
|
6046 |
},
|
6047 |
+
"node_modules/tiny-invariant": {
|
6048 |
+
"version": "1.3.3",
|
6049 |
+
"resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
|
6050 |
+
"integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="
|
6051 |
+
},
|
6052 |
"node_modules/to-fast-properties": {
|
6053 |
"version": "2.0.0",
|
6054 |
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
|
|
6245 |
"node": ">=4.2.0"
|
6246 |
}
|
6247 |
},
|
6248 |
+
"node_modules/typical": {
|
6249 |
+
"version": "4.0.0",
|
6250 |
+
"resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz",
|
6251 |
+
"integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==",
|
6252 |
+
"engines": {
|
6253 |
+
"node": ">=8"
|
6254 |
+
}
|
6255 |
+
},
|
6256 |
"node_modules/unbox-primitive": {
|
6257 |
"version": "1.0.2",
|
6258 |
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
|
|
|
6312 |
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
6313 |
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
|
6314 |
},
|
6315 |
+
"node_modules/victory-vendor": {
|
6316 |
+
"version": "36.9.2",
|
6317 |
+
"resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz",
|
6318 |
+
"integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==",
|
6319 |
+
"dependencies": {
|
6320 |
+
"@types/d3-array": "^3.0.3",
|
6321 |
+
"@types/d3-ease": "^3.0.0",
|
6322 |
+
"@types/d3-interpolate": "^3.0.1",
|
6323 |
+
"@types/d3-scale": "^4.0.2",
|
6324 |
+
"@types/d3-shape": "^3.1.0",
|
6325 |
+
"@types/d3-time": "^3.0.0",
|
6326 |
+
"@types/d3-timer": "^3.0.0",
|
6327 |
+
"d3-array": "^3.1.6",
|
6328 |
+
"d3-ease": "^3.0.1",
|
6329 |
+
"d3-interpolate": "^3.0.1",
|
6330 |
+
"d3-scale": "^4.0.2",
|
6331 |
+
"d3-shape": "^3.1.0",
|
6332 |
+
"d3-time": "^3.0.0",
|
6333 |
+
"d3-timer": "^3.0.1"
|
6334 |
+
}
|
6335 |
+
},
|
6336 |
"node_modules/watchpack": {
|
6337 |
"version": "2.4.0",
|
6338 |
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
|
|
|
6447 |
"node": ">=0.10.0"
|
6448 |
}
|
6449 |
},
|
6450 |
+
"node_modules/wordwrapjs": {
|
6451 |
+
"version": "5.1.0",
|
6452 |
+
"resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz",
|
6453 |
+
"integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==",
|
6454 |
+
"engines": {
|
6455 |
+
"node": ">=12.17"
|
6456 |
+
}
|
6457 |
+
},
|
6458 |
"node_modules/wrap-ansi": {
|
6459 |
"version": "8.1.0",
|
6460 |
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
|
package.json
CHANGED
@@ -14,14 +14,16 @@
|
|
14 |
"format:check": "prettier --check \"**/*.{ts,tsx,mdx}\" --cache"
|
15 |
},
|
16 |
"dependencies": {
|
|
|
17 |
"@radix-ui/react-slot": "^1.0.2",
|
18 |
"class-variance-authority": "^0.4.0",
|
19 |
"clsx": "^1.2.1",
|
20 |
-
"lucide-react": "0.105.0-alpha.4",
|
21 |
"next": "^13.4.8",
|
22 |
"next-themes": "^0.2.1",
|
23 |
"react": "^18.2.0",
|
24 |
"react-dom": "^18.2.0",
|
|
|
25 |
"sharp": "^0.31.3",
|
26 |
"tailwind-merge": "^1.13.2",
|
27 |
"tailwindcss-animate": "^1.0.6"
|
|
|
14 |
"format:check": "prettier --check \"**/*.{ts,tsx,mdx}\" --cache"
|
15 |
},
|
16 |
"dependencies": {
|
17 |
+
"@duckdb/duckdb-wasm": "^1.28.1-dev106.0",
|
18 |
"@radix-ui/react-slot": "^1.0.2",
|
19 |
"class-variance-authority": "^0.4.0",
|
20 |
"clsx": "^1.2.1",
|
21 |
+
"lucide-react": "^0.105.0-alpha.4",
|
22 |
"next": "^13.4.8",
|
23 |
"next-themes": "^0.2.1",
|
24 |
"react": "^18.2.0",
|
25 |
"react-dom": "^18.2.0",
|
26 |
+
"recharts": "^2.12.7",
|
27 |
"sharp": "^0.31.3",
|
28 |
"tailwind-merge": "^1.13.2",
|
29 |
"tailwindcss-animate": "^1.0.6"
|
styles/globals.css
CHANGED
@@ -2,6 +2,64 @@
|
|
2 |
@tailwind components;
|
3 |
@tailwind utilities;
|
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
@layer base {
|
6 |
:root {
|
7 |
--background: 0 0% 100%;
|
@@ -74,8 +132,9 @@
|
|
74 |
* {
|
75 |
@apply border-border;
|
76 |
}
|
|
|
77 |
body {
|
78 |
@apply bg-background text-foreground;
|
79 |
font-feature-settings: "rlig" 1, "calt" 1;
|
80 |
}
|
81 |
-
}
|
|
|
2 |
@tailwind components;
|
3 |
@tailwind utilities;
|
4 |
|
5 |
+
@layer base {
|
6 |
+
:root {
|
7 |
+
--background: 0 0% 100%;
|
8 |
+
--foreground: 240 10% 3.9%;
|
9 |
+
--card: 0 0% 100%;
|
10 |
+
--card-foreground: 240 10% 3.9%;
|
11 |
+
--popover: 0 0% 100%;
|
12 |
+
--popover-foreground: 240 10% 3.9%;
|
13 |
+
--primary: 240 5.9% 10%;
|
14 |
+
--primary-foreground: 0 0% 98%;
|
15 |
+
--secondary: 240 4.8% 95.9%;
|
16 |
+
--secondary-foreground: 240 5.9% 10%;
|
17 |
+
--muted: 240 4.8% 95.9%;
|
18 |
+
--muted-foreground: 240 3.8% 46.1%;
|
19 |
+
--accent: 240 4.8% 95.9%;
|
20 |
+
--accent-foreground: 240 5.9% 10%;
|
21 |
+
--destructive: 0 84.2% 60.2%;
|
22 |
+
--destructive-foreground: 0 0% 98%;
|
23 |
+
--border: 240 5.9% 90%;
|
24 |
+
--input: 240 5.9% 90%;
|
25 |
+
--ring: 240 10% 3.9%;
|
26 |
+
--chart-1: 12 76% 61%;
|
27 |
+
--chart-2: 173 58% 39%;
|
28 |
+
--chart-3: 197 37% 24%;
|
29 |
+
--chart-4: 43 74% 66%;
|
30 |
+
--chart-5: 27 87% 67%;
|
31 |
+
}
|
32 |
+
|
33 |
+
.dark {
|
34 |
+
--background: 240 10% 3.9%;
|
35 |
+
--foreground: 0 0% 98%;
|
36 |
+
--card: 240 10% 3.9%;
|
37 |
+
--card-foreground: 0 0% 98%;
|
38 |
+
--popover: 240 10% 3.9%;
|
39 |
+
--popover-foreground: 0 0% 98%;
|
40 |
+
--primary: 0 0% 98%;
|
41 |
+
--primary-foreground: 240 5.9% 10%;
|
42 |
+
--secondary: 240 3.7% 15.9%;
|
43 |
+
--secondary-foreground: 0 0% 98%;
|
44 |
+
--muted: 240 3.7% 15.9%;
|
45 |
+
--muted-foreground: 240 5% 64.9%;
|
46 |
+
--accent: 240 3.7% 15.9%;
|
47 |
+
--accent-foreground: 0 0% 98%;
|
48 |
+
--destructive: 0 62.8% 30.6%;
|
49 |
+
--destructive-foreground: 0 0% 98%;
|
50 |
+
--border: 240 3.7% 15.9%;
|
51 |
+
--input: 240 3.7% 15.9%;
|
52 |
+
--ring: 240 4.9% 83.9%;
|
53 |
+
--chart-1: 220 70% 50%;
|
54 |
+
--chart-2: 160 60% 45%;
|
55 |
+
--chart-3: 30 80% 55%;
|
56 |
+
--chart-4: 280 65% 60%;
|
57 |
+
--chart-5: 340 75% 55%;
|
58 |
+
}
|
59 |
+
}
|
60 |
+
|
61 |
+
|
62 |
+
|
63 |
@layer base {
|
64 |
:root {
|
65 |
--background: 0 0% 100%;
|
|
|
132 |
* {
|
133 |
@apply border-border;
|
134 |
}
|
135 |
+
|
136 |
body {
|
137 |
@apply bg-background text-foreground;
|
138 |
font-feature-settings: "rlig" 1, "calt" 1;
|
139 |
}
|
140 |
+
}
|