kaleido-ui 0.1.20 → 0.1.22

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.
@@ -1146,29 +1146,55 @@ function NetworkBadge({
1146
1146
  const content = children ?? (shouldShowLabel ? label : null);
1147
1147
  const chipSize = size === "sm" ? "size-6" : "size-8";
1148
1148
  const imageSize = size === "sm" ? "size-3.5" : "size-icon-lg";
1149
- const renderGlyph = (className2) => network === "L1" ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1150
- "span",
1151
- {
1152
- className: cn("material-symbols-outlined leading-none", color, className2),
1153
- style: { fontSize: size === "sm" ? 12 : 16 },
1154
- "aria-hidden": true,
1155
- children: "link"
1149
+ const renderGlyph = (className2) => {
1150
+ if (network === "L1") {
1151
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1152
+ "span",
1153
+ {
1154
+ className: cn("material-symbols-outlined leading-none", color, className2),
1155
+ style: { fontSize: size === "sm" ? 12 : 16 },
1156
+ "aria-hidden": true,
1157
+ children: "link"
1158
+ }
1159
+ );
1156
1160
  }
1157
- ) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1158
- "img",
1159
- {
1160
- src: icon,
1161
- alt: network,
1162
- className: cn(className2, "object-contain", defaultIconClassName, iconClassName)
1161
+ if (network === "RGB-LN") {
1162
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("span", { className: "inline-flex items-center gap-0.5", children: [
1163
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1164
+ "img",
1165
+ {
1166
+ src: `${iconBasePath}/rgb/rgb-logo.svg`,
1167
+ alt: "RGB",
1168
+ className: cn(className2, "object-contain", defaultIconClassName, iconClassName)
1169
+ }
1170
+ ),
1171
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1172
+ "img",
1173
+ {
1174
+ src: `${iconBasePath}/lightning/lightning.svg`,
1175
+ alt: "Lightning",
1176
+ className: cn(className2, "object-contain", iconClassName)
1177
+ }
1178
+ )
1179
+ ] });
1163
1180
  }
1164
- );
1181
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1182
+ "img",
1183
+ {
1184
+ src: icon,
1185
+ alt: network,
1186
+ className: cn(className2, "object-contain", defaultIconClassName, iconClassName)
1187
+ }
1188
+ );
1189
+ };
1165
1190
  if (!content) {
1191
+ const isDualGlyph = network === "RGB-LN";
1166
1192
  return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1167
1193
  "span",
1168
1194
  {
1169
1195
  className: cn(
1170
1196
  "flex items-center justify-center rounded-full shadow-inner",
1171
- chipSize,
1197
+ isDualGlyph ? size === "sm" ? "h-6 px-1.5" : "h-8 px-2" : chipSize,
1172
1198
  iconBg,
1173
1199
  className
1174
1200
  ),
@@ -3070,9 +3096,14 @@ function AssetSelector({
3070
3096
  " available"
3071
3097
  ] })
3072
3098
  ] }),
3073
- selected && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex items-center gap-2 rounded-full border border-primary/15 bg-primary/10 px-2.5 py-1", children: [
3099
+ selected && /* Network-coloured chip uses the existing NetworkBadge
3100
+ so the asset's network color carries through (matches
3101
+ the showcase / wallet main page styling). When the
3102
+ asset has no network we fall back to a neutral pill. */
3103
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex items-center gap-2 rounded-full border border-white/10 bg-white/5 px-2.5 py-1", children: [
3074
3104
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(AssetIcon, { ticker: selected.ticker, logoUri: selected.icon, size: 18 }),
3075
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "text-tiny font-semibold text-primary", children: selected.ticker })
3105
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "text-tiny font-semibold text-white", children: selected.ticker }),
3106
+ selected.network && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(NetworkBadge, { network: selected.network, showLabel: true, className: "py-[1px]" })
3076
3107
  ] })
3077
3108
  ] }) }),
3078
3109
  /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex-shrink-0 border-b border-white/[0.08] px-4 py-3", children: [
