kaleido-ui 0.1.2 → 0.1.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/css/kaleido-ui.css +238 -72
- package/dist/native/index.cjs +8 -2
- package/dist/native/index.d.cts +7 -2
- package/dist/native/index.d.ts +7 -2
- package/dist/native/index.js +8 -2
- package/dist/tokens/index.cjs +85 -2
- package/dist/tokens/index.d.cts +124 -3
- package/dist/tokens/index.d.ts +124 -3
- package/dist/tokens/index.js +82 -2
- package/dist/web/index.cjs +112 -103
- package/dist/web/index.d.cts +16 -12
- package/dist/web/index.d.ts +16 -12
- package/dist/web/index.js +110 -101
- package/package.json +6 -10
- package/dist/tailwind/index.cjs +0 -225
- package/dist/tailwind/index.d.cts +0 -162
- package/dist/tailwind/index.d.ts +0 -162
- package/dist/tailwind/index.js +0 -202
- package/tailwind/index.d.ts +0 -1
- package/tailwind/index.js +0 -1
package/dist/web/index.cjs
CHANGED
|
@@ -101,28 +101,30 @@ var buttonVariants = (0, import_class_variance_authority.cva)(
|
|
|
101
101
|
{
|
|
102
102
|
variants: {
|
|
103
103
|
variant: {
|
|
104
|
-
default: "bg-primary text-primary-foreground hover:
|
|
105
|
-
destructive: "bg-destructive text-destructive-foreground hover:
|
|
106
|
-
outline: "border border-
|
|
104
|
+
default: "bg-primary text-primary-foreground hover:brightness-115",
|
|
105
|
+
destructive: "bg-destructive text-destructive-foreground hover:brightness-115",
|
|
106
|
+
outline: "border border-primary/50 bg-transparent text-[#31ff8b] hover:bg-primary/5 hover:border-primary hover:brightness-115",
|
|
107
107
|
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
108
|
-
ghost: "hover:bg-
|
|
108
|
+
ghost: "text-[#31ff8b] hover:brightness-115 hover:bg-transparent hover:[&_span]:brightness-115",
|
|
109
109
|
link: "text-primary underline-offset-4 hover:underline",
|
|
110
110
|
glow: "bg-primary text-primary-foreground shadow-md",
|
|
111
|
-
surface: "bg-
|
|
112
|
-
cta: "w-full bg-primary
|
|
111
|
+
surface: "bg-primary/15 text-[#31ff8b] hover:bg-primary/25",
|
|
112
|
+
cta: "w-full bg-primary text-primary-foreground font-bold rounded-2xl shadow-md hover:brightness-115 disabled:opacity-50 disabled:cursor-not-allowed disabled:shadow-none",
|
|
113
113
|
"cta-gradient": "w-full bg-gradient-to-r from-primary to-primary/80 text-primary-foreground font-extrabold rounded-2xl shadow-lg hover:opacity-90 hover:-translate-y-0.5 active:translate-y-0 active:opacity-100 disabled:opacity-40 disabled:shadow-none disabled:cursor-not-allowed disabled:bg-accent disabled:text-muted-foreground",
|
|
114
|
-
"danger-subtle": "
|
|
114
|
+
"danger-subtle": "bg-red-500/10 border border-red-500/20 text-destructive font-bold rounded-xl hover:brightness-115",
|
|
115
|
+
hyperlink: "group text-muted-foreground underline underline-offset-2 hover:text-white hover:decoration-[#31ff8b] hover:[&_.icon]:text-[#31ff8b] bg-transparent font-normal"
|
|
115
116
|
},
|
|
116
117
|
size: {
|
|
117
118
|
default: "h-11 px-5 py-2",
|
|
119
|
+
xs: "h-7 rounded-lg px-2 text-xs",
|
|
118
120
|
sm: "h-9 rounded-lg px-3 text-xs",
|
|
119
121
|
lg: "h-14 rounded-xl px-8 text-base font-bold",
|
|
120
122
|
xl: "h-16 rounded-2xl px-10 text-lg font-bold",
|
|
121
123
|
cta: "h-14 py-4 px-6 text-lg",
|
|
122
124
|
"cta-lg": "h-[60px] py-5 px-6 text-lg",
|
|
123
|
-
icon: "h-
|
|
124
|
-
"icon-lg": "h-
|
|
125
|
-
"icon-xl": "h-
|
|
125
|
+
icon: "h-6 w-6 rounded-full",
|
|
126
|
+
"icon-lg": "h-9 w-9 rounded-full",
|
|
127
|
+
"icon-xl": "h-12 w-12 rounded-full"
|
|
126
128
|
}
|
|
127
129
|
},
|
|
128
130
|
defaultVariants: {
|
|
@@ -155,7 +157,7 @@ var Card = React2.forwardRef(
|
|
|
155
157
|
{
|
|
156
158
|
ref,
|
|
157
159
|
className: cn(
|
|
158
|
-
"rounded-2xl
|
|
160
|
+
"rounded-2xl bg-card text-card-foreground shadow-sm transition-colors",
|
|
159
161
|
className
|
|
160
162
|
),
|
|
161
163
|
...props
|
|
@@ -201,7 +203,7 @@ var Input = React3.forwardRef(
|
|
|
201
203
|
{
|
|
202
204
|
type,
|
|
203
205
|
className: cn(
|
|
204
|
-
"flex h-12 w-full rounded-xl
|
|
206
|
+
"flex h-12 w-full rounded-xl bg-white/8 px-4 py-3 text-base transition-all border border-transparent file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:border-primary/50 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-white/6",
|
|
205
207
|
className
|
|
206
208
|
),
|
|
207
209
|
ref,
|
|
@@ -335,13 +337,13 @@ var DialogContent = React4.forwardRef(({ className, children, ...props }, ref) =
|
|
|
335
337
|
{
|
|
336
338
|
ref,
|
|
337
339
|
className: cn(
|
|
338
|
-
"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4
|
|
340
|
+
"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 bg-card p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-2xl",
|
|
339
341
|
className
|
|
340
342
|
),
|
|
341
343
|
...props,
|
|
342
344
|
children: [
|
|
343
345
|
children,
|
|
344
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none
|
|
346
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
|
|
345
347
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Icon, { name: "close", size: "sm" }),
|
|
346
348
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "sr-only", children: "Close" })
|
|
347
349
|
] })
|
|
@@ -383,7 +385,7 @@ var TabsList = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
383
385
|
{
|
|
384
386
|
ref,
|
|
385
387
|
className: cn(
|
|
386
|
-
"inline-flex h-12 items-center justify-center gap-2 rounded-xl bg-card p-1.5 text-muted-foreground
|
|
388
|
+
"inline-flex h-12 items-center justify-center gap-2 rounded-xl bg-card p-1.5 text-muted-foreground",
|
|
387
389
|
className
|
|
388
390
|
),
|
|
389
391
|
...props
|
|
@@ -396,8 +398,8 @@ var TabsTrigger = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE
|
|
|
396
398
|
ref,
|
|
397
399
|
className: cn(
|
|
398
400
|
"inline-flex items-center justify-center whitespace-nowrap rounded-lg px-4 py-2 text-sm font-semibold ring-offset-background transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
|
|
399
|
-
"hover:text-
|
|
400
|
-
"data-[state=active]:bg-primary data-[state=active]:text-primary
|
|
401
|
+
"text-white hover:text-primary hover:bg-transparent",
|
|
402
|
+
"data-[state=active]:bg-primary/15 data-[state=active]:text-[#31ff8b] data-[state=active]:hover:bg-primary/25",
|
|
401
403
|
className
|
|
402
404
|
),
|
|
403
405
|
...props
|
|
@@ -454,12 +456,12 @@ var ToastViewport = React7.forwardRef(({ className, ...props }, ref) => /* @__PU
|
|
|
454
456
|
));
|
|
455
457
|
ToastViewport.displayName = ToastPrimitives.Viewport.displayName;
|
|
456
458
|
var toastVariants = (0, import_class_variance_authority3.cva)(
|
|
457
|
-
"group pointer-events-auto relative flex w-full max-w-md items-center justify-between space-x-3 overflow-hidden rounded-xl
|
|
459
|
+
"group pointer-events-auto relative flex w-full max-w-md items-center justify-between space-x-3 overflow-hidden rounded-xl backdrop-blur-xl p-4 shadow-[0_0_30px_rgba(0,0,0,0.3)] transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-bottom-full data-[state=open]:slide-in-from-bottom-full",
|
|
458
460
|
{
|
|
459
461
|
variants: {
|
|
460
462
|
variant: {
|
|
461
|
-
default: "
|
|
462
|
-
destructive: "
|
|
463
|
+
default: "bg-card text-foreground brightness-125",
|
|
464
|
+
destructive: "bg-red-500/20 text-red-400"
|
|
463
465
|
}
|
|
464
466
|
},
|
|
465
467
|
defaultVariants: {
|
|
@@ -483,7 +485,7 @@ var ToastAction = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE
|
|
|
483
485
|
{
|
|
484
486
|
ref,
|
|
485
487
|
className: cn(
|
|
486
|
-
"inline-flex h-8 shrink-0 items-center justify-center rounded-
|
|
488
|
+
"inline-flex h-8 shrink-0 items-center justify-center rounded-lg border border-primary/50 bg-transparent px-3 text-xs font-semibold text-[#31ff8b] transition-all hover:bg-primary/5 hover:border-primary hover:brightness-115 focus:outline-none disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-red-500/30 group-[.destructive]:text-red-400 group-[.destructive]:hover:border-red-500 group-[.destructive]:hover:bg-red-500/10",
|
|
487
489
|
className
|
|
488
490
|
),
|
|
489
491
|
...props
|
|
@@ -495,7 +497,7 @@ var ToastClose = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE_
|
|
|
495
497
|
{
|
|
496
498
|
ref,
|
|
497
499
|
className: cn(
|
|
498
|
-
"
|
|
500
|
+
"p-1.5 text-muted-foreground opacity-100 transition-all hover:text-white focus:opacity-100 focus:outline-none group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50",
|
|
499
501
|
className
|
|
500
502
|
),
|
|
501
503
|
"toast-close": "",
|
|
@@ -642,7 +644,7 @@ function ToastWithProgress({ id, title, description, action, duration = 4e3, var
|
|
|
642
644
|
if (variant === "destructive") {
|
|
643
645
|
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Icon, { name: "error", size: "md", className: "text-red-400" });
|
|
644
646
|
}
|
|
645
|
-
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Icon, { name: "check_circle", size: "md", className: "text-
|
|
647
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Icon, { name: "check_circle", size: "md", className: "text-primary" });
|
|
646
648
|
};
|
|
647
649
|
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Toast, { ...props, variant, children: [
|
|
648
650
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-start gap-3 flex-1", children: [
|
|
@@ -652,8 +654,10 @@ function ToastWithProgress({ id, title, description, action, duration = 4e3, var
|
|
|
652
654
|
description && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(ToastDescription, { children: description })
|
|
653
655
|
] })
|
|
654
656
|
] }),
|
|
655
|
-
|
|
656
|
-
|
|
657
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-center gap-2 shrink-0", children: [
|
|
658
|
+
action,
|
|
659
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(ToastClose, {})
|
|
660
|
+
] }),
|
|
657
661
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "absolute bottom-0 left-0 right-0 h-1 bg-white/10 overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
658
662
|
"div",
|
|
659
663
|
{
|
|
@@ -729,7 +733,7 @@ function StatusBadge({ status, className }) {
|
|
|
729
733
|
"div",
|
|
730
734
|
{
|
|
731
735
|
className: cn(
|
|
732
|
-
"inline-flex items-center gap-1.5
|
|
736
|
+
"inline-flex items-center gap-1.5 pl-1 pr-2.5 py-1 rounded-full border font-medium text-xs",
|
|
733
737
|
bg,
|
|
734
738
|
border,
|
|
735
739
|
color,
|
|
@@ -754,65 +758,65 @@ var networkConfig = {
|
|
|
754
758
|
iconSuffix: "bitcoin/bitcoin-logo.svg"
|
|
755
759
|
},
|
|
756
760
|
LN: {
|
|
757
|
-
color: "text-
|
|
758
|
-
bg: "bg-
|
|
759
|
-
border: "border-
|
|
761
|
+
color: "text-network-lightning",
|
|
762
|
+
bg: "bg-network-lightning/10 backdrop-blur-md",
|
|
763
|
+
border: "border-network-lightning/20",
|
|
760
764
|
label: "LN",
|
|
761
765
|
iconSuffix: "lightning/lightning.svg"
|
|
762
766
|
},
|
|
763
767
|
RGB20: {
|
|
764
|
-
color: "text-
|
|
765
|
-
bg: "bg-
|
|
766
|
-
border: "border-
|
|
768
|
+
color: "text-destructive",
|
|
769
|
+
bg: "bg-red-500/20 backdrop-blur-md",
|
|
770
|
+
border: "border-red-500/20",
|
|
767
771
|
label: "RGB",
|
|
768
772
|
iconSuffix: "rgb/rgb-logo.svg"
|
|
769
773
|
},
|
|
770
774
|
RGB21: {
|
|
771
|
-
color: "text-
|
|
772
|
-
bg: "bg-
|
|
773
|
-
border: "border-
|
|
775
|
+
color: "text-destructive",
|
|
776
|
+
bg: "bg-red-500/20 backdrop-blur-md",
|
|
777
|
+
border: "border-red-500/20",
|
|
774
778
|
label: "RGB21",
|
|
775
779
|
iconSuffix: "rgb/rgb-logo.svg"
|
|
776
780
|
},
|
|
777
781
|
"RGB-L1": {
|
|
778
|
-
color: "text-
|
|
779
|
-
bg: "bg-
|
|
780
|
-
border: "border-
|
|
782
|
+
color: "text-destructive",
|
|
783
|
+
bg: "bg-red-500/20 backdrop-blur-md",
|
|
784
|
+
border: "border-red-500/20",
|
|
781
785
|
label: "RGB L1",
|
|
782
786
|
iconSuffix: "rgb/rgb-logo.svg"
|
|
783
787
|
},
|
|
784
788
|
"RGB-LN": {
|
|
785
|
-
color: "text-
|
|
786
|
-
bg: "bg-
|
|
787
|
-
border: "border-
|
|
789
|
+
color: "text-destructive",
|
|
790
|
+
bg: "bg-red-500/20 backdrop-blur-md",
|
|
791
|
+
border: "border-red-500/20",
|
|
788
792
|
label: "RGB LN",
|
|
789
793
|
iconSuffix: "rgb/rgb-logo.svg"
|
|
790
794
|
},
|
|
791
795
|
Spark: {
|
|
792
|
-
color: "text-
|
|
793
|
-
bg: "bg-
|
|
794
|
-
border: "border-
|
|
796
|
+
color: "text-black dark:text-white",
|
|
797
|
+
bg: "bg-black/10 dark:bg-white/10 backdrop-blur-md",
|
|
798
|
+
border: "border-black/20 dark:border-white/20",
|
|
795
799
|
label: "Spark",
|
|
796
800
|
iconSuffix: "spark/Asterisk/Spark Asterisk White.svg"
|
|
797
801
|
},
|
|
798
802
|
Arkade: {
|
|
799
|
-
color: "text-
|
|
800
|
-
bg: "bg-
|
|
801
|
-
border: "border-
|
|
803
|
+
color: "text-violet-400",
|
|
804
|
+
bg: "bg-violet-500/15 backdrop-blur-md",
|
|
805
|
+
border: "border-violet-500/20",
|
|
802
806
|
label: "Arkade",
|
|
803
807
|
iconSuffix: "arkade/arkade-icon.svg"
|
|
804
808
|
}
|
|
805
809
|
};
|
|
806
|
-
function NetworkBadge({ network, iconBasePath = "/icons", className }) {
|
|
807
|
-
const { color, bg,
|
|
810
|
+
function NetworkBadge({ network, iconBasePath = "/icons", iconOnly = false, className }) {
|
|
811
|
+
const { color, bg, label, iconSuffix } = networkConfig[network];
|
|
808
812
|
const icon = `${iconBasePath}/${iconSuffix}`;
|
|
809
813
|
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
810
814
|
"span",
|
|
811
815
|
{
|
|
812
816
|
className: cn(
|
|
813
|
-
"text-
|
|
817
|
+
"text-xs rounded-full font-bold flex items-center justify-center w-max",
|
|
818
|
+
iconOnly ? "p-1.5" : "px-2.5 py-1 gap-1",
|
|
814
819
|
bg,
|
|
815
|
-
border,
|
|
816
820
|
color,
|
|
817
821
|
className
|
|
818
822
|
),
|
|
@@ -822,10 +826,10 @@ function NetworkBadge({ network, iconBasePath = "/icons", className }) {
|
|
|
822
826
|
{
|
|
823
827
|
src: icon,
|
|
824
828
|
alt: network,
|
|
825
|
-
className: cn("size-3 object-contain", network === "Spark" && "
|
|
829
|
+
className: cn(iconOnly ? "size-4" : "size-3.5", "object-contain", network === "Spark" && "brightness-0 dark:brightness-0 dark:invert")
|
|
826
830
|
}
|
|
827
831
|
),
|
|
828
|
-
label
|
|
832
|
+
!iconOnly && label
|
|
829
833
|
]
|
|
830
834
|
}
|
|
831
835
|
);
|
|
@@ -950,6 +954,7 @@ function AssetIcon({ ticker, logoUri, cdnBaseUrl, size = 40, className }) {
|
|
|
950
954
|
}
|
|
951
955
|
|
|
952
956
|
// src/web/components/asset-card.tsx
|
|
957
|
+
var import_react4 = require("react");
|
|
953
958
|
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
954
959
|
function AssetCard({
|
|
955
960
|
ticker,
|
|
@@ -958,19 +963,26 @@ function AssetCard({
|
|
|
958
963
|
networks = [],
|
|
959
964
|
logoUri,
|
|
960
965
|
balanceVisible = true,
|
|
966
|
+
accentColor,
|
|
961
967
|
onClick,
|
|
962
968
|
className
|
|
963
969
|
}) {
|
|
964
970
|
const shown = balanceVisible ? displayBalance : "\u2022\u2022\u2022\u2022\u2022\u2022";
|
|
971
|
+
const [hovered, setHovered] = (0, import_react4.useState)(false);
|
|
972
|
+
const gradientStyle = accentColor ? { background: `linear-gradient(135deg, var(--card) 30%, ${accentColor}${hovered ? "77" : "55"} 75%, ${accentColor}${hovered ? "dd" : "b3"} 100%)`, transition: "background 0.3s ease" } : void 0;
|
|
965
973
|
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
966
974
|
"div",
|
|
967
975
|
{
|
|
968
976
|
className: cn(
|
|
969
|
-
"p-4 rounded-card
|
|
970
|
-
|
|
977
|
+
"p-4 rounded-card backdrop-blur-xl transition-all shadow-sm relative overflow-hidden group",
|
|
978
|
+
!accentColor && "bg-card",
|
|
979
|
+
onClick && "cursor-pointer hover:brightness-110 active:scale-[0.98]",
|
|
971
980
|
className
|
|
972
981
|
),
|
|
982
|
+
style: gradientStyle,
|
|
973
983
|
onClick,
|
|
984
|
+
onMouseEnter: () => setHovered(true),
|
|
985
|
+
onMouseLeave: () => setHovered(false),
|
|
974
986
|
children: [
|
|
975
987
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "absolute inset-0 bg-gradient-to-br from-white/5 to-transparent opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none" }),
|
|
976
988
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center justify-between relative z-10", children: [
|
|
@@ -990,7 +1002,7 @@ function AssetCard({
|
|
|
990
1002
|
{
|
|
991
1003
|
className: cn(
|
|
992
1004
|
"font-bold text-base leading-tight tracking-wide text-foreground",
|
|
993
|
-
onClick && "
|
|
1005
|
+
onClick && "transition-colors"
|
|
994
1006
|
),
|
|
995
1007
|
children: name
|
|
996
1008
|
}
|
|
@@ -999,7 +1011,7 @@ function AssetCard({
|
|
|
999
1011
|
] })
|
|
1000
1012
|
] }),
|
|
1001
1013
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "text-right", children: [
|
|
1002
|
-
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "font-bold text-
|
|
1014
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "font-bold text-lg tracking-tight text-foreground group-hover:opacity-90 transition-colors", children: shown }),
|
|
1003
1015
|
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-tiny text-muted-foreground font-medium tracking-wide uppercase mt-0.5", children: ticker })
|
|
1004
1016
|
] })
|
|
1005
1017
|
] })
|
|
@@ -1021,12 +1033,34 @@ function TransactionCard({
|
|
|
1021
1033
|
}) {
|
|
1022
1034
|
const isInbound = direction === "inbound";
|
|
1023
1035
|
const formatDate = (ts) => new Date(ts * 1e3).toLocaleDateString();
|
|
1036
|
+
const statusStyle = {
|
|
1037
|
+
success: { base: "bg-primary/5", hover: "hover:bg-primary/10" },
|
|
1038
|
+
completed: { base: "bg-primary/5", hover: "hover:bg-primary/10" },
|
|
1039
|
+
pending: { base: "bg-yellow-500/10", hover: "hover:bg-yellow-500/15" },
|
|
1040
|
+
failed: { base: "bg-red-500/10", hover: "hover:bg-red-500/15" },
|
|
1041
|
+
error: { base: "bg-red-500/10", hover: "hover:bg-red-500/15" }
|
|
1042
|
+
}[status] ?? { base: "bg-background/40", hover: "hover:bg-white/5" };
|
|
1043
|
+
const iconStyle = {
|
|
1044
|
+
success: "bg-primary/20 text-primary",
|
|
1045
|
+
completed: "bg-primary/20 text-primary",
|
|
1046
|
+
pending: "bg-yellow-500/20 text-yellow-500",
|
|
1047
|
+
failed: "bg-red-500/20 text-red-500",
|
|
1048
|
+
error: "bg-red-500/20 text-red-500"
|
|
1049
|
+
}[status] ?? "bg-accent text-muted-foreground";
|
|
1050
|
+
const textColor = {
|
|
1051
|
+
success: "text-primary",
|
|
1052
|
+
completed: "text-primary",
|
|
1053
|
+
pending: "text-yellow-500",
|
|
1054
|
+
failed: "text-red-500",
|
|
1055
|
+
error: "text-red-500"
|
|
1056
|
+
}[status] ?? "text-foreground";
|
|
1024
1057
|
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
1025
1058
|
"div",
|
|
1026
1059
|
{
|
|
1027
1060
|
className: cn(
|
|
1028
|
-
"p-4 rounded-card
|
|
1029
|
-
|
|
1061
|
+
"p-4 rounded-card backdrop-blur-xl flex items-center justify-between transition-all shadow-sm relative overflow-hidden group",
|
|
1062
|
+
statusStyle.base,
|
|
1063
|
+
onClick && `cursor-pointer active:scale-[0.98] ${statusStyle.hover}`,
|
|
1030
1064
|
className
|
|
1031
1065
|
),
|
|
1032
1066
|
onClick,
|
|
@@ -1038,24 +1072,15 @@ function TransactionCard({
|
|
|
1038
1072
|
{
|
|
1039
1073
|
className: cn(
|
|
1040
1074
|
"size-11 rounded-full flex items-center justify-center shadow-inner group-hover:scale-105 transition-transform",
|
|
1041
|
-
|
|
1075
|
+
iconStyle
|
|
1042
1076
|
),
|
|
1043
1077
|
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "material-symbols-outlined text-[20px]", children: isInbound ? "arrow_downward" : "arrow_outward" })
|
|
1044
1078
|
}
|
|
1045
1079
|
),
|
|
1046
1080
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex flex-col", children: [
|
|
1047
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1048
|
-
"span",
|
|
1049
|
-
{
|
|
1050
|
-
className: cn(
|
|
1051
|
-
"font-bold text-sm text-foreground tracking-wide",
|
|
1052
|
-
onClick && "group-hover:text-primary transition-colors"
|
|
1053
|
-
),
|
|
1054
|
-
children: isInbound ? "Received" : "Sent"
|
|
1055
|
-
}
|
|
1056
|
-
),
|
|
1081
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "font-bold text-sm tracking-wide text-foreground", children: isInbound ? "Received" : "Sent" }),
|
|
1057
1082
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center gap-2 mt-1", children: [
|
|
1058
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(StatusBadge, { status
|
|
1083
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(StatusBadge, { status }),
|
|
1059
1084
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-tiny text-muted-foreground font-medium tracking-wide", children: formatDate(timestamp) })
|
|
1060
1085
|
] })
|
|
1061
1086
|
] })
|
|
@@ -1065,8 +1090,8 @@ function TransactionCard({
|
|
|
1065
1090
|
"p",
|
|
1066
1091
|
{
|
|
1067
1092
|
className: cn(
|
|
1068
|
-
"font-bold text-
|
|
1069
|
-
|
|
1093
|
+
"font-bold text-lg tracking-tight group-hover:opacity-90 transition-opacity",
|
|
1094
|
+
textColor
|
|
1070
1095
|
),
|
|
1071
1096
|
children: [
|
|
1072
1097
|
isInbound ? "+" : "-",
|
|
@@ -1109,15 +1134,15 @@ function SettingItem({
|
|
|
1109
1134
|
onClick,
|
|
1110
1135
|
showChevron = true,
|
|
1111
1136
|
className,
|
|
1112
|
-
iconColor = "text-
|
|
1137
|
+
iconColor = "text-[#31ff8b]"
|
|
1113
1138
|
}) {
|
|
1114
1139
|
const isClickable = !!onClick;
|
|
1115
1140
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1116
1141
|
"div",
|
|
1117
1142
|
{
|
|
1118
1143
|
className: cn(
|
|
1119
|
-
"p-5 rounded-2xl bg-card
|
|
1120
|
-
isClickable && "cursor-pointer
|
|
1144
|
+
"p-5 rounded-2xl bg-card transition-all duration-200 group",
|
|
1145
|
+
isClickable && "cursor-pointer active:scale-[0.98]",
|
|
1121
1146
|
className
|
|
1122
1147
|
),
|
|
1123
1148
|
onClick,
|
|
@@ -1127,7 +1152,7 @@ function SettingItem({
|
|
|
1127
1152
|
"div",
|
|
1128
1153
|
{
|
|
1129
1154
|
className: cn(
|
|
1130
|
-
"flex-shrink-0 size-10 rounded-xl flex items-center justify-center bg-
|
|
1155
|
+
"flex-shrink-0 size-10 rounded-xl flex items-center justify-center bg-primary/15 group-hover:bg-primary/25 group-hover:scale-105 transition-all",
|
|
1131
1156
|
iconColor
|
|
1132
1157
|
),
|
|
1133
1158
|
children: iconSrc ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("img", { src: iconSrc, alt: iconAlt ?? title, className: "size-5 object-contain" }) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "material-symbols-outlined text-[20px]", children: icon })
|
|
@@ -1140,7 +1165,7 @@ function SettingItem({
|
|
|
1140
1165
|
] }),
|
|
1141
1166
|
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex items-center gap-2 flex-shrink-0", children: [
|
|
1142
1167
|
value && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "text-xs text-muted-foreground font-mono", children: value }),
|
|
1143
|
-
showChevron && isClickable && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "material-symbols-outlined text-[16px] text-muted-foreground", children: "chevron_right" })
|
|
1168
|
+
showChevron && isClickable && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "material-symbols-outlined text-[16px] text-muted-foreground group-hover:scale-110 group-hover:text-white transition-all", children: "chevron_right" })
|
|
1144
1169
|
] })
|
|
1145
1170
|
] })
|
|
1146
1171
|
}
|
|
@@ -1162,39 +1187,23 @@ function SectionLabel({ children, className }) {
|
|
|
1162
1187
|
// src/web/components/alert-banner.tsx
|
|
1163
1188
|
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
1164
1189
|
var variantStyles = {
|
|
1165
|
-
error: {
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
},
|
|
1170
|
-
warning: {
|
|
1171
|
-
container: "bg-amber-500/10 border-amber-500/20",
|
|
1172
|
-
icon: "text-amber-400",
|
|
1173
|
-
iconName: "warning"
|
|
1174
|
-
},
|
|
1175
|
-
info: {
|
|
1176
|
-
container: "bg-blue-500/10 border-blue-500/20",
|
|
1177
|
-
icon: "text-blue-400",
|
|
1178
|
-
iconName: "info"
|
|
1179
|
-
},
|
|
1180
|
-
success: {
|
|
1181
|
-
container: "bg-primary/10 border-primary/20",
|
|
1182
|
-
icon: "text-primary",
|
|
1183
|
-
iconName: "check_circle"
|
|
1184
|
-
}
|
|
1190
|
+
error: { container: "bg-red-900/40", icon: "text-red-500", iconName: "error" },
|
|
1191
|
+
warning: { container: "bg-yellow-900/40", icon: "text-yellow-400", iconName: "warning" },
|
|
1192
|
+
info: { container: "bg-blue-900/40", icon: "text-blue-300", iconName: "info" },
|
|
1193
|
+
success: { container: "bg-primary/8", icon: "text-primary/90", iconName: "check_circle" }
|
|
1185
1194
|
};
|
|
1186
1195
|
function AlertBanner({ variant = "info", icon, children, className }) {
|
|
1187
1196
|
const styles = variantStyles[variant];
|
|
1188
|
-
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: cn("rounded-xl
|
|
1189
|
-
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon, { name: icon ?? styles.iconName, size: "md", className: cn("shrink-0
|
|
1190
|
-
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "text-sm", children })
|
|
1197
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: cn("rounded-xl p-3 flex items-center gap-2", styles.container, className), children: [
|
|
1198
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon, { name: icon ?? styles.iconName, size: "md", className: cn("shrink-0", styles.icon) }),
|
|
1199
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: cn("text-sm", styles.icon), children })
|
|
1191
1200
|
] });
|
|
1192
1201
|
}
|
|
1193
1202
|
|
|
1194
1203
|
// src/web/components/error-boundary.tsx
|
|
1195
|
-
var
|
|
1204
|
+
var import_react5 = require("react");
|
|
1196
1205
|
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1197
|
-
var ErrorBoundary = class extends
|
|
1206
|
+
var ErrorBoundary = class extends import_react5.Component {
|
|
1198
1207
|
constructor(props) {
|
|
1199
1208
|
super(props);
|
|
1200
1209
|
this.state = { hasError: false, error: null };
|
package/dist/web/index.d.cts
CHANGED
|
@@ -12,8 +12,8 @@ import * as ToastPrimitives from '@radix-ui/react-toast';
|
|
|
12
12
|
declare function cn(...inputs: ClassValue[]): string;
|
|
13
13
|
|
|
14
14
|
declare const buttonVariants: (props?: ({
|
|
15
|
-
variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | "glow" | "surface" | "cta" | "cta-gradient" | "danger-subtle" | null | undefined;
|
|
16
|
-
size?: "default" | "cta" | "sm" | "lg" | "xl" | "cta-lg" | "icon" | "icon-lg" | "icon-xl" | null | undefined;
|
|
15
|
+
variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | "glow" | "surface" | "cta" | "cta-gradient" | "danger-subtle" | "hyperlink" | null | undefined;
|
|
16
|
+
size?: "default" | "cta" | "xs" | "sm" | "lg" | "xl" | "cta-lg" | "icon" | "icon-lg" | "icon-xl" | null | undefined;
|
|
17
17
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
18
18
|
interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
19
19
|
asChild?: boolean;
|
|
@@ -148,9 +148,11 @@ interface NetworkBadgeProps {
|
|
|
148
148
|
network: NetworkType;
|
|
149
149
|
/** Override the icon path (consumer provides asset path) */
|
|
150
150
|
iconBasePath?: string;
|
|
151
|
+
/** Show only the icon, no label */
|
|
152
|
+
iconOnly?: boolean;
|
|
151
153
|
className?: string;
|
|
152
154
|
}
|
|
153
|
-
declare function NetworkBadge({ network, iconBasePath, className }: NetworkBadgeProps): react_jsx_runtime.JSX.Element;
|
|
155
|
+
declare function NetworkBadge({ network, iconBasePath, iconOnly, className }: NetworkBadgeProps): react_jsx_runtime.JSX.Element;
|
|
154
156
|
|
|
155
157
|
interface AssetIconProps {
|
|
156
158
|
ticker: string;
|
|
@@ -179,10 +181,12 @@ interface AssetCardProps {
|
|
|
179
181
|
logoUri?: string;
|
|
180
182
|
/** Whether balance should be masked */
|
|
181
183
|
balanceVisible?: boolean;
|
|
184
|
+
/** Accent color hex for the card gradient (e.g. "#F7931A") */
|
|
185
|
+
accentColor?: string;
|
|
182
186
|
onClick?: () => void;
|
|
183
187
|
className?: string;
|
|
184
188
|
}
|
|
185
|
-
declare function AssetCard({ ticker, name, displayBalance, networks, logoUri, balanceVisible, onClick, className, }: AssetCardProps): react_jsx_runtime.JSX.Element;
|
|
189
|
+
declare function AssetCard({ ticker, name, displayBalance, networks, logoUri, balanceVisible, accentColor, onClick, className, }: AssetCardProps): react_jsx_runtime.JSX.Element;
|
|
186
190
|
|
|
187
191
|
interface TransactionCardProps {
|
|
188
192
|
/** Direction of the transaction */
|
|
@@ -231,23 +235,23 @@ declare function SectionLabel({ children, className }: SectionLabelProps): react
|
|
|
231
235
|
|
|
232
236
|
declare const variantStyles: {
|
|
233
237
|
readonly error: {
|
|
234
|
-
readonly container: "bg-red-
|
|
235
|
-
readonly icon: "text-red-
|
|
238
|
+
readonly container: "bg-red-900/40";
|
|
239
|
+
readonly icon: "text-red-500";
|
|
236
240
|
readonly iconName: "error";
|
|
237
241
|
};
|
|
238
242
|
readonly warning: {
|
|
239
|
-
readonly container: "bg-
|
|
240
|
-
readonly icon: "text-
|
|
243
|
+
readonly container: "bg-yellow-900/40";
|
|
244
|
+
readonly icon: "text-yellow-400";
|
|
241
245
|
readonly iconName: "warning";
|
|
242
246
|
};
|
|
243
247
|
readonly info: {
|
|
244
|
-
readonly container: "bg-blue-
|
|
245
|
-
readonly icon: "text-blue-
|
|
248
|
+
readonly container: "bg-blue-900/40";
|
|
249
|
+
readonly icon: "text-blue-300";
|
|
246
250
|
readonly iconName: "info";
|
|
247
251
|
};
|
|
248
252
|
readonly success: {
|
|
249
|
-
readonly container: "bg-primary/
|
|
250
|
-
readonly icon: "text-primary";
|
|
253
|
+
readonly container: "bg-primary/8";
|
|
254
|
+
readonly icon: "text-primary/90";
|
|
251
255
|
readonly iconName: "check_circle";
|
|
252
256
|
};
|
|
253
257
|
};
|
package/dist/web/index.d.ts
CHANGED
|
@@ -12,8 +12,8 @@ import * as ToastPrimitives from '@radix-ui/react-toast';
|
|
|
12
12
|
declare function cn(...inputs: ClassValue[]): string;
|
|
13
13
|
|
|
14
14
|
declare const buttonVariants: (props?: ({
|
|
15
|
-
variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | "glow" | "surface" | "cta" | "cta-gradient" | "danger-subtle" | null | undefined;
|
|
16
|
-
size?: "default" | "cta" | "sm" | "lg" | "xl" | "cta-lg" | "icon" | "icon-lg" | "icon-xl" | null | undefined;
|
|
15
|
+
variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | "glow" | "surface" | "cta" | "cta-gradient" | "danger-subtle" | "hyperlink" | null | undefined;
|
|
16
|
+
size?: "default" | "cta" | "xs" | "sm" | "lg" | "xl" | "cta-lg" | "icon" | "icon-lg" | "icon-xl" | null | undefined;
|
|
17
17
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
18
18
|
interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
19
19
|
asChild?: boolean;
|
|
@@ -148,9 +148,11 @@ interface NetworkBadgeProps {
|
|
|
148
148
|
network: NetworkType;
|
|
149
149
|
/** Override the icon path (consumer provides asset path) */
|
|
150
150
|
iconBasePath?: string;
|
|
151
|
+
/** Show only the icon, no label */
|
|
152
|
+
iconOnly?: boolean;
|
|
151
153
|
className?: string;
|
|
152
154
|
}
|
|
153
|
-
declare function NetworkBadge({ network, iconBasePath, className }: NetworkBadgeProps): react_jsx_runtime.JSX.Element;
|
|
155
|
+
declare function NetworkBadge({ network, iconBasePath, iconOnly, className }: NetworkBadgeProps): react_jsx_runtime.JSX.Element;
|
|
154
156
|
|
|
155
157
|
interface AssetIconProps {
|
|
156
158
|
ticker: string;
|
|
@@ -179,10 +181,12 @@ interface AssetCardProps {
|
|
|
179
181
|
logoUri?: string;
|
|
180
182
|
/** Whether balance should be masked */
|
|
181
183
|
balanceVisible?: boolean;
|
|
184
|
+
/** Accent color hex for the card gradient (e.g. "#F7931A") */
|
|
185
|
+
accentColor?: string;
|
|
182
186
|
onClick?: () => void;
|
|
183
187
|
className?: string;
|
|
184
188
|
}
|
|
185
|
-
declare function AssetCard({ ticker, name, displayBalance, networks, logoUri, balanceVisible, onClick, className, }: AssetCardProps): react_jsx_runtime.JSX.Element;
|
|
189
|
+
declare function AssetCard({ ticker, name, displayBalance, networks, logoUri, balanceVisible, accentColor, onClick, className, }: AssetCardProps): react_jsx_runtime.JSX.Element;
|
|
186
190
|
|
|
187
191
|
interface TransactionCardProps {
|
|
188
192
|
/** Direction of the transaction */
|
|
@@ -231,23 +235,23 @@ declare function SectionLabel({ children, className }: SectionLabelProps): react
|
|
|
231
235
|
|
|
232
236
|
declare const variantStyles: {
|
|
233
237
|
readonly error: {
|
|
234
|
-
readonly container: "bg-red-
|
|
235
|
-
readonly icon: "text-red-
|
|
238
|
+
readonly container: "bg-red-900/40";
|
|
239
|
+
readonly icon: "text-red-500";
|
|
236
240
|
readonly iconName: "error";
|
|
237
241
|
};
|
|
238
242
|
readonly warning: {
|
|
239
|
-
readonly container: "bg-
|
|
240
|
-
readonly icon: "text-
|
|
243
|
+
readonly container: "bg-yellow-900/40";
|
|
244
|
+
readonly icon: "text-yellow-400";
|
|
241
245
|
readonly iconName: "warning";
|
|
242
246
|
};
|
|
243
247
|
readonly info: {
|
|
244
|
-
readonly container: "bg-blue-
|
|
245
|
-
readonly icon: "text-blue-
|
|
248
|
+
readonly container: "bg-blue-900/40";
|
|
249
|
+
readonly icon: "text-blue-300";
|
|
246
250
|
readonly iconName: "info";
|
|
247
251
|
};
|
|
248
252
|
readonly success: {
|
|
249
|
-
readonly container: "bg-primary/
|
|
250
|
-
readonly icon: "text-primary";
|
|
253
|
+
readonly container: "bg-primary/8";
|
|
254
|
+
readonly icon: "text-primary/90";
|
|
251
255
|
readonly iconName: "check_circle";
|
|
252
256
|
};
|
|
253
257
|
};
|