@tonyclaw/llm-inspector 1.14.2 → 1.14.3
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/.output/nitro.json +1 -1
- package/.output/public/assets/index-6F6Tf88s.js +105 -0
- package/.output/public/assets/index-CzrT_ZB_.css +1 -0
- package/.output/public/assets/{main-BElVT2p3.js → main-BcEfx6FM.js} +1 -1
- package/.output/server/_ssr/{index-DmLit8Ad.mjs → index-BbJkYeb-.mjs} +115 -52
- package/.output/server/_ssr/index.mjs +2 -2
- package/.output/server/_ssr/{router-BoeSXWHG.mjs → router-Cz7UcQ5N.mjs} +2 -2
- package/.output/server/{_tanstack-start-manifest_v-B6idtbmL.mjs → _tanstack-start-manifest_v-DxqMZv-B.mjs} +1 -1
- package/.output/server/index.mjs +22 -22
- package/package.json +1 -1
- package/src/components/providers/ProviderForm.tsx +76 -26
- package/src/components/providers/ProvidersPanel.tsx +13 -4
- package/src/components/providers/SettingsDialog.tsx +1 -1
- package/styles/globals.css +121 -121
- package/.output/public/assets/index-DDrUlr6L.js +0 -105
- package/.output/public/assets/index-DOG5AdQ9.css +0 -1
package/.output/server/index.mjs
CHANGED
|
@@ -38,51 +38,51 @@ const assets = {
|
|
|
38
38
|
"/assets/alibaba-TTwafVwX.svg": {
|
|
39
39
|
"type": "image/svg+xml",
|
|
40
40
|
"etag": '"171b-6dyV5K8QjiaY35sN9qNprh9zDIs"',
|
|
41
|
-
"mtime": "2026-06-
|
|
41
|
+
"mtime": "2026-06-11T02:41:57.154Z",
|
|
42
42
|
"size": 5915,
|
|
43
43
|
"path": "../public/assets/alibaba-TTwafVwX.svg"
|
|
44
44
|
},
|
|
45
|
+
"/assets/index-CzrT_ZB_.css": {
|
|
46
|
+
"type": "text/css; charset=utf-8",
|
|
47
|
+
"etag": '"14427-WRw7wI3HmgJe0YWxs6QA9QvDsgk"',
|
|
48
|
+
"mtime": "2026-06-11T02:41:57.155Z",
|
|
49
|
+
"size": 82983,
|
|
50
|
+
"path": "../public/assets/index-CzrT_ZB_.css"
|
|
51
|
+
},
|
|
45
52
|
"/assets/minimax-BPMzvuL-.jpeg": {
|
|
46
53
|
"type": "image/jpeg",
|
|
47
54
|
"etag": '"1b06-IwivU89ko5UTMUM1/t7hn4sQK9A"',
|
|
48
|
-
"mtime": "2026-06-
|
|
55
|
+
"mtime": "2026-06-11T02:41:57.154Z",
|
|
49
56
|
"size": 6918,
|
|
50
57
|
"path": "../public/assets/minimax-BPMzvuL-.jpeg"
|
|
51
58
|
},
|
|
52
|
-
"/assets/
|
|
53
|
-
"type": "text/
|
|
54
|
-
"etag": '"
|
|
55
|
-
"mtime": "2026-06-
|
|
56
|
-
"size":
|
|
57
|
-
"path": "../public/assets/
|
|
59
|
+
"/assets/main-BcEfx6FM.js": {
|
|
60
|
+
"type": "text/javascript; charset=utf-8",
|
|
61
|
+
"etag": '"50599-Zn3MOTxDKfi6edBd1hMuk0XMH8M"',
|
|
62
|
+
"mtime": "2026-06-11T02:41:57.155Z",
|
|
63
|
+
"size": 329113,
|
|
64
|
+
"path": "../public/assets/main-BcEfx6FM.js"
|
|
58
65
|
},
|
|
59
66
|
"/assets/zhipuai-BPNAnxo-.svg": {
|
|
60
67
|
"type": "image/svg+xml",
|
|
61
68
|
"etag": '"2bf8-hNaLCTi89nOFCsIIfWpP/jrfo0s"',
|
|
62
|
-
"mtime": "2026-06-
|
|
69
|
+
"mtime": "2026-06-11T02:41:57.154Z",
|
|
63
70
|
"size": 11256,
|
|
64
71
|
"path": "../public/assets/zhipuai-BPNAnxo-.svg"
|
|
65
72
|
},
|
|
66
73
|
"/assets/qwen-CONDcHqt.png": {
|
|
67
74
|
"type": "image/png",
|
|
68
75
|
"etag": '"572c3-cdJAPaHdOvFCGzuaQjagdgOu6XE"',
|
|
69
|
-
"mtime": "2026-06-
|
|
76
|
+
"mtime": "2026-06-11T02:41:57.155Z",
|
|
70
77
|
"size": 357059,
|
|
71
78
|
"path": "../public/assets/qwen-CONDcHqt.png"
|
|
72
79
|
},
|
|
73
|
-
"/assets/
|
|
74
|
-
"type": "text/javascript; charset=utf-8",
|
|
75
|
-
"etag": '"50599-c0Re5vg5+KI0J9dHMI2SM+wdp9A"',
|
|
76
|
-
"mtime": "2026-06-10T13:27:43.023Z",
|
|
77
|
-
"size": 329113,
|
|
78
|
-
"path": "../public/assets/main-BElVT2p3.js"
|
|
79
|
-
},
|
|
80
|
-
"/assets/index-DDrUlr6L.js": {
|
|
80
|
+
"/assets/index-6F6Tf88s.js": {
|
|
81
81
|
"type": "text/javascript; charset=utf-8",
|
|
82
|
-
"etag": '"
|
|
83
|
-
"mtime": "2026-06-
|
|
84
|
-
"size":
|
|
85
|
-
"path": "../public/assets/index-
|
|
82
|
+
"etag": '"92434-5hMgYz5Gl8U1bzvC5OsYy/vakXU"',
|
|
83
|
+
"mtime": "2026-06-11T02:41:57.155Z",
|
|
84
|
+
"size": 599092,
|
|
85
|
+
"path": "../public/assets/index-6F6Tf88s.js"
|
|
86
86
|
}
|
|
87
87
|
};
|
|
88
88
|
function readAsset(id) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type JSX, useState, useEffect } from "react";
|
|
1
|
+
import { type JSX, useState, useEffect, useRef } from "react";
|
|
2
2
|
import { Button } from "../ui/button";
|
|
3
|
-
import { Eye, EyeOff, Copy, Check } from "lucide-react";
|
|
3
|
+
import { Eye, EyeOff, Copy, Check, ChevronDown } from "lucide-react";
|
|
4
4
|
import type { ProviderConfig } from "../../proxy/providers";
|
|
5
5
|
import { maskApiKey } from "../../lib/mask";
|
|
6
6
|
|
|
@@ -54,7 +54,7 @@ type ProviderFormProps = {
|
|
|
54
54
|
};
|
|
55
55
|
|
|
56
56
|
export function ProviderForm({ provider, onSubmit, onCancel }: ProviderFormProps): JSX.Element {
|
|
57
|
-
const [name, setName] = useState(provider?.name ?? "
|
|
57
|
+
const [name, setName] = useState(provider?.name ?? "");
|
|
58
58
|
const [apiKey, setApiKey] = useState(provider?.apiKey ?? "");
|
|
59
59
|
const [showApiKey, setShowApiKey] = useState(false);
|
|
60
60
|
const [copied, setCopied] = useState(false);
|
|
@@ -69,6 +69,23 @@ export function ProviderForm({ provider, onSubmit, onCancel }: ProviderFormProps
|
|
|
69
69
|
const [source, setSource] = useState<"company" | "personal" | undefined>(provider?.source);
|
|
70
70
|
const [errors, setErrors] = useState<Record<string, string>>({});
|
|
71
71
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
72
|
+
const [openModelDropdown, setOpenModelDropdown] = useState<number | null>(null);
|
|
73
|
+
const modelRowRefs = useRef<(HTMLDivElement | null)[]>([]);
|
|
74
|
+
|
|
75
|
+
// Close model dropdown when clicking outside
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
if (openModelDropdown === null) return;
|
|
78
|
+
const index = openModelDropdown;
|
|
79
|
+
function handleClick(e: MouseEvent) {
|
|
80
|
+
if (!(e.target instanceof Node)) return;
|
|
81
|
+
const ref = modelRowRefs.current[index];
|
|
82
|
+
if (ref !== null && ref !== undefined && !ref.contains(e.target)) {
|
|
83
|
+
setOpenModelDropdown(null);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
document.addEventListener("mousedown", handleClick);
|
|
87
|
+
return () => document.removeEventListener("mousedown", handleClick);
|
|
88
|
+
}, [openModelDropdown]);
|
|
72
89
|
|
|
73
90
|
// Track if URL fields have been manually edited (to avoid overriding user edits)
|
|
74
91
|
const [manualAnthropicUrlOverride, setManualAnthropicUrlOverride] = useState(false);
|
|
@@ -188,7 +205,7 @@ export function ProviderForm({ provider, onSubmit, onCancel }: ProviderFormProps
|
|
|
188
205
|
type="text"
|
|
189
206
|
value={name}
|
|
190
207
|
onChange={(e) => setName(e.target.value)}
|
|
191
|
-
placeholder="
|
|
208
|
+
placeholder="Provider Name"
|
|
192
209
|
className="w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:border-ring focus-visible:outline-ring focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50"
|
|
193
210
|
/>
|
|
194
211
|
{errors.name !== undefined && <p className="text-xs text-destructive">{errors.name}</p>}
|
|
@@ -260,29 +277,62 @@ export function ProviderForm({ provider, onSubmit, onCancel }: ProviderFormProps
|
|
|
260
277
|
<label className="text-sm font-medium">
|
|
261
278
|
Models <span className="text-destructive">*</span>
|
|
262
279
|
</label>
|
|
263
|
-
{(isMiniMax || isAlibaba) && (
|
|
264
|
-
<datalist id="model-suggestions">
|
|
265
|
-
{(isMiniMax ? MINIMAX_MODELS : ALIBABA_MODELS).map((opt) => (
|
|
266
|
-
<option key={opt} value={opt} />
|
|
267
|
-
))}
|
|
268
|
-
</datalist>
|
|
269
|
-
)}
|
|
270
280
|
{models.map((m, i) => (
|
|
271
|
-
<div
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
281
|
+
<div
|
|
282
|
+
key={i}
|
|
283
|
+
ref={(el) => {
|
|
284
|
+
modelRowRefs.current[i] = el;
|
|
285
|
+
}}
|
|
286
|
+
className="flex items-center gap-2"
|
|
287
|
+
>
|
|
288
|
+
<div className="relative flex-1">
|
|
289
|
+
<input
|
|
290
|
+
type="text"
|
|
291
|
+
value={m}
|
|
292
|
+
onChange={(e) => {
|
|
293
|
+
setModels((prev) => {
|
|
294
|
+
const next = [...prev];
|
|
295
|
+
next[i] = e.target.value;
|
|
296
|
+
return next;
|
|
297
|
+
});
|
|
298
|
+
}}
|
|
299
|
+
placeholder={isMiniMax || isAlibaba ? "Type or select a model..." : "Model name"}
|
|
300
|
+
className="w-full rounded-md border border-input bg-background px-4 py-3 pr-8 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:border-ring focus-visible:outline-ring focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50"
|
|
301
|
+
/>
|
|
302
|
+
{(isMiniMax || isAlibaba) && (
|
|
303
|
+
<>
|
|
304
|
+
<button
|
|
305
|
+
type="button"
|
|
306
|
+
onClick={() => setOpenModelDropdown(openModelDropdown === i ? null : i)}
|
|
307
|
+
className="absolute right-1 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors p-1 z-10"
|
|
308
|
+
aria-label="Show model suggestions"
|
|
309
|
+
>
|
|
310
|
+
<ChevronDown className="size-4" />
|
|
311
|
+
</button>
|
|
312
|
+
{openModelDropdown === i && (
|
|
313
|
+
<div className="absolute left-0 right-0 top-full mt-1 z-50 bg-popover border border-border rounded-md shadow-md max-h-48 overflow-y-auto">
|
|
314
|
+
{(isMiniMax ? MINIMAX_MODELS : ALIBABA_MODELS).map((opt) => (
|
|
315
|
+
<button
|
|
316
|
+
key={opt}
|
|
317
|
+
type="button"
|
|
318
|
+
onClick={() => {
|
|
319
|
+
setModels((prev) => {
|
|
320
|
+
const next = [...prev];
|
|
321
|
+
next[i] = opt;
|
|
322
|
+
return next;
|
|
323
|
+
});
|
|
324
|
+
setOpenModelDropdown(null);
|
|
325
|
+
}}
|
|
326
|
+
className="w-full text-left px-3 py-2 text-sm hover:bg-muted transition-colors"
|
|
327
|
+
>
|
|
328
|
+
{opt}
|
|
329
|
+
</button>
|
|
330
|
+
))}
|
|
331
|
+
</div>
|
|
332
|
+
)}
|
|
333
|
+
</>
|
|
334
|
+
)}
|
|
335
|
+
</div>
|
|
286
336
|
{models.length > 1 && (
|
|
287
337
|
<button
|
|
288
338
|
type="button"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type JSX, useState, useEffect, useCallback, useRef } from "react";
|
|
1
|
+
import { type JSX, useState, useEffect, useCallback, useMemo, useRef } from "react";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { Button } from "../ui/button";
|
|
4
4
|
import { Plus, AlertCircle, Copy, Check, Download, Upload } from "lucide-react";
|
|
@@ -91,8 +91,17 @@ export function ProvidersPanel({
|
|
|
91
91
|
|
|
92
92
|
// Use external state if provided (from SWR), otherwise use internal state
|
|
93
93
|
const providers = externalProviders ?? [];
|
|
94
|
-
const filteredProviders =
|
|
95
|
-
|
|
94
|
+
const filteredProviders = useMemo(() => {
|
|
95
|
+
const filtered =
|
|
96
|
+
sourceFilter === "all" ? providers : providers.filter((p) => p.source === sourceFilter);
|
|
97
|
+
if (sourceFilter === "all") {
|
|
98
|
+
return [...filtered].sort((a, b) => {
|
|
99
|
+
const order: Record<string, number> = { personal: 0, company: 1 };
|
|
100
|
+
return (order[a.source ?? ""] ?? 2) - (order[b.source ?? ""] ?? 2);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return filtered;
|
|
104
|
+
}, [providers, sourceFilter]);
|
|
96
105
|
const testResults = externalTestResults ?? internalTestResults;
|
|
97
106
|
const testingProviders = externalTestingProviders ?? internalTestingProviders;
|
|
98
107
|
const testingTimeLeft = externalTestingTimeLeft ?? internalTestingTimeLeft;
|
|
@@ -392,7 +401,7 @@ export function ProvidersPanel({
|
|
|
392
401
|
if (showForm || editingProvider) {
|
|
393
402
|
return (
|
|
394
403
|
<div className="space-y-4">
|
|
395
|
-
<div className="flex items-center justify-between">
|
|
404
|
+
<div className="flex items-center justify-between sticky top-0 bg-background z-10 pb-2">
|
|
396
405
|
<h3 className="text-lg font-medium">
|
|
397
406
|
{editingProvider ? "Edit Provider" : "Add New Provider"}
|
|
398
407
|
</h3>
|
|
@@ -69,7 +69,7 @@ export function SettingsDialog(): JSX.Element {
|
|
|
69
69
|
<TabsTrigger value="proxy">Proxy</TabsTrigger>
|
|
70
70
|
</TabsList>
|
|
71
71
|
|
|
72
|
-
<div className="mt-4 overflow-y-auto flex-1">
|
|
72
|
+
<div className="mt-4 overflow-y-auto flex-1 pr-3">
|
|
73
73
|
<TabsContent value="providers">
|
|
74
74
|
<ProvidersPanel
|
|
75
75
|
externalProviders={providers}
|
package/styles/globals.css
CHANGED
|
@@ -1,121 +1,121 @@
|
|
|
1
|
-
@import "tailwindcss";
|
|
2
|
-
@import "tw-animate-css";
|
|
3
|
-
@plugin "@tailwindcss/typography";
|
|
4
|
-
|
|
5
|
-
@custom-variant dark (&:is(.dark *));
|
|
6
|
-
|
|
7
|
-
@theme inline {
|
|
8
|
-
--color-background: var(--background);
|
|
9
|
-
--color-foreground: var(--foreground);
|
|
10
|
-
--color-sidebar-ring: var(--sidebar-ring);
|
|
11
|
-
--color-sidebar-border: var(--sidebar-border);
|
|
12
|
-
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
13
|
-
--color-sidebar-accent: var(--sidebar-accent);
|
|
14
|
-
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
15
|
-
--color-sidebar-primary: var(--sidebar-primary);
|
|
16
|
-
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
17
|
-
--color-sidebar: var(--sidebar);
|
|
18
|
-
--color-chart-5: var(--chart-5);
|
|
19
|
-
--color-chart-4: var(--chart-4);
|
|
20
|
-
--color-chart-3: var(--chart-3);
|
|
21
|
-
--color-chart-2: var(--chart-2);
|
|
22
|
-
--color-chart-1: var(--chart-1);
|
|
23
|
-
--color-ring: var(--ring);
|
|
24
|
-
--color-input: var(--input);
|
|
25
|
-
--color-border: var(--border);
|
|
26
|
-
--color-destructive: var(--destructive);
|
|
27
|
-
--color-accent-foreground: var(--accent-foreground);
|
|
28
|
-
--color-accent: var(--accent);
|
|
29
|
-
--color-muted-foreground: var(--muted-foreground);
|
|
30
|
-
--color-muted: var(--muted);
|
|
31
|
-
--color-secondary-foreground: var(--secondary-foreground);
|
|
32
|
-
--color-secondary: var(--secondary);
|
|
33
|
-
--color-primary-foreground: var(--primary-foreground);
|
|
34
|
-
--color-primary: var(--primary);
|
|
35
|
-
--color-popover-foreground: var(--popover-foreground);
|
|
36
|
-
--color-popover: var(--popover);
|
|
37
|
-
--color-card-foreground: var(--card-foreground);
|
|
38
|
-
--color-card: var(--card);
|
|
39
|
-
--radius-sm: calc(var(--radius) - 4px);
|
|
40
|
-
--radius-md: calc(var(--radius) - 2px);
|
|
41
|
-
--radius-lg: var(--radius);
|
|
42
|
-
--radius-xl: calc(var(--radius) + 4px);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
:root {
|
|
46
|
-
--radius: 0.625rem;
|
|
47
|
-
--background: oklch(1 0 0);
|
|
48
|
-
--foreground: oklch(0.145 0 0);
|
|
49
|
-
--card: oklch(1 0 0);
|
|
50
|
-
--card-foreground: oklch(0.145 0 0);
|
|
51
|
-
--popover: oklch(1 0 0);
|
|
52
|
-
--popover-foreground: oklch(0.145 0 0);
|
|
53
|
-
--primary: oklch(0.205 0 0);
|
|
54
|
-
--primary-foreground: oklch(0.985 0 0);
|
|
55
|
-
--secondary: oklch(0.97 0 0);
|
|
56
|
-
--secondary-foreground: oklch(0.205 0 0);
|
|
57
|
-
--muted: oklch(0.97 0 0);
|
|
58
|
-
--muted-foreground: oklch(0.556 0 0);
|
|
59
|
-
--accent: oklch(0.97 0 0);
|
|
60
|
-
--accent-foreground: oklch(0.205 0 0);
|
|
61
|
-
--destructive: oklch(0.577 0.245 27.325);
|
|
62
|
-
--border: oklch(0.922 0 0);
|
|
63
|
-
--input: oklch(0.922 0 0);
|
|
64
|
-
--ring: oklch(0.708 0 0);
|
|
65
|
-
--chart-1: oklch(0.646 0.222 41.116);
|
|
66
|
-
--chart-2: oklch(0.6 0.118 184.704);
|
|
67
|
-
--chart-3: oklch(0.398 0.07 227.392);
|
|
68
|
-
--chart-4: oklch(0.828 0.189 84.429);
|
|
69
|
-
--chart-5: oklch(0.769 0.188 70.08);
|
|
70
|
-
--sidebar: oklch(0.985 0 0);
|
|
71
|
-
--sidebar-foreground: oklch(0.145 0 0);
|
|
72
|
-
--sidebar-primary: oklch(0.205 0 0);
|
|
73
|
-
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
74
|
-
--sidebar-accent: oklch(0.97 0 0);
|
|
75
|
-
--sidebar-accent-foreground: oklch(0.205 0 0);
|
|
76
|
-
--sidebar-border: oklch(0.922 0 0);
|
|
77
|
-
--sidebar-ring: oklch(0.708 0 0);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
.dark {
|
|
81
|
-
--background: oklch(0.145 0 0);
|
|
82
|
-
--foreground: oklch(0.985 0 0);
|
|
83
|
-
--card: oklch(0.205 0 0);
|
|
84
|
-
--card-foreground: oklch(0.985 0 0);
|
|
85
|
-
--popover: oklch(0.205 0 0);
|
|
86
|
-
--popover-foreground: oklch(0.985 0 0);
|
|
87
|
-
--primary: oklch(0.922 0 0);
|
|
88
|
-
--primary-foreground: oklch(0.205 0 0);
|
|
89
|
-
--secondary: oklch(0.269 0 0);
|
|
90
|
-
--secondary-foreground: oklch(0.985 0 0);
|
|
91
|
-
--muted: oklch(0.269 0 0);
|
|
92
|
-
--muted-foreground: oklch(0.708 0 0);
|
|
93
|
-
--accent: oklch(0.269 0 0);
|
|
94
|
-
--accent-foreground: oklch(0.985 0 0);
|
|
95
|
-
--destructive: oklch(0.704 0.191 22.216);
|
|
96
|
-
--border: oklch(1 0 0 / 10%);
|
|
97
|
-
--input: oklch(1 0 0 / 15%);
|
|
98
|
-
--ring: oklch(0.556 0 0);
|
|
99
|
-
--chart-1: oklch(0.488 0.243 264.376);
|
|
100
|
-
--chart-2: oklch(0.696 0.17 162.48);
|
|
101
|
-
--chart-3: oklch(0.769 0.188 70.08);
|
|
102
|
-
--chart-4: oklch(0.627 0.265 303.9);
|
|
103
|
-
--chart-5: oklch(0.645 0.246 16.439);
|
|
104
|
-
--sidebar: oklch(0.205 0 0);
|
|
105
|
-
--sidebar-foreground: oklch(0.985 0 0);
|
|
106
|
-
--sidebar-primary: oklch(0.488 0.243 264.376);
|
|
107
|
-
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
108
|
-
--sidebar-accent: oklch(0.269 0 0);
|
|
109
|
-
--sidebar-accent-foreground: oklch(0.985 0 0);
|
|
110
|
-
--sidebar-border: oklch(1 0 0 / 10%);
|
|
111
|
-
--sidebar-ring: oklch(0.556 0 0);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
@layer base {
|
|
115
|
-
* {
|
|
116
|
-
@apply border-border outline-ring/50;
|
|
117
|
-
}
|
|
118
|
-
body {
|
|
119
|
-
@apply bg-background text-foreground;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
1
|
+
@import "tailwindcss";
|
|
2
|
+
@import "tw-animate-css";
|
|
3
|
+
@plugin "@tailwindcss/typography";
|
|
4
|
+
|
|
5
|
+
@custom-variant dark (&:is(.dark *));
|
|
6
|
+
|
|
7
|
+
@theme inline {
|
|
8
|
+
--color-background: var(--background);
|
|
9
|
+
--color-foreground: var(--foreground);
|
|
10
|
+
--color-sidebar-ring: var(--sidebar-ring);
|
|
11
|
+
--color-sidebar-border: var(--sidebar-border);
|
|
12
|
+
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
13
|
+
--color-sidebar-accent: var(--sidebar-accent);
|
|
14
|
+
--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
|
|
15
|
+
--color-sidebar-primary: var(--sidebar-primary);
|
|
16
|
+
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
17
|
+
--color-sidebar: var(--sidebar);
|
|
18
|
+
--color-chart-5: var(--chart-5);
|
|
19
|
+
--color-chart-4: var(--chart-4);
|
|
20
|
+
--color-chart-3: var(--chart-3);
|
|
21
|
+
--color-chart-2: var(--chart-2);
|
|
22
|
+
--color-chart-1: var(--chart-1);
|
|
23
|
+
--color-ring: var(--ring);
|
|
24
|
+
--color-input: var(--input);
|
|
25
|
+
--color-border: var(--border);
|
|
26
|
+
--color-destructive: var(--destructive);
|
|
27
|
+
--color-accent-foreground: var(--accent-foreground);
|
|
28
|
+
--color-accent: var(--accent);
|
|
29
|
+
--color-muted-foreground: var(--muted-foreground);
|
|
30
|
+
--color-muted: var(--muted);
|
|
31
|
+
--color-secondary-foreground: var(--secondary-foreground);
|
|
32
|
+
--color-secondary: var(--secondary);
|
|
33
|
+
--color-primary-foreground: var(--primary-foreground);
|
|
34
|
+
--color-primary: var(--primary);
|
|
35
|
+
--color-popover-foreground: var(--popover-foreground);
|
|
36
|
+
--color-popover: var(--popover);
|
|
37
|
+
--color-card-foreground: var(--card-foreground);
|
|
38
|
+
--color-card: var(--card);
|
|
39
|
+
--radius-sm: calc(var(--radius) - 4px);
|
|
40
|
+
--radius-md: calc(var(--radius) - 2px);
|
|
41
|
+
--radius-lg: var(--radius);
|
|
42
|
+
--radius-xl: calc(var(--radius) + 4px);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
:root {
|
|
46
|
+
--radius: 0.625rem;
|
|
47
|
+
--background: oklch(1 0 0);
|
|
48
|
+
--foreground: oklch(0.145 0 0);
|
|
49
|
+
--card: oklch(1 0 0);
|
|
50
|
+
--card-foreground: oklch(0.145 0 0);
|
|
51
|
+
--popover: oklch(1 0 0);
|
|
52
|
+
--popover-foreground: oklch(0.145 0 0);
|
|
53
|
+
--primary: oklch(0.205 0 0);
|
|
54
|
+
--primary-foreground: oklch(0.985 0 0);
|
|
55
|
+
--secondary: oklch(0.97 0 0);
|
|
56
|
+
--secondary-foreground: oklch(0.205 0 0);
|
|
57
|
+
--muted: oklch(0.97 0 0);
|
|
58
|
+
--muted-foreground: oklch(0.556 0 0);
|
|
59
|
+
--accent: oklch(0.97 0 0);
|
|
60
|
+
--accent-foreground: oklch(0.205 0 0);
|
|
61
|
+
--destructive: oklch(0.577 0.245 27.325);
|
|
62
|
+
--border: oklch(0.922 0 0);
|
|
63
|
+
--input: oklch(0.922 0 0);
|
|
64
|
+
--ring: oklch(0.708 0 0);
|
|
65
|
+
--chart-1: oklch(0.646 0.222 41.116);
|
|
66
|
+
--chart-2: oklch(0.6 0.118 184.704);
|
|
67
|
+
--chart-3: oklch(0.398 0.07 227.392);
|
|
68
|
+
--chart-4: oklch(0.828 0.189 84.429);
|
|
69
|
+
--chart-5: oklch(0.769 0.188 70.08);
|
|
70
|
+
--sidebar: oklch(0.985 0 0);
|
|
71
|
+
--sidebar-foreground: oklch(0.145 0 0);
|
|
72
|
+
--sidebar-primary: oklch(0.205 0 0);
|
|
73
|
+
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
74
|
+
--sidebar-accent: oklch(0.97 0 0);
|
|
75
|
+
--sidebar-accent-foreground: oklch(0.205 0 0);
|
|
76
|
+
--sidebar-border: oklch(0.922 0 0);
|
|
77
|
+
--sidebar-ring: oklch(0.708 0 0);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.dark {
|
|
81
|
+
--background: oklch(0.145 0 0);
|
|
82
|
+
--foreground: oklch(0.985 0 0);
|
|
83
|
+
--card: oklch(0.205 0 0);
|
|
84
|
+
--card-foreground: oklch(0.985 0 0);
|
|
85
|
+
--popover: oklch(0.205 0 0);
|
|
86
|
+
--popover-foreground: oklch(0.985 0 0);
|
|
87
|
+
--primary: oklch(0.922 0 0);
|
|
88
|
+
--primary-foreground: oklch(0.205 0 0);
|
|
89
|
+
--secondary: oklch(0.269 0 0);
|
|
90
|
+
--secondary-foreground: oklch(0.985 0 0);
|
|
91
|
+
--muted: oklch(0.269 0 0);
|
|
92
|
+
--muted-foreground: oklch(0.708 0 0);
|
|
93
|
+
--accent: oklch(0.269 0 0);
|
|
94
|
+
--accent-foreground: oklch(0.985 0 0);
|
|
95
|
+
--destructive: oklch(0.704 0.191 22.216);
|
|
96
|
+
--border: oklch(1 0 0 / 10%);
|
|
97
|
+
--input: oklch(1 0 0 / 15%);
|
|
98
|
+
--ring: oklch(0.556 0 0);
|
|
99
|
+
--chart-1: oklch(0.488 0.243 264.376);
|
|
100
|
+
--chart-2: oklch(0.696 0.17 162.48);
|
|
101
|
+
--chart-3: oklch(0.769 0.188 70.08);
|
|
102
|
+
--chart-4: oklch(0.627 0.265 303.9);
|
|
103
|
+
--chart-5: oklch(0.645 0.246 16.439);
|
|
104
|
+
--sidebar: oklch(0.205 0 0);
|
|
105
|
+
--sidebar-foreground: oklch(0.985 0 0);
|
|
106
|
+
--sidebar-primary: oklch(0.488 0.243 264.376);
|
|
107
|
+
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
108
|
+
--sidebar-accent: oklch(0.269 0 0);
|
|
109
|
+
--sidebar-accent-foreground: oklch(0.985 0 0);
|
|
110
|
+
--sidebar-border: oklch(1 0 0 / 10%);
|
|
111
|
+
--sidebar-ring: oklch(0.556 0 0);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@layer base {
|
|
115
|
+
* {
|
|
116
|
+
@apply border-border outline-ring/50;
|
|
117
|
+
}
|
|
118
|
+
body {
|
|
119
|
+
@apply bg-background text-foreground;
|
|
120
|
+
}
|
|
121
|
+
}
|