@@ -3093,7 +3124,7 @@ function AssetSelector({
3093
3124
  value: search,
3094
3125
  onChange: (event) => setSearch(event.target.value),
3095
3126
  placeholder: "Search...",
3096
- className: "h-11 w-full rounded-2xl border bg-black/20 pl-10 pr-3 text-sm text-white placeholder:text-white/25 focus:border-primary/50 focus:outline-none"
3127
+ className: "h-11 w-full rounded-2xl border border-transparent bg-black/20 pl-10 pr-3 text-sm text-white placeholder:text-white/25 focus:border-primary/50 focus:outline-none"
3097
3128
  }
3098
3129
  )
3099
3130
  ] }),
@@ -3116,7 +3147,7 @@ function AssetSelector({
3116
3147
  );
3117
3148
  }) })
3118
3149
  ] }),
3119
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(ScrollArea, { className: "min-h-0", viewportClassName: "px-2 py-2", children: filtered.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex flex-col items-center gap-2 px-4 py-10 text-center text-sm text-white/30", children: [
3150
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(ScrollArea, { className: "min-h-0", viewportClassName: "px-2 py-2 pb-6", children: filtered.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex flex-col items-center gap-2 px-4 py-10 text-center text-sm text-white/30", children: [
3120
3151
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Icon2, { name: "search", size: "md", className: "opacity-40" }),
3121
3152
  /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { children: [
3122
3153
  "No results",
@@ -3293,6 +3324,7 @@ function SwapInputCard({
3293
3324
  quoteExpiresUrgent = false,
3294
3325
  warning,
3295
3326
  submitLabel,
3327
+ submitIcon,
3296
3328
  submitVariant = "cta",
3297
3329
  submitDisabled = false,
3298
3330
  onFromTickerChange,
@@ -3306,7 +3338,26 @@ function SwapInputCard({
3306
3338
  return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
3307
3339
  /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "relative mb-3 flex flex-col rounded-3xl bg-white/[0.03] shadow-2xl shadow-black/40 backdrop-blur-2xl transition-all duration-300", children: [
3308
3340
  /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "p-3.5 pb-4", children: [
3309
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "mb-2 flex items-center justify-between", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "text-xs font-bold uppercase tracking-widest text-white/60", children: "You Pay" }) }),
3341
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "mb-2 flex items-center justify-between gap-2", children: [
3342
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "text-xs font-bold uppercase tracking-widest text-white/60", children: "You Pay" }),
3343
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "flex items-center gap-1", children: PERCENTAGES.map((percent) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
3344
+ "button",
3345
+ {
3346
+ type: "button",
3347
+ disabled: percentageDisabled,
3348
+ onClick: () => onPercentageClick(percent),
3349
+ className: cn(
3350
+ "rounded px-1.5 py-0.5 text-xxs font-bold transition-all duration-300 disabled:cursor-not-allowed disabled:opacity-40",
3351
+ selectedPercentage === percent ? "border-primary/50 bg-primary/20 text-primary shadow-sm" : "bg-white/[0.03] text-muted-foreground hover:text-white"
3352
+ ),
3353
+ children: [
3354
+ percent,
3355
+ "%"
3356
+ ]
3357
+ },
3358
+ percent
3359
+ )) })
3360
+ ] }),
3310
3361
  /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex items-center gap-2", children: [
3311
3362
  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3312
3363
  AssetSelector,
@@ -3338,44 +3389,25 @@ function SwapInputCard({
3338
3389
  {
3339
3390
  type: "button",
3340
3391
  onClick: onToggleFromUnit,
3341
- className: "mt-0.5 text-right text-xs text-muted-foreground underline decoration-dotted transition-colors hover:text-primary",
3392
+ className: "mt-0.5 text-right text-xs text-muted-foreground transition-colors hover:text-primary",
3342
3393
  title: "Tap to switch unit",
3343
3394
  children: fromUnitLabel
3344
3395
  }
3345
3396
  ) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: fromUnitLabel })
3346
3397
  ] })
3347
3398
  ] }),
