kaleido-ui 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -101,16 +101,16 @@ var buttonVariants = (0, import_class_variance_authority.cva)(
101
101
  {
102
102
  variants: {
103
103
  variant: {
104
- default: "bg-primary text-primary-foreground hover:bg-primary/90 shadow-glow-subtle hover:shadow-glow",
104
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
105
105
  destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
106
- outline: "border border-border bg-transparent hover:bg-accent hover:text-accent-foreground hover:border-primary/30",
106
+ outline: "border border-border bg-transparent hover:bg-accent hover:text-accent-foreground",
107
107
  secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
108
- ghost: "hover:bg-white/5 hover:text-foreground",
108
+ ghost: "hover:bg-accent hover:text-foreground",
109
109
  link: "text-primary underline-offset-4 hover:underline",
110
- glow: "bg-primary text-primary-foreground shadow-glow hover:shadow-glow-strong animate-pulse-glow",
111
- surface: "bg-card text-card-foreground border border-border hover:bg-accent hover:border-primary/30",
112
- cta: "w-full bg-primary hover:bg-primary-dark text-primary-foreground font-bold rounded-2xl shadow-glow-accent disabled:opacity-50 disabled:cursor-not-allowed disabled:shadow-none",
113
- "cta-gradient": "w-full bg-gradient-to-r from-primary to-primary-dark text-primary-foreground font-extrabold rounded-2xl shadow-[0_8px_30px_rgba(43,238,121,0.35)] 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-surface-highlight disabled:text-white/50",
110
+ glow: "bg-primary text-primary-foreground shadow-md",
111
+ surface: "bg-card text-card-foreground border border-border hover:bg-accent",
112
+ cta: "w-full bg-primary hover:bg-primary/90 text-primary-foreground font-bold rounded-2xl shadow-md disabled:opacity-50 disabled:cursor-not-allowed disabled:shadow-none",
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
114
  "danger-subtle": "w-full bg-red-500/10 border border-red-500/20 text-red-400 font-bold rounded-xl hover:bg-red-500/20"
115
115
  },
116
116
  size: {
@@ -201,7 +201,7 @@ var Input = React3.forwardRef(
201
201
  {
202
202
  type,
203
203
  className: cn(
204
- "flex h-12 w-full rounded-xl border border-border bg-card px-4 py-3 text-base ring-offset-background transition-all file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:border-primary disabled:cursor-not-allowed disabled:opacity-50",
204
+ "flex h-12 w-full rounded-xl border border-border bg-card px-4 py-3 text-base ring-offset-background transition-all file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring disabled:cursor-not-allowed disabled:opacity-50",
205
205
  className
206
206
  ),
207
207
  ref,
@@ -396,8 +396,8 @@ var TabsTrigger = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE
396
396
  ref,
397
397
  className: cn(
398
398
  "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-foreground hover:bg-white/5",
400
- "data-[state=active]:bg-primary data-[state=active]:text-primary-foreground data-[state=active]:shadow-glow-subtle",
399
+ "hover:text-foreground hover:bg-accent",
400
+ "data-[state=active]:bg-primary data-[state=active]:text-primary-foreground",
401
401
  className
402
402
  ),
403
403
  ...props
@@ -458,7 +458,7 @@ var toastVariants = (0, import_class_variance_authority3.cva)(
458
458
  {
459
459
  variants: {
460
460
  variant: {
461
- default: "border-white/10 bg-surface-dark/95 text-white",
461
+ default: "border-border bg-card/95 text-foreground",
462
462
  destructive: "border-red-500/20 bg-red-500/10 text-red-400"
463
463
  }
464
464
  },
@@ -495,7 +495,7 @@ var ToastClose = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE_
495
495
  {
496
496
  ref,
497
497
  className: cn(
498
- "absolute right-2 top-2 rounded-full p-1 text-white/50 opacity-100 transition-all hover:text-white hover:bg-white/10 focus:opacity-100 focus:outline-none focus:ring-2 focus:ring-primary group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:hover:bg-red-500/20 group-[.destructive]:focus:ring-red-400",
498
+ "absolute right-2 top-2 rounded-full p-1 text-muted-foreground opacity-100 transition-all hover:text-foreground hover:bg-accent focus:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:hover:bg-red-500/20 group-[.destructive]:focus:ring-red-400",
499
499
  className
500
500
  ),
501
501
  "toast-close": "",
@@ -508,7 +508,7 @@ var ToastTitle = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE_
508
508
  ToastPrimitives.Title,
509
509
  {
510
510
  ref,
511
- className: cn("text-sm font-semibold text-white", className),
511
+ className: cn("text-sm font-semibold text-foreground", className),
512
512
  ...props
513
513
  }
514
514
  ));
@@ -517,7 +517,7 @@ var ToastDescription = React7.forwardRef(({ className, ...props }, ref) => /* @_
517
517
  ToastPrimitives.Description,
518
518
  {
519
519
  ref,
520
- className: cn("text-xs text-white/70", className),
520
+ className: cn("text-xs text-muted-foreground", className),
521
521
  ...props
522
522
  }
523
523
  ));
@@ -642,7 +642,7 @@ function ToastWithProgress({ id, title, description, action, duration = 4e3, var
642
642
  if (variant === "destructive") {
643
643
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Icon, { name: "error", size: "md", className: "text-red-400" });
644
644
  }
645
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Icon, { name: "check_circle", size: "md", className: "text-primary" });
645
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Icon, { name: "check_circle", size: "md", className: "text-foreground" });
646
646
  };
647
647
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Toast, { ...props, variant, children: [
648
648
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-start gap-3 flex-1", children: [
@@ -939,7 +939,7 @@ function AssetIcon({ ticker, logoUri, cdnBaseUrl, size = 40, className }) {
939
939
  "div",
940
940
  {
941
941
  className: cn(
942
- "rounded-full flex items-center justify-center font-bold text-white shadow-inner border border-white/10",
942
+ "rounded-full flex items-center justify-center font-bold text-foreground shadow-inner border border-border",
943
943
  bgColor,
944
944
  className
945
945
  ),
@@ -966,8 +966,8 @@ function AssetCard({
966
966
  "div",
967
967
  {
968
968
  className: cn(
969
- "p-4 rounded-card bg-background-dark/40 backdrop-blur-xl border border-white/5 transition-all shadow-sm relative overflow-hidden group",
970
- onClick && "cursor-pointer hover:border-primary/40 hover:shadow-glow-subtle active:scale-[0.98]",
969
+ "p-4 rounded-card bg-background/40 backdrop-blur-xl border border-border transition-all shadow-sm relative overflow-hidden group",
970
+ onClick && "cursor-pointer hover:border-primary/40 active:scale-[0.98]",
971
971
  className
972
972
  ),
973
973
  onClick,
@@ -989,7 +989,7 @@ function AssetCard({
989
989
  "span",
990
990
  {
991
991
  className: cn(
992
- "font-bold text-base leading-tight tracking-wide text-white",
992
+ "font-bold text-base leading-tight tracking-wide text-foreground",
993
993
  onClick && "group-hover:text-primary transition-colors"
994
994
  ),
995
995
  children: name
@@ -999,8 +999,8 @@ function AssetCard({
999
999
  ] })
1000
1000
  ] }),
1001
1001
  /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "text-right", children: [
1002
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "font-bold text-base tracking-tight text-white group-hover:text-white/90 transition-colors", children: shown }),
1003
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-tiny text-slate-400 font-medium tracking-wide uppercase mt-0.5", children: ticker })
1002
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "font-bold text-base tracking-tight text-foreground group-hover:opacity-90 transition-colors", children: shown }),
1003
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-tiny text-muted-foreground font-medium tracking-wide uppercase mt-0.5", children: ticker })
1004
1004
  ] })
1005
1005
  ] })
1006
1006
  ]
@@ -1025,8 +1025,8 @@ function TransactionCard({
1025
1025
  "div",
1026
1026
  {
1027
1027
  className: cn(
1028
- "p-4 rounded-card bg-background-dark/40 backdrop-blur-xl border border-white/5 flex items-center justify-between transition-all shadow-sm relative overflow-hidden group",
1029
- onClick && "cursor-pointer hover:border-primary/40 hover:shadow-glow-subtle active:scale-[0.98]",
1028
+ "p-4 rounded-card bg-background/40 backdrop-blur-xl border border-border flex items-center justify-between transition-all shadow-sm relative overflow-hidden group",
1029
+ onClick && "cursor-pointer hover:border-primary/40 active:scale-[0.98]",
1030
1030
  className
1031
1031
  ),
1032
1032
  onClick,
@@ -1038,7 +1038,7 @@ function TransactionCard({
1038
1038
  {
1039
1039
  className: cn(
1040
1040
  "size-11 rounded-full flex items-center justify-center shadow-inner group-hover:scale-105 transition-transform",
1041
- isInbound ? "bg-primary/20 text-primary border border-primary/20" : "bg-white/5 text-slate-300 border border-white/10"
1041
+ isInbound ? "bg-primary/20 text-primary border border-primary/20" : "bg-accent text-muted-foreground border border-border"
1042
1042
  ),
1043
1043
  children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "material-symbols-outlined text-[20px]", children: isInbound ? "arrow_downward" : "arrow_outward" })
1044
1044
  }
@@ -1048,7 +1048,7 @@ function TransactionCard({
1048
1048
  "span",
1049
1049
  {
1050
1050
  className: cn(
1051
- "font-bold text-sm text-white tracking-wide",
1051
+ "font-bold text-sm text-foreground tracking-wide",
1052
1052
  onClick && "group-hover:text-primary transition-colors"
1053
1053
  ),
1054
1054
  children: isInbound ? "Received" : "Sent"
@@ -1056,7 +1056,7 @@ function TransactionCard({
1056
1056
  ),
1057
1057
  /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-center gap-2 mt-1", children: [
1058
1058
  /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(StatusBadge, { status, className: "text-xxs px-1.5 py-0.5" }),
1059
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-tiny text-slate-400 font-medium tracking-wide", children: formatDate(timestamp) })
1059
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-tiny text-muted-foreground font-medium tracking-wide", children: formatDate(timestamp) })
1060
1060
  ] })
1061
1061
  ] })
1062
1062
  ] }),
@@ -1066,7 +1066,7 @@ function TransactionCard({
1066
1066
  {
1067
1067
  className: cn(
1068
1068
  "font-bold text-base tracking-tight group-hover:opacity-90 transition-opacity",
1069
- isInbound ? "text-primary" : "text-white"
1069
+ isInbound ? "text-primary" : "text-foreground"
1070
1070
  ),
1071
1071
  children: [
1072
1072
  isInbound ? "+" : "-",
@@ -1074,7 +1074,7 @@ function TransactionCard({
1074
1074
  ]
1075
1075
  }
1076
1076
  ),
1077
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "text-tiny text-slate-400 font-medium tracking-wide uppercase mt-0.5", children: unit })
1077
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "text-tiny text-muted-foreground font-medium tracking-wide uppercase mt-0.5", children: unit })
1078
1078
  ] })
1079
1079
  ]
1080
1080
  }
@@ -1085,14 +1085,14 @@ function TransactionCard({
1085
1085
  var import_jsx_runtime15 = require("react/jsx-runtime");
1086
1086
  function PageHeader({ left, title, right, borderClassName = "border-border" }) {
1087
1087
  if (!title) {
1088
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("header", { className: `sticky top-0 z-20 flex items-center border-b bg-background-dark/95 px-4 py-3.5 backdrop-blur ${borderClassName}`, children: [
1088
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("header", { className: `sticky top-0 z-20 flex items-center border-b bg-background/95 px-4 py-3.5 backdrop-blur ${borderClassName}`, children: [
1089
1089
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex shrink-0 items-center", children: left }),
1090
1090
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "ml-auto flex min-w-0 items-center justify-end gap-2", children: right })
1091
1091
  ] });
1092
1092
  }
1093
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("header", { className: `sticky top-0 z-20 flex items-center border-b bg-background-dark/95 px-4 py-3.5 backdrop-blur ${borderClassName}`, children: [
1093
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("header", { className: `sticky top-0 z-20 flex items-center border-b bg-background/95 px-4 py-3.5 backdrop-blur ${borderClassName}`, children: [
1094
1094
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex min-w-0 flex-1 items-center", children: left }),
1095
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "font-bold text-body text-white shrink-0", children: title }),
1095
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "font-bold text-body text-foreground shrink-0", children: title }),
1096
1096
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex min-w-0 flex-1 items-center justify-end gap-2", children: right })
1097
1097
  ] });
1098
1098
  }
@@ -1116,8 +1116,8 @@ function SettingItem({
1116
1116
  "div",
1117
1117
  {
1118
1118
  className: cn(
1119
- "p-5 rounded-2xl glass-panel border border-white/10 shadow-inner transition-all duration-200",
1120
- isClickable && "cursor-pointer hover:bg-white/5 active:scale-[0.98]",
1119
+ "p-5 rounded-2xl bg-card border border-border transition-all duration-200",
1120
+ isClickable && "cursor-pointer hover:bg-accent active:scale-[0.98]",
1121
1121
  className
1122
1122
  ),
1123
1123
  onClick,
@@ -1127,20 +1127,20 @@ function SettingItem({
1127
1127
  "div",
1128
1128
  {
1129
1129
  className: cn(
1130
- "flex-shrink-0 size-10 rounded-xl flex items-center justify-center bg-black/20 shadow-inner border border-white/5",
1130
+ "flex-shrink-0 size-10 rounded-xl flex items-center justify-center bg-muted border border-border",
1131
1131
  iconColor
1132
1132
  ),
1133
1133
  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 })
1134
1134
  }
1135
1135
  ),
1136
1136
  /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex flex-col flex-1 min-w-0", children: [
1137
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "font-bold text-body text-white tracking-wide", children: title }),
1138
- description && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "text-sm text-slate-400 mt-0.5 font-medium", children: description })
1137
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "font-bold text-body text-foreground tracking-wide", children: title }),
1138
+ description && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "text-sm text-muted-foreground mt-0.5 font-medium", children: description })
1139
1139
  ] })
1140
1140
  ] }),
1141
1141
  /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex items-center gap-2 flex-shrink-0", children: [
1142
- value && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "text-xs text-slate-400 font-mono", children: value }),
1143
- showChevron && isClickable && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "material-symbols-outlined text-[16px] text-slate-500", children: "chevron_right" })
1142
+ 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" })
1144
1144
  ] })
1145
1145
  ] })
1146
1146
  }
@@ -1150,7 +1150,13 @@ function SettingItem({
1150
1150
  // src/web/components/section-label.tsx
1151
1151
  var import_jsx_runtime17 = require("react/jsx-runtime");
1152
1152
  function SectionLabel({ children, className }) {
1153
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: cn("text-xxs font-black uppercase tracking-[0.22em] text-white/30", className), children });
1153
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1154
+ "span",
1155
+ {
1156
+ className: cn("text-xxs font-black uppercase tracking-[0.22em] text-muted-foreground", className),
1157
+ children
1158
+ }
1159
+ );
1154
1160
  }
1155
1161
 
1156
1162
  // src/web/components/alert-banner.tsx
@@ -1201,10 +1207,10 @@ var ErrorBoundary = class extends import_react4.Component {
1201
1207
  }
1202
1208
  render() {
1203
1209
  if (this.state.hasError) {
1204
- return this.props.fallback ?? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "min-h-screen bg-background-dark text-white font-display flex flex-col items-center justify-center p-6 gap-4", children: [
1210
+ return this.props.fallback ?? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "min-h-screen bg-background text-foreground font-display flex flex-col items-center justify-center p-6 gap-4", children: [
1205
1211
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "material-symbols-outlined text-red-400 text-[48px]", children: "error" }),
1206
1212
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("h2", { className: "text-lg font-bold", children: "Something went wrong" }),
1207
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-sm text-white/50 text-center", children: this.state.error?.message ?? "An unexpected error occurred." }),
1213
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-sm text-muted-foreground text-center", children: this.state.error?.message ?? "An unexpected error occurred." }),
1208
1214
  /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1209
1215
  "button",
1210
1216
  {
@@ -1212,7 +1218,7 @@ var ErrorBoundary = class extends import_react4.Component {
1212
1218
  this.setState({ hasError: false, error: null });
1213
1219
  this.props.onReset?.();
1214
1220
  },
1215
- className: "px-6 py-3 rounded-xl bg-primary text-black font-bold hover:bg-primary/90 transition-all",
1221
+ className: "px-6 py-3 rounded-xl bg-primary text-primary-foreground font-bold hover:bg-primary/90 transition-all",
1216
1222
  children: "Try Again"
1217
1223
  }
1218
1224
  )
package/dist/web/index.js CHANGED
@@ -17,16 +17,16 @@ var buttonVariants = cva(
17
17
  {
18
18
  variants: {
19
19
  variant: {
20
- default: "bg-primary text-primary-foreground hover:bg-primary/90 shadow-glow-subtle hover:shadow-glow",
20
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
21
21
  destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
22
- outline: "border border-border bg-transparent hover:bg-accent hover:text-accent-foreground hover:border-primary/30",
22
+ outline: "border border-border bg-transparent hover:bg-accent hover:text-accent-foreground",
23
23
  secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
24
- ghost: "hover:bg-white/5 hover:text-foreground",
24
+ ghost: "hover:bg-accent hover:text-foreground",
25
25
  link: "text-primary underline-offset-4 hover:underline",
26
- glow: "bg-primary text-primary-foreground shadow-glow hover:shadow-glow-strong animate-pulse-glow",
27
- surface: "bg-card text-card-foreground border border-border hover:bg-accent hover:border-primary/30",
28
- cta: "w-full bg-primary hover:bg-primary-dark text-primary-foreground font-bold rounded-2xl shadow-glow-accent disabled:opacity-50 disabled:cursor-not-allowed disabled:shadow-none",
29
- "cta-gradient": "w-full bg-gradient-to-r from-primary to-primary-dark text-primary-foreground font-extrabold rounded-2xl shadow-[0_8px_30px_rgba(43,238,121,0.35)] 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-surface-highlight disabled:text-white/50",
26
+ glow: "bg-primary text-primary-foreground shadow-md",
27
+ surface: "bg-card text-card-foreground border border-border hover:bg-accent",
28
+ cta: "w-full bg-primary hover:bg-primary/90 text-primary-foreground font-bold rounded-2xl shadow-md disabled:opacity-50 disabled:cursor-not-allowed disabled:shadow-none",
29
+ "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",
30
30
  "danger-subtle": "w-full bg-red-500/10 border border-red-500/20 text-red-400 font-bold rounded-xl hover:bg-red-500/20"
31
31
  },
32
32
  size: {
@@ -117,7 +117,7 @@ var Input = React3.forwardRef(
117
117
  {
118
118
  type,
119
119
  className: cn(
120
- "flex h-12 w-full rounded-xl border border-border bg-card px-4 py-3 text-base ring-offset-background transition-all file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:border-primary disabled:cursor-not-allowed disabled:opacity-50",
120
+ "flex h-12 w-full rounded-xl border border-border bg-card px-4 py-3 text-base ring-offset-background transition-all file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-ring disabled:cursor-not-allowed disabled:opacity-50",
121
121
  className
122
122
  ),
123
123
  ref,
@@ -312,8 +312,8 @@ var TabsTrigger = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE
312
312
  ref,
313
313
  className: cn(
314
314
  "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",
315
- "hover:text-foreground hover:bg-white/5",
316
- "data-[state=active]:bg-primary data-[state=active]:text-primary-foreground data-[state=active]:shadow-glow-subtle",
315
+ "hover:text-foreground hover:bg-accent",
316
+ "data-[state=active]:bg-primary data-[state=active]:text-primary-foreground",
317
317
  className
318
318
  ),
319
319
  ...props
@@ -374,7 +374,7 @@ var toastVariants = cva3(
374
374
  {
375
375
  variants: {
376
376
  variant: {
377
- default: "border-white/10 bg-surface-dark/95 text-white",
377
+ default: "border-border bg-card/95 text-foreground",
378
378
  destructive: "border-red-500/20 bg-red-500/10 text-red-400"
379
379
  }
380
380
  },
@@ -411,7 +411,7 @@ var ToastClose = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE_
411
411
  {
412
412
  ref,
413
413
  className: cn(
414
- "absolute right-2 top-2 rounded-full p-1 text-white/50 opacity-100 transition-all hover:text-white hover:bg-white/10 focus:opacity-100 focus:outline-none focus:ring-2 focus:ring-primary group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:hover:bg-red-500/20 group-[.destructive]:focus:ring-red-400",
414
+ "absolute right-2 top-2 rounded-full p-1 text-muted-foreground opacity-100 transition-all hover:text-foreground hover:bg-accent focus:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:hover:bg-red-500/20 group-[.destructive]:focus:ring-red-400",
415
415
  className
416
416
  ),
417
417
  "toast-close": "",
@@ -424,7 +424,7 @@ var ToastTitle = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE_
424
424
  ToastPrimitives.Title,
425
425
  {
426
426
  ref,
427
- className: cn("text-sm font-semibold text-white", className),
427
+ className: cn("text-sm font-semibold text-foreground", className),
428
428
  ...props
429
429
  }
430
430
  ));
@@ -433,7 +433,7 @@ var ToastDescription = React7.forwardRef(({ className, ...props }, ref) => /* @_
433
433
  ToastPrimitives.Description,
434
434
  {
435
435
  ref,
436
- className: cn("text-xs text-white/70", className),
436
+ className: cn("text-xs text-muted-foreground", className),
437
437
  ...props
438
438
  }
439
439
  ));
@@ -558,7 +558,7 @@ function ToastWithProgress({ id, title, description, action, duration = 4e3, var
558
558
  if (variant === "destructive") {
559
559
  return /* @__PURE__ */ jsx9(Icon, { name: "error", size: "md", className: "text-red-400" });
560
560
  }
561
- return /* @__PURE__ */ jsx9(Icon, { name: "check_circle", size: "md", className: "text-primary" });
561
+ return /* @__PURE__ */ jsx9(Icon, { name: "check_circle", size: "md", className: "text-foreground" });
562
562
  };
563
563
  return /* @__PURE__ */ jsxs2(Toast, { ...props, variant, children: [
564
564
  /* @__PURE__ */ jsxs2("div", { className: "flex items-start gap-3 flex-1", children: [
@@ -855,7 +855,7 @@ function AssetIcon({ ticker, logoUri, cdnBaseUrl, size = 40, className }) {
855
855
  "div",
856
856
  {
857
857
  className: cn(
858
- "rounded-full flex items-center justify-center font-bold text-white shadow-inner border border-white/10",
858
+ "rounded-full flex items-center justify-center font-bold text-foreground shadow-inner border border-border",
859
859
  bgColor,
860
860
  className
861
861
  ),
@@ -882,8 +882,8 @@ function AssetCard({
882
882
  "div",
883
883
  {
884
884
  className: cn(
885
- "p-4 rounded-card bg-background-dark/40 backdrop-blur-xl border border-white/5 transition-all shadow-sm relative overflow-hidden group",
886
- onClick && "cursor-pointer hover:border-primary/40 hover:shadow-glow-subtle active:scale-[0.98]",
885
+ "p-4 rounded-card bg-background/40 backdrop-blur-xl border border-border transition-all shadow-sm relative overflow-hidden group",
886
+ onClick && "cursor-pointer hover:border-primary/40 active:scale-[0.98]",
887
887
  className
888
888
  ),
889
889
  onClick,
@@ -905,7 +905,7 @@ function AssetCard({
905
905
  "span",
906
906
  {
907
907
  className: cn(
908
- "font-bold text-base leading-tight tracking-wide text-white",
908
+ "font-bold text-base leading-tight tracking-wide text-foreground",
909
909
  onClick && "group-hover:text-primary transition-colors"
910
910
  ),
911
911
  children: name
@@ -915,8 +915,8 @@ function AssetCard({
915
915
  ] })
916
916
  ] }),
917
917
  /* @__PURE__ */ jsxs5("div", { className: "text-right", children: [
918
- /* @__PURE__ */ jsx13("p", { className: "font-bold text-base tracking-tight text-white group-hover:text-white/90 transition-colors", children: shown }),
919
- /* @__PURE__ */ jsx13("p", { className: "text-tiny text-slate-400 font-medium tracking-wide uppercase mt-0.5", children: ticker })
918
+ /* @__PURE__ */ jsx13("p", { className: "font-bold text-base tracking-tight text-foreground group-hover:opacity-90 transition-colors", children: shown }),
919
+ /* @__PURE__ */ jsx13("p", { className: "text-tiny text-muted-foreground font-medium tracking-wide uppercase mt-0.5", children: ticker })
920
920
  ] })
921
921
  ] })
922
922
  ]
@@ -941,8 +941,8 @@ function TransactionCard({
941
941
  "div",
942
942
  {
943
943
  className: cn(
944
- "p-4 rounded-card bg-background-dark/40 backdrop-blur-xl border border-white/5 flex items-center justify-between transition-all shadow-sm relative overflow-hidden group",
945
- onClick && "cursor-pointer hover:border-primary/40 hover:shadow-glow-subtle active:scale-[0.98]",
944
+ "p-4 rounded-card bg-background/40 backdrop-blur-xl border border-border flex items-center justify-between transition-all shadow-sm relative overflow-hidden group",
945
+ onClick && "cursor-pointer hover:border-primary/40 active:scale-[0.98]",
946
946
  className
947
947
  ),
948
948
  onClick,
@@ -954,7 +954,7 @@ function TransactionCard({
954
954
  {
955
955
  className: cn(
956
956
  "size-11 rounded-full flex items-center justify-center shadow-inner group-hover:scale-105 transition-transform",
957
- isInbound ? "bg-primary/20 text-primary border border-primary/20" : "bg-white/5 text-slate-300 border border-white/10"
957
+ isInbound ? "bg-primary/20 text-primary border border-primary/20" : "bg-accent text-muted-foreground border border-border"
958
958
  ),
959
959
  children: /* @__PURE__ */ jsx14("span", { className: "material-symbols-outlined text-[20px]", children: isInbound ? "arrow_downward" : "arrow_outward" })
960
960
  }
@@ -964,7 +964,7 @@ function TransactionCard({
964
964
  "span",
965
965
  {
966
966
  className: cn(
967
- "font-bold text-sm text-white tracking-wide",
967
+ "font-bold text-sm text-foreground tracking-wide",
968
968
  onClick && "group-hover:text-primary transition-colors"
969
969
  ),
970
970
  children: isInbound ? "Received" : "Sent"
@@ -972,7 +972,7 @@ function TransactionCard({
972
972
  ),
973
973
  /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2 mt-1", children: [
974
974
  /* @__PURE__ */ jsx14(StatusBadge, { status, className: "text-xxs px-1.5 py-0.5" }),
975
- /* @__PURE__ */ jsx14("span", { className: "text-tiny text-slate-400 font-medium tracking-wide", children: formatDate(timestamp) })
975
+ /* @__PURE__ */ jsx14("span", { className: "text-tiny text-muted-foreground font-medium tracking-wide", children: formatDate(timestamp) })
976
976
  ] })
977
977
  ] })
978
978
  ] }),
@@ -982,7 +982,7 @@ function TransactionCard({
982
982
  {
983
983
  className: cn(
984
984
  "font-bold text-base tracking-tight group-hover:opacity-90 transition-opacity",
985
- isInbound ? "text-primary" : "text-white"
985
+ isInbound ? "text-primary" : "text-foreground"
986
986
  ),
987
987
  children: [
988
988
  isInbound ? "+" : "-",
@@ -990,7 +990,7 @@ function TransactionCard({
990
990
  ]
991
991
  }
992
992
  ),
993
- /* @__PURE__ */ jsx14("p", { className: "text-tiny text-slate-400 font-medium tracking-wide uppercase mt-0.5", children: unit })
993
+ /* @__PURE__ */ jsx14("p", { className: "text-tiny text-muted-foreground font-medium tracking-wide uppercase mt-0.5", children: unit })
994
994
  ] })
995
995
  ]
996
996
  }
@@ -1001,14 +1001,14 @@ function TransactionCard({
1001
1001
  import { jsx as jsx15, jsxs as jsxs7 } from "react/jsx-runtime";
1002
1002
  function PageHeader({ left, title, right, borderClassName = "border-border" }) {
1003
1003
  if (!title) {
1004
- return /* @__PURE__ */ jsxs7("header", { className: `sticky top-0 z-20 flex items-center border-b bg-background-dark/95 px-4 py-3.5 backdrop-blur ${borderClassName}`, children: [
1004
+ return /* @__PURE__ */ jsxs7("header", { className: `sticky top-0 z-20 flex items-center border-b bg-background/95 px-4 py-3.5 backdrop-blur ${borderClassName}`, children: [
1005
1005
  /* @__PURE__ */ jsx15("div", { className: "flex shrink-0 items-center", children: left }),
1006
1006
  /* @__PURE__ */ jsx15("div", { className: "ml-auto flex min-w-0 items-center justify-end gap-2", children: right })
1007
1007
  ] });
1008
1008
  }
1009
- return /* @__PURE__ */ jsxs7("header", { className: `sticky top-0 z-20 flex items-center border-b bg-background-dark/95 px-4 py-3.5 backdrop-blur ${borderClassName}`, children: [
1009
+ return /* @__PURE__ */ jsxs7("header", { className: `sticky top-0 z-20 flex items-center border-b bg-background/95 px-4 py-3.5 backdrop-blur ${borderClassName}`, children: [
1010
1010
  /* @__PURE__ */ jsx15("div", { className: "flex min-w-0 flex-1 items-center", children: left }),
1011
- /* @__PURE__ */ jsx15("span", { className: "font-bold text-body text-white shrink-0", children: title }),
1011
+ /* @__PURE__ */ jsx15("span", { className: "font-bold text-body text-foreground shrink-0", children: title }),
1012
1012
  /* @__PURE__ */ jsx15("div", { className: "flex min-w-0 flex-1 items-center justify-end gap-2", children: right })
1013
1013
  ] });
1014
1014
  }
@@ -1032,8 +1032,8 @@ function SettingItem({
1032
1032
  "div",
1033
1033
  {
1034
1034
  className: cn(
1035
- "p-5 rounded-2xl glass-panel border border-white/10 shadow-inner transition-all duration-200",
1036
- isClickable && "cursor-pointer hover:bg-white/5 active:scale-[0.98]",
1035
+ "p-5 rounded-2xl bg-card border border-border transition-all duration-200",
1036
+ isClickable && "cursor-pointer hover:bg-accent active:scale-[0.98]",
1037
1037
  className
1038
1038
  ),
1039
1039
  onClick,
@@ -1043,20 +1043,20 @@ function SettingItem({
1043
1043
  "div",
1044
1044
  {
1045
1045
  className: cn(
1046
- "flex-shrink-0 size-10 rounded-xl flex items-center justify-center bg-black/20 shadow-inner border border-white/5",
1046
+ "flex-shrink-0 size-10 rounded-xl flex items-center justify-center bg-muted border border-border",
1047
1047
  iconColor
1048
1048
  ),
1049
1049
  children: iconSrc ? /* @__PURE__ */ jsx16("img", { src: iconSrc, alt: iconAlt ?? title, className: "size-5 object-contain" }) : /* @__PURE__ */ jsx16("span", { className: "material-symbols-outlined text-[20px]", children: icon })
1050
1050
  }
1051
1051
  ),
1052
1052
  /* @__PURE__ */ jsxs8("div", { className: "flex flex-col flex-1 min-w-0", children: [
1053
- /* @__PURE__ */ jsx16("span", { className: "font-bold text-body text-white tracking-wide", children: title }),
1054
- description && /* @__PURE__ */ jsx16("span", { className: "text-sm text-slate-400 mt-0.5 font-medium", children: description })
1053
+ /* @__PURE__ */ jsx16("span", { className: "font-bold text-body text-foreground tracking-wide", children: title }),
1054
+ description && /* @__PURE__ */ jsx16("span", { className: "text-sm text-muted-foreground mt-0.5 font-medium", children: description })
1055
1055
  ] })
1056
1056
  ] }),
1057
1057
  /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-2 flex-shrink-0", children: [
1058
- value && /* @__PURE__ */ jsx16("span", { className: "text-xs text-slate-400 font-mono", children: value }),
1059
- showChevron && isClickable && /* @__PURE__ */ jsx16("span", { className: "material-symbols-outlined text-[16px] text-slate-500", children: "chevron_right" })
1058
+ value && /* @__PURE__ */ jsx16("span", { className: "text-xs text-muted-foreground font-mono", children: value }),
1059
+ showChevron && isClickable && /* @__PURE__ */ jsx16("span", { className: "material-symbols-outlined text-[16px] text-muted-foreground", children: "chevron_right" })
1060
1060
  ] })
1061
1061
  ] })
1062
1062
  }
@@ -1066,7 +1066,13 @@ function SettingItem({
1066
1066
  // src/web/components/section-label.tsx
1067
1067
  import { jsx as jsx17 } from "react/jsx-runtime";
1068
1068
  function SectionLabel({ children, className }) {
1069
- return /* @__PURE__ */ jsx17("span", { className: cn("text-xxs font-black uppercase tracking-[0.22em] text-white/30", className), children });
1069
+ return /* @__PURE__ */ jsx17(
1070
+ "span",
1071
+ {
1072
+ className: cn("text-xxs font-black uppercase tracking-[0.22em] text-muted-foreground", className),
1073
+ children
1074
+ }
1075
+ );
1070
1076
  }
1071
1077
 
1072
1078
  // src/web/components/alert-banner.tsx
@@ -1117,10 +1123,10 @@ var ErrorBoundary = class extends Component {
1117
1123
  }
1118
1124
  render() {
1119
1125
  if (this.state.hasError) {
1120
- return this.props.fallback ?? /* @__PURE__ */ jsxs10("div", { className: "min-h-screen bg-background-dark text-white font-display flex flex-col items-center justify-center p-6 gap-4", children: [
1126
+ return this.props.fallback ?? /* @__PURE__ */ jsxs10("div", { className: "min-h-screen bg-background text-foreground font-display flex flex-col items-center justify-center p-6 gap-4", children: [
1121
1127
  /* @__PURE__ */ jsx19("span", { className: "material-symbols-outlined text-red-400 text-[48px]", children: "error" }),
1122
1128
  /* @__PURE__ */ jsx19("h2", { className: "text-lg font-bold", children: "Something went wrong" }),
1123
- /* @__PURE__ */ jsx19("p", { className: "text-sm text-white/50 text-center", children: this.state.error?.message ?? "An unexpected error occurred." }),
1129
+ /* @__PURE__ */ jsx19("p", { className: "text-sm text-muted-foreground text-center", children: this.state.error?.message ?? "An unexpected error occurred." }),
1124
1130
  /* @__PURE__ */ jsx19(
1125
1131
  "button",
1126
1132
  {
@@ -1128,7 +1134,7 @@ var ErrorBoundary = class extends Component {
1128
1134
  this.setState({ hasError: false, error: null });
1129
1135
  this.props.onReset?.();
1130
1136
  },
1131
- className: "px-6 py-3 rounded-xl bg-primary text-black font-bold hover:bg-primary/90 transition-all",
1137
+ className: "px-6 py-3 rounded-xl bg-primary text-primary-foreground font-bold hover:bg-primary/90 transition-all",
1132
1138
  children: "Try Again"
1133
1139
  }
1134
1140
  )
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kaleido-ui",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "KaleidoSwap shared UI library — design tokens, web components (Tailwind + Radix), and React Native components extending WDK UI Kit",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -39,6 +39,8 @@
39
39
  "scripts": {
40
40
  "build": "tsup && mkdir -p dist/css && cp src/css/kaleido-ui.css dist/css/kaleido-ui.css",
41
41
  "dev": "tsup --watch",
42
+ "showcase": "vite --config showcase/vite.config.ts",
43
+ "showcase:build": "vite build --config showcase/vite.config.ts",
42
44
  "type-check": "tsc --noEmit",
43
45
  "clean": "rm -rf dist"
44
46
  },
@@ -96,14 +98,22 @@
96
98
  "@radix-ui/react-slot": "^1.2.4",
97
99
  "@radix-ui/react-tabs": "^1.1.13",
98
100
  "@radix-ui/react-toast": "^1.2.15",
101
+ "@tailwindcss/vite": "^4.2.4",
99
102
  "@types/react": "^19.2.14",
100
103
  "@types/react-dom": "^19.2.3",
101
104
  "@types/react-native": "^0.72.8",
105
+ "@vitejs/plugin-react": "^4.3.0",
106
+ "autoprefixer": "^10.5.0",
102
107
  "class-variance-authority": "^0.7.1",
103
108
  "clsx": "^2.1.1",
109
+ "postcss": "^8.4.49",
110
+ "react": "^19.0.0",
111
+ "react-dom": "^19.0.0",
104
112
  "tailwind-merge": "^2.6.1",
113
+ "tailwindcss": "^4.2.4",
105
114
  "tsup": "^8.0.0",
106
- "typescript": "^5.9.0"
115
+ "typescript": "^5.9.0",
116
+ "vite": "^5.4.11"
107
117
  },
108
118
  "repository": {
109
119
  "type": "git",