@compose-market/theme 0.0.1 → 0.0.2
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/dist/components/brand/Logo.d.ts +25 -0
- package/dist/components/brand/Logo.d.ts.map +1 -0
- package/dist/components/brand/Logo.js +20 -0
- package/dist/components/brand/Logo.js.map +1 -0
- package/dist/components/brand/index.d.ts +2 -0
- package/dist/components/brand/index.d.ts.map +1 -0
- package/dist/components/brand/index.js +2 -0
- package/dist/components/brand/index.js.map +1 -0
- package/dist/components/session.d.ts +58 -0
- package/dist/components/session.d.ts.map +1 -0
- package/dist/components/session.js +280 -0
- package/dist/components/session.js.map +1 -0
- package/dist/components/ui/badge.d.ts +10 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +24 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/button.d.ts +14 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +43 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/card.d.ts +13 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/card.js +18 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +20 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +23 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +28 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.js +37 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/index.d.ts +7 -0
- package/dist/components/ui/index.d.ts.map +1 -0
- package/dist/components/ui/index.js +7 -0
- package/dist/components/ui/index.js.map +1 -0
- package/dist/components/ui/progress.d.ts +5 -0
- package/dist/components/ui/progress.d.ts.map +1 -0
- package/dist/components/ui/progress.js +9 -0
- package/dist/components/ui/progress.js.map +1 -0
- package/dist/components/ui/surface-variant.d.ts +4 -0
- package/dist/components/ui/surface-variant.d.ts.map +1 -0
- package/dist/components/ui/surface-variant.js +10 -0
- package/dist/components/ui/surface-variant.js.map +1 -0
- package/dist/index.d.ts +5 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +6 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/visual-system.d.ts +39 -0
- package/dist/lib/visual-system.d.ts.map +1 -0
- package/dist/lib/visual-system.js +129 -0
- package/dist/lib/visual-system.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +45 -9
- package/dist/css/dark.css +0 -38
- package/dist/css/index.css +0 -9
- package/dist/css/index.d.ts +0 -16
- package/dist/css/index.d.ts.map +0 -1
- package/dist/css/index.js +0 -96
- package/dist/css/index.js.map +0 -1
- package/dist/css/light.css +0 -70
- package/dist/css/tokens.css +0 -24
- package/dist/tailwind/preset.d.ts +0 -282
- package/dist/tailwind/preset.d.ts.map +0 -1
- package/dist/tailwind/preset.js +0 -144
- package/dist/tailwind/preset.js.map +0 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface LogoProps {
|
|
3
|
+
className?: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* The Compose.Market Logo
|
|
7
|
+
* Abstract "C" / "M" formed by connected nodes
|
|
8
|
+
*/
|
|
9
|
+
export declare function ComposeLogo({ className }: LogoProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
/**
|
|
11
|
+
* 3D Asset: The "Workflow Cube"
|
|
12
|
+
* Symbol of Composability
|
|
13
|
+
*/
|
|
14
|
+
export declare function WorkflowCube({ className }: LogoProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
/**
|
|
16
|
+
* GlitchText component for hover glitch effect
|
|
17
|
+
*/
|
|
18
|
+
interface GlitchTextProps {
|
|
19
|
+
text: string;
|
|
20
|
+
as?: React.ElementType;
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function GlitchText({ text, as: Component, className }: GlitchTextProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=Logo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logo.d.ts","sourceRoot":"","sources":["../../../src/components/brand/Logo.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,SAAS;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,2CAkBnD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,2CAepD;AAED;;GAEG;AACH,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,SAAkB,EAAE,SAAS,EAAE,EAAE,eAAe,2CAYtF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "@/lib/utils";
|
|
3
|
+
/**
|
|
4
|
+
* The Compose.Market Logo
|
|
5
|
+
* Abstract "C" / "M" formed by connected nodes
|
|
6
|
+
*/
|
|
7
|
+
export function ComposeLogo({ className }) {
|
|
8
|
+
return (_jsxs("svg", { viewBox: "0 0 100 100", className: cn("fill-none stroke-current", className), children: [_jsx("path", { d: "M30 30 L30 70 L70 70", className: "stroke-cyan-400", strokeWidth: "4", strokeLinecap: "round" }), _jsx("path", { d: "M70 30 L70 50", className: "stroke-fuchsia-500", strokeWidth: "4", strokeLinecap: "round" }), _jsx("circle", { cx: "30", cy: "30", r: "6", className: "fill-cyan-950 stroke-cyan-400", strokeWidth: "2" }), _jsx("circle", { cx: "30", cy: "70", r: "6", className: "fill-cyan-950 stroke-cyan-400", strokeWidth: "2" }), _jsx("circle", { cx: "70", cy: "70", r: "6", className: "fill-cyan-950 stroke-cyan-400", strokeWidth: "2" }), _jsx("circle", { cx: "70", cy: "30", r: "6", className: "fill-cyan-950 stroke-fuchsia-500", strokeWidth: "2" }), _jsx("path", { d: "M30 30 L70 30", className: "stroke-cyan-500/30", strokeWidth: "1", strokeDasharray: "4 4" }), _jsx("path", { d: "M70 70 L70 50", className: "stroke-fuchsia-500/50", strokeWidth: "1" })] }));
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 3D Asset: The "Workflow Cube"
|
|
12
|
+
* Symbol of Composability
|
|
13
|
+
*/
|
|
14
|
+
export function WorkflowCube({ className }) {
|
|
15
|
+
return (_jsxs("svg", { viewBox: "0 0 100 100", className: cn("stroke-current fill-none", className), children: [_jsx("path", { d: "M50 5 L90 25 L90 70 L50 90 L10 70 L10 25 Z", className: "stroke-cyan-500/30", strokeWidth: "1" }), _jsx("path", { d: "M50 5 L50 45 M50 90 L50 45 M90 25 L50 45 L10 25", className: "stroke-cyan-500/30", strokeWidth: "1" }), _jsx("path", { d: "M50 30 L70 40 L70 60 L50 70 L30 60 L30 40 Z", className: "fill-cyan-500/10 stroke-cyan-400", strokeWidth: "2" }), _jsx("circle", { cx: "50", cy: "30", r: "2", className: "fill-fuchsia-500" }), _jsx("circle", { cx: "70", cy: "40", r: "2", className: "fill-fuchsia-500" }), _jsx("circle", { cx: "30", cy: "60", r: "2", className: "fill-fuchsia-500" })] }));
|
|
16
|
+
}
|
|
17
|
+
export function GlitchText({ text, as: Component = "span", className }) {
|
|
18
|
+
return (_jsxs(Component, { className: cn("relative inline-block group", className), children: [_jsx("span", { className: "relative z-10", children: text }), _jsx("span", { className: "absolute top-0 left-0 -ml-0.5 translate-x-[2px] text-fuchsia-500 opacity-0 group-hover:opacity-70 animate-pulse z-0 mix-blend-screen", children: text }), _jsx("span", { className: "absolute top-0 left-0 -ml-0.5 -translate-x-[2px] text-cyan-500 opacity-0 group-hover:opacity-70 animate-pulse z-0 mix-blend-screen", style: { animationDelay: "75ms" }, children: text })] }));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=Logo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logo.js","sourceRoot":"","sources":["../../../src/components/brand/Logo.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/brand/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/brand/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { BUDGET_PRESETS } from "@compose-market/session/hooks";
|
|
2
|
+
export { BUDGET_PRESETS };
|
|
3
|
+
export interface ComposeKeyRecord {
|
|
4
|
+
composeKeyId: string;
|
|
5
|
+
budgetLimitWei: number;
|
|
6
|
+
budgetUsedWei: number;
|
|
7
|
+
budgetRemainingWei: number;
|
|
8
|
+
createdAt: number;
|
|
9
|
+
expiresAt: number;
|
|
10
|
+
revokedAt?: number;
|
|
11
|
+
name?: string;
|
|
12
|
+
lastUsedAt?: number;
|
|
13
|
+
chainId?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface SessionState {
|
|
16
|
+
isActive: boolean;
|
|
17
|
+
composeKeyId: string | null;
|
|
18
|
+
composeKeyToken: string | null;
|
|
19
|
+
paymentSessionId: string | null;
|
|
20
|
+
paymentSessionStatus: "active" | "expired" | "depleted" | "suspended" | null;
|
|
21
|
+
budgetLimitWei: number;
|
|
22
|
+
budgetUsedWei: number;
|
|
23
|
+
budgetLockedWei: number;
|
|
24
|
+
budgetRemainingWei: number;
|
|
25
|
+
expiresAt: number | null;
|
|
26
|
+
chainId: number | null;
|
|
27
|
+
name?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface SessionActions {
|
|
30
|
+
createSession: (budgetUSDC: number, durationHours?: number) => Promise<boolean>;
|
|
31
|
+
ensureToken: () => Promise<string | null>;
|
|
32
|
+
endSession: () => void;
|
|
33
|
+
}
|
|
34
|
+
export interface SessionBudgetDialogProps {
|
|
35
|
+
open?: boolean;
|
|
36
|
+
onOpenChange?: (open: boolean) => void;
|
|
37
|
+
showTrigger?: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface SessionStatusCardProps {
|
|
40
|
+
className?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface SessionIndicatorProps {
|
|
43
|
+
apiBaseUrl?: string;
|
|
44
|
+
}
|
|
45
|
+
export interface SessionManageDialogProps {
|
|
46
|
+
open: boolean;
|
|
47
|
+
onOpenChange: (open: boolean) => void;
|
|
48
|
+
apiBaseUrl?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface ComposeKeyDialogProps {
|
|
51
|
+
open: boolean;
|
|
52
|
+
onOpenChange: (open: boolean) => void;
|
|
53
|
+
apiBaseUrl?: string;
|
|
54
|
+
}
|
|
55
|
+
export declare function SessionBudgetDialog({ open: controlledOpen, onOpenChange: controlledOnOpenChange, showTrigger, }?: SessionBudgetDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
56
|
+
export declare function SessionStatusCard({ className }?: SessionStatusCardProps): import("react/jsx-runtime").JSX.Element | null;
|
|
57
|
+
export declare function SessionIndicator({ apiBaseUrl }?: SessionIndicatorProps): import("react/jsx-runtime").JSX.Element | null;
|
|
58
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/components/session.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAc,MAAM,+BAA+B,CAAC;AAsB3E,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,oBAAoB,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,IAAI,CAAC;IAC7E,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChF,WAAW,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1C,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAoDD,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,sBAAsB,EACpC,WAAkB,GACnB,GAAE,wBAA6B,2CAmI/B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,GAAE,sBAA2B,kDAwD3E;AAED,wBAAgB,gBAAgB,CAAC,EAAE,UAAU,EAAE,GAAE,qBAA0B,kDA2D1E"}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useMemo, useState } from "react";
|
|
4
|
+
import { BUDGET_PRESETS, useSession } from "@compose-market/session/hooks";
|
|
5
|
+
import { Button } from "./ui/button";
|
|
6
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "./ui/card";
|
|
7
|
+
import { Progress } from "./ui/progress";
|
|
8
|
+
import { Badge } from "./ui/badge";
|
|
9
|
+
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from "./ui/dialog";
|
|
10
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "./ui/dropdown-menu";
|
|
11
|
+
import { Check, ChevronDown, Clock, Copy, Key, Plus, Shield, Trash2, Wallet, X, Zap } from "lucide-react";
|
|
12
|
+
export { BUDGET_PRESETS };
|
|
13
|
+
function parseWei(value) {
|
|
14
|
+
if (value === undefined || value === null)
|
|
15
|
+
return 0;
|
|
16
|
+
const parsed = Number.parseInt(String(value), 10);
|
|
17
|
+
return Number.isFinite(parsed) ? Math.max(0, parsed) : 0;
|
|
18
|
+
}
|
|
19
|
+
function readString(source, ...keys) {
|
|
20
|
+
if (!source || typeof source !== "object")
|
|
21
|
+
return null;
|
|
22
|
+
const record = source;
|
|
23
|
+
for (const key of keys) {
|
|
24
|
+
const value = record[key];
|
|
25
|
+
if (typeof value === "string" && value.length > 0)
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
function readNumber(source, ...keys) {
|
|
31
|
+
if (!source || typeof source !== "object")
|
|
32
|
+
return 0;
|
|
33
|
+
const record = source;
|
|
34
|
+
for (const key of keys) {
|
|
35
|
+
const value = record[key];
|
|
36
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
37
|
+
return value;
|
|
38
|
+
if (typeof value === "string") {
|
|
39
|
+
const parsed = Number.parseInt(value, 10);
|
|
40
|
+
if (Number.isFinite(parsed))
|
|
41
|
+
return parsed;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return 0;
|
|
45
|
+
}
|
|
46
|
+
function resolveApiBaseUrl(override) {
|
|
47
|
+
if (override && override.trim().length > 0)
|
|
48
|
+
return override.replace(/\/+$/, "");
|
|
49
|
+
return "https://api.compose.market";
|
|
50
|
+
}
|
|
51
|
+
function formatTimeRemaining(expiresAt) {
|
|
52
|
+
const remaining = expiresAt - Date.now();
|
|
53
|
+
if (remaining <= 0)
|
|
54
|
+
return "Expired";
|
|
55
|
+
const hours = Math.floor(remaining / (1000 * 60 * 60));
|
|
56
|
+
const minutes = Math.floor((remaining % (1000 * 60 * 60)) / (1000 * 60));
|
|
57
|
+
if (hours > 24) {
|
|
58
|
+
const days = Math.floor(hours / 24);
|
|
59
|
+
return `${days}d ${hours % 24}h`;
|
|
60
|
+
}
|
|
61
|
+
if (hours > 0)
|
|
62
|
+
return `${hours}h ${minutes}m`;
|
|
63
|
+
return `${minutes}m`;
|
|
64
|
+
}
|
|
65
|
+
export function SessionBudgetDialog({ open: controlledOpen, onOpenChange: controlledOnOpenChange, showTrigger = true, } = {}) {
|
|
66
|
+
const { session, isCreating, error, createSession, budgetPresets } = useSession();
|
|
67
|
+
const presets = budgetPresets.length > 0 ? budgetPresets : BUDGET_PRESETS;
|
|
68
|
+
const [selectedBudget, setSelectedBudget] = useState(presets[1]?.value ?? presets[0]?.value ?? 10_000_000);
|
|
69
|
+
const [duration, setDuration] = useState(24);
|
|
70
|
+
const [internalOpen, setInternalOpen] = useState(false);
|
|
71
|
+
const isControlled = controlledOpen !== undefined;
|
|
72
|
+
const open = isControlled ? controlledOpen : internalOpen;
|
|
73
|
+
const setOpen = isControlled ? (controlledOnOpenChange || (() => { })) : setInternalOpen;
|
|
74
|
+
const handleCreate = async () => {
|
|
75
|
+
const budgetUSDC = selectedBudget / 1_000_000;
|
|
76
|
+
const success = await createSession(budgetUSDC, duration);
|
|
77
|
+
if (success) {
|
|
78
|
+
setOpen(false);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
return (_jsxs(Dialog, { open: open, onOpenChange: setOpen, children: [showTrigger && (_jsx(DialogTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", size: "sm", className: "border-cyan-500/30 bg-cyan-500/5 text-cyan-400 hover:bg-cyan-500/10 font-mono", children: [_jsx(Zap, { className: "w-4 h-4 mr-2" }), session.isActive ? "Session Active" : "Start Session"] }) })), _jsxs(DialogContent, { className: "bg-card border-sidebar-border max-w-md", children: [_jsxs(DialogHeader, { children: [_jsxs(DialogTitle, { className: "font-display text-cyan-400 flex items-center gap-2", children: [_jsx(Shield, { className: "w-5 h-5" }), "Session Budget"] }), _jsx(DialogDescription, { className: "text-muted-foreground", children: "Create a payment session from your Compose Key authority. No wallet signature or on-chain approval prompt is required." })] }), _jsxs("div", { className: "space-y-6 py-4", children: [_jsxs("div", { className: "space-y-3", children: [_jsx("label", { className: "text-sm font-medium text-muted-foreground font-mono", children: "Budget Limit (USDC)" }), _jsx("div", { className: "grid grid-cols-4 gap-2", children: presets.map((preset) => (_jsx(Button, { variant: selectedBudget === preset.value ? "default" : "outline", size: "sm", onClick: () => setSelectedBudget(preset.value), className: selectedBudget === preset.value
|
|
82
|
+
? "bg-cyan-500 text-black font-mono"
|
|
83
|
+
: "border-sidebar-border hover:border-cyan-500/50 font-mono", children: preset.label }, preset.value))) })] }), _jsxs("div", { className: "space-y-3", children: [_jsxs("label", { className: "text-sm font-medium text-muted-foreground flex items-center gap-2 font-mono", children: [_jsx(Clock, { className: "w-4 h-4" }), "Session Duration"] }), _jsx("div", { className: "grid grid-cols-4 gap-2", children: [1, 6, 12, 24].map((hours) => (_jsxs(Button, { variant: duration === hours ? "default" : "outline", size: "sm", onClick: () => setDuration(hours), className: duration === hours
|
|
84
|
+
? "bg-cyan-500 text-black font-mono"
|
|
85
|
+
: "border-sidebar-border hover:border-cyan-500/50 font-mono", children: [hours, "h"] }, hours))) })] }), _jsxs("div", { className: "bg-sidebar-accent rounded-sm p-4 space-y-2 border border-sidebar-border", children: [_jsxs("div", { className: "flex items-center justify-between text-sm", children: [_jsx("span", { className: "text-muted-foreground font-mono", children: "Max Spend" }), _jsxs("span", { className: "font-mono text-cyan-400", children: ["$", (selectedBudget / 1_000_000).toFixed(2), " USDC"] })] }), _jsxs("div", { className: "flex items-center justify-between text-sm", children: [_jsx("span", { className: "text-muted-foreground font-mono", children: "Expires After" }), _jsxs("span", { className: "font-mono text-foreground", children: [duration, " hours"] })] }), _jsxs("div", { className: "flex items-center justify-between text-sm", children: [_jsx("span", { className: "text-muted-foreground font-mono", children: "Approvals Required" }), _jsx("span", { className: "font-mono text-fuchsia-400", children: "0" })] })] }), error ? (_jsx("div", { className: "bg-destructive/10 border border-destructive/30 rounded-sm p-3 text-sm text-destructive", children: error })) : null, _jsx(Button, { onClick: handleCreate, disabled: isCreating, className: "w-full bg-cyan-500 text-black hover:bg-cyan-400 font-mono font-bold", children: isCreating ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "w-4 h-4 border-2 border-black/30 border-t-black rounded-full animate-spin mr-2" }), "Creating Session..."] })) : (_jsxs(_Fragment, { children: [_jsx(Wallet, { className: "w-4 h-4 mr-2" }), "Create Payment Session"] })) })] })] })] }));
|
|
86
|
+
}
|
|
87
|
+
export function SessionStatusCard({ className } = {}) {
|
|
88
|
+
const { session, endSession } = useSession();
|
|
89
|
+
const budgetLimit = readNumber(session, "budgetLimitWei");
|
|
90
|
+
const budgetUsed = readNumber(session, "budgetUsedWei");
|
|
91
|
+
const budgetRemaining = readNumber(session, "budgetRemainingWei");
|
|
92
|
+
if (!session.isActive || budgetLimit <= 0)
|
|
93
|
+
return null;
|
|
94
|
+
const usagePercent = (budgetUsed / budgetLimit) * 100;
|
|
95
|
+
const remainingUSDC = budgetRemaining / 1_000_000;
|
|
96
|
+
const totalUSDC = budgetLimit / 1_000_000;
|
|
97
|
+
const timeRemaining = session.expiresAt ? Math.max(0, session.expiresAt - Date.now()) : 0;
|
|
98
|
+
const hoursRemaining = Math.floor(timeRemaining / (1000 * 60 * 60));
|
|
99
|
+
const minutesRemaining = Math.floor((timeRemaining % (1000 * 60 * 60)) / (1000 * 60));
|
|
100
|
+
return (_jsxs(Card, { className: `glass-panel border-cyan-500/20 ${className ?? ""}`, children: [_jsxs(CardHeader, { className: "pb-2", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs(CardTitle, { className: "text-sm font-display flex items-center gap-2", children: [_jsx(Zap, { className: "w-4 h-4 text-cyan-400" }), "Fast Mode Active"] }), _jsx(Button, { variant: "ghost", size: "icon", className: "h-6 w-6 text-muted-foreground hover:text-destructive", onClick: endSession, children: _jsx(X, { className: "w-4 h-4" }) })] }), _jsxs(CardDescription, { className: "text-xs font-mono", children: ["No signatures needed \u2022 ", hoursRemaining, "h ", minutesRemaining, "m remaining"] })] }), _jsxs(CardContent, { className: "space-y-3", children: [_jsxs("div", { className: "space-y-1", children: [_jsxs("div", { className: "flex justify-between text-xs font-mono", children: [_jsx("span", { className: "text-muted-foreground", children: "Budget Used" }), _jsxs("span", { children: ["$", (budgetUsed / 1_000_000).toFixed(4), " / $", totalUSDC.toFixed(2)] })] }), _jsx(Progress, { value: usagePercent, className: "h-2" })] }), _jsx("div", { className: "flex items-center justify-between", children: _jsxs(Badge, { variant: "outline", className: "text-xs border-cyan-500/30 text-cyan-400 font-mono", children: ["$", remainingUSDC.toFixed(4), " remaining"] }) })] })] }));
|
|
101
|
+
}
|
|
102
|
+
export function SessionIndicator({ apiBaseUrl } = {}) {
|
|
103
|
+
const { session } = useSession();
|
|
104
|
+
const [keyDialogOpen, setKeyDialogOpen] = useState(false);
|
|
105
|
+
const [manageDialogOpen, setManageDialogOpen] = useState(false);
|
|
106
|
+
const sessionToken = readString(session, "composeKeyToken");
|
|
107
|
+
if (!sessionToken) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
if (!session.isActive) {
|
|
111
|
+
return _jsx(SessionBudgetDialog, {});
|
|
112
|
+
}
|
|
113
|
+
const remainingUSDC = readNumber(session, "budgetRemainingWei") / 1_000_000;
|
|
114
|
+
const timeRemaining = session.expiresAt ? formatTimeRemaining(session.expiresAt) : "";
|
|
115
|
+
return (_jsxs("div", { className: "flex items-center gap-1 md:gap-2", children: [_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", size: "sm", className: "border-cyan-500/30 bg-cyan-500/5 text-cyan-400 hover:bg-cyan-500/10 font-mono h-8 px-2 md:px-3", children: [_jsx(Zap, { className: "w-4 h-4 md:mr-2" }), _jsx("span", { className: "hidden md:inline", children: "Session" }), _jsxs("span", { className: "md:hidden text-xs", children: ["$", remainingUSDC.toFixed(0)] }), _jsx(ChevronDown, { className: "w-3 h-3 ml-1" })] }) }), _jsxs(DropdownMenuContent, { align: "end", className: "w-56", children: [_jsxs("div", { className: "px-2 py-2 border-b border-sidebar-border mb-1", children: [_jsxs("div", { className: "flex items-center justify-between text-xs", children: [_jsx("span", { className: "text-muted-foreground font-mono", children: "Budget" }), _jsxs("span", { className: "text-cyan-400 font-mono font-medium", children: ["$", remainingUSDC.toFixed(2)] })] }), _jsxs("div", { className: "flex items-center justify-between text-xs mt-1", children: [_jsx("span", { className: "text-muted-foreground font-mono", children: "Expires" }), _jsx("span", { className: "text-foreground font-mono", children: timeRemaining })] })] }), _jsxs(DropdownMenuItem, { onClick: () => setKeyDialogOpen(true), children: [_jsx(Key, { className: "w-4 h-4 mr-2" }), "Generate API Key"] }), _jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuItem, { onClick: () => setManageDialogOpen(true), children: [_jsx(Wallet, { className: "w-4 h-4 mr-2" }), "Manage Sessions"] })] })] }), _jsx(ComposeKeyDialog, { open: keyDialogOpen, onOpenChange: setKeyDialogOpen, apiBaseUrl: apiBaseUrl }), _jsx(SessionManageDialog, { open: manageDialogOpen, onOpenChange: setManageDialogOpen, apiBaseUrl: apiBaseUrl })] }));
|
|
116
|
+
}
|
|
117
|
+
function SessionManageDialog({ open, onOpenChange, apiBaseUrl }) {
|
|
118
|
+
const { session, ensureToken } = useSession();
|
|
119
|
+
const sessionBudgetRemaining = readNumber(session, "budgetRemainingWei");
|
|
120
|
+
const [sessions, setSessions] = useState([]);
|
|
121
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
122
|
+
const [createDialogOpen, setCreateDialogOpen] = useState(false);
|
|
123
|
+
const [copiedKeyId, setCopiedKeyId] = useState(null);
|
|
124
|
+
const [error, setError] = useState(null);
|
|
125
|
+
const composeKeyToken = readString(session, "composeKeyToken");
|
|
126
|
+
const baseUrl = resolveApiBaseUrl(apiBaseUrl);
|
|
127
|
+
const fetchSessions = async () => {
|
|
128
|
+
setIsLoading(true);
|
|
129
|
+
setError(null);
|
|
130
|
+
try {
|
|
131
|
+
const activeToken = composeKeyToken || (await ensureToken());
|
|
132
|
+
if (!activeToken) {
|
|
133
|
+
setSessions([]);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const response = await fetch(`${baseUrl}/api/v2/compose-keys`, {
|
|
137
|
+
headers: {
|
|
138
|
+
Authorization: `Bearer ${activeToken}`,
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
if (!response.ok) {
|
|
142
|
+
setError("Failed to fetch sessions");
|
|
143
|
+
setSessions([]);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const payload = (await response.json());
|
|
147
|
+
const mapped = (payload.composeKeys || []).map((item) => ({
|
|
148
|
+
composeKeyId: String(item.composeKeyId || ""),
|
|
149
|
+
budgetLimitWei: parseWei(item.budgetLimitWei),
|
|
150
|
+
budgetUsedWei: parseWei(item.budgetUsedWei),
|
|
151
|
+
budgetRemainingWei: parseWei(item.budgetRemainingWei),
|
|
152
|
+
createdAt: Number(item.createdAt || 0),
|
|
153
|
+
expiresAt: Number(item.expiresAt || 0),
|
|
154
|
+
revokedAt: item.revokedAt ? Number(item.revokedAt) : undefined,
|
|
155
|
+
name: item.name,
|
|
156
|
+
lastUsedAt: item.lastUsedAt ? Number(item.lastUsedAt) : undefined,
|
|
157
|
+
chainId: item.chainId ? Number(item.chainId) : undefined,
|
|
158
|
+
}));
|
|
159
|
+
setSessions(mapped.filter((item) => !item.revokedAt && item.expiresAt > Date.now()));
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
setError("Failed to fetch sessions");
|
|
163
|
+
setSessions([]);
|
|
164
|
+
}
|
|
165
|
+
finally {
|
|
166
|
+
setIsLoading(false);
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
useEffect(() => {
|
|
170
|
+
if (open) {
|
|
171
|
+
void fetchSessions();
|
|
172
|
+
}
|
|
173
|
+
}, [open, composeKeyToken]);
|
|
174
|
+
const handleRevoke = async (composeKeyId) => {
|
|
175
|
+
const activeToken = composeKeyToken || (await ensureToken());
|
|
176
|
+
if (!activeToken) {
|
|
177
|
+
setError("Compose key token not available");
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const response = await fetch(`${baseUrl}/api/v2/compose-keys/${encodeURIComponent(composeKeyId)}`, {
|
|
181
|
+
method: "DELETE",
|
|
182
|
+
headers: {
|
|
183
|
+
Authorization: `Bearer ${activeToken}`,
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
if (!response.ok) {
|
|
187
|
+
setError("Failed to revoke session");
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
setError(null);
|
|
191
|
+
await fetchSessions();
|
|
192
|
+
};
|
|
193
|
+
const handleCopyKey = async (composeKeyId) => {
|
|
194
|
+
const maskedKey = `compose-${composeKeyId.slice(0, 8)}***`;
|
|
195
|
+
await navigator.clipboard.writeText(maskedKey);
|
|
196
|
+
setCopiedKeyId(composeKeyId);
|
|
197
|
+
setTimeout(() => setCopiedKeyId(null), 2000);
|
|
198
|
+
};
|
|
199
|
+
const handleCreateClose = (nextOpen) => {
|
|
200
|
+
setCreateDialogOpen(nextOpen);
|
|
201
|
+
if (!nextOpen) {
|
|
202
|
+
void fetchSessions();
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
return (_jsxs(_Fragment, { children: [_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "bg-card border-sidebar-border max-w-md max-h-[80vh] overflow-y-auto", children: [_jsxs(DialogHeader, { children: [_jsxs(DialogTitle, { className: "font-display text-cyan-400 flex items-center gap-2", children: [_jsx(Wallet, { className: "w-5 h-5" }), "Manage Sessions"] }), _jsx(DialogDescription, { className: "text-muted-foreground", children: "View and manage your active API sessions and keys." })] }), _jsxs("div", { className: "space-y-4 py-4", children: [session.isActive ? (_jsxs("div", { className: "bg-cyan-500/10 border border-cyan-500/30 rounded-sm p-3", children: [_jsxs("div", { className: "flex items-center gap-2 mb-2", children: [_jsx(Zap, { className: "w-4 h-4 text-cyan-400" }), _jsx("span", { className: "text-sm font-medium text-cyan-400 font-mono", children: "Current Session" })] }), _jsxs("div", { className: "grid grid-cols-2 gap-2 text-xs", children: [_jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground", children: "Remaining" }), _jsxs("p", { className: "font-mono text-foreground", children: ["$", (sessionBudgetRemaining / 1_000_000).toFixed(2)] })] }), _jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground", children: "Expires" }), _jsx("p", { className: "font-mono text-foreground", children: session.expiresAt ? formatTimeRemaining(session.expiresAt) : "Never" })] })] })] })) : null, _jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-sm font-medium text-muted-foreground font-mono", children: "API Keys" }), _jsxs(Button, { variant: "ghost", size: "sm", onClick: () => setCreateDialogOpen(true), className: "h-7 text-cyan-400 hover:text-cyan-300 hover:bg-cyan-500/10", children: [_jsx(Plus, { className: "w-4 h-4 mr-1" }), "New Key"] })] }), isLoading ? (_jsx("div", { className: "flex items-center justify-center py-8", children: _jsx("div", { className: "w-6 h-6 border-2 border-cyan-500/30 border-t-cyan-500 rounded-full animate-spin" }) })) : sessions.length === 0 ? (_jsxs("div", { className: "text-center py-6 text-muted-foreground text-sm", children: ["No API keys created yet.", _jsx("br", {}), _jsx("button", { onClick: () => setCreateDialogOpen(true), className: "text-cyan-400 hover:underline mt-1", children: "Generate your first key" })] })) : (_jsx("div", { className: "space-y-2", children: sessions.map((item) => {
|
|
206
|
+
const budgetRemainingWei = parseWei(item.budgetRemainingWei);
|
|
207
|
+
const budgetLimitWei = parseWei(item.budgetLimitWei);
|
|
208
|
+
return (_jsxs("div", { className: "bg-sidebar-accent border border-sidebar-border rounded-sm p-3", children: [_jsxs("div", { className: "flex items-center justify-between mb-2", children: [_jsx("span", { className: "font-mono text-sm text-foreground truncate", children: item.name || "Unnamed Key" }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("button", { onClick: () => void handleCopyKey(item.composeKeyId), className: "p-1 text-muted-foreground hover:text-cyan-400 transition-colors", title: "Copy key ID", children: copiedKeyId === item.composeKeyId ? (_jsx(Check, { className: "w-3.5 h-3.5 text-green-400" })) : (_jsx(Copy, { className: "w-3.5 h-3.5" })) }), _jsx("button", { onClick: () => void handleRevoke(item.composeKeyId), className: "p-1 text-muted-foreground hover:text-destructive transition-colors", title: "Revoke key", children: _jsx(Trash2, { className: "w-3.5 h-3.5" }) })] })] }), _jsx("div", { className: "flex items-center gap-3 text-xs text-muted-foreground", children: _jsxs("span", { className: "font-mono", children: ["compose-", item.composeKeyId.slice(0, 8), "***"] }) }), _jsxs("div", { className: "grid grid-cols-2 gap-2 mt-2 text-xs", children: [_jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground", children: "Budget" }), _jsxs("p", { className: "font-mono text-cyan-400", children: ["$", (budgetRemainingWei / 1_000_000).toFixed(2), " / $", (budgetLimitWei / 1_000_000).toFixed(2)] })] }), _jsxs("div", { children: [_jsx("span", { className: "text-muted-foreground", children: "Expires" }), _jsx("p", { className: "font-mono text-foreground", children: formatTimeRemaining(item.expiresAt) })] })] })] }, item.composeKeyId));
|
|
209
|
+
}) }))] }), error ? (_jsx("div", { className: "bg-destructive/10 border border-destructive/30 rounded-sm p-3 text-sm text-destructive", children: error })) : null] })] }) }), _jsx(ComposeKeyDialog, { open: createDialogOpen, onOpenChange: handleCreateClose, apiBaseUrl: apiBaseUrl })] }));
|
|
210
|
+
}
|
|
211
|
+
function ComposeKeyDialog({ open, onOpenChange, apiBaseUrl }) {
|
|
212
|
+
const { session, ensureToken } = useSession();
|
|
213
|
+
const sessionToken = readString(session, "composeKeyToken");
|
|
214
|
+
const sessionBudgetRemaining = readNumber(session, "budgetRemainingWei");
|
|
215
|
+
const [isGenerating, setIsGenerating] = useState(false);
|
|
216
|
+
const [generatedKey, setGeneratedKey] = useState(null);
|
|
217
|
+
const [copied, setCopied] = useState(false);
|
|
218
|
+
const [keyName, setKeyName] = useState("Desktop");
|
|
219
|
+
const [error, setError] = useState(null);
|
|
220
|
+
const baseUrl = useMemo(() => resolveApiBaseUrl(apiBaseUrl), [apiBaseUrl]);
|
|
221
|
+
const handleGenerate = async () => {
|
|
222
|
+
setIsGenerating(true);
|
|
223
|
+
setError(null);
|
|
224
|
+
try {
|
|
225
|
+
const activeToken = sessionToken || (await ensureToken());
|
|
226
|
+
if (!activeToken) {
|
|
227
|
+
setError("Compose key token not available");
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const budgetLimitWei = String(Math.max(sessionBudgetRemaining || 0, 1_000_000));
|
|
231
|
+
const expiresAt = session.expiresAt || (Date.now() + 24 * 60 * 60 * 1000);
|
|
232
|
+
const response = await fetch(`${baseUrl}/api/v2/compose-keys`, {
|
|
233
|
+
method: "POST",
|
|
234
|
+
headers: {
|
|
235
|
+
"Content-Type": "application/json",
|
|
236
|
+
Authorization: `Bearer ${activeToken}`,
|
|
237
|
+
},
|
|
238
|
+
body: JSON.stringify({
|
|
239
|
+
budgetLimitWei,
|
|
240
|
+
expiresAt,
|
|
241
|
+
chainId: session.chainId || undefined,
|
|
242
|
+
name: keyName,
|
|
243
|
+
}),
|
|
244
|
+
});
|
|
245
|
+
if (!response.ok) {
|
|
246
|
+
setError(`Failed to generate key (${response.status})`);
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
const data = (await response.json());
|
|
250
|
+
const nextToken = data.composeKeyToken || null;
|
|
251
|
+
setGeneratedKey(nextToken);
|
|
252
|
+
if (!nextToken) {
|
|
253
|
+
setError("Key generated but token was not returned");
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
setError("Failed to generate API key");
|
|
258
|
+
}
|
|
259
|
+
finally {
|
|
260
|
+
setIsGenerating(false);
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
const handleCopy = async () => {
|
|
264
|
+
if (!generatedKey)
|
|
265
|
+
return;
|
|
266
|
+
await navigator.clipboard.writeText(generatedKey);
|
|
267
|
+
setCopied(true);
|
|
268
|
+
setTimeout(() => setCopied(false), 2000);
|
|
269
|
+
};
|
|
270
|
+
const handleClose = (nextOpen) => {
|
|
271
|
+
if (!nextOpen) {
|
|
272
|
+
setGeneratedKey(null);
|
|
273
|
+
setCopied(false);
|
|
274
|
+
setError(null);
|
|
275
|
+
}
|
|
276
|
+
onOpenChange(nextOpen);
|
|
277
|
+
};
|
|
278
|
+
return (_jsx(Dialog, { open: open, onOpenChange: handleClose, children: _jsxs(DialogContent, { className: "bg-card border-sidebar-border max-w-md", children: [_jsxs(DialogHeader, { children: [_jsxs(DialogTitle, { className: "font-display text-fuchsia-400 flex items-center gap-2", children: [_jsx(Key, { className: "w-5 h-5" }), "Generate API Key"] }), _jsx(DialogDescription, { className: "text-muted-foreground", children: "Create a key for external tools. Uses your Compose Key authority, no wallet signature required." })] }), _jsx("div", { className: "space-y-4 py-4", children: !generatedKey ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "space-y-2", children: [_jsx("label", { className: "text-sm font-medium text-muted-foreground font-mono", children: "Key Name" }), _jsx("input", { type: "text", value: keyName, onChange: (event) => setKeyName(event.target.value), placeholder: "e.g., Cursor, OpenCode", className: "w-full px-3 py-2 bg-sidebar-accent border border-sidebar-border rounded-sm font-mono text-sm focus:border-fuchsia-500 focus:outline-none" })] }), _jsxs("div", { className: "bg-sidebar-accent rounded-sm p-4 space-y-2 border border-sidebar-border", children: [_jsxs("div", { className: "flex items-center justify-between text-sm", children: [_jsx("span", { className: "text-muted-foreground font-mono", children: "Budget" }), _jsxs("span", { className: "font-mono text-fuchsia-400", children: ["$", (sessionBudgetRemaining / 1_000_000).toFixed(2), " USDC"] })] }), _jsxs("div", { className: "flex items-center justify-between text-sm", children: [_jsx("span", { className: "text-muted-foreground font-mono", children: "Expires" }), _jsx("span", { className: "font-mono text-foreground", children: session.expiresAt ? new Date(session.expiresAt).toLocaleString() : "Never" })] })] }), error ? (_jsx("div", { className: "bg-destructive/10 border border-destructive/30 rounded-sm p-3 text-sm text-destructive", children: error })) : null, _jsx(Button, { onClick: handleGenerate, disabled: isGenerating, className: "w-full bg-fuchsia-500 text-white hover:bg-fuchsia-400 font-mono font-bold", children: isGenerating ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "w-4 h-4 border-2 border-white/30 border-t-white rounded-full animate-spin mr-2" }), "Generating..."] })) : (_jsxs(_Fragment, { children: [_jsx(Key, { className: "w-4 h-4 mr-2" }), "Generate Key"] })) })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "space-y-2", children: [_jsx("label", { className: "text-sm font-medium text-muted-foreground font-mono", children: "Your API Key" }), _jsxs("div", { className: "relative", children: [_jsx("input", { type: "text", readOnly: true, value: generatedKey, className: "w-full px-3 py-2 pr-10 bg-sidebar-accent border border-fuchsia-500/50 rounded-sm font-mono text-xs focus:outline-none" }), _jsx("button", { onClick: () => void handleCopy(), className: "absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-fuchsia-400 transition-colors", children: copied ? _jsx(Check, { className: "w-4 h-4 text-green-400" }) : _jsx(Copy, { className: "w-4 h-4" }) })] })] }), _jsx("div", { className: "bg-amber-500/10 border border-amber-500/30 rounded-sm p-3 text-sm text-amber-400", children: "Save this key now. You will not be able to see it again." }), _jsxs("div", { className: "bg-sidebar-accent rounded-sm p-4 space-y-2 border border-sidebar-border", children: [_jsx("p", { className: "text-sm text-muted-foreground font-mono", children: "Use in external tool settings:" }), _jsxs("code", { className: "block text-xs bg-black/50 p-2 rounded font-mono text-fuchsia-400 break-all", children: ["Authorization: Bearer ", generatedKey.slice(0, 20), "..."] })] }), _jsx(Button, { onClick: () => void handleCopy(), className: "w-full bg-fuchsia-500 text-white hover:bg-fuchsia-400 font-mono font-bold", children: copied ? (_jsxs(_Fragment, { children: [_jsx(Check, { className: "w-4 h-4 mr-2" }), "Copied!"] })) : (_jsxs(_Fragment, { children: [_jsx(Copy, { className: "w-4 h-4 mr-2" }), "Copy to Clipboard"] })) })] })) })] }) }));
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/components/session.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
declare const badgeVariants: (props?: ({
|
|
4
|
+
variant?: "default" | "secondary" | "destructive" | "outline" | null | undefined;
|
|
5
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
|
+
export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
|
|
7
|
+
}
|
|
8
|
+
declare function Badge({ className, variant, ...props }: BadgeProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export { Badge, badgeVariants };
|
|
10
|
+
//# sourceMappingURL=badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../src/components/ui/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIjE,QAAA,MAAM,aAAa;;8EAoBlB,CAAA;AAED,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAC1C,YAAY,CAAC,OAAO,aAAa,CAAC;CAAG;AAEzC,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CAI1D;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cva } from "class-variance-authority";
|
|
3
|
+
import { cn } from "@/lib/utils";
|
|
4
|
+
const badgeVariants = cva(
|
|
5
|
+
// Whitespace-nowrap: Badges should never wrap.
|
|
6
|
+
"whitespace-nowrap inline-flex items-center rounded-sm border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2" +
|
|
7
|
+
" hover-elevate ", {
|
|
8
|
+
variants: {
|
|
9
|
+
variant: {
|
|
10
|
+
default: "border-transparent bg-primary text-primary-foreground shadow-xs",
|
|
11
|
+
secondary: "border-transparent bg-secondary text-secondary-foreground",
|
|
12
|
+
destructive: "border-transparent bg-destructive text-destructive-foreground shadow-xs",
|
|
13
|
+
outline: "text-foreground border [border-color:var(--badge-outline)]",
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
defaultVariants: {
|
|
17
|
+
variant: "default",
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
function Badge({ className, variant, ...props }) {
|
|
21
|
+
return (_jsx("div", { className: cn(badgeVariants({ variant }), className), ...props }));
|
|
22
|
+
}
|
|
23
|
+
export { Badge, badgeVariants };
|
|
24
|
+
//# sourceMappingURL=badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.js","sourceRoot":"","sources":["../../../src/components/ui/badge.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,MAAM,aAAa,GAAG,GAAG;AACvB,+CAA+C;AAC/C,wLAAwL;IACxL,iBAAiB,EACjB;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EACL,iEAAiE;YACnE,SAAS,EACP,2DAA2D;YAC7D,WAAW,EACT,yEAAyE;YAC3E,OAAO,EAAE,4DAA4D;SACtE;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;KACnB;CACF,CACF,CAAA;AAMD,SAAS,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAc;IACzD,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CACzE,CAAA;AACH,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
import { type SurfaceVariant } from "@/components/ui/surface-variant";
|
|
4
|
+
declare const buttonVariants: (props?: ({
|
|
5
|
+
variant?: "default" | "secondary" | "destructive" | "outline" | "link" | "ghost" | null | undefined;
|
|
6
|
+
size?: "sm" | "lg" | "default" | "icon" | null | undefined;
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
|
+
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
9
|
+
asChild?: boolean;
|
|
10
|
+
surface?: SurfaceVariant;
|
|
11
|
+
}
|
|
12
|
+
declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
13
|
+
export { Button, buttonVariants };
|
|
14
|
+
//# sourceMappingURL=button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGjE,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAExF,QAAA,MAAM,cAAc;;;8EAkCnB,CAAA;AAED,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EACnD,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,cAAc,CAAA;CACzB;AAED,QAAA,MAAM,MAAM,uFAWX,CAAA;AAGD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
4
|
+
import { cva } from "class-variance-authority";
|
|
5
|
+
import { cn } from "@/lib/utils";
|
|
6
|
+
import { getSurfaceClasses } from "@/components/ui/surface-variant";
|
|
7
|
+
const buttonVariants = cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-sm text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0" +
|
|
8
|
+
" hover-elevate active-elevate-2", {
|
|
9
|
+
variants: {
|
|
10
|
+
variant: {
|
|
11
|
+
default: "bg-primary text-primary-foreground border border-primary-border",
|
|
12
|
+
destructive: "bg-destructive text-destructive-foreground shadow-sm border-destructive-border",
|
|
13
|
+
outline:
|
|
14
|
+
// Inherits the current text color. Uses shadow-xs. no shadow on active
|
|
15
|
+
// No hover state
|
|
16
|
+
" border [border-color:var(--button-outline)] shadow-xs active:shadow-none ",
|
|
17
|
+
secondary:
|
|
18
|
+
// border, no hover, no shadow, secondary border.
|
|
19
|
+
"border bg-secondary text-secondary-foreground border border-secondary-border ",
|
|
20
|
+
// no hover, transparent border
|
|
21
|
+
ghost: "border border-transparent",
|
|
22
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
23
|
+
},
|
|
24
|
+
size: {
|
|
25
|
+
// changed sizes
|
|
26
|
+
default: "min-h-9 px-4 py-2",
|
|
27
|
+
sm: "min-h-8 rounded-sm px-3 text-xs",
|
|
28
|
+
lg: "min-h-10 rounded-sm px-8",
|
|
29
|
+
icon: "h-9 w-9",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
defaultVariants: {
|
|
33
|
+
variant: "default",
|
|
34
|
+
size: "default",
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
const Button = React.forwardRef(({ className, variant, size, surface = "default", asChild = false, ...props }, ref) => {
|
|
38
|
+
const Comp = asChild ? Slot : "button";
|
|
39
|
+
return (_jsx(Comp, { className: cn(buttonVariants({ variant, size }), getSurfaceClasses(surface), className), ref: ref, ...props }));
|
|
40
|
+
});
|
|
41
|
+
Button.displayName = "Button";
|
|
42
|
+
export { Button, buttonVariants };
|
|
43
|
+
//# sourceMappingURL=button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.js","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,iBAAiB,EAAuB,MAAM,iCAAiC,CAAA;AAExF,MAAM,cAAc,GAAG,GAAG,CACxB,uSAAuS;IACzS,iCAAiC,EAC/B;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EACJ,iEAAiE;YACpE,WAAW,EACT,gFAAgF;YAClF,OAAO;YACL,uEAAuE;YACvE,iBAAiB;YACjB,4EAA4E;YAC9E,SAAS;YACP,iDAAiD;YACjD,+EAA+E;YACjF,+BAA+B;YAC/B,KAAK,EAAE,2BAA2B;YAClC,IAAI,EAAE,iDAAiD;SACxD;QACD,IAAI,EAAE;YACJ,gBAAgB;YAChB,OAAO,EAAE,mBAAmB;YAC5B,EAAE,EAAE,iCAAiC;YACrC,EAAE,EAAE,0BAA0B;YAC9B,IAAI,EAAE,SAAS;SAChB;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;KAChB;CACF,CACF,CAAA;AASD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAC7B,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACpF,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAA;IACtC,OAAO,CACL,KAAC,IAAI,IACH,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,EACvF,GAAG,EAAE,GAAG,KACJ,KAAK,GACT,CACH,CAAA;AACH,CAAC,CACF,CAAA;AACD,MAAM,CAAC,WAAW,GAAG,QAAQ,CAAA;AAE7B,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA"}
|