3348
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "mt-2 flex items-center justify-between gap-2", children: [
3349
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "text-xxs font-medium text-white/60", children: showMaxText && maxText ? `Max: ${maxText}` : `Available: ${availableText}` }),
3350
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "flex items-center gap-1", children: PERCENTAGES.map((percent) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
3351
- "button",
3352
- {
3353
- type: "button",
3354
- disabled: percentageDisabled,
3355
- onClick: () => onPercentageClick(percent),
3356
- className: cn(
3357
- "rounded px-1.5 py-0.5 text-xxs font-bold transition-all duration-300 disabled:cursor-not-allowed disabled:opacity-40",
3358
- selectedPercentage === percent ? "border-primary/50 bg-primary/20 text-primary shadow-sm" : "bg-white/[0.03] text-muted-foreground hover:text-white"
3359
- ),
3360
- children: [
3361
- percent,
3362
- "%"
3363
- ]
3364
- },
3365
- percent
3366
- )) })
3367
- ] })
3399
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "mt-2 flex items-center justify-between gap-2", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "text-xxs font-medium text-white/60", children: showMaxText && maxText ? `Max: ${maxText}` : `Available: ${availableText}` }) })
3368
3400
  ] }),
3369
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "relative mx-6 flex h-px items-center justify-center bg-white/[0.08]", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3401
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "relative mx-6 flex h-px items-center justify-center bg-white/[0.08]", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "absolute flex h-11 w-11 items-center justify-center rounded-full bg-card shadow-lg shadow-black/35", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3370
3402
  "button",
3371
3403
  {
3372
3404
  type: "button",
3373
3405
  onClick: onFlip,
3374
3406
  title: "Flip assets",
3375
- className: "absolute flex h-11 w-11 items-center justify-center rounded-full bg-card text-primary shadow-lg shadow-black/35 transition-all duration-500 hover:rotate-180 hover:bg-accent active:scale-95 active:shadow-none",
3407
+ className: "flex h-11 w-11 items-center justify-center rounded-full bg-card text-primary transition-transform duration-500 hover:rotate-180 hover:bg-accent active:scale-95",
3376
3408
  children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Icon2, { name: "swap_vert", size: "md" })
3377
3409
  }
3378
- ) }),
3410
+ ) }) }),
3379
3411
  /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "rounded-b-3xl bg-gradient-to-br from-white/[0.01] to-primary/[0.04] p-3.5 pt-4 transition-all duration-300", children: [
3380
3412
  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "mb-2 text-xs font-bold uppercase tracking-widest text-primary/70", children: "You Receive" }),
3381
3413
  /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex items-center gap-2", children: [
@@ -3434,7 +3466,10 @@ function SwapInputCard({
3434
3466
  className: "w-full",
3435
3467
  onClick: onSubmit,
3436
3468
  disabled: submitDisabled,
3437
- children: submitLabel
3469
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "inline-flex items-center justify-center gap-2", children: [
3470
+ submitIcon,
3471
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: submitLabel })
3472
+ ] })
3438
3473
  }
3439
3474
  )
3440
3475
  ] });
@@ -618,6 +618,8 @@ interface SwapInputCardProps {
618
618
  quoteExpiresUrgent?: boolean;
619
619
  warning?: string | null;
620
620
  submitLabel: string;
621
+ /** Optional leading icon for the submit CTA (e.g. a Material-Symbols glyph). */
622
+ submitIcon?: ReactNode;
621
623
  submitVariant?: ButtonProps['variant'];
622
624
  submitDisabled?: boolean;
623
625
  onFromTickerChange: (ticker: string) => void;
@@ -628,7 +630,7 @@ interface SwapInputCardProps {
628
630
  onFlip: () => void;
629
631
  onSubmit: () => void;
630
632
  }
631
- declare function SwapInputCard({ fromTicker, toTicker, fromInput, fromOptions, toOptions, categories, defaultActiveCategories, availableText, showMaxText, maxText, selectedPercentage, percentageDisabled, fromUnitLabel, fromUnitIsToggle, receiveAmount, receiveUnitLabel, isLoadingQuote, quoteError, quoteRateText, quoteFeeText, quoteExpiresText, quoteExpiresUrgent, warning, submitLabel, submitVariant, submitDisabled, onFromTickerChange, onToTickerChange, onFromInputChange, onPercentageClick, onToggleFromUnit, onFlip, onSubmit, }: SwapInputCardProps): react_jsx_runtime.JSX.Element;
633
+ declare function SwapInputCard({ fromTicker, toTicker, fromInput, fromOptions, toOptions, categories, defaultActiveCategories, availableText, showMaxText, maxText, selectedPercentage, percentageDisabled, fromUnitLabel, fromUnitIsToggle, receiveAmount, receiveUnitLabel, isLoadingQuote, quoteError, quoteRateText, quoteFeeText, quoteExpiresText, quoteExpiresUrgent, warning, submitLabel, submitIcon, submitVariant, submitDisabled, onFromTickerChange, onToTickerChange, onFromInputChange, onPercentageClick, onToggleFromUnit, onFlip, onSubmit, }: SwapInputCardProps): react_jsx_runtime.JSX.Element;
632
634
 
633
635
  interface ActivityListItem<TData = unknown> {
634
636
  id: string;
@@ -618,6 +618,8 @@ interface SwapInputCardProps {
618
618
  quoteExpiresUrgent?: boolean;
619
619
  warning?: string | null;
620
620
  submitLabel: string;
621
+ /** Optional leading icon for the submit CTA (e.g. a Material-Symbols glyph). */
622
+ submitIcon?: ReactNode;
621
623
  submitVariant?: ButtonProps['variant'];
622
624
  submitDisabled?: boolean;
623
625
  onFromTickerChange: (ticker: string) => void;
@@ -628,7 +630,7 @@ interface SwapInputCardProps {
628
630
  onFlip: () => void;
629
631
  onSubmit: () => void;
630
632
  }
631
- declare function SwapInputCard({ fromTicker, toTicker, fromInput, fromOptions, toOptions, categories, defaultActiveCategories, availableText, showMaxText, maxText, selectedPercentage, percentageDisabled, fromUnitLabel, fromUnitIsToggle, receiveAmount, receiveUnitLabel, isLoadingQuote, quoteError, quoteRateText, quoteFeeText, quoteExpiresText, quoteExpiresUrgent, warning, submitLabel, submitVariant, submitDisabled, onFromTickerChange, onToTickerChange, onFromInputChange, onPercentageClick, onToggleFromUnit, onFlip, onSubmit, }: SwapInputCardProps): react_jsx_runtime.JSX.Element;
633
+ declare function SwapInputCard({ fromTicker, toTicker, fromInput, fromOptions, toOptions, categories, defaultActiveCategories, availableText, showMaxText, maxText, selectedPercentage, percentageDisabled, fromUnitLabel, fromUnitIsToggle, receiveAmount, receiveUnitLabel, isLoadingQuote, quoteError, quoteRateText, quoteFeeText, quoteExpiresText, quoteExpiresUrgent, warning, submitLabel, submitIcon, submitVariant, submitDisabled, onFromTickerChange, onToTickerChange, onFromInputChange, onPercentageClick, onToggleFromUnit, onFlip, onSubmit, }: SwapInputCardProps): react_jsx_runtime.JSX.Element;
632
634
 
633
635
  interface ActivityListItem<TData = unknown> {
634
636
  id: string;
package/dist/web/index.js CHANGED
@@ -985,29 +985,55 @@ function NetworkBadge({
985
985
  const content = children ?? (shouldShowLabel ? label : null);
986
986
  const chipSize = size === "sm" ? "size-6" : "size-8";
987
987
  const imageSize = size === "sm" ? "size-3.5" : "size-icon-lg";
988
- const renderGlyph = (className2) => network === "L1" ? /* @__PURE__ */ jsx15(
989
- "span",
990
- {
991
- className: cn("material-symbols-outlined leading-none", color, className2),
992
- style: { fontSize: size === "sm" ? 12 : 16 },
993
- "aria-hidden": true,
994
- children: "link"
988
+ const renderGlyph = (className2) => {
989
+ if (network === "L1") {
990
+ return /* @__PURE__ */ jsx15(
991
+ "span",
992
+ {
993
+ className: cn("material-symbols-outlined leading-none", color, className2),
994
+ style: { fontSize: size === "sm" ? 12 : 16 },
995
+ "aria-hidden": true,
996
+ children: "link"
997
+ }
998
+ );
995
999
  }
996
- ) : /* @__PURE__ */ jsx15(
997
- "img",
998
- {
999
- src: icon,
1000
- alt: network,
1001
- className: cn(className2, "object-contain", defaultIconClassName, iconClassName)
1000
+ if (network === "RGB-LN") {
1001
+ return /* @__PURE__ */ jsxs6("span", { className: "inline-flex items-center gap-0.5", children: [
1002
+ /* @__PURE__ */ jsx15(
1003
+ "img",
1004
+ {
1005
+ src: `${iconBasePath}/rgb/rgb-logo.svg`,
1006
+ alt: "RGB",
1007
+ className: cn(className2, "object-contain", defaultIconClassName, iconClassName)
1008
+ }
1009
+ ),
1010
+ /* @__PURE__ */ jsx15(
1011
+ "img",
1012
+ {
1013
+ src: `${iconBasePath}/lightning/lightning.svg`,
1014
+ alt: "Lightning",
1015
+ className: cn(className2, "object-contain", iconClassName)
1016
+ }
1017
+ )
1018
+ ] });
1002
1019
  }
1003
- );
1020
+ return /* @__PURE__ */ jsx15(
1021
+ "img",
1022
+ {
1023
+ src: icon,
1024
+ alt: network,
1025
+ className: cn(className2, "object-contain", defaultIconClassName, iconClassName)
1026
+ }
1027
+ );
1028
+ };
1004
1029
  if (!content) {
1030
+ const isDualGlyph = network === "RGB-LN";
1005
1031
  return /* @__PURE__ */ jsx15(
1006
1032
  "span",
1007
1033
  {
1008
1034
  className: cn(
1009
1035
  "flex items-center justify-center rounded-full shadow-inner",
1010
- chipSize,
1036
+ isDualGlyph ? size === "sm" ? "h-6 px-1.5" : "h-8 px-2" : chipSize,
1011
1037
  iconBg,
1012
1038
  className
1013
1039
  ),
@@ -2915,9 +2941,14 @@ function AssetSelector({
2915
2941
  " available"
2916
2942
  ] })
2917
2943
  ] }),
2918
- selected && /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-2 rounded-full border border-primary/15 bg-primary/10 px-2.5 py-1", children: [
2944
+ selected && /* Network-coloured chip uses the existing NetworkBadge
2945
+ so the asset's network color carries through (matches
2946
+ the showcase / wallet main page styling). When the
2947
+ asset has no network we fall back to a neutral pill. */
2948
+ /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-2 rounded-full border border-white/10 bg-white/5 px-2.5 py-1", children: [
2919
2949
  /* @__PURE__ */ jsx34(AssetIcon, { ticker: selected.ticker, logoUri: selected.icon, size: 18 }),
2920
- /* @__PURE__ */ jsx34("span", { className: "text-tiny font-semibold text-primary", children: selected.ticker })
2950
+ /* @__PURE__ */ jsx34("span", { className: "text-tiny font-semibold text-white", children: selected.ticker }),
2951
+ selected.network && /* @__PURE__ */ jsx34(NetworkBadge, { network: selected.network, showLabel: true, className: "py-[1px]" })
2921
2952
  ] })
2922
2953
  ] }) }),
2923
2954
  /* @__PURE__ */ jsxs22("div", { className: "flex-shrink-0 border-b border-white/[0.08] px-4 py-3", children: [
@@ -2938,7 +2969,7 @@ function AssetSelector({
2938
2969
  value: search,
2939
2970
  onChange: (event) => setSearch(event.target.value),
2940
2971
  placeholder: "Search...",
2941
- className: "h-11 w-full rounded-2xl border bg-black/20 pl-10 pr-3 text-sm text-white placeholder:text-white/25 focus:border-primary/50 focus:outline-none"
2972
+ className: "h-11 w-full rounded-2xl border border-transparent bg-black/20 pl-10 pr-3 text-sm text-white placeholder:text-white/25 focus:border-primary/50 focus:outline-none"
2942
2973
  }
2943
2974
  )
2944
2975
  ] }),
@@ -2961,7 +2992,7 @@ function AssetSelector({
2961
2992
  );
2962
2993
  }) })
2963
2994
  ] }),
2964
- /* @__PURE__ */ jsx34(ScrollArea, { className: "min-h-0", viewportClassName: "px-2 py-2", children: filtered.length === 0 ? /* @__PURE__ */ jsxs22("div", { className: "flex flex-col items-center gap-2 px-4 py-10 text-center text-sm text-white/30", children: [
2995
+ /* @__PURE__ */ jsx34(ScrollArea, { className: "min-h-0", viewportClassName: "px-2 py-2 pb-6", children: filtered.length === 0 ? /* @__PURE__ */ jsxs22("div", { className: "flex flex-col items-center gap-2 px-4 py-10 text-center text-sm text-white/30", children: [
2965
2996
  /* @__PURE__ */ jsx34(Icon2, { name: "search", size: "md", className: "opacity-40" }),
2966
2997
  /* @__PURE__ */ jsxs22("span", { children: [
2967
2998
  "No results",
@@ -3138,6 +3169,7 @@ function SwapInputCard({
3138
3169
  quoteExpiresUrgent = false,
3139
3170
  warning,
3140
3171
  submitLabel,
3172
+ submitIcon,
3141
3173
  submitVariant = "cta",
3142
3174
  submitDisabled = false,
3143
3175
  onFromTickerChange,
@@ -3151,7 +3183,26 @@ function SwapInputCard({
3151
3183
  return /* @__PURE__ */ jsxs23(Fragment8, { children: [
3152
3184
  /* @__PURE__ */ jsxs23("div", { className: "relative mb-3 flex flex-col rounded-3xl bg-white/[0.03] shadow-2xl shadow-black/40 backdrop-blur-2xl transition-all duration-300", children: [
3153
3185
  /* @__PURE__ */ jsxs23("div", { className: "p-3.5 pb-4", children: [
3154
- /* @__PURE__ */ jsx35("div", { className: "mb-2 flex items-center justify-between", children: /* @__PURE__ */ jsx35("p", { className: "text-xs font-bold uppercase tracking-widest text-white/60", children: "You Pay" }) }),
3186
+ /* @__PURE__ */ jsxs23("div", { className: "mb-2 flex items-center justify-between gap-2", children: [
3187
+ /* @__PURE__ */ jsx35("p", { className: "text-xs font-bold uppercase tracking-widest text-white/60", children: "You Pay" }),
3188
+ /* @__PURE__ */ jsx35("div", { className: "flex items-center gap-1", children: PERCENTAGES.map((percent) => /* @__PURE__ */ jsxs23(
3189
+ "button",
3190
+ {
3191
+ type: "button",
3192
+ disabled: percentageDisabled,
3193
+ onClick: () => onPercentageClick(percent),
3194
+ className: cn(
3195
+ "rounded px-1.5 py-0.5 text-xxs font-bold transition-all duration-300 disabled:cursor-not-allowed disabled:opacity-40",
3196
+ selectedPercentage === percent ? "border-primary/50 bg-primary/20 text-primary shadow-sm" : "bg-white/[0.03] text-muted-foreground hover:text-white"
3197
+ ),
3198
+ children: [
3199
+ percent,
3200
+ "%"
3201
+ ]
3202
+ },
3203
+ percent
3204
+ )) })
3205
+ ] }),
3155
3206
  /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-2", children: [
3156
3207
  /* @__PURE__ */ jsx35(
3157
3208
  AssetSelector,
@@ -3183,44 +3234,25 @@ function SwapInputCard({
3183
3234
  {
3184
3235
  type: "button",
3185
3236
  onClick: onToggleFromUnit,
3186
- className: "mt-0.5 text-right text-xs text-muted-foreground underline decoration-dotted transition-colors hover:text-primary",
3237
+ className: "mt-0.5 text-right text-xs text-muted-foreground transition-colors hover:text-primary",
3187
3238
  title: "Tap to switch unit",
3188
3239
  children: fromUnitLabel
3189
3240
  }
3190
3241
  ) : /* @__PURE__ */ jsx35("p", { className: "mt-0.5 text-xs text-muted-foreground", children: fromUnitLabel })
3191
3242
  ] })
3192
3243
  ] }),
3193
- /* @__PURE__ */ jsxs23("div", { className: "mt-2 flex items-center justify-between gap-2", children: [
3194
- /* @__PURE__ */ jsx35("p", { className: "text-xxs font-medium text-white/60", children: showMaxText && maxText ? `Max: ${maxText}` : `Available: ${availableText}` }),
3195
- /* @__PURE__ */ jsx35("div", { className: "flex items-center gap-1", children: PERCENTAGES.map((percent) => /* @__PURE__ */ jsxs23(
3196
- "button",
3197
- {
3198
- type: "button",
3199
- disabled: percentageDisabled,
3200
- onClick: () => onPercentageClick(percent),
3201
- className: cn(
3202
- "rounded px-1.5 py-0.5 text-xxs font-bold transition-all duration-300 disabled:cursor-not-allowed disabled:opacity-40",
3203
- selectedPercentage === percent ? "border-primary/50 bg-primary/20 text-primary shadow-sm" : "bg-white/[0.03] text-muted-foreground hover:text-white"
3204
- ),
3205
- children: [
3206
- percent,
3207
- "%"
3208
- ]
3209
- },
3210
- percent
3211
- )) })
3212
- ] })
3244
+ /* @__PURE__ */ jsx35("div", { className: "mt-2 flex items-center justify-between gap-2", children: /* @__PURE__ */ jsx35("p", { className: "text-xxs font-medium text-white/60", children: showMaxText && maxText ? `Max: ${maxText}` : `Available: ${availableText}` }) })
3213
3245
  ] }),
3214
- /* @__PURE__ */ jsx35("div", { className: "relative mx-6 flex h-px items-center justify-center bg-white/[0.08]", children: /* @__PURE__ */ jsx35(
3246
+ /* @__PURE__ */ jsx35("div", { className: "relative mx-6 flex h-px items-center justify-center bg-white/[0.08]", children: /* @__PURE__ */ jsx35("span", { className: "absolute flex h-11 w-11 items-center justify-center rounded-full bg-card shadow-lg shadow-black/35", children: /* @__PURE__ */ jsx35(
3215
3247
  "button",
3216
3248
  {
3217
3249
  type: "button",
3218
3250
  onClick: onFlip,
3219
3251
  title: "Flip assets",
3220
- className: "absolute flex h-11 w-11 items-center justify-center rounded-full bg-card text-primary shadow-lg shadow-black/35 transition-all duration-500 hover:rotate-180 hover:bg-accent active:scale-95 active:shadow-none",
3252
+ className: "flex h-11 w-11 items-center justify-center rounded-full bg-card text-primary transition-transform duration-500 hover:rotate-180 hover:bg-accent active:scale-95",
3221
3253
  children: /* @__PURE__ */ jsx35(Icon2, { name: "swap_vert", size: "md" })
3222
3254
  }
3223
- ) }),
3255
+ ) }) }),
3224
3256
  /* @__PURE__ */ jsxs23("div", { className: "rounded-b-3xl bg-gradient-to-br from-white/[0.01] to-primary/[0.04] p-3.5 pt-4 transition-all duration-300", children: [
3225
3257
  /* @__PURE__ */ jsx35("p", { className: "mb-2 text-xs font-bold uppercase tracking-widest text-primary/70", children: "You Receive" }),
3226
3258
  /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-2", children: [
@@ -3279,7 +3311,10 @@ function SwapInputCard({
3279
3311
  className: "w-full",
3280
3312
  onClick: onSubmit,
3281
3313
  disabled: submitDisabled,
3282
- children: submitLabel
3314
+ children: /* @__PURE__ */ jsxs23("span", { className: "inline-flex items-center justify-center gap-2", children: [
3315
+ submitIcon,
3316
+ /* @__PURE__ */ jsx35("span", { children: submitLabel })
3317
+ ] })
3283
3318
  }
3284
3319
  )
3285
3320
  ] });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kaleido-ui",
3
- "version": "0.1.20",
3
+ "version": "0.1.22",
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",