@toon-protocol/views 0.8.1 → 0.8.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/dist/app/index.html +91 -66
- package/dist/atoms/loading.d.ts +3 -0
- package/dist/atoms/loading.d.ts.map +1 -0
- package/dist/atoms/loading.js +76 -0
- package/dist/atoms/loading.js.map +1 -0
- package/dist/atoms/registry.d.ts.map +1 -1
- package/dist/atoms/registry.js +4 -0
- package/dist/atoms/registry.js.map +1 -1
- package/dist/atoms/types.d.ts +41 -0
- package/dist/atoms/types.d.ts.map +1 -1
- package/dist/atoms/wallet.d.ts +10 -0
- package/dist/atoms/wallet.d.ts.map +1 -0
- package/dist/atoms/wallet.js +135 -0
- package/dist/atoms/wallet.js.map +1 -0
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +50 -1
- package/dist/catalog.js.map +1 -1
- package/dist/components/copy-button.d.ts +13 -0
- package/dist/components/copy-button.d.ts.map +1 -0
- package/dist/components/copy-button.js +28 -0
- package/dist/components/copy-button.js.map +1 -0
- package/dist/components/ui/skeleton.d.ts +9 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +13 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/components/ui/spinner.d.ts +17 -0
- package/dist/components/ui/spinner.d.ts.map +1 -0
- package/dist/components/ui/spinner.js +19 -0
- package/dist/components/ui/spinner.js.map +1 -0
- package/dist/gallery/fixtures.d.ts +15 -0
- package/dist/gallery/fixtures.d.ts.map +1 -1
- package/dist/gallery/fixtures.js +10 -0
- package/dist/gallery/fixtures.js.map +1 -1
- package/dist/gallery/gallery.js +43 -1
- package/dist/gallery/gallery.js.map +1 -1
- package/dist/gallery/mock-bridge.d.ts.map +1 -1
- package/dist/gallery/mock-bridge.js +12 -2
- package/dist/gallery/mock-bridge.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +20 -2
- package/dist/runtime.js.map +1 -1
- package/dist/server/apps-server.d.ts.map +1 -1
- package/dist/server/apps-server.js +36 -1
- package/dist/server/apps-server.js.map +1 -1
- package/dist/server/backend.d.ts +52 -1
- package/dist/server/backend.d.ts.map +1 -1
- package/dist/server/daemon-backend.d.ts +34 -1
- package/dist/server/daemon-backend.d.ts.map +1 -1
- package/dist/server/daemon-backend.js +17 -0
- package/dist/server/daemon-backend.js.map +1 -1
- package/dist/server/daemon-main.js +3 -0
- package/dist/server/daemon-main.js.map +1 -1
- package/dist/server/fake-backend.d.ts +17 -1
- package/dist/server/fake-backend.d.ts.map +1 -1
- package/dist/server/fake-backend.js +29 -0
- package/dist/server/fake-backend.js.map +1 -1
- package/dist/tool-names.d.ts +6 -0
- package/dist/tool-names.d.ts.map +1 -1
- package/dist/tool-names.js +9 -0
- package/dist/tool-names.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading.d.ts","sourceRoot":"","sources":["../../src/atoms/loading.tsx"],"names":[],"mappings":"AAmBA,OAAO,EAAE,KAAK,IAAI,EAAwB,MAAM,YAAY,CAAC;AA2J7D,eAAO,MAAM,YAAY,EAAE,IAAI,EAI9B,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Loading / placeholder atoms.
|
|
4
|
+
*
|
|
5
|
+
* These carry no event `kinds` and no data binds — they're pure, props-driven
|
|
6
|
+
* surfaces the agent renders *immediately* (as a first `toon_render`) while it
|
|
7
|
+
* works out the real user journey, then replaces with the finished view. Three
|
|
8
|
+
* shapes:
|
|
9
|
+
* - `skeleton` — pulsing silhouettes that mimic the layout to come.
|
|
10
|
+
* - `loading` — a spinner + an optional status line the agent narrates.
|
|
11
|
+
* - `progress-steps`— a numbered stepper for multi-step journeys (e.g.
|
|
12
|
+
* Close → Wait → Settle), reused by the withdraw flow.
|
|
13
|
+
*
|
|
14
|
+
* All colour rides the design tokens, so light/dark are handled for free.
|
|
15
|
+
*/
|
|
16
|
+
import {} from 'react';
|
|
17
|
+
import { Check, X } from 'lucide-react';
|
|
18
|
+
import { Skeleton } from '@/components/ui/skeleton.js';
|
|
19
|
+
import { Spinner } from '@/components/ui/spinner.js';
|
|
20
|
+
import { cn } from '@/lib/utils.js';
|
|
21
|
+
import {} from './types.js';
|
|
22
|
+
const str = (v, fallback = '') => typeof v === 'string' ? v : typeof v === 'number' ? String(v) : fallback;
|
|
23
|
+
const int = (v, fallback) => typeof v === 'number' && Number.isFinite(v) ? Math.trunc(v) : fallback;
|
|
24
|
+
/** Pulsing placeholder. `variant` picks the silhouette; `lines` sizes the list. */
|
|
25
|
+
const SkeletonAtom = ({ props }) => {
|
|
26
|
+
const variant = props['variant'] === 'avatar' || props['variant'] === 'card' ? props['variant'] : 'lines';
|
|
27
|
+
const lines = Math.min(12, Math.max(1, int(props['lines'], 3)));
|
|
28
|
+
const width = str(props['width']) || undefined;
|
|
29
|
+
if (variant === 'avatar') {
|
|
30
|
+
return (_jsxs("div", { className: "flex items-center gap-3", role: "status", "aria-busy": "true", "aria-label": "Loading", children: [_jsx(Skeleton, { className: "size-10 shrink-0 rounded-full" }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-2", children: [_jsx(Skeleton, { className: "h-3.5 w-1/3" }), _jsx(Skeleton, { className: "h-3 w-2/3" })] })] }));
|
|
31
|
+
}
|
|
32
|
+
if (variant === 'card') {
|
|
33
|
+
return (_jsxs("div", { className: "flex flex-col gap-3 rounded-xl border border-border bg-card p-4", role: "status", "aria-busy": "true", "aria-label": "Loading", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Skeleton, { className: "size-9 shrink-0 rounded-full" }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-2", children: [_jsx(Skeleton, { className: "h-3.5 w-1/3" }), _jsx(Skeleton, { className: "h-3 w-1/4" })] })] }), _jsx(Skeleton, { className: "h-24 w-full rounded-lg" })] }));
|
|
34
|
+
}
|
|
35
|
+
// lines
|
|
36
|
+
return (_jsx("div", { className: "flex flex-col gap-2", style: width ? { maxWidth: width } : undefined, role: "status", "aria-busy": "true", "aria-label": "Loading", children: Array.from({ length: lines }, (_, i) => (_jsx(Skeleton, { className: cn('h-3.5', i === lines - 1 ? 'w-2/3' : 'w-full') }, i))) }));
|
|
37
|
+
};
|
|
38
|
+
const LOADING_TEXT = { sm: 'text-xs', md: 'text-sm', lg: 'text-base' };
|
|
39
|
+
/** Spinner + an optional status line the agent sets to narrate its work. */
|
|
40
|
+
const LoadingAtom = ({ props }) => {
|
|
41
|
+
const message = str(props['message']) || 'Working…';
|
|
42
|
+
const size = props['size'] === 'sm' || props['size'] === 'lg' ? props['size'] : 'md';
|
|
43
|
+
return (_jsxs("div", { className: "flex items-center gap-2.5 rounded-xl border border-border bg-card px-4 py-3 text-muted-foreground", role: "status", "aria-live": "polite", children: [_jsx(Spinner, { size: size }), _jsx("span", { className: LOADING_TEXT[size], children: message })] }));
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* A vertical numbered stepper. `active` is the 0-based current step; steps
|
|
47
|
+
* before it read as done (check), the active one is ringed, later ones are
|
|
48
|
+
* muted. An optional `error` index marks a failed step.
|
|
49
|
+
*/
|
|
50
|
+
const ProgressSteps = ({ props }) => {
|
|
51
|
+
const steps = Array.isArray(props['steps']) ? props['steps'].map((s) => str(s)) : [];
|
|
52
|
+
if (steps.length === 0)
|
|
53
|
+
return null;
|
|
54
|
+
const active = Math.max(0, int(props['active'], 0));
|
|
55
|
+
const errorIdx = typeof props['error'] === 'number' ? Math.trunc(props['error']) : -1;
|
|
56
|
+
const stateOf = (i) => {
|
|
57
|
+
if (i === errorIdx)
|
|
58
|
+
return 'error';
|
|
59
|
+
if (i < active)
|
|
60
|
+
return 'done';
|
|
61
|
+
if (i === active)
|
|
62
|
+
return 'active';
|
|
63
|
+
return 'pending';
|
|
64
|
+
};
|
|
65
|
+
return (_jsx("ol", { className: "flex flex-col", role: "list", "aria-label": "Progress", children: steps.map((label, i) => {
|
|
66
|
+
const state = stateOf(i);
|
|
67
|
+
const last = i === steps.length - 1;
|
|
68
|
+
return (_jsxs("li", { className: "flex gap-3", "aria-current": state === 'active' ? 'step' : undefined, children: [_jsxs("div", { className: "flex flex-col items-center", children: [_jsx("span", { className: cn('flex size-6 shrink-0 items-center justify-center rounded-full font-mono text-xs font-semibold', state === 'done' && 'bg-primary text-primary-foreground', state === 'active' && 'bg-primary/10 text-primary ring-2 ring-inset ring-primary/40', state === 'pending' && 'bg-muted text-muted-foreground', state === 'error' && 'bg-destructive text-destructive-foreground'), children: state === 'done' ? (_jsx(Check, { "aria-hidden": "true", className: "size-3.5" })) : state === 'error' ? (_jsx(X, { "aria-hidden": "true", className: "size-3.5" })) : (i + 1) }), !last ? (_jsx("span", { className: cn('w-px flex-1', i < active ? 'bg-primary/40' : 'bg-border'), style: { minHeight: '1.25rem' }, "aria-hidden": "true" })) : null] }), _jsx("div", { className: cn('pb-4 text-sm', last && 'pb-0'), children: _jsx("span", { className: cn(state === 'active' && 'font-medium text-foreground', state === 'done' && 'text-foreground', state === 'pending' && 'text-muted-foreground', state === 'error' && 'font-medium text-destructive'), children: label }) })] }, i));
|
|
69
|
+
}) }));
|
|
70
|
+
};
|
|
71
|
+
export const loadingAtoms = [
|
|
72
|
+
{ id: 'skeleton', Component: SkeletonAtom },
|
|
73
|
+
{ id: 'loading', Component: LoadingAtom },
|
|
74
|
+
{ id: 'progress-steps', Component: ProgressSteps },
|
|
75
|
+
];
|
|
76
|
+
//# sourceMappingURL=loading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading.js","sourceRoot":"","sources":["../../src/atoms/loading.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/atoms/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/atoms/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAavC,OAAO,EAAgB,eAAe,EAAE,MAAM,eAAe,CAAC;AAkB9D,sBAAsB;AACtB,eAAO,MAAM,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAA4C,CAAC;AAEzF,kEAAkE;AAClE,eAAO,MAAM,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAyB,CAAC;AAYnE,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAErD;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CAAC,IAAI,CAAC,CAStD;AAED,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/atoms/registry.js
CHANGED
|
@@ -17,6 +17,8 @@ import { onboardAtoms } from './onboard.js';
|
|
|
17
17
|
import { profileEditorAtoms } from './profile-editor.js';
|
|
18
18
|
import { contentAtoms } from './content.js';
|
|
19
19
|
import { statusAtoms } from './status.js';
|
|
20
|
+
import { loadingAtoms } from './loading.js';
|
|
21
|
+
import { walletAtoms } from './wallet.js';
|
|
20
22
|
import { fallbackAtom, GENERIC_ATOM_ID } from './fallback.js';
|
|
21
23
|
const ALL_ATOMS = [
|
|
22
24
|
...layoutAtoms,
|
|
@@ -29,6 +31,8 @@ const ALL_ATOMS = [
|
|
|
29
31
|
...profileEditorAtoms,
|
|
30
32
|
...contentAtoms,
|
|
31
33
|
...statusAtoms,
|
|
34
|
+
...loadingAtoms,
|
|
35
|
+
...walletAtoms,
|
|
32
36
|
fallbackAtom,
|
|
33
37
|
];
|
|
34
38
|
/** Atom id → Atom. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/atoms/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAa,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,SAAS,GAAW;IACxB,GAAG,WAAW;IACd,GAAG,WAAW;IACd,GAAG,UAAU;IACb,GAAG,UAAU;IACb,GAAG,gBAAgB;IACnB,GAAG,SAAS;IACZ,GAAG,YAAY;IACf,GAAG,kBAAkB;IACrB,GAAG,YAAY;IACf,GAAG,WAAW;IACd,YAAY;CACb,CAAC;AAEF,sBAAsB;AACtB,MAAM,CAAC,MAAM,KAAK,GAA8B,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzF,kEAAkE;AAClE,MAAM,CAAC,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAEnE,MAAM,YAAY,GAA8B,CAAC,GAAG,EAAE;IACpD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAgB,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC,EAAE,CAAC;AAEL,mEAAmE;AACnE,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC;AAChD,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,eAAe;IAC7B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAQ,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,KAAK,YAAY;YAAE,SAAS;QACpC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAwE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/atoms/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/atoms/types.d.ts
CHANGED
|
@@ -78,6 +78,35 @@ export interface AtomStatus {
|
|
|
78
78
|
/** Last non-fatal bootstrap error, if any. */
|
|
79
79
|
lastError?: string;
|
|
80
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* One tracked payment channel, as surfaced by the `toon_channels` read seam
|
|
83
|
+
* ({@link AtomRenderProps.readChannels}). `availableBalance` (= depositTotal −
|
|
84
|
+
* cumulativeAmount) is the spendable figure the wallet / channel-list atoms show.
|
|
85
|
+
* All amounts are base (micro) units as decimal strings.
|
|
86
|
+
*/
|
|
87
|
+
export interface AtomChannel {
|
|
88
|
+
channelId: string;
|
|
89
|
+
nonce: number;
|
|
90
|
+
cumulativeAmount: string;
|
|
91
|
+
depositTotal?: string;
|
|
92
|
+
availableBalance?: string;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* One on-chain wallet token balance, as surfaced by the `toon_balances` read
|
|
96
|
+
* seam ({@link AtomRenderProps.readBalances}).
|
|
97
|
+
*/
|
|
98
|
+
export interface AtomBalance {
|
|
99
|
+
/** Chain family (`'evm'` | `'solana'` | `'mina'`). */
|
|
100
|
+
chain: string;
|
|
101
|
+
/** The wallet address holding the balance. */
|
|
102
|
+
address: string;
|
|
103
|
+
/** Token amount in base (micro) units, decimal string. */
|
|
104
|
+
amount: string;
|
|
105
|
+
/** Human asset code, e.g. `'USDC'`. */
|
|
106
|
+
asset?: string;
|
|
107
|
+
/** Decimal places for `amount`, when known. */
|
|
108
|
+
assetScale?: number;
|
|
109
|
+
}
|
|
81
110
|
export interface AtomRenderProps {
|
|
82
111
|
/** Events resolved from the node's `bind` (empty when there is no binding). */
|
|
83
112
|
events: NostrEvent[];
|
|
@@ -96,6 +125,18 @@ export interface AtomRenderProps {
|
|
|
96
125
|
* never call the bridge directly, so this is the single read seam for the fee.
|
|
97
126
|
*/
|
|
98
127
|
readStatus?: () => Promise<AtomStatus>;
|
|
128
|
+
/**
|
|
129
|
+
* Fetch the tracked payment channels (`toon_channels`) — channelId, nonce,
|
|
130
|
+
* cumulative spent, locked deposit, and available (spendable) balance. Wired
|
|
131
|
+
* to the bridge by the runtime; `undefined` only in older render paths / tests.
|
|
132
|
+
*/
|
|
133
|
+
readChannels?: () => Promise<AtomChannel[]>;
|
|
134
|
+
/**
|
|
135
|
+
* Fetch the on-chain wallet token balances (`toon_balances`) per configured
|
|
136
|
+
* chain. Wired to the bridge by the runtime; `undefined` only in older render
|
|
137
|
+
* paths / tests that don't provide it.
|
|
138
|
+
*/
|
|
139
|
+
readBalances?: () => Promise<AtomBalance[]>;
|
|
99
140
|
/**
|
|
100
141
|
* Resolve an author's kind:0 profile event by pubkey, lazily and cached for
|
|
101
142
|
* the session. A feed bind only carries the notes (`kinds:[1]`), so an atom
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/atoms/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/atoms/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Atom } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Format an integer micro-unit amount (decimal string) into a grouped,
|
|
4
|
+
* trimmed human figure. `scale` is the token's decimal places (default 6, the
|
|
5
|
+
* protocol's stablecoin base). BigInt-free string math, so no precision loss.
|
|
6
|
+
*/
|
|
7
|
+
declare function formatUnits(amount: string, scale?: number): string;
|
|
8
|
+
export declare const walletAtoms: Atom[];
|
|
9
|
+
export { formatUnits };
|
|
10
|
+
//# sourceMappingURL=wallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/atoms/wallet.tsx"],"names":[],"mappings":"AAmBA,OAAO,EACL,KAAK,IAAI,EAKV,MAAM,YAAY,CAAC;AA2CpB;;;;GAIG;AACH,iBAAS,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,MAAM,CAQtD;AA6LD,eAAO,MAAM,WAAW,EAAE,IAAI,EAG7B,CAAC;AAGF,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Wallet atoms — manage wallets + payment channels.
|
|
4
|
+
*
|
|
5
|
+
* - `wallet-overview` — per-chain wallet address (copy-to-share) + on-chain
|
|
6
|
+
* token balance, read live from the `toon_balances` seam; an optional
|
|
7
|
+
* devnet "Get test funds" action (faucet).
|
|
8
|
+
* - `channel-list` — tracked payment channels with nonce + available
|
|
9
|
+
* (spendable) balance, read live from the `toon_channels` seam.
|
|
10
|
+
*
|
|
11
|
+
* Atoms never call the bridge directly: balances/channels arrive via the
|
|
12
|
+
* runtime-wired `readBalances` / `readChannels` seams, and the faucet fires the
|
|
13
|
+
* wired `fund` action. No key material lives here.
|
|
14
|
+
*/
|
|
15
|
+
import { useEffect, useState } from 'react';
|
|
16
|
+
import { Wallet, Landmark, Coins } from 'lucide-react';
|
|
17
|
+
import { Button } from '@/components/ui/button.js';
|
|
18
|
+
import { Spinner } from '@/components/ui/spinner.js';
|
|
19
|
+
import { MonoId } from '@/components/mono-id.js';
|
|
20
|
+
import { CopyButton } from '@/components/copy-button.js';
|
|
21
|
+
import {} from './types.js';
|
|
22
|
+
/** Human chain label for the per-chain rows. */
|
|
23
|
+
const CHAIN_LABEL = {
|
|
24
|
+
evm: 'EVM',
|
|
25
|
+
solana: 'Solana',
|
|
26
|
+
mina: 'Mina',
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Build the wallet rows from the live identity (`toon_status`) — addresses are
|
|
30
|
+
* always available — and enrich each with an on-chain balance from `toon_balances`
|
|
31
|
+
* when present. This keeps the wallet useful (address + copy-to-share + faucet)
|
|
32
|
+
* even before the multi-chain balance reader is wired, with balances lighting up
|
|
33
|
+
* as soon as the seam returns them.
|
|
34
|
+
*/
|
|
35
|
+
function buildRows(identity, balances) {
|
|
36
|
+
const byChain = new Map(balances.map((b) => [b.chain, b]));
|
|
37
|
+
const rows = [];
|
|
38
|
+
const add = (chain, address) => {
|
|
39
|
+
if (!address)
|
|
40
|
+
return;
|
|
41
|
+
const row = { chain, address };
|
|
42
|
+
const bal = byChain.get(chain);
|
|
43
|
+
if (bal)
|
|
44
|
+
row.balance = bal;
|
|
45
|
+
rows.push(row);
|
|
46
|
+
};
|
|
47
|
+
add('evm', identity?.evmAddress);
|
|
48
|
+
add('solana', identity?.solanaAddress);
|
|
49
|
+
add('mina', identity?.minaAddress);
|
|
50
|
+
// Surface any balance whose chain wasn't in identity (defensive).
|
|
51
|
+
for (const b of balances) {
|
|
52
|
+
if (!rows.some((r) => r.chain === b.chain))
|
|
53
|
+
rows.push({ chain: b.chain, address: b.address, balance: b });
|
|
54
|
+
}
|
|
55
|
+
return rows;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Format an integer micro-unit amount (decimal string) into a grouped,
|
|
59
|
+
* trimmed human figure. `scale` is the token's decimal places (default 6, the
|
|
60
|
+
* protocol's stablecoin base). BigInt-free string math, so no precision loss.
|
|
61
|
+
*/
|
|
62
|
+
function formatUnits(amount, scale = 6) {
|
|
63
|
+
const neg = amount.trim().startsWith('-');
|
|
64
|
+
const digits = amount.replace(/[^0-9]/g, '') || '0';
|
|
65
|
+
const padded = digits.padStart(scale + 1, '0');
|
|
66
|
+
const whole = padded.slice(0, padded.length - scale).replace(/^0+(?=\d)/, '');
|
|
67
|
+
const frac = (scale > 0 ? padded.slice(padded.length - scale) : '').slice(0, 4).replace(/0+$/, '');
|
|
68
|
+
const grouped = whole.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
|
69
|
+
return `${neg ? '-' : ''}${grouped}${frac ? `.${frac}` : ''}`;
|
|
70
|
+
}
|
|
71
|
+
/** A small inline loading row, consistent with the `loading` atom. */
|
|
72
|
+
const Loading = ({ label }) => (_jsxs("div", { className: "flex items-center gap-2 px-1 py-3 text-sm text-muted-foreground", role: "status", "aria-live": "polite", children: [_jsx(Spinner, { size: "sm" }), label] }));
|
|
73
|
+
const CardShell = ({ icon, title, action, children, }) => (_jsxs("div", { className: "overflow-hidden rounded-xl border border-border bg-card text-card-foreground shadow-sm", children: [_jsxs("div", { className: "flex items-center justify-between gap-3 border-b border-border px-4 py-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-primary", children: icon }), _jsx("span", { className: "text-sm font-semibold", children: title })] }), action] }), _jsx("div", { className: "px-4 py-3", children: children })] }));
|
|
74
|
+
// ── wallet-overview ──────────────────────────────────────────────────────────
|
|
75
|
+
const WalletOverview = ({ readStatus, readBalances, actions }) => {
|
|
76
|
+
const [identity, setIdentity] = useState(undefined);
|
|
77
|
+
const [balances, setBalances] = useState([]);
|
|
78
|
+
const fund = actions['fund'];
|
|
79
|
+
// Addresses come from the live status identity (always available); balances
|
|
80
|
+
// are an optional enrichment that may be absent until the reader is wired.
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
if (!readStatus) {
|
|
83
|
+
setIdentity(null);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
let cancelled = false;
|
|
87
|
+
void readStatus()
|
|
88
|
+
.then((s) => !cancelled && setIdentity(s.identity ?? null))
|
|
89
|
+
.catch(() => !cancelled && setIdentity(null));
|
|
90
|
+
return () => {
|
|
91
|
+
cancelled = true;
|
|
92
|
+
};
|
|
93
|
+
}, [readStatus]);
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (!readBalances)
|
|
96
|
+
return;
|
|
97
|
+
let cancelled = false;
|
|
98
|
+
void readBalances()
|
|
99
|
+
.then((b) => !cancelled && setBalances(b))
|
|
100
|
+
.catch(() => {
|
|
101
|
+
/* balances are best-effort; absence is not an error */
|
|
102
|
+
});
|
|
103
|
+
return () => {
|
|
104
|
+
cancelled = true;
|
|
105
|
+
};
|
|
106
|
+
}, [readBalances]);
|
|
107
|
+
const rows = identity ? buildRows(identity, balances) : [];
|
|
108
|
+
return (_jsxs(CardShell, { icon: _jsx(Wallet, { "aria-hidden": "true", className: "size-4" }), title: "Wallet", children: [identity === undefined ? (_jsx(Loading, { label: "Loading wallet\u2026" })) : rows.length === 0 ? (_jsx("p", { className: "py-2 text-sm text-muted-foreground", children: "No wallet addresses configured yet." })) : (_jsx("ul", { className: "flex flex-col divide-y divide-border", children: rows.map((row) => (_jsxs("li", { className: "flex flex-col gap-1 py-3 first:pt-0 last:pb-0", children: [_jsxs("div", { className: "flex items-baseline justify-between gap-3", children: [_jsx("span", { className: "text-xs font-medium uppercase tracking-wide text-muted-foreground", children: CHAIN_LABEL[row.chain] ?? row.chain }), row.balance ? (_jsxs("span", { className: "font-mono text-sm font-semibold tabular-nums", children: [formatUnits(row.balance.amount, row.balance.assetScale ?? 6), row.balance.asset ? (_jsx("span", { className: "ml-1 text-xs font-normal text-muted-foreground", children: row.balance.asset })) : null] })) : null] }), _jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx(MonoId, { value: row.address, prefixLen: 10, suffixLen: 6, className: "text-muted-foreground" }), _jsxs("div", { className: "flex items-center gap-0.5", children: [_jsx(CopyButton, { value: row.address, label: `Copy ${CHAIN_LABEL[row.chain] ?? row.chain} address` }), fund ? (_jsxs(Button, { type: "button", variant: "ghost", size: "sm", className: "h-7 gap-1 px-2 text-xs text-muted-foreground hover:text-foreground", onClick: () => void fund({ chain: row.chain }), children: [_jsx(Coins, { "aria-hidden": "true" }), "Fund"] })) : null] })] })] }, `${row.chain}:${row.address}`))) })), fund ? (_jsx("p", { className: "mt-2 text-[10px] text-muted-foreground/70", children: "\u201CFund\u201D requests devnet test funds from the faucet \u2014 it receives, it doesn\u2019t spend." })) : null] }));
|
|
109
|
+
};
|
|
110
|
+
// ── channel-list ─────────────────────────────────────────────────────────────
|
|
111
|
+
const ChannelList = ({ readChannels }) => {
|
|
112
|
+
const [channels, setChannels] = useState(null);
|
|
113
|
+
const [error, setError] = useState(false);
|
|
114
|
+
useEffect(() => {
|
|
115
|
+
if (!readChannels) {
|
|
116
|
+
setError(true);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
let cancelled = false;
|
|
120
|
+
void readChannels()
|
|
121
|
+
.then((c) => !cancelled && setChannels(c))
|
|
122
|
+
.catch(() => !cancelled && setError(true));
|
|
123
|
+
return () => {
|
|
124
|
+
cancelled = true;
|
|
125
|
+
};
|
|
126
|
+
}, [readChannels]);
|
|
127
|
+
return (_jsx(CardShell, { icon: _jsx(Landmark, { "aria-hidden": "true", className: "size-4" }), title: "Payment channels", action: channels && channels.length > 0 ? (_jsx("span", { className: "rounded-full bg-muted px-2 py-0.5 text-xs font-medium text-muted-foreground tabular-nums", children: channels.length })) : undefined, children: error ? (_jsx("p", { className: "py-2 text-sm text-destructive", children: "Channels are unavailable." })) : channels === null ? (_jsx(Loading, { label: "Loading channels\u2026" })) : channels.length === 0 ? (_jsx("p", { className: "py-2 text-sm text-muted-foreground", children: "No channels open yet." })) : (_jsx("ul", { className: "flex flex-col divide-y divide-border", children: channels.map((c) => (_jsxs("li", { className: "flex flex-col gap-1.5 py-3 first:pt-0 last:pb-0", children: [_jsxs("div", { className: "flex items-baseline justify-between gap-3", children: [_jsx(MonoId, { value: c.channelId, className: "text-foreground" }), _jsxs("span", { className: "text-xs text-muted-foreground", children: ["nonce ", _jsx("span", { className: "font-mono font-medium text-foreground", children: c.nonce })] })] }), c.availableBalance !== undefined ? (_jsxs("div", { className: "flex items-baseline justify-between gap-3 text-xs", children: [_jsx("span", { className: "text-muted-foreground", children: "Available" }), _jsxs("span", { className: "font-mono font-semibold tabular-nums text-foreground", children: [formatUnits(c.availableBalance), c.depositTotal !== undefined ? (_jsxs("span", { className: "ml-1 font-normal text-muted-foreground", children: ["/ ", formatUnits(c.depositTotal)] })) : null] })] })) : null] }, c.channelId))) })) }));
|
|
128
|
+
};
|
|
129
|
+
export const walletAtoms = [
|
|
130
|
+
{ id: 'wallet-overview', writes: [{ name: 'toon_fund_wallet' }], Component: WalletOverview },
|
|
131
|
+
{ id: 'channel-list', Component: ChannelList },
|
|
132
|
+
];
|
|
133
|
+
// Exported for unit tests.
|
|
134
|
+
export { formatUnits };
|
|
135
|
+
//# sourceMappingURL=wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/atoms/wallet.tsx"],"names":[],"mappings":"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"}
|
package/dist/catalog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,sCAAsC;IACtC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,eAAO,MAAM,YAAY,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,sCAAsC;IACtC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,eAAO,MAAM,YAAY,EAAE,QAAQ,EAkPlC,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAA0C,CAAC"}
|
package/dist/catalog.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* server-side `toon_atoms` tool + ViewSpec validator allowlist read from here so
|
|
8
8
|
* `@toon-protocol/client-mcp` never imports the React bundle.
|
|
9
9
|
*/
|
|
10
|
-
import { OPEN_CHANNEL_TOOL, SWAP_TOOL } from './tool-names.js';
|
|
10
|
+
import { FUND_WALLET_TOOL, OPEN_CHANNEL_TOOL, SWAP_TOOL } from './tool-names.js';
|
|
11
11
|
export const ATOM_CATALOG = [
|
|
12
12
|
// layout
|
|
13
13
|
{
|
|
@@ -176,6 +176,55 @@ export const ATOM_CATALOG = [
|
|
|
176
176
|
'connected, buffered, subscriptions), transport, per-chain readiness, and ' +
|
|
177
177
|
'identity (npub + chain addresses). No props; use to answer "show me my status".',
|
|
178
178
|
},
|
|
179
|
+
// wallet — manage wallets + payment channels (live reads from toon_balances /
|
|
180
|
+
// toon_channels; faucet via toon_fund_wallet). No key material in the UI.
|
|
181
|
+
{
|
|
182
|
+
id: 'wallet-overview',
|
|
183
|
+
description: 'Wallet dashboard: per-chain address (with copy-to-share) from the live ' +
|
|
184
|
+
'identity, enriched with on-chain token balance (toon_balances) when ' +
|
|
185
|
+
'available. Optional devnet "Fund" action drips faucet test funds (receives, ' +
|
|
186
|
+
'not a spend). Use to answer "show my wallet" / "what is my address".',
|
|
187
|
+
writes: [{ name: FUND_WALLET_TOOL }],
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
id: 'channel-list',
|
|
191
|
+
description: 'Live list of tracked payment channels (read from toon_channels): channelId, ' +
|
|
192
|
+
'nonce watermark, and available (spendable) balance / locked deposit. The ' +
|
|
193
|
+
'read variant of channel-card; use to answer "show my channels".',
|
|
194
|
+
},
|
|
195
|
+
// loading — placeholders the agent renders WHILE it works out the real view.
|
|
196
|
+
// Render one of these as a first toon_render, then replace with the finished
|
|
197
|
+
// ViewSpec once the journey is resolved. No data binds, no kinds.
|
|
198
|
+
{
|
|
199
|
+
id: 'skeleton',
|
|
200
|
+
description: 'Pulsing placeholder silhouette to render while the real view loads. ' +
|
|
201
|
+
'Use as an immediate first render, then replace with the finished view.',
|
|
202
|
+
propsSchema: {
|
|
203
|
+
variant: "'lines' | 'avatar' | 'card' (default 'lines')",
|
|
204
|
+
lines: 'number (line count for the lines variant, default 3)',
|
|
205
|
+
width: 'string (optional max-width, e.g. "24rem")',
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
id: 'loading',
|
|
210
|
+
description: 'A spinner with an optional status line. Set `message` to narrate what ' +
|
|
211
|
+
'you are doing (e.g. "Resolving balances…") while you compute the real view.',
|
|
212
|
+
propsSchema: {
|
|
213
|
+
message: 'string (status line, optional)',
|
|
214
|
+
size: "'sm' | 'md' | 'lg' (optional)",
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
id: 'progress-steps',
|
|
219
|
+
description: 'A numbered stepper for a multi-step journey (e.g. Close → Wait → Settle). ' +
|
|
220
|
+
'Steps before `active` show as done, `active` is highlighted, later steps ' +
|
|
221
|
+
'are pending; mark a failed step with `error`.',
|
|
222
|
+
propsSchema: {
|
|
223
|
+
steps: 'string[] (step labels in order)',
|
|
224
|
+
active: 'number (0-based index of the current step)',
|
|
225
|
+
error: 'number (0-based index of a failed step, optional)',
|
|
226
|
+
},
|
|
227
|
+
},
|
|
179
228
|
// fallback
|
|
180
229
|
{ id: 'generic-event', description: 'Fallback: decoded JSON + tags for any kind without a bespoke atom.' },
|
|
181
230
|
];
|
package/dist/catalog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Copy-to-share affordance. A quiet ghost icon button that copies `value` to the
|
|
4
|
+
* clipboard and flips to a check for ~1.5s. `navigator.clipboard` is guarded so
|
|
5
|
+
* it degrades to a no-op (disabled) in SSR / non-secure contexts rather than
|
|
6
|
+
* throwing. `label` names what's being copied for assistive tech.
|
|
7
|
+
*/
|
|
8
|
+
export declare function CopyButton({ value, label, className, }: {
|
|
9
|
+
value: string;
|
|
10
|
+
label?: string;
|
|
11
|
+
className?: string;
|
|
12
|
+
}): React.JSX.Element;
|
|
13
|
+
//# sourceMappingURL=copy-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-button.d.ts","sourceRoot":"","sources":["../../src/components/copy-button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAc,EACd,SAAS,GACV,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,qBAiCA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Check, Copy } from 'lucide-react';
|
|
4
|
+
import { Button } from '@/components/ui/button.js';
|
|
5
|
+
import { cn } from '@/lib/utils.js';
|
|
6
|
+
/**
|
|
7
|
+
* Copy-to-share affordance. A quiet ghost icon button that copies `value` to the
|
|
8
|
+
* clipboard and flips to a check for ~1.5s. `navigator.clipboard` is guarded so
|
|
9
|
+
* it degrades to a no-op (disabled) in SSR / non-secure contexts rather than
|
|
10
|
+
* throwing. `label` names what's being copied for assistive tech.
|
|
11
|
+
*/
|
|
12
|
+
export function CopyButton({ value, label = 'Copy', className, }) {
|
|
13
|
+
const [copied, setCopied] = React.useState(false);
|
|
14
|
+
const canCopy = typeof navigator !== 'undefined' && !!navigator.clipboard;
|
|
15
|
+
const onCopy = React.useCallback(() => {
|
|
16
|
+
if (!canCopy)
|
|
17
|
+
return;
|
|
18
|
+
void navigator.clipboard.writeText(value).then(() => setCopied(true));
|
|
19
|
+
}, [canCopy, value]);
|
|
20
|
+
React.useEffect(() => {
|
|
21
|
+
if (!copied)
|
|
22
|
+
return;
|
|
23
|
+
const t = setTimeout(() => setCopied(false), 1500);
|
|
24
|
+
return () => clearTimeout(t);
|
|
25
|
+
}, [copied]);
|
|
26
|
+
return (_jsx(Button, { type: "button", variant: "ghost", size: "icon-sm", disabled: !canCopy, "aria-label": copied ? `${label} — copied` : label, className: cn('text-muted-foreground hover:text-foreground', className), onClick: onCopy, children: copied ? (_jsx(Check, { "aria-hidden": "true", className: "text-primary" })) : (_jsx(Copy, { "aria-hidden": "true" })) }));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=copy-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-button.js","sourceRoot":"","sources":["../../src/components/copy-button.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,GAAG,MAAM,EACd,SAAS,GAKV;IACC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,OAAO,GACX,OAAO,SAAS,KAAK,WAAW,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;IAE5D,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACpC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,KAAK,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAErB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QACnD,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,CACL,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,SAAS,EACd,QAAQ,EAAE,CAAC,OAAO,gBACN,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,EAChD,SAAS,EAAE,EAAE,CAAC,6CAA6C,EAAE,SAAS,CAAC,EACvE,OAAO,EAAE,MAAM,YAEd,MAAM,CAAC,CAAC,CAAC,CACR,KAAC,KAAK,mBAAa,MAAM,EAAC,SAAS,EAAC,cAAc,GAAG,CACtD,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,mBAAa,MAAM,GAAG,CAC5B,GACM,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* A pulsing placeholder block. Rides the `--muted` token, so it adapts to
|
|
4
|
+
* light/dark with no extra work. Used by the `skeleton` atom to mimic a real
|
|
5
|
+
* layout while the agent computes the actual view.
|
|
6
|
+
*/
|
|
7
|
+
declare function Skeleton({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
8
|
+
export { Skeleton };
|
|
9
|
+
//# sourceMappingURL=skeleton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../../src/components/ui/skeleton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B;;;;GAIG;AACH,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQrE;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "@/lib/utils";
|
|
4
|
+
/**
|
|
5
|
+
* A pulsing placeholder block. Rides the `--muted` token, so it adapts to
|
|
6
|
+
* light/dark with no extra work. Used by the `skeleton` atom to mimic a real
|
|
7
|
+
* layout while the agent computes the actual view.
|
|
8
|
+
*/
|
|
9
|
+
function Skeleton({ className, ...props }) {
|
|
10
|
+
return (_jsx("div", { "data-slot": "skeleton", className: cn("animate-pulse rounded-md bg-muted", className), ...props }));
|
|
11
|
+
}
|
|
12
|
+
export { Skeleton };
|
|
13
|
+
//# sourceMappingURL=skeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.js","sourceRoot":"","sources":["../../../src/components/ui/skeleton.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC;;;;GAIG;AACH,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA+B;IACpE,OAAO,CACL,2BACY,UAAU,EACpB,SAAS,EAAE,EAAE,CAAC,mCAAmC,EAAE,SAAS,CAAC,KACzD,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Loader2 } from "lucide-react";
|
|
3
|
+
declare const SIZE: {
|
|
4
|
+
readonly sm: "size-4";
|
|
5
|
+
readonly md: "size-5";
|
|
6
|
+
readonly lg: "size-6";
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* A spinning loader. Centralizes the `Loader2 animate-spin` pattern used ad hoc
|
|
10
|
+
* across atoms (status, interactive) so the loading vocabulary reads as one
|
|
11
|
+
* control. `aria-hidden` by default — pair it with a visible/`sr-only` label.
|
|
12
|
+
*/
|
|
13
|
+
declare function Spinner({ className, size, ...props }: React.ComponentProps<typeof Loader2> & {
|
|
14
|
+
size?: keyof typeof SIZE;
|
|
15
|
+
}): React.JSX.Element;
|
|
16
|
+
export { Spinner };
|
|
17
|
+
//# sourceMappingURL=spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../../src/components/ui/spinner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAItC,QAAA,MAAM,IAAI;;;;CAIA,CAAA;AAEV;;;;GAIG;AACH,iBAAS,OAAO,CAAC,EACf,SAAS,EACT,IAAW,EACX,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,OAAO,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,OAAO,IAAI,CAAA;CAAE,qBAQrE;AAED,OAAO,EAAE,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { Loader2 } from "lucide-react";
|
|
4
|
+
import { cn } from "@/lib/utils";
|
|
5
|
+
const SIZE = {
|
|
6
|
+
sm: "size-4",
|
|
7
|
+
md: "size-5",
|
|
8
|
+
lg: "size-6",
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* A spinning loader. Centralizes the `Loader2 animate-spin` pattern used ad hoc
|
|
12
|
+
* across atoms (status, interactive) so the loading vocabulary reads as one
|
|
13
|
+
* control. `aria-hidden` by default — pair it with a visible/`sr-only` label.
|
|
14
|
+
*/
|
|
15
|
+
function Spinner({ className, size = "md", ...props }) {
|
|
16
|
+
return (_jsx(Loader2, { "aria-hidden": "true", className: cn("animate-spin text-muted-foreground", SIZE[size], className), ...props }));
|
|
17
|
+
}
|
|
18
|
+
export { Spinner };
|
|
19
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../../src/components/ui/spinner.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,MAAM,IAAI,GAAG;IACX,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;CACJ,CAAA;AAEV;;;;GAIG;AACH,SAAS,OAAO,CAAC,EACf,SAAS,EACT,IAAI,GAAG,IAAI,EACX,GAAG,KAAK,EAC4D;IACpE,OAAO,CACL,KAAC,OAAO,mBACM,MAAM,EAClB,SAAS,EAAE,EAAE,CAAC,oCAAoC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,KACtE,KAAK,GACT,CACH,CAAA;AACH,CAAC;AAED,OAAO,EAAE,OAAO,EAAE,CAAA"}
|