@hfunlabs/hypurr-connect 0.1.16 → 0.1.19
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/index.d.ts +4 -2
- package/dist/index.js +503 -546
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/AddWalletModal.tsx +37 -30
- package/src/DeleteWalletModal.tsx +5 -8
- package/src/HypurrConnectProvider.tsx +1 -0
- package/src/LoginModal.tsx +2 -26
- package/src/RenameWalletModal.tsx +14 -24
- package/src/RenewAgentModal.tsx +26 -21
- package/src/UserProfileModal.tsx +36 -63
- package/src/WalletSelectorDropdown.tsx +40 -28
- package/src/index.ts +4 -1
- package/src/profileStyles.ts +51 -30
- package/src/styles.css +1 -1
- package/src/tailwind.css +289 -23
- package/src/types.ts +6 -1
- package/src/useIsMobile.ts +22 -0
package/package.json
CHANGED
package/src/AddWalletModal.tsx
CHANGED
|
@@ -86,9 +86,9 @@ const tabClass = (selected: boolean) =>
|
|
|
86
86
|
}`;
|
|
87
87
|
|
|
88
88
|
const inputClass = (hasError?: boolean) =>
|
|
89
|
-
`
|
|
90
|
-
hasError ? "
|
|
91
|
-
} rounded-lg px-3 py-2.5 text-
|
|
89
|
+
`input ${
|
|
90
|
+
hasError ? "input-error" : ""
|
|
91
|
+
} w-full rounded-lg px-3 py-2.5 text-content placeholder-content-faint focus:outline-none font-mono text-base`;
|
|
92
92
|
|
|
93
93
|
const formatAddress = (address: string) =>
|
|
94
94
|
`${address.slice(0, 6)}...${address.slice(-4)}`;
|
|
@@ -359,28 +359,31 @@ export function AddWalletModal({
|
|
|
359
359
|
<motion.div className="hypurr-connect" style={{ display: "contents" }}>
|
|
360
360
|
<SpinKeyframes />
|
|
361
361
|
<motion.div
|
|
362
|
-
className="fixed inset-0 z-[100] bg-
|
|
362
|
+
className="fixed inset-0 z-[100] bg-overlay/70 backdrop-blur-sm"
|
|
363
363
|
initial={{ opacity: 0 }}
|
|
364
364
|
animate={{ opacity: 1 }}
|
|
365
365
|
exit={{ opacity: 0 }}
|
|
366
366
|
transition={{ duration: 0.15 }}
|
|
367
367
|
onClick={handleClose}
|
|
368
368
|
/>
|
|
369
|
-
<div
|
|
369
|
+
<div
|
|
370
|
+
className="fixed inset-0 z-[101] flex items-center justify-center p-4"
|
|
371
|
+
onClick={handleClose}
|
|
372
|
+
>
|
|
370
373
|
<motion.div
|
|
371
|
-
className="relative w-full max-w-md overflow-hidden rounded-lg border border-
|
|
374
|
+
className="relative w-full max-w-md overflow-hidden rounded-lg border border-line bg-surface-modal font-sans shadow-modal"
|
|
372
375
|
initial={{ opacity: 0, y: 8 }}
|
|
373
376
|
animate={{ opacity: 1, y: 0 }}
|
|
374
377
|
exit={{ opacity: 0, y: 8 }}
|
|
375
378
|
transition={{ duration: 0.18, ease: "easeOut" }}
|
|
376
379
|
onClick={(event) => event.stopPropagation()}
|
|
377
380
|
>
|
|
378
|
-
<div className="relative flex items-center justify-center border-b border-
|
|
379
|
-
<h3 className="text-lg font-
|
|
381
|
+
<div className="relative flex items-center justify-center border-b border-line px-6 pb-5 pt-6">
|
|
382
|
+
<h3 className="text-lg font-medium text-content">Add Wallet</h3>
|
|
380
383
|
<button
|
|
381
384
|
onClick={handleClose}
|
|
382
385
|
disabled={isProcessing}
|
|
383
|
-
className="absolute right-6 text-
|
|
386
|
+
className="absolute right-6 text-content-muted transition-colors hover:text-content disabled:cursor-not-allowed disabled:opacity-40"
|
|
384
387
|
aria-label="Close"
|
|
385
388
|
>
|
|
386
389
|
<X size={16} />
|
|
@@ -422,7 +425,7 @@ export function AddWalletModal({
|
|
|
422
425
|
<div className="px-6 pb-6 pt-5">
|
|
423
426
|
{activeTab === "generate" && (
|
|
424
427
|
<section className="space-y-4">
|
|
425
|
-
<p className="text-base text-
|
|
428
|
+
<p className="text-base text-content-muted">
|
|
426
429
|
Create a new Hyperliquid wallet.
|
|
427
430
|
</p>
|
|
428
431
|
<WalletNameInput
|
|
@@ -457,7 +460,7 @@ export function AddWalletModal({
|
|
|
457
460
|
|
|
458
461
|
{activeTab === "import" && (
|
|
459
462
|
<section className="space-y-4">
|
|
460
|
-
<p className="text-base text-
|
|
463
|
+
<p className="text-base text-content-muted">
|
|
461
464
|
Import a Hyperliquid wallet with its private key.
|
|
462
465
|
</p>
|
|
463
466
|
<WalletNameInput
|
|
@@ -468,7 +471,7 @@ export function AddWalletModal({
|
|
|
468
471
|
placeholder="MyImportedWallet"
|
|
469
472
|
/>
|
|
470
473
|
<div>
|
|
471
|
-
<label className="mb-2 block text-base uppercase tracking-[0.1em] text-
|
|
474
|
+
<label className="mb-2 block text-base uppercase tracking-[0.1em] text-content-muted">
|
|
472
475
|
Private Key
|
|
473
476
|
</label>
|
|
474
477
|
<div className="relative">
|
|
@@ -491,7 +494,7 @@ export function AddWalletModal({
|
|
|
491
494
|
onClick={() =>
|
|
492
495
|
setShowImportPrivateKey((visible) => !visible)
|
|
493
496
|
}
|
|
494
|
-
className="absolute right-2 top-1/2 -translate-y-1/2 p-1.5 text-
|
|
497
|
+
className="absolute right-2 top-1/2 -translate-y-1/2 p-1.5 text-content-subtle transition-colors hover:text-content-tertiary"
|
|
495
498
|
aria-label={
|
|
496
499
|
showImportPrivateKey
|
|
497
500
|
? "Hide private key"
|
|
@@ -513,12 +516,12 @@ export function AddWalletModal({
|
|
|
513
516
|
!isValidImportWalletName ||
|
|
514
517
|
!isValidImportPrivateKey
|
|
515
518
|
}
|
|
516
|
-
className={`flex w-full items-center justify-center gap-2 rounded-lg
|
|
519
|
+
className={`flex w-full items-center justify-center gap-2 rounded-lg py-2 text-base font-medium ${
|
|
517
520
|
!isProcessing &&
|
|
518
521
|
isValidImportWalletName &&
|
|
519
522
|
isValidImportPrivateKey
|
|
520
|
-
? "
|
|
521
|
-
: "
|
|
523
|
+
? "btn-raised-accent"
|
|
524
|
+
: "btn-raised-disabled"
|
|
522
525
|
}`}
|
|
523
526
|
>
|
|
524
527
|
{isProcessing ? (
|
|
@@ -537,7 +540,7 @@ export function AddWalletModal({
|
|
|
537
540
|
|
|
538
541
|
{activeTab === "api" && (
|
|
539
542
|
<section className="space-y-4">
|
|
540
|
-
<p className="text-base text-
|
|
543
|
+
<p className="text-base text-content-muted">
|
|
541
544
|
Connect your wallet and sign to link it for trading.
|
|
542
545
|
</p>
|
|
543
546
|
{!isWalletConnected || !ownerAddress ? (
|
|
@@ -549,13 +552,15 @@ export function AddWalletModal({
|
|
|
549
552
|
</button>
|
|
550
553
|
) : (
|
|
551
554
|
<>
|
|
552
|
-
<div className="flex items-center gap-3 rounded-lg border border-
|
|
553
|
-
<div className="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-md border border-
|
|
554
|
-
<Wallet size={14} className="text-
|
|
555
|
+
<div className="flex items-center gap-3 rounded-lg border border-line bg-surface-btn px-3 py-2.5">
|
|
556
|
+
<div className="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-md border border-line-strong bg-surface-btn-hover">
|
|
557
|
+
<Wallet size={14} className="text-content-muted" />
|
|
555
558
|
</div>
|
|
556
559
|
<div className="min-w-0 flex-1">
|
|
557
|
-
<p className="text-base text-
|
|
558
|
-
|
|
560
|
+
<p className="text-base text-content-muted">
|
|
561
|
+
Connected
|
|
562
|
+
</p>
|
|
563
|
+
<p className="font-mono text-base text-content">
|
|
559
564
|
{formatAddress(ownerAddress)}
|
|
560
565
|
</p>
|
|
561
566
|
</div>
|
|
@@ -597,7 +602,7 @@ export function AddWalletModal({
|
|
|
597
602
|
{onDisconnectWallet && (
|
|
598
603
|
<button
|
|
599
604
|
onClick={onDisconnectWallet}
|
|
600
|
-
className="w-full py-1.5 text-base text-
|
|
605
|
+
className="w-full py-1.5 text-base text-content-muted transition-colors hover:text-content-tertiary"
|
|
601
606
|
>
|
|
602
607
|
Disconnect & use different wallet
|
|
603
608
|
</button>
|
|
@@ -610,11 +615,11 @@ export function AddWalletModal({
|
|
|
610
615
|
|
|
611
616
|
{activeTab === "readonly" && onAddReadOnlyWallet && (
|
|
612
617
|
<section className="space-y-4">
|
|
613
|
-
<p className="text-base text-
|
|
618
|
+
<p className="text-base text-content-muted">
|
|
614
619
|
View positions and balances without trading access.
|
|
615
620
|
</p>
|
|
616
621
|
<div>
|
|
617
|
-
<label className="mb-2 block text-base uppercase tracking-[0.1em] text-
|
|
622
|
+
<label className="mb-2 block text-base uppercase tracking-[0.1em] text-content-muted">
|
|
618
623
|
Wallet Address
|
|
619
624
|
</label>
|
|
620
625
|
<input
|
|
@@ -673,7 +678,7 @@ function WalletNameInput({
|
|
|
673
678
|
}) {
|
|
674
679
|
return (
|
|
675
680
|
<div>
|
|
676
|
-
<label className="mb-2 block text-base uppercase tracking-[0.1em] text-
|
|
681
|
+
<label className="mb-2 block text-base uppercase tracking-[0.1em] text-content-muted">
|
|
677
682
|
Wallet Name
|
|
678
683
|
</label>
|
|
679
684
|
<input
|
|
@@ -689,7 +694,7 @@ function WalletNameInput({
|
|
|
689
694
|
placeholder={placeholder}
|
|
690
695
|
className={inputClass(!!value && !isValid)}
|
|
691
696
|
/>
|
|
692
|
-
<p className="mt-1.5 text-base text-
|
|
697
|
+
<p className="mt-1.5 text-base text-content-faint">
|
|
693
698
|
Letters, numbers, and / only
|
|
694
699
|
</p>
|
|
695
700
|
</div>
|
|
@@ -709,7 +714,7 @@ function ApprovalDurationPicker({
|
|
|
709
714
|
}) {
|
|
710
715
|
return (
|
|
711
716
|
<div>
|
|
712
|
-
<label className="mb-2 block text-base uppercase tracking-[0.1em] text-
|
|
717
|
+
<label className="mb-2 block text-base uppercase tracking-[0.1em] text-content-muted">
|
|
713
718
|
Approval Duration
|
|
714
719
|
</label>
|
|
715
720
|
<div className="grid grid-cols-4 gap-1.5">
|
|
@@ -719,8 +724,10 @@ function ApprovalDurationPicker({
|
|
|
719
724
|
type="button"
|
|
720
725
|
onClick={() => onChange(option.durationMs)}
|
|
721
726
|
disabled={disabled}
|
|
722
|
-
className={`rounded py-1.5 text-base font-medium disabled:cursor-not-allowed disabled:opacity-50 ${
|
|
723
|
-
value === option.durationMs
|
|
727
|
+
className={`rounded border py-1.5 text-base font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${
|
|
728
|
+
value === option.durationMs
|
|
729
|
+
? "bg-surface-btn-active text-content border-surface-bd-active"
|
|
730
|
+
: "bg-surface-btn text-content-muted border-surface-bd hover:bg-surface-btn-hover hover:border-surface-bd-hover hover:text-content-tertiary"
|
|
724
731
|
}`}
|
|
725
732
|
>
|
|
726
733
|
{option.label}
|
|
@@ -46,7 +46,7 @@ const panelStyle: CSSProperties = {
|
|
|
46
46
|
};
|
|
47
47
|
const headerStyle: CSSProperties = {
|
|
48
48
|
...modalHeaderStyle,
|
|
49
|
-
borderBottom: "1px solid
|
|
49
|
+
borderBottom: "1px solid rgb(var(--line))",
|
|
50
50
|
};
|
|
51
51
|
|
|
52
52
|
const bodyStyle: CSSProperties = {
|
|
@@ -68,8 +68,8 @@ const warningBoxStyle: CSSProperties = {
|
|
|
68
68
|
|
|
69
69
|
const infoBoxStyle: CSSProperties = {
|
|
70
70
|
padding: "10px 12px",
|
|
71
|
-
background: "
|
|
72
|
-
border: "1px solid
|
|
71
|
+
background: "rgb(var(--btn-bevel) / 0.03)",
|
|
72
|
+
border: "1px solid rgb(var(--line))",
|
|
73
73
|
borderRadius: 8,
|
|
74
74
|
};
|
|
75
75
|
|
|
@@ -83,18 +83,14 @@ const labelStyle: CSSProperties = {
|
|
|
83
83
|
|
|
84
84
|
const inputStyle = (disabled: boolean): CSSProperties => ({
|
|
85
85
|
width: "100%",
|
|
86
|
-
background: "rgba(13,18,25,0.9)",
|
|
87
|
-
border: `1px solid ${profileColors.surfaceBd}`,
|
|
88
86
|
borderRadius: 8,
|
|
89
87
|
padding: "10px 12px",
|
|
90
|
-
color: profileColors.text,
|
|
91
88
|
fontFamily: fontFamily.mono,
|
|
92
89
|
fontSize: 12.5,
|
|
93
90
|
lineHeight: "1rem",
|
|
94
91
|
outline: "none",
|
|
95
92
|
opacity: disabled ? 0.5 : 1,
|
|
96
93
|
boxSizing: "border-box",
|
|
97
|
-
transition: "border-color 150ms, background-color 150ms",
|
|
98
94
|
});
|
|
99
95
|
|
|
100
96
|
const footerStyle: CSSProperties = {
|
|
@@ -173,7 +169,7 @@ export function DeleteWalletModal({
|
|
|
173
169
|
transition={{ duration: 0.15 }}
|
|
174
170
|
onClick={handleClose}
|
|
175
171
|
/>
|
|
176
|
-
<div style={wrapperStyle}>
|
|
172
|
+
<div style={wrapperStyle} onClick={handleClose}>
|
|
177
173
|
<motion.div
|
|
178
174
|
key="panel"
|
|
179
175
|
style={panelStyle}
|
|
@@ -282,6 +278,7 @@ export function DeleteWalletModal({
|
|
|
282
278
|
onChange={(e) => setConfirmName(e.target.value)}
|
|
283
279
|
placeholder={walletName}
|
|
284
280
|
disabled={isDeleting}
|
|
281
|
+
className="input text-content placeholder-content-faint"
|
|
285
282
|
style={inputStyle(isDeleting)}
|
|
286
283
|
/>
|
|
287
284
|
</div>
|
|
@@ -593,6 +593,7 @@ export function HypurrConnectProvider({
|
|
|
593
593
|
telegramId: String(tgUser.telegramId),
|
|
594
594
|
hfunScore: tgUser?.reputation?.hfunScore,
|
|
595
595
|
reputationScore: tgUser?.reputation?.reputationScore,
|
|
596
|
+
addressBook: tgUser.addressBook,
|
|
596
597
|
};
|
|
597
598
|
}
|
|
598
599
|
if (eoaAddress && authMethod === "eoa") {
|
package/src/LoginModal.tsx
CHANGED
|
@@ -4,13 +4,9 @@ import {
|
|
|
4
4
|
useAnimationControls,
|
|
5
5
|
type PanInfo,
|
|
6
6
|
} from "framer-motion";
|
|
7
|
-
import {
|
|
8
|
-
useCallback,
|
|
9
|
-
useSyncExternalStore,
|
|
10
|
-
type CSSProperties,
|
|
11
|
-
type ReactNode,
|
|
12
|
-
} from "react";
|
|
7
|
+
import { useCallback, type CSSProperties, type ReactNode } from "react";
|
|
13
8
|
import { useHypurrConnectInternal } from "./HypurrConnectProvider";
|
|
9
|
+
import { useIsMobile } from "./useIsMobile";
|
|
14
10
|
import { MetaMaskColorIcon } from "./icons/MetaMaskColorIcon";
|
|
15
11
|
import { TelegramColorIcon } from "./icons/TelegramColorIcon";
|
|
16
12
|
|
|
@@ -21,8 +17,6 @@ export interface LoginModalProps {
|
|
|
21
17
|
backgroundColor?: string;
|
|
22
18
|
}
|
|
23
19
|
|
|
24
|
-
const MOBILE_BREAKPOINT = 640;
|
|
25
|
-
|
|
26
20
|
const DEFAULT_BACKGROUND_COLOR = "rgba(20,20,20,0.95)";
|
|
27
21
|
|
|
28
22
|
const btnStyle: CSSProperties = {
|
|
@@ -93,24 +87,6 @@ const dividerStyle: CSSProperties = {
|
|
|
93
87
|
|
|
94
88
|
const iconSize: CSSProperties = { width: 26, height: 26 };
|
|
95
89
|
|
|
96
|
-
const mobileQuery =
|
|
97
|
-
typeof window !== "undefined"
|
|
98
|
-
? window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT}px)`)
|
|
99
|
-
: null;
|
|
100
|
-
|
|
101
|
-
function subscribeMobile(cb: () => void) {
|
|
102
|
-
mobileQuery?.addEventListener("change", cb);
|
|
103
|
-
return () => mobileQuery?.removeEventListener("change", cb);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
function getSnapshotMobile() {
|
|
107
|
-
return mobileQuery?.matches ?? false;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
function useIsMobile() {
|
|
111
|
-
return useSyncExternalStore(subscribeMobile, getSnapshotMobile, () => false);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
90
|
function HoverButton({
|
|
115
91
|
onClick,
|
|
116
92
|
children,
|
|
@@ -22,7 +22,6 @@ import {
|
|
|
22
22
|
modalPanelStyle,
|
|
23
23
|
modalWrapperStyle,
|
|
24
24
|
profileColors,
|
|
25
|
-
raisedButtonStyle,
|
|
26
25
|
titleStyle,
|
|
27
26
|
upperLabelStyle,
|
|
28
27
|
} from "./profileStyles";
|
|
@@ -48,7 +47,7 @@ const panelStyle: CSSProperties = {
|
|
|
48
47
|
};
|
|
49
48
|
const headerStyle: CSSProperties = {
|
|
50
49
|
...modalHeaderStyle,
|
|
51
|
-
borderBottom: "1px solid
|
|
50
|
+
borderBottom: "1px solid rgb(var(--line))",
|
|
52
51
|
};
|
|
53
52
|
|
|
54
53
|
const bodyStyle: CSSProperties = {
|
|
@@ -60,8 +59,8 @@ const bodyStyle: CSSProperties = {
|
|
|
60
59
|
|
|
61
60
|
const infoBoxStyle: CSSProperties = {
|
|
62
61
|
padding: "10px 12px",
|
|
63
|
-
background: "
|
|
64
|
-
border: "1px solid
|
|
62
|
+
background: "rgb(var(--btn-bevel) / 0.03)",
|
|
63
|
+
border: "1px solid rgb(var(--line))",
|
|
65
64
|
borderRadius: 8,
|
|
66
65
|
};
|
|
67
66
|
|
|
@@ -73,33 +72,23 @@ const labelStyle: CSSProperties = {
|
|
|
73
72
|
marginBottom: 8,
|
|
74
73
|
};
|
|
75
74
|
|
|
76
|
-
const inputStyle = (
|
|
75
|
+
const inputStyle = (disabled: boolean): CSSProperties => ({
|
|
77
76
|
width: "100%",
|
|
78
|
-
background: "rgba(13,18,25,0.9)",
|
|
79
|
-
border: `1px solid ${
|
|
80
|
-
hasError ? "rgba(248,113,113,0.5)" : profileColors.surfaceBd
|
|
81
|
-
}`,
|
|
82
77
|
borderRadius: 8,
|
|
83
78
|
padding: "10px 12px",
|
|
84
|
-
color: profileColors.text,
|
|
85
79
|
fontFamily: fontFamily.mono,
|
|
86
80
|
fontSize: 12.5,
|
|
87
81
|
lineHeight: "1rem",
|
|
88
82
|
outline: "none",
|
|
89
83
|
opacity: disabled ? 0.5 : 1,
|
|
90
84
|
boxSizing: "border-box",
|
|
91
|
-
transition: "border-color 150ms, background-color 150ms",
|
|
92
85
|
});
|
|
93
86
|
|
|
94
87
|
const footerStyle: CSSProperties = {
|
|
95
88
|
padding: "0 24px 24px",
|
|
96
89
|
};
|
|
97
90
|
|
|
98
|
-
const saveButtonStyle =
|
|
99
|
-
enabled: boolean,
|
|
100
|
-
hovered: boolean,
|
|
101
|
-
): CSSProperties => ({
|
|
102
|
-
...raisedButtonStyle(enabled ? (hovered ? "hover" : "default") : "disabled"),
|
|
91
|
+
const saveButtonStyle: CSSProperties = {
|
|
103
92
|
width: "100%",
|
|
104
93
|
padding: "8px 0",
|
|
105
94
|
borderRadius: 8,
|
|
@@ -110,7 +99,7 @@ const saveButtonStyle = (
|
|
|
110
99
|
alignItems: "center",
|
|
111
100
|
justifyContent: "center",
|
|
112
101
|
gap: 8,
|
|
113
|
-
}
|
|
102
|
+
};
|
|
114
103
|
|
|
115
104
|
export function RenameWalletModal({
|
|
116
105
|
isOpen,
|
|
@@ -122,7 +111,6 @@ export function RenameWalletModal({
|
|
|
122
111
|
const [name, setName] = useState("");
|
|
123
112
|
const [isRenaming, setIsRenaming] = useState(false);
|
|
124
113
|
const [error, setError] = useState<string | null>(null);
|
|
125
|
-
const [saveHovered, setSaveHovered] = useState(false);
|
|
126
114
|
|
|
127
115
|
const currentName = wallet?.name || "Unnamed";
|
|
128
116
|
const displayAddress = wallet?.ethereumAddress;
|
|
@@ -180,7 +168,7 @@ export function RenameWalletModal({
|
|
|
180
168
|
transition={{ duration: 0.15 }}
|
|
181
169
|
onClick={handleClose}
|
|
182
170
|
/>
|
|
183
|
-
<div style={wrapperStyle}>
|
|
171
|
+
<div style={wrapperStyle} onClick={handleClose}>
|
|
184
172
|
<motion.div
|
|
185
173
|
key="panel"
|
|
186
174
|
style={panelStyle}
|
|
@@ -252,8 +240,11 @@ export function RenameWalletModal({
|
|
|
252
240
|
if (e.key === "Escape") handleClose();
|
|
253
241
|
}}
|
|
254
242
|
disabled={isRenaming}
|
|
255
|
-
|
|
256
|
-
|
|
243
|
+
placeholder="Wallet name"
|
|
244
|
+
className={`input text-content placeholder-content-faint ${
|
|
245
|
+
error ? "input-error" : ""
|
|
246
|
+
}`}
|
|
247
|
+
style={inputStyle(isRenaming)}
|
|
257
248
|
/>
|
|
258
249
|
<p
|
|
259
250
|
style={{
|
|
@@ -302,9 +293,8 @@ export function RenameWalletModal({
|
|
|
302
293
|
<button
|
|
303
294
|
onClick={handleRename}
|
|
304
295
|
disabled={!canSubmit}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
style={saveButtonStyle(canSubmit, saveHovered)}
|
|
296
|
+
className={canSubmit ? "btn-raised" : "btn-raised-disabled"}
|
|
297
|
+
style={saveButtonStyle}
|
|
308
298
|
>
|
|
309
299
|
{isRenaming ? (
|
|
310
300
|
<>
|
package/src/RenewAgentModal.tsx
CHANGED
|
@@ -168,30 +168,33 @@ export function RenewAgentModal({
|
|
|
168
168
|
<motion.div className="hypurr-connect" style={{ display: "contents" }}>
|
|
169
169
|
<SpinKeyframes />
|
|
170
170
|
<motion.div
|
|
171
|
-
className="fixed inset-0 z-[110] bg-
|
|
171
|
+
className="fixed inset-0 z-[110] bg-overlay/70 backdrop-blur-sm"
|
|
172
172
|
initial={{ opacity: 0 }}
|
|
173
173
|
animate={{ opacity: 1 }}
|
|
174
174
|
exit={{ opacity: 0 }}
|
|
175
175
|
transition={{ duration: 0.15 }}
|
|
176
176
|
onClick={handleClose}
|
|
177
177
|
/>
|
|
178
|
-
<div
|
|
178
|
+
<div
|
|
179
|
+
className="fixed inset-0 z-[111] flex items-center justify-center p-4"
|
|
180
|
+
onClick={handleClose}
|
|
181
|
+
>
|
|
179
182
|
<motion.div
|
|
180
|
-
className="relative w-full max-w-md overflow-hidden rounded-lg border border-
|
|
183
|
+
className="relative w-full max-w-md overflow-hidden rounded-lg border border-line bg-surface-modal font-sans shadow-modal"
|
|
181
184
|
initial={{ opacity: 0, y: 8 }}
|
|
182
185
|
animate={{ opacity: 1, y: 0 }}
|
|
183
186
|
exit={{ opacity: 0, y: 8 }}
|
|
184
187
|
transition={{ duration: 0.18, ease: "easeOut" }}
|
|
185
188
|
onClick={(event) => event.stopPropagation()}
|
|
186
189
|
>
|
|
187
|
-
<div className="relative flex items-center justify-center border-b border-
|
|
188
|
-
<h3 className="text-lg font-
|
|
190
|
+
<div className="relative flex items-center justify-center border-b border-line px-6 pb-5 pt-6">
|
|
191
|
+
<h3 className="text-lg font-medium text-content">
|
|
189
192
|
Renew Agent Wallet
|
|
190
193
|
</h3>
|
|
191
194
|
<button
|
|
192
195
|
onClick={handleClose}
|
|
193
196
|
disabled={isRenewing}
|
|
194
|
-
className="absolute right-6 text-
|
|
197
|
+
className="absolute right-6 text-content-muted transition-colors hover:text-content disabled:cursor-not-allowed disabled:opacity-40"
|
|
195
198
|
aria-label="Close"
|
|
196
199
|
>
|
|
197
200
|
<X size={16} />
|
|
@@ -214,16 +217,16 @@ export function RenewAgentModal({
|
|
|
214
217
|
</p>
|
|
215
218
|
</div>
|
|
216
219
|
|
|
217
|
-
<div className="rounded-lg border border-
|
|
218
|
-
<p className="mb-1.5 text-base uppercase tracking-[0.1em] text-
|
|
220
|
+
<div className="rounded-lg border border-line bg-surface-btn p-3">
|
|
221
|
+
<p className="mb-1.5 text-base uppercase tracking-[0.1em] text-content-muted">
|
|
219
222
|
Agent address
|
|
220
223
|
</p>
|
|
221
224
|
<div className="flex items-center justify-between gap-3">
|
|
222
225
|
<div className="min-w-0">
|
|
223
|
-
<p className="truncate text-base font-medium text-
|
|
226
|
+
<p className="truncate text-base font-medium text-content">
|
|
224
227
|
{wallet.name || "Unnamed Wallet"}
|
|
225
228
|
</p>
|
|
226
|
-
<p className="font-mono text-base text-
|
|
229
|
+
<p className="font-mono text-base text-content-muted">
|
|
227
230
|
{hasAgentAddress
|
|
228
231
|
? formatAddress(agentAddress)
|
|
229
232
|
: "Missing agent address"}
|
|
@@ -237,15 +240,15 @@ export function RenewAgentModal({
|
|
|
237
240
|
</div>
|
|
238
241
|
|
|
239
242
|
{ownerReady ? (
|
|
240
|
-
<div className="flex items-center gap-3 rounded-lg border border-
|
|
241
|
-
<div className="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-md border border-
|
|
242
|
-
<Wallet size={14} className="text-
|
|
243
|
+
<div className="flex items-center gap-3 rounded-lg border border-line bg-surface-btn px-3 py-2.5">
|
|
244
|
+
<div className="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-md border border-line-strong bg-surface-btn-hover">
|
|
245
|
+
<Wallet size={14} className="text-content-muted" />
|
|
243
246
|
</div>
|
|
244
247
|
<div className="min-w-0 flex-1">
|
|
245
|
-
<p className="text-base text-
|
|
248
|
+
<p className="text-base text-content-muted">
|
|
246
249
|
Owner wallet connected
|
|
247
250
|
</p>
|
|
248
|
-
<p className="font-mono text-base text-
|
|
251
|
+
<p className="font-mono text-base text-content">
|
|
249
252
|
{formatAddress(ownerAddress)}
|
|
250
253
|
</p>
|
|
251
254
|
</div>
|
|
@@ -262,10 +265,10 @@ export function RenewAgentModal({
|
|
|
262
265
|
<p className="text-base text-trade-down">
|
|
263
266
|
Wrong owner wallet connected
|
|
264
267
|
</p>
|
|
265
|
-
<p className="mt-1 font-mono text-base text-
|
|
268
|
+
<p className="mt-1 font-mono text-base text-content-muted">
|
|
266
269
|
Connected {formatAddress(ownerAddress)}
|
|
267
270
|
</p>
|
|
268
|
-
<p className="font-mono text-base text-
|
|
271
|
+
<p className="font-mono text-base text-content-muted">
|
|
269
272
|
Required {formatAddress(expectedOwnerAddress)}
|
|
270
273
|
</p>
|
|
271
274
|
</div>
|
|
@@ -330,7 +333,7 @@ export function RenewAgentModal({
|
|
|
330
333
|
<button
|
|
331
334
|
onClick={onDisconnectWallet}
|
|
332
335
|
disabled={isRenewing}
|
|
333
|
-
className="w-full py-1.5 text-base text-
|
|
336
|
+
className="w-full py-1.5 text-base text-content-muted transition-colors hover:text-content-tertiary disabled:cursor-not-allowed disabled:opacity-40"
|
|
334
337
|
>
|
|
335
338
|
Disconnect & use different owner
|
|
336
339
|
</button>
|
|
@@ -357,7 +360,7 @@ function ApprovalDurationPicker({
|
|
|
357
360
|
}) {
|
|
358
361
|
return (
|
|
359
362
|
<div>
|
|
360
|
-
<label className="mb-2 block text-base uppercase tracking-[0.1em] text-
|
|
363
|
+
<label className="mb-2 block text-base uppercase tracking-[0.1em] text-content-muted">
|
|
361
364
|
Approval Duration
|
|
362
365
|
</label>
|
|
363
366
|
<div className="grid grid-cols-4 gap-1.5">
|
|
@@ -367,8 +370,10 @@ function ApprovalDurationPicker({
|
|
|
367
370
|
type="button"
|
|
368
371
|
onClick={() => onChange(option.durationMs)}
|
|
369
372
|
disabled={disabled}
|
|
370
|
-
className={`rounded py-1.5 text-base font-medium disabled:cursor-not-allowed disabled:opacity-50 ${
|
|
371
|
-
value === option.durationMs
|
|
373
|
+
className={`rounded border py-1.5 text-base font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${
|
|
374
|
+
value === option.durationMs
|
|
375
|
+
? "bg-surface-btn-active text-content border-surface-bd-active"
|
|
376
|
+
: "bg-surface-btn text-content-muted border-surface-bd hover:bg-surface-btn-hover hover:border-surface-bd-hover hover:text-content-tertiary"
|
|
372
377
|
}`}
|
|
373
378
|
>
|
|
374
379
|
{option.label}
|