tokentrace 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -0
- package/.next/app-build-manifest.json +167 -0
- package/.next/app-path-routes-manifest.json +22 -0
- package/.next/build-manifest.json +33 -0
- package/.next/export-marker.json +6 -0
- package/.next/images-manifest.json +58 -0
- package/.next/next-minimal-server.js.nft.json +1 -0
- package/.next/next-server.js.nft.json +1 -0
- package/.next/package.json +1 -0
- package/.next/prerender-manifest.json +37 -0
- package/.next/react-loadable-manifest.json +1 -0
- package/.next/required-server-files.json +323 -0
- package/.next/routes-manifest.json +119 -0
- package/.next/server/app/_not-found/page.js +2 -0
- package/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
- package/.next/server/app/_not-found.html +1 -0
- package/.next/server/app/_not-found.meta +8 -0
- package/.next/server/app/_not-found.rsc +37 -0
- package/.next/server/app/api/analytics/route.js +1 -0
- package/.next/server/app/api/analytics/route.js.nft.json +1 -0
- package/.next/server/app/api/analytics/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/data/route.js +151 -0
- package/.next/server/app/api/data/route.js.nft.json +1 -0
- package/.next/server/app/api/data/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/export/route.js +1 -0
- package/.next/server/app/api/export/route.js.nft.json +1 -0
- package/.next/server/app/api/export/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/files/route.js +1 -0
- package/.next/server/app/api/files/route.js.nft.json +1 -0
- package/.next/server/app/api/files/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/prices/route.js +151 -0
- package/.next/server/app/api/prices/route.js.nft.json +1 -0
- package/.next/server/app/api/prices/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/scan/route.js +144 -0
- package/.next/server/app/api/scan/route.js.nft.json +1 -0
- package/.next/server/app/api/scan/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/settings/route.js +128 -0
- package/.next/server/app/api/settings/route.js.nft.json +1 -0
- package/.next/server/app/api/settings/route_client-reference-manifest.js +1 -0
- package/.next/server/app/debug/page.js +2 -0
- package/.next/server/app/debug/page.js.nft.json +1 -0
- package/.next/server/app/debug/page_client-reference-manifest.js +1 -0
- package/.next/server/app/diagnostics/page.js +2 -0
- package/.next/server/app/diagnostics/page.js.nft.json +1 -0
- package/.next/server/app/diagnostics/page_client-reference-manifest.js +1 -0
- package/.next/server/app/discovery/page.js +2 -0
- package/.next/server/app/discovery/page.js.nft.json +1 -0
- package/.next/server/app/discovery/page_client-reference-manifest.js +1 -0
- package/.next/server/app/models/page.js +2 -0
- package/.next/server/app/models/page.js.nft.json +1 -0
- package/.next/server/app/models/page_client-reference-manifest.js +1 -0
- package/.next/server/app/optimisation/page.js +2 -0
- package/.next/server/app/optimisation/page.js.nft.json +1 -0
- package/.next/server/app/optimisation/page_client-reference-manifest.js +1 -0
- package/.next/server/app/page.js +2 -0
- package/.next/server/app/page.js.nft.json +1 -0
- package/.next/server/app/page_client-reference-manifest.js +1 -0
- package/.next/server/app/parser-debug/page.js +2 -0
- package/.next/server/app/parser-debug/page.js.nft.json +1 -0
- package/.next/server/app/parser-debug/page_client-reference-manifest.js +1 -0
- package/.next/server/app/pricing/page.js +152 -0
- package/.next/server/app/pricing/page.js.nft.json +1 -0
- package/.next/server/app/pricing/page_client-reference-manifest.js +1 -0
- package/.next/server/app/projects/page.js +2 -0
- package/.next/server/app/projects/page.js.nft.json +1 -0
- package/.next/server/app/projects/page_client-reference-manifest.js +1 -0
- package/.next/server/app/sessions/page.js +2 -0
- package/.next/server/app/sessions/page.js.nft.json +1 -0
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -0
- package/.next/server/app/settings/page.js +129 -0
- package/.next/server/app/settings/page.js.nft.json +1 -0
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -0
- package/.next/server/app/tools/page.js +2 -0
- package/.next/server/app/tools/page.js.nft.json +1 -0
- package/.next/server/app/tools/page_client-reference-manifest.js +1 -0
- package/.next/server/app-paths-manifest.json +22 -0
- package/.next/server/chunks/123.js +9 -0
- package/.next/server/chunks/153.js +1 -0
- package/.next/server/chunks/237.js +13 -0
- package/.next/server/chunks/331.js +22 -0
- package/.next/server/chunks/366.js +1 -0
- package/.next/server/chunks/444.js +267 -0
- package/.next/server/chunks/611.js +6 -0
- package/.next/server/chunks/692.js +1 -0
- package/.next/server/chunks/779.js +1 -0
- package/.next/server/chunks/815.js +1 -0
- package/.next/server/chunks/868.js +1 -0
- package/.next/server/functions-config-manifest.json +4 -0
- package/.next/server/interception-route-rewrite-manifest.js +1 -0
- package/.next/server/middleware-build-manifest.js +1 -0
- package/.next/server/middleware-manifest.json +6 -0
- package/.next/server/middleware-react-loadable-manifest.js +1 -0
- package/.next/server/next-font-manifest.js +1 -0
- package/.next/server/next-font-manifest.json +1 -0
- package/.next/server/pages/404.html +1 -0
- package/.next/server/pages/500.html +1 -0
- package/.next/server/pages/_app.js +1 -0
- package/.next/server/pages/_app.js.nft.json +1 -0
- package/.next/server/pages/_document.js +1 -0
- package/.next/server/pages/_document.js.nft.json +1 -0
- package/.next/server/pages/_error.js +19 -0
- package/.next/server/pages/_error.js.nft.json +1 -0
- package/.next/server/pages-manifest.json +6 -0
- package/.next/server/server-reference-manifest.js +1 -0
- package/.next/server/server-reference-manifest.json +1 -0
- package/.next/server/webpack-runtime.js +1 -0
- package/.next/static/Fh8usqK3dgfncUx9s3VR1/_buildManifest.js +1 -0
- package/.next/static/Fh8usqK3dgfncUx9s3VR1/_ssgManifest.js +1 -0
- package/.next/static/chunks/125-ab0f8db8f84c1166.js +1 -0
- package/.next/static/chunks/255-e881f48ae1d2333a.js +1 -0
- package/.next/static/chunks/4bd1b696-409494caf8c83275.js +1 -0
- package/.next/static/chunks/619-f072ac750404f9da.js +1 -0
- package/.next/static/chunks/850-8bc31e41590b5831.js +1 -0
- package/.next/static/chunks/938-23236de1c47554ea.js +1 -0
- package/.next/static/chunks/app/_not-found/page-6d75243350d9e0b5.js +1 -0
- package/.next/static/chunks/app/api/analytics/route-33d3f29973de91a4.js +1 -0
- package/.next/static/chunks/app/api/data/route-33d3f29973de91a4.js +1 -0
- package/.next/static/chunks/app/api/export/route-33d3f29973de91a4.js +1 -0
- package/.next/static/chunks/app/api/files/route-33d3f29973de91a4.js +1 -0
- package/.next/static/chunks/app/api/prices/route-33d3f29973de91a4.js +1 -0
- package/.next/static/chunks/app/api/scan/route-33d3f29973de91a4.js +1 -0
- package/.next/static/chunks/app/api/settings/route-33d3f29973de91a4.js +1 -0
- package/.next/static/chunks/app/debug/page-33d3f29973de91a4.js +1 -0
- package/.next/static/chunks/app/diagnostics/page-053a5e810a59e548.js +1 -0
- package/.next/static/chunks/app/discovery/page-33d3f29973de91a4.js +1 -0
- package/.next/static/chunks/app/layout-8942804176ff26f3.js +1 -0
- package/.next/static/chunks/app/models/page-c0acf74dd8197e01.js +1 -0
- package/.next/static/chunks/app/optimisation/page-33d3f29973de91a4.js +1 -0
- package/.next/static/chunks/app/page-b6886ec802c03cbf.js +1 -0
- package/.next/static/chunks/app/parser-debug/page-33d3f29973de91a4.js +1 -0
- package/.next/static/chunks/app/pricing/page-5e27b1ae27314539.js +1 -0
- package/.next/static/chunks/app/projects/page-b6886ec802c03cbf.js +1 -0
- package/.next/static/chunks/app/sessions/page-0abcdc88aac9dcaf.js +1 -0
- package/.next/static/chunks/app/settings/page-59fc80673f0750cd.js +1 -0
- package/.next/static/chunks/app/tools/page-c0acf74dd8197e01.js +1 -0
- package/.next/static/chunks/framework-3457b9c2619cdd96.js +1 -0
- package/.next/static/chunks/main-8744520a8a31e6ae.js +1 -0
- package/.next/static/chunks/main-app-e9ccddef393e28c3.js +1 -0
- package/.next/static/chunks/pages/_app-5addca2b3b969fde.js +1 -0
- package/.next/static/chunks/pages/_error-022e4ac7bbb9914f.js +1 -0
- package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/.next/static/chunks/webpack-3fcacae817f3ffab.js +1 -0
- package/.next/static/css/366bb38b386229a5.css +3 -0
- package/LICENSE +21 -0
- package/README.md +216 -0
- package/app/api/analytics/route.ts +8 -0
- package/app/api/data/route.ts +9 -0
- package/app/api/export/route.ts +26 -0
- package/app/api/files/route.ts +8 -0
- package/app/api/prices/route.ts +33 -0
- package/app/api/scan/route.ts +15 -0
- package/app/api/settings/route.ts +25 -0
- package/app/debug/page.tsx +101 -0
- package/app/diagnostics/page.tsx +113 -0
- package/app/discovery/page.tsx +61 -0
- package/app/globals.css +51 -0
- package/app/layout.tsx +30 -0
- package/app/models/page.tsx +97 -0
- package/app/optimisation/page.tsx +67 -0
- package/app/page.tsx +164 -0
- package/app/parser-debug/page.tsx +57 -0
- package/app/pricing/page.tsx +18 -0
- package/app/projects/page.tsx +111 -0
- package/app/sessions/page.tsx +24 -0
- package/app/settings/page.tsx +26 -0
- package/app/tools/page.tsx +92 -0
- package/bin/tokentrace.js +316 -0
- package/components/charts/rank-bar-chart.tsx +69 -0
- package/components/charts/trend-chart.tsx +123 -0
- package/components/empty-state.tsx +14 -0
- package/components/pricing-settings.tsx +171 -0
- package/components/session-explorer.tsx +210 -0
- package/components/settings-panel.tsx +203 -0
- package/components/sidebar.tsx +88 -0
- package/components/ui/badge.tsx +30 -0
- package/components/ui/button.tsx +47 -0
- package/components/ui/card.tsx +22 -0
- package/components/ui/input.tsx +19 -0
- package/components/ui/label.tsx +6 -0
- package/components/ui/table.tsx +31 -0
- package/components/ui/textarea.tsx +18 -0
- package/components.json +16 -0
- package/dist/runtime/db-migrate.mjs +410 -0
- package/dist/runtime/db-seed.mjs +506 -0
- package/dist/runtime/reset.mjs +519 -0
- package/dist/runtime/scan.mjs +1817 -0
- package/fixtures/generic-jsonl/sample.jsonl +2 -0
- package/next.config.mjs +7 -0
- package/package.json +96 -0
- package/postcss.config.mjs +8 -0
- package/scripts/build-cli-runtime.mjs +40 -0
- package/scripts/db-migrate.ts +5 -0
- package/scripts/db-seed.ts +5 -0
- package/scripts/reset.ts +5 -0
- package/scripts/scan.ts +30 -0
- package/src/db/client.ts +32 -0
- package/src/db/migrate-core.ts +147 -0
- package/src/db/reset.ts +14 -0
- package/src/db/schema.ts +259 -0
- package/src/db/seed.ts +110 -0
- package/src/db/settings.ts +47 -0
- package/src/ingestion/adapters/claude-code.ts +78 -0
- package/src/ingestion/adapters/codex-cli.ts +82 -0
- package/src/ingestion/adapters/generic-json.ts +93 -0
- package/src/ingestion/adapters/generic-jsonl.ts +62 -0
- package/src/ingestion/adapters/generic-log.ts +144 -0
- package/src/ingestion/adapters/generic-records.ts +178 -0
- package/src/ingestion/adapters/helpers.ts +309 -0
- package/src/ingestion/adapters/index.ts +15 -0
- package/src/ingestion/discovery.ts +130 -0
- package/src/ingestion/persist.ts +283 -0
- package/src/ingestion/scan.ts +247 -0
- package/src/ingestion/types.ts +78 -0
- package/src/lib/analytics.ts +592 -0
- package/src/lib/cost.ts +62 -0
- package/src/lib/csv.ts +15 -0
- package/src/lib/format.ts +51 -0
- package/src/lib/ids.ts +23 -0
- package/src/lib/pricing.ts +86 -0
- package/src/lib/token-estimator.ts +24 -0
- package/src/lib/utils.ts +6 -0
- package/tailwind.config.ts +53 -0
- package/tsconfig.json +28 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export function formatTokens(value: number | null | undefined) {
|
|
2
|
+
const number = value ?? 0;
|
|
3
|
+
if (number >= 1_000_000) return `${(number / 1_000_000).toFixed(2)}M`;
|
|
4
|
+
if (number >= 1_000) return `${(number / 1_000).toFixed(1)}K`;
|
|
5
|
+
return number.toLocaleString();
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function formatCurrency(value: number | null | undefined, currency = "USD") {
|
|
9
|
+
if (value == null) return "Unknown";
|
|
10
|
+
return new Intl.NumberFormat("en-US", {
|
|
11
|
+
style: "currency",
|
|
12
|
+
currency,
|
|
13
|
+
maximumFractionDigits: value < 1 ? 4 : 2
|
|
14
|
+
}).format(value);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function formatDate(value: number | Date | null | undefined) {
|
|
18
|
+
if (!value) return "Unknown";
|
|
19
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
20
|
+
if (Number.isNaN(date.getTime())) return "Unknown";
|
|
21
|
+
return new Intl.DateTimeFormat("en-US", {
|
|
22
|
+
month: "short",
|
|
23
|
+
day: "numeric",
|
|
24
|
+
year: "numeric",
|
|
25
|
+
hour: "2-digit",
|
|
26
|
+
minute: "2-digit"
|
|
27
|
+
}).format(date);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function formatShortDate(value: number | string | null | undefined) {
|
|
31
|
+
if (!value) return "Unknown";
|
|
32
|
+
const date = typeof value === "string" ? new Date(`${value}T00:00:00`) : new Date(value);
|
|
33
|
+
if (Number.isNaN(date.getTime())) return "Unknown";
|
|
34
|
+
return new Intl.DateTimeFormat("en-US", {
|
|
35
|
+
month: "short",
|
|
36
|
+
day: "numeric"
|
|
37
|
+
}).format(date);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function formatDuration(ms: number | null | undefined) {
|
|
41
|
+
if (!ms || ms < 0) return "Unknown";
|
|
42
|
+
const seconds = Math.round(ms / 1000);
|
|
43
|
+
if (seconds < 60) return `${seconds}s`;
|
|
44
|
+
const minutes = Math.round(seconds / 60);
|
|
45
|
+
if (minutes < 60) return `${minutes}m`;
|
|
46
|
+
return `${(minutes / 60).toFixed(1)}h`;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function percent(value: number | null | undefined) {
|
|
50
|
+
return `${Math.round((value ?? 0) * 100)}%`;
|
|
51
|
+
}
|
package/src/lib/ids.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
|
|
3
|
+
export function stableId(prefix: string, parts: Array<string | number | null | undefined>) {
|
|
4
|
+
const hash = crypto
|
|
5
|
+
.createHash("sha1")
|
|
6
|
+
.update(parts.map((part) => String(part ?? "")).join("\u001f"))
|
|
7
|
+
.digest("hex")
|
|
8
|
+
.slice(0, 24);
|
|
9
|
+
return `${prefix}_${hash}`;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function slugify(value: string) {
|
|
13
|
+
return value
|
|
14
|
+
.trim()
|
|
15
|
+
.toLowerCase()
|
|
16
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
17
|
+
.replace(/^-+|-+$/g, "")
|
|
18
|
+
.slice(0, 80);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function hashContent(content: Buffer | string) {
|
|
22
|
+
return crypto.createHash("sha256").update(content).digest("hex");
|
|
23
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { sqlite } from "@/src/db/client";
|
|
2
|
+
import { stableId } from "./ids";
|
|
3
|
+
|
|
4
|
+
export type PricingRow = {
|
|
5
|
+
id: string;
|
|
6
|
+
providerId: string;
|
|
7
|
+
provider: string;
|
|
8
|
+
model: string;
|
|
9
|
+
inputTokenPrice: number | null;
|
|
10
|
+
outputTokenPrice: number | null;
|
|
11
|
+
cachedInputTokenPrice: number | null;
|
|
12
|
+
currency: string;
|
|
13
|
+
effectiveFrom: number | null;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export function getPricingRows() {
|
|
17
|
+
return sqlite
|
|
18
|
+
.prepare(
|
|
19
|
+
`SELECT m.id, p.id AS providerId, p.name AS provider, m.name AS model,
|
|
20
|
+
m.input_token_price AS inputTokenPrice,
|
|
21
|
+
m.output_token_price AS outputTokenPrice,
|
|
22
|
+
m.cached_input_token_price AS cachedInputTokenPrice,
|
|
23
|
+
m.currency,
|
|
24
|
+
m.effective_from AS effectiveFrom
|
|
25
|
+
FROM models m
|
|
26
|
+
JOIN providers p ON p.id = m.provider_id
|
|
27
|
+
ORDER BY p.name ASC, m.name ASC`
|
|
28
|
+
)
|
|
29
|
+
.all() as PricingRow[];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function upsertPricing(input: {
|
|
33
|
+
providerId: string;
|
|
34
|
+
providerName?: string;
|
|
35
|
+
model: string;
|
|
36
|
+
inputTokenPrice: number | null;
|
|
37
|
+
outputTokenPrice: number | null;
|
|
38
|
+
cachedInputTokenPrice: number | null;
|
|
39
|
+
currency: string;
|
|
40
|
+
}) {
|
|
41
|
+
const providerName = input.providerName?.trim() || input.providerId;
|
|
42
|
+
sqlite
|
|
43
|
+
.prepare("INSERT OR IGNORE INTO providers (id, name, type) VALUES (?, ?, 'llm-provider')")
|
|
44
|
+
.run(input.providerId, providerName);
|
|
45
|
+
|
|
46
|
+
const existing = sqlite
|
|
47
|
+
.prepare("SELECT id FROM models WHERE provider_id = ? AND lower(name) = lower(?)")
|
|
48
|
+
.get(input.providerId, input.model) as { id: string } | undefined;
|
|
49
|
+
const id = existing?.id ?? stableId("model", [input.providerId, input.model]);
|
|
50
|
+
|
|
51
|
+
sqlite
|
|
52
|
+
.prepare(
|
|
53
|
+
`INSERT INTO models
|
|
54
|
+
(id, provider_id, name, input_token_price, output_token_price, cached_input_token_price, currency, effective_from)
|
|
55
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
56
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
57
|
+
input_token_price = excluded.input_token_price,
|
|
58
|
+
output_token_price = excluded.output_token_price,
|
|
59
|
+
cached_input_token_price = excluded.cached_input_token_price,
|
|
60
|
+
currency = excluded.currency,
|
|
61
|
+
effective_from = excluded.effective_from`
|
|
62
|
+
)
|
|
63
|
+
.run(
|
|
64
|
+
id,
|
|
65
|
+
input.providerId,
|
|
66
|
+
input.model,
|
|
67
|
+
input.inputTokenPrice,
|
|
68
|
+
input.outputTokenPrice,
|
|
69
|
+
input.cachedInputTokenPrice,
|
|
70
|
+
input.currency || "USD",
|
|
71
|
+
Date.now()
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
return id;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export function clearImportedData() {
|
|
78
|
+
sqlite.exec(`
|
|
79
|
+
DELETE FROM tool_calls;
|
|
80
|
+
DELETE FROM interactions;
|
|
81
|
+
DELETE FROM sessions;
|
|
82
|
+
DELETE FROM projects;
|
|
83
|
+
DELETE FROM scan_files;
|
|
84
|
+
DELETE FROM scan_runs;
|
|
85
|
+
`);
|
|
86
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type TokenEstimate = {
|
|
2
|
+
tokens: number;
|
|
3
|
+
method: "chars-div-4";
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
export function estimateTokensFromText(text: string | null | undefined): TokenEstimate {
|
|
7
|
+
const normalized = (text ?? "").trim();
|
|
8
|
+
if (!normalized) {
|
|
9
|
+
return { tokens: 0, method: "chars-div-4" };
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
return {
|
|
13
|
+
tokens: Math.max(1, Math.ceil(normalized.length / 4)),
|
|
14
|
+
method: "chars-div-4"
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function previewText(text: string | null | undefined, maxLength = 240) {
|
|
19
|
+
const normalized = (text ?? "")
|
|
20
|
+
.replace(/\s+/g, " ")
|
|
21
|
+
.trim();
|
|
22
|
+
if (normalized.length <= maxLength) return normalized;
|
|
23
|
+
return `${normalized.slice(0, maxLength - 3)}...`;
|
|
24
|
+
}
|
package/src/lib/utils.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Config } from "tailwindcss";
|
|
2
|
+
|
|
3
|
+
const config: Config = {
|
|
4
|
+
darkMode: ["class"],
|
|
5
|
+
content: [
|
|
6
|
+
"./app/**/*.{ts,tsx}",
|
|
7
|
+
"./components/**/*.{ts,tsx}",
|
|
8
|
+
"./src/**/*.{ts,tsx}"
|
|
9
|
+
],
|
|
10
|
+
theme: {
|
|
11
|
+
extend: {
|
|
12
|
+
colors: {
|
|
13
|
+
border: "hsl(var(--border))",
|
|
14
|
+
input: "hsl(var(--input))",
|
|
15
|
+
ring: "hsl(var(--ring))",
|
|
16
|
+
background: "hsl(var(--background))",
|
|
17
|
+
foreground: "hsl(var(--foreground))",
|
|
18
|
+
primary: {
|
|
19
|
+
DEFAULT: "hsl(var(--primary))",
|
|
20
|
+
foreground: "hsl(var(--primary-foreground))"
|
|
21
|
+
},
|
|
22
|
+
secondary: {
|
|
23
|
+
DEFAULT: "hsl(var(--secondary))",
|
|
24
|
+
foreground: "hsl(var(--secondary-foreground))"
|
|
25
|
+
},
|
|
26
|
+
muted: {
|
|
27
|
+
DEFAULT: "hsl(var(--muted))",
|
|
28
|
+
foreground: "hsl(var(--muted-foreground))"
|
|
29
|
+
},
|
|
30
|
+
accent: {
|
|
31
|
+
DEFAULT: "hsl(var(--accent))",
|
|
32
|
+
foreground: "hsl(var(--accent-foreground))"
|
|
33
|
+
},
|
|
34
|
+
destructive: {
|
|
35
|
+
DEFAULT: "hsl(var(--destructive))",
|
|
36
|
+
foreground: "hsl(var(--destructive-foreground))"
|
|
37
|
+
},
|
|
38
|
+
card: {
|
|
39
|
+
DEFAULT: "hsl(var(--card))",
|
|
40
|
+
foreground: "hsl(var(--card-foreground))"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
borderRadius: {
|
|
44
|
+
lg: "0.5rem",
|
|
45
|
+
md: "0.375rem",
|
|
46
|
+
sm: "0.25rem"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
plugins: []
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export default config;
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"lib": ["dom", "dom.iterable", "es2022"],
|
|
5
|
+
"allowJs": false,
|
|
6
|
+
"skipLibCheck": true,
|
|
7
|
+
"strict": true,
|
|
8
|
+
"noEmit": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"module": "esnext",
|
|
11
|
+
"moduleResolution": "bundler",
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"jsx": "preserve",
|
|
15
|
+
"incremental": true,
|
|
16
|
+
"baseUrl": ".",
|
|
17
|
+
"paths": {
|
|
18
|
+
"@/*": ["./*"]
|
|
19
|
+
},
|
|
20
|
+
"plugins": [
|
|
21
|
+
{
|
|
22
|
+
"name": "next"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
|
27
|
+
"exclude": ["node_modules"]
|
|
28
|
+
}
|