kaleido-ui 0.1.59 → 0.1.61

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.
Binary file
@@ -29,6 +29,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
29
29
  var fonts_exports = {};
30
30
  __export(fonts_exports, {
31
31
  kaleidoFonts: () => kaleidoFonts,
32
+ monoFontFamily: () => monoFontFamily,
32
33
  satoshiFamilyForWeight: () => satoshiFamilyForWeight,
33
34
  satoshiFontFamily: () => satoshiFontFamily
34
35
  });
@@ -37,12 +38,15 @@ var import_Satoshi_Regular = __toESM(require("./fonts/Satoshi-Regular.ttf"), 1);
37
38
  var import_Satoshi_Medium = __toESM(require("./fonts/Satoshi-Medium.ttf"), 1);
38
39
  var import_Satoshi_Bold = __toESM(require("./fonts/Satoshi-Bold.ttf"), 1);
39
40
  var import_Satoshi_Black = __toESM(require("./fonts/Satoshi-Black.ttf"), 1);
41
+ var import_GeistMono = __toESM(require("./fonts/GeistMono.ttf"), 1);
40
42
  const kaleidoFonts = {
41
43
  "Satoshi-Regular": import_Satoshi_Regular.default,
42
44
  "Satoshi-Medium": import_Satoshi_Medium.default,
43
45
  "Satoshi-Bold": import_Satoshi_Bold.default,
44
- "Satoshi-Black": import_Satoshi_Black.default
46
+ "Satoshi-Black": import_Satoshi_Black.default,
47
+ GeistMono: import_GeistMono.default
45
48
  };
49
+ const monoFontFamily = "GeistMono";
46
50
  const satoshiFontFamily = {
47
51
  regular: "Satoshi-Regular",
48
52
  medium: "Satoshi-Medium",
@@ -64,6 +68,7 @@ function satoshiFamilyForWeight(weight) {
64
68
  // Annotate the CommonJS export names for ESM import in node:
65
69
  0 && (module.exports = {
66
70
  kaleidoFonts,
71
+ monoFontFamily,
67
72
  satoshiFamilyForWeight,
68
73
  satoshiFontFamily
69
74
  });
@@ -4,6 +4,12 @@
4
4
  * you use as `fontFamily` in styles (identical on iOS and Android).
5
5
  */
6
6
  declare const kaleidoFonts: Record<string, number>;
7
+ /**
8
+ * Monospaced family for numerals / equivalent balances — Geist Mono (the same
9
+ * face the web/extension references). Use for tabular amounts; pair with the
10
+ * `mono` text role rather than the Satoshi body face.
11
+ */
12
+ declare const monoFontFamily = "GeistMono";
7
13
  /** Registered Satoshi family names, by semantic weight. */
8
14
  declare const satoshiFontFamily: {
9
15
  readonly regular: "Satoshi-Regular";
@@ -22,4 +28,4 @@ type SatoshiWeightName = keyof typeof satoshiFontFamily;
22
28
  */
23
29
  declare function satoshiFamilyForWeight(weight?: string | number): string;
24
30
 
25
- export { type SatoshiWeightName, kaleidoFonts, satoshiFamilyForWeight, satoshiFontFamily };
31
+ export { type SatoshiWeightName, kaleidoFonts, monoFontFamily, satoshiFamilyForWeight, satoshiFontFamily };
@@ -4,6 +4,12 @@
4
4
  * you use as `fontFamily` in styles (identical on iOS and Android).
5
5
  */
6
6
  declare const kaleidoFonts: Record<string, number>;
7
+ /**
8
+ * Monospaced family for numerals / equivalent balances — Geist Mono (the same
9
+ * face the web/extension references). Use for tabular amounts; pair with the
10
+ * `mono` text role rather than the Satoshi body face.
11
+ */
12
+ declare const monoFontFamily = "GeistMono";
7
13
  /** Registered Satoshi family names, by semantic weight. */
8
14
  declare const satoshiFontFamily: {
9
15
  readonly regular: "Satoshi-Regular";
@@ -22,4 +28,4 @@ type SatoshiWeightName = keyof typeof satoshiFontFamily;
22
28
  */
23
29
  declare function satoshiFamilyForWeight(weight?: string | number): string;
24
30
 
25
- export { type SatoshiWeightName, kaleidoFonts, satoshiFamilyForWeight, satoshiFontFamily };
31
+ export { type SatoshiWeightName, kaleidoFonts, monoFontFamily, satoshiFamilyForWeight, satoshiFontFamily };
@@ -2,12 +2,15 @@ import SatoshiRegular from "./fonts/Satoshi-Regular.ttf";
2
2
  import SatoshiMedium from "./fonts/Satoshi-Medium.ttf";
3
3
  import SatoshiBold from "./fonts/Satoshi-Bold.ttf";
4
4
  import SatoshiBlack from "./fonts/Satoshi-Black.ttf";
5
+ import GeistMono from "./fonts/GeistMono.ttf";
5
6
  const kaleidoFonts = {
6
7
  "Satoshi-Regular": SatoshiRegular,
7
8
  "Satoshi-Medium": SatoshiMedium,
8
9
  "Satoshi-Bold": SatoshiBold,
9
- "Satoshi-Black": SatoshiBlack
10
+ "Satoshi-Black": SatoshiBlack,
11
+ GeistMono
10
12
  };
13
+ const monoFontFamily = "GeistMono";
11
14
  const satoshiFontFamily = {
12
15
  regular: "Satoshi-Regular",
13
16
  medium: "Satoshi-Medium",
@@ -28,6 +31,7 @@ function satoshiFamilyForWeight(weight) {
28
31
  }
29
32
  export {
30
33
  kaleidoFonts,
34
+ monoFontFamily,
31
35
  satoshiFamilyForWeight,
32
36
  satoshiFontFamily
33
37
  };
@@ -1822,12 +1822,14 @@ function AssetCard({
1822
1822
  balanceVisible = true,
1823
1823
  accentColor,
1824
1824
  status,
1825
+ isYielding,
1825
1826
  onClick,
1826
1827
  className
1827
1828
  }) {
1828
1829
  const shown = balanceVisible ? displayBalance : "\u2022\u2022\u2022\u2022\u2022\u2022";
1829
1830
  const displayShown = balanceVisible ? formatDisplayAmountText(displayBalance) : shown;
1830
1831
  const [hovered, setHovered] = (0, import_react4.useState)(false);
1832
+ const showYield = isYielding ?? ["USDB"].includes(ticker.toUpperCase());
1831
1833
  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;
1832
1834
  return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1833
1835
  "div",
@@ -1879,7 +1881,26 @@ function AssetCard({
1879
1881
  children: displayShown
1880
1882
  }
1881
1883
  ),
1882
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "mt-0.5 truncate text-tiny font-medium uppercase tracking-wide text-muted-foreground", children: ticker }),
1884
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-center justify-end gap-1 mt-0.5", children: [
1885
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "truncate text-tiny font-medium uppercase tracking-wide text-muted-foreground", children: ticker }),
1886
+ showYield && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { title: "Yield Generating Asset", className: "text-success/90 flex items-center justify-center bg-success/10 rounded-full p-0.5", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1887
+ "svg",
1888
+ {
1889
+ xmlns: "http://www.w3.org/2000/svg",
1890
+ viewBox: "0 0 24 24",
1891
+ fill: "none",
1892
+ stroke: "currentColor",
1893
+ strokeWidth: "2",
1894
+ strokeLinecap: "round",
1895
+ strokeLinejoin: "round",
1896
+ className: "w-3 h-3",
1897
+ children: [
1898
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("path", { d: "M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z" }),
1899
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("path", { d: "M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12" })
1900
+ ]
1901
+ }
1902
+ ) })
1903
+ ] }),
1883
1904
  status && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(StatusBadge, { status, className: "mt-2" })
1884
1905
  ] })
1885
1906
  ] })
@@ -2551,11 +2572,14 @@ function AccountStatusTabs({
2551
2572
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: "mt-5 text-sm leading-relaxed text-muted-foreground", children: selectedAccount.detail }),
2552
2573
  /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "mt-5", children: [
2553
2574
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "text-icon-xxs font-black uppercase tracking-[0.18em] text-white/45", children: "Capabilities" }),
2554
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "mt-3 flex flex-wrap gap-2", children: selectedAccount.capabilityBullets.map((capability) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2575
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "mt-3 flex flex-wrap gap-2", children: selectedAccount.capabilityBullets.map((capability) => /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2555
2576
  "span",
2556
2577
  {
2557
- className: "rounded-full border bg-white/[0.05] px-2.5 py-1 text-xxs font-medium text-white/65",
2558
- children: capability
2578
+ className: "inline-flex items-center gap-1.5 rounded-full border bg-white/[0.05] px-2.5 py-1 text-xxs font-medium text-white/70",
2579
+ children: [
2580
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "size-1.5 rounded-full bg-primary/70" }),
2581
+ capability
2582
+ ]
2559
2583
  },
2560
2584
  capability
2561
2585
  )) })
@@ -8217,6 +8241,11 @@ function DepositPreGeneration({
8217
8241
  // src/web/components/deposit-asset-selection.tsx
8218
8242
  var import_react16 = require("react");
8219
8243
  var import_jsx_runtime79 = require("react/jsx-runtime");
8244
+ var ADD_ASSET_SUBTITLE = {
8245
+ RGB: "RGB asset on Bitcoin",
8246
+ SPARK: "Spark-native asset",
8247
+ ARKADE: "Arkade-native asset"
8248
+ };
8220
8249
  var PROTOCOL_BADGE = {
8221
8250
  RGB: { label: "RGB", className: "bg-network-rgb-chip text-network-rgb-text" },
8222
8251
  SPARK: { label: "Spark", className: "bg-network-spark-chip text-network-spark-text" },
@@ -8254,6 +8283,7 @@ function DepositAssetSelection({
8254
8283
  const noResults = filteredAssets.length === 0 && !!searchQuery;
8255
8284
  const isSearching = !!searchQuery;
8256
8285
  const [assetsExpanded, setAssetsExpanded] = (0, import_react16.useState)(false);
8286
+ const [showAddAssetModal, setShowAddAssetModal] = (0, import_react16.useState)(false);
8257
8287
  (0, import_react16.useEffect)(() => {
8258
8288
  if (isSearching) setAssetsExpanded(true);
8259
8289
  }, [isSearching]);
@@ -8433,52 +8463,60 @@ function DepositAssetSelection({
8433
8463
  ]
8434
8464
  }
8435
8465
  ) }),
8436
- !searchQuery && newAssetOptions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "space-y-2 pt-2", children: [
8437
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "px-1", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("p", { className: "text-xxs font-bold uppercase tracking-[0.18em] text-white/35", children: "New Asset" }) }),
8438
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
8439
- "div",
8466
+ !searchQuery && newAssetOptions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "pb-1 pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
8467
+ "button",
8468
+ {
8469
+ type: "button",
8470
+ "data-testid": "deposit-add-asset",
8471
+ onClick: () => setShowAddAssetModal(true),
8472
+ className: "group flex w-full items-center gap-3 rounded-2xl border border-white/8 bg-white/3 p-3 transition-all hover:border-border hover:bg-accent",
8473
+ children: [
8474
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-xl bg-primary/15", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Icon, { name: "add", size: "md", className: "text-primary" }) }),
8475
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "flex-1 text-left", children: [
8476
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("p", { className: "text-sm font-semibold text-white transition-colors group-hover:text-primary", children: "Add an asset" }),
8477
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("p", { className: "text-xxs leading-tight text-white/40", children: [
8478
+ "Receive a new ",
8479
+ newAssetOptions.map((o) => o.ticker).join(", "),
8480
+ " asset"
8481
+ ] })
8482
+ ] }),
8483
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "material-symbols-outlined text-lg text-white/30 transition-colors group-hover:text-primary", children: "arrow_forward" })
8484
+ ]
8485
+ }
8486
+ ) })
8487
+ ] }),
8488
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
8489
+ BottomSheet,
8490
+ {
8491
+ open: showAddAssetModal,
8492
+ title: "Add an asset",
8493
+ onClose: () => setShowAddAssetModal(false),
8494
+ children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "space-y-2", children: newAssetOptions.map((option) => /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
8495
+ "button",
8440
8496
  {
8497
+ type: "button",
8498
+ "data-testid": `deposit-new-asset-${option.account.toLowerCase()}`,
8441
8499
  className: cn(
8442
- "grid gap-2",
8443
- newAssetOptions.length === 1 ? "grid-cols-1" : newAssetOptions.length === 2 ? "grid-cols-2" : "grid-cols-3"
8500
+ "group flex w-full items-center gap-3 rounded-2xl px-4 py-3 text-left transition-all",
8501
+ option.idleClass
8444
8502
  ),
8445
- children: newAssetOptions.map((option) => {
8446
- const active = isNewAsset && newAssetAccount === option.account;
8447
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
8448
- "button",
8449
- {
8450
- type: "button",
8451
- "data-testid": `deposit-new-asset-${option.account.toLowerCase()}`,
8452
- className: cn(
8453
- "group flex min-h-[112px] flex-col items-center justify-center rounded-2xl px-3 py-3.5 text-center text-sm transition-all",
8454
- active ? option.activeClass : option.idleClass
8455
- ),
8456
- onClick: () => handleAddNewAsset(option.account),
8457
- children: [
8458
- /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "relative", children: [
8459
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(AssetIcon, { ticker: option.ticker, size: 40 }),
8460
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "absolute -bottom-1 -right-1 flex size-4 items-center justify-center rounded-full bg-primary", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Icon, { name: "add", size: "xs", className: "text-background" }) })
8461
- ] }),
8462
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "mt-2 min-w-0", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
8463
- "div",
8464
- {
8465
- className: cn(
8466
- "text-sm font-bold tracking-wide",
8467
- active ? "text-white" : "text-white group-hover:opacity-90",
8468
- !active && option.titleHoverClass
8469
- ),
8470
- children: option.title
8471
- }
8472
- ) })
8473
- ]
8474
- },
8475
- option.account
8476
- );
8477
- })
8478
- }
8479
- )
8480
- ] })
8481
- ] }),
8503
+ onClick: () => {
8504
+ setShowAddAssetModal(false);
8505
+ handleAddNewAsset(option.account);
8506
+ },
8507
+ children: [
8508
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(AssetIcon, { ticker: option.ticker, size: 36, className: "flex-shrink-0" }),
8509
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "min-w-0 flex-1", children: [
8510
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: cn("text-sm font-bold tracking-wide text-white", option.titleHoverClass), children: option.title }),
8511
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "mt-0.5 text-xxs text-white/40", children: ADD_ASSET_SUBTITLE[option.account] })
8512
+ ] }),
8513
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Icon, { name: "add", size: "sm", className: "text-white/30 transition-colors group-hover:text-white/60" })
8514
+ ]
8515
+ },
8516
+ option.account
8517
+ )) })
8518
+ }
8519
+ ),
8482
8520
  isNewAsset && newAssetAccount === "RGB" && /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(import_jsx_runtime79.Fragment, { children: [
8483
8521
  /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "flex-shrink-0 px-5 pb-3 animate-in fade-in slide-in-from-bottom-2 duration-300", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "space-y-2 rounded-2xl border border-network-arkade/20 bg-network-arkade/5 p-3", children: [
8484
8522
  /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("p", { className: "text-tiny leading-relaxed text-network-arkade/80", children: "Leave empty to receive any RGB asset, or enter a specific asset ID." }),
@@ -230,10 +230,12 @@ interface AssetCardProps {
230
230
  accentColor?: string;
231
231
  /** Optional state badge for assets that are present but not currently spendable. */
232
232
  status?: StatusType;
233
+ /** Whether the asset is yield generating */
234
+ isYielding?: boolean;
233
235
  onClick?: () => void;
234
236
  className?: string;
235
237
  }
236
- declare function AssetCard({ ticker, name, displayBalance, networks, logoUri, balanceVisible, accentColor, status, onClick, className, }: AssetCardProps): react_jsx_runtime.JSX.Element;
238
+ declare function AssetCard({ ticker, name, displayBalance, networks, logoUri, balanceVisible, accentColor, status, isYielding, onClick, className, }: AssetCardProps): react_jsx_runtime.JSX.Element;
237
239
 
238
240
  interface TransactionCardProps {
239
241
  /** Direction of the transaction */
@@ -230,10 +230,12 @@ interface AssetCardProps {
230
230
  accentColor?: string;
231
231
  /** Optional state badge for assets that are present but not currently spendable. */
232
232
  status?: StatusType;
233
+ /** Whether the asset is yield generating */
234
+ isYielding?: boolean;
233
235
  onClick?: () => void;
234
236
  className?: string;
235
237
  }
236
- declare function AssetCard({ ticker, name, displayBalance, networks, logoUri, balanceVisible, accentColor, status, onClick, className, }: AssetCardProps): react_jsx_runtime.JSX.Element;
238
+ declare function AssetCard({ ticker, name, displayBalance, networks, logoUri, balanceVisible, accentColor, status, isYielding, onClick, className, }: AssetCardProps): react_jsx_runtime.JSX.Element;
237
239
 
238
240
  interface TransactionCardProps {
239
241
  /** Direction of the transaction */
package/dist/web/index.js CHANGED
@@ -1639,12 +1639,14 @@ function AssetCard({
1639
1639
  balanceVisible = true,
1640
1640
  accentColor,
1641
1641
  status,
1642
+ isYielding,
1642
1643
  onClick,
1643
1644
  className
1644
1645
  }) {
1645
1646
  const shown = balanceVisible ? displayBalance : "\u2022\u2022\u2022\u2022\u2022\u2022";
1646
1647
  const displayShown = balanceVisible ? formatDisplayAmountText(displayBalance) : shown;
1647
1648
  const [hovered, setHovered] = useState5(false);
1649
+ const showYield = isYielding ?? ["USDB"].includes(ticker.toUpperCase());
1648
1650
  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;
1649
1651
  return /* @__PURE__ */ jsxs8(
1650
1652
  "div",
@@ -1696,7 +1698,26 @@ function AssetCard({
1696
1698
  children: displayShown
1697
1699
  }
1698
1700
  ),
1699
- /* @__PURE__ */ jsx19("p", { className: "mt-0.5 truncate text-tiny font-medium uppercase tracking-wide text-muted-foreground", children: ticker }),
1701
+ /* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-end gap-1 mt-0.5", children: [
1702
+ /* @__PURE__ */ jsx19("p", { className: "truncate text-tiny font-medium uppercase tracking-wide text-muted-foreground", children: ticker }),
1703
+ showYield && /* @__PURE__ */ jsx19("div", { title: "Yield Generating Asset", className: "text-success/90 flex items-center justify-center bg-success/10 rounded-full p-0.5", children: /* @__PURE__ */ jsxs8(
1704
+ "svg",
1705
+ {
1706
+ xmlns: "http://www.w3.org/2000/svg",
1707
+ viewBox: "0 0 24 24",
1708
+ fill: "none",
1709
+ stroke: "currentColor",
1710
+ strokeWidth: "2",
1711
+ strokeLinecap: "round",
1712
+ strokeLinejoin: "round",
1713
+ className: "w-3 h-3",
1714
+ children: [
1715
+ /* @__PURE__ */ jsx19("path", { d: "M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z" }),
1716
+ /* @__PURE__ */ jsx19("path", { d: "M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12" })
1717
+ ]
1718
+ }
1719
+ ) })
1720
+ ] }),
1700
1721
  status && /* @__PURE__ */ jsx19(StatusBadge, { status, className: "mt-2" })
1701
1722
  ] })
1702
1723
  ] })
@@ -2374,11 +2395,14 @@ function AccountStatusTabs({
2374
2395
  /* @__PURE__ */ jsx28("p", { className: "mt-5 text-sm leading-relaxed text-muted-foreground", children: selectedAccount.detail }),
2375
2396
  /* @__PURE__ */ jsxs15("div", { className: "mt-5", children: [
2376
2397
  /* @__PURE__ */ jsx28("div", { className: "text-icon-xxs font-black uppercase tracking-[0.18em] text-white/45", children: "Capabilities" }),
2377
- /* @__PURE__ */ jsx28("div", { className: "mt-3 flex flex-wrap gap-2", children: selectedAccount.capabilityBullets.map((capability) => /* @__PURE__ */ jsx28(
2398
+ /* @__PURE__ */ jsx28("div", { className: "mt-3 flex flex-wrap gap-2", children: selectedAccount.capabilityBullets.map((capability) => /* @__PURE__ */ jsxs15(
2378
2399
  "span",
2379
2400
  {
2380
- className: "rounded-full border bg-white/[0.05] px-2.5 py-1 text-xxs font-medium text-white/65",
2381
- children: capability
2401
+ className: "inline-flex items-center gap-1.5 rounded-full border bg-white/[0.05] px-2.5 py-1 text-xxs font-medium text-white/70",
2402
+ children: [
2403
+ /* @__PURE__ */ jsx28("span", { className: "size-1.5 rounded-full bg-primary/70" }),
2404
+ capability
2405
+ ]
2382
2406
  },
2383
2407
  capability
2384
2408
  )) })
@@ -8040,6 +8064,11 @@ function DepositPreGeneration({
8040
8064
  // src/web/components/deposit-asset-selection.tsx
8041
8065
  import { useEffect as useEffect10, useState as useState15 } from "react";
8042
8066
  import { Fragment as Fragment16, jsx as jsx79, jsxs as jsxs65 } from "react/jsx-runtime";
8067
+ var ADD_ASSET_SUBTITLE = {
8068
+ RGB: "RGB asset on Bitcoin",
8069
+ SPARK: "Spark-native asset",
8070
+ ARKADE: "Arkade-native asset"
8071
+ };
8043
8072
  var PROTOCOL_BADGE = {
8044
8073
  RGB: { label: "RGB", className: "bg-network-rgb-chip text-network-rgb-text" },
8045
8074
  SPARK: { label: "Spark", className: "bg-network-spark-chip text-network-spark-text" },
@@ -8077,6 +8106,7 @@ function DepositAssetSelection({
8077
8106
  const noResults = filteredAssets.length === 0 && !!searchQuery;
8078
8107
  const isSearching = !!searchQuery;
8079
8108
  const [assetsExpanded, setAssetsExpanded] = useState15(false);
8109
+ const [showAddAssetModal, setShowAddAssetModal] = useState15(false);
8080
8110
  useEffect10(() => {
8081
8111
  if (isSearching) setAssetsExpanded(true);
8082
8112
  }, [isSearching]);
@@ -8256,52 +8286,60 @@ function DepositAssetSelection({
8256
8286
  ]
8257
8287
  }
8258
8288
  ) }),
8259
- !searchQuery && newAssetOptions.length > 0 && /* @__PURE__ */ jsxs65("div", { className: "space-y-2 pt-2", children: [
8260
- /* @__PURE__ */ jsx79("div", { className: "px-1", children: /* @__PURE__ */ jsx79("p", { className: "text-xxs font-bold uppercase tracking-[0.18em] text-white/35", children: "New Asset" }) }),
8261
- /* @__PURE__ */ jsx79(
8262
- "div",
8289
+ !searchQuery && newAssetOptions.length > 0 && /* @__PURE__ */ jsx79("div", { className: "pb-1 pt-2", children: /* @__PURE__ */ jsxs65(
8290
+ "button",
8291
+ {
8292
+ type: "button",
8293
+ "data-testid": "deposit-add-asset",
8294
+ onClick: () => setShowAddAssetModal(true),
8295
+ className: "group flex w-full items-center gap-3 rounded-2xl border border-white/8 bg-white/3 p-3 transition-all hover:border-border hover:bg-accent",
8296
+ children: [
8297
+ /* @__PURE__ */ jsx79("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-xl bg-primary/15", children: /* @__PURE__ */ jsx79(Icon, { name: "add", size: "md", className: "text-primary" }) }),
8298
+ /* @__PURE__ */ jsxs65("div", { className: "flex-1 text-left", children: [
8299
+ /* @__PURE__ */ jsx79("p", { className: "text-sm font-semibold text-white transition-colors group-hover:text-primary", children: "Add an asset" }),
8300
+ /* @__PURE__ */ jsxs65("p", { className: "text-xxs leading-tight text-white/40", children: [
8301
+ "Receive a new ",
8302
+ newAssetOptions.map((o) => o.ticker).join(", "),
8303
+ " asset"
8304
+ ] })
8305
+ ] }),
8306
+ /* @__PURE__ */ jsx79("span", { className: "material-symbols-outlined text-lg text-white/30 transition-colors group-hover:text-primary", children: "arrow_forward" })
8307
+ ]
8308
+ }
8309
+ ) })
8310
+ ] }),
8311
+ /* @__PURE__ */ jsx79(
8312
+ BottomSheet,
8313
+ {
8314
+ open: showAddAssetModal,
8315
+ title: "Add an asset",
8316
+ onClose: () => setShowAddAssetModal(false),
8317
+ children: /* @__PURE__ */ jsx79("div", { className: "space-y-2", children: newAssetOptions.map((option) => /* @__PURE__ */ jsxs65(
8318
+ "button",
8263
8319
  {
8320
+ type: "button",
8321
+ "data-testid": `deposit-new-asset-${option.account.toLowerCase()}`,
8264
8322
  className: cn(
8265
- "grid gap-2",
8266
- newAssetOptions.length === 1 ? "grid-cols-1" : newAssetOptions.length === 2 ? "grid-cols-2" : "grid-cols-3"
8323
+ "group flex w-full items-center gap-3 rounded-2xl px-4 py-3 text-left transition-all",
8324
+ option.idleClass
8267
8325
  ),
8268
- children: newAssetOptions.map((option) => {
8269
- const active = isNewAsset && newAssetAccount === option.account;
8270
- return /* @__PURE__ */ jsxs65(
8271
- "button",
8272
- {
8273
- type: "button",
8274
- "data-testid": `deposit-new-asset-${option.account.toLowerCase()}`,
8275
- className: cn(
8276
- "group flex min-h-[112px] flex-col items-center justify-center rounded-2xl px-3 py-3.5 text-center text-sm transition-all",
8277
- active ? option.activeClass : option.idleClass
8278
- ),
8279
- onClick: () => handleAddNewAsset(option.account),
8280
- children: [
8281
- /* @__PURE__ */ jsxs65("div", { className: "relative", children: [
8282
- /* @__PURE__ */ jsx79(AssetIcon, { ticker: option.ticker, size: 40 }),
8283
- /* @__PURE__ */ jsx79("div", { className: "absolute -bottom-1 -right-1 flex size-4 items-center justify-center rounded-full bg-primary", children: /* @__PURE__ */ jsx79(Icon, { name: "add", size: "xs", className: "text-background" }) })
8284
- ] }),
8285
- /* @__PURE__ */ jsx79("div", { className: "mt-2 min-w-0", children: /* @__PURE__ */ jsx79(
8286
- "div",
8287
- {
8288
- className: cn(
8289
- "text-sm font-bold tracking-wide",
8290
- active ? "text-white" : "text-white group-hover:opacity-90",
8291
- !active && option.titleHoverClass
8292
- ),
8293
- children: option.title
8294
- }
8295
- ) })
8296
- ]
8297
- },
8298
- option.account
8299
- );
8300
- })
8301
- }
8302
- )
8303
- ] })
8304
- ] }),
8326
+ onClick: () => {
8327
+ setShowAddAssetModal(false);
8328
+ handleAddNewAsset(option.account);
8329
+ },
8330
+ children: [
8331
+ /* @__PURE__ */ jsx79(AssetIcon, { ticker: option.ticker, size: 36, className: "flex-shrink-0" }),
8332
+ /* @__PURE__ */ jsxs65("div", { className: "min-w-0 flex-1", children: [
8333
+ /* @__PURE__ */ jsx79("div", { className: cn("text-sm font-bold tracking-wide text-white", option.titleHoverClass), children: option.title }),
8334
+ /* @__PURE__ */ jsx79("div", { className: "mt-0.5 text-xxs text-white/40", children: ADD_ASSET_SUBTITLE[option.account] })
8335
+ ] }),
8336
+ /* @__PURE__ */ jsx79(Icon, { name: "add", size: "sm", className: "text-white/30 transition-colors group-hover:text-white/60" })
8337
+ ]
8338
+ },
8339
+ option.account
8340
+ )) })
8341
+ }
8342
+ ),
8305
8343
  isNewAsset && newAssetAccount === "RGB" && /* @__PURE__ */ jsxs65(Fragment16, { children: [
8306
8344
  /* @__PURE__ */ jsx79("div", { className: "flex-shrink-0 px-5 pb-3 animate-in fade-in slide-in-from-bottom-2 duration-300", children: /* @__PURE__ */ jsxs65("div", { className: "space-y-2 rounded-2xl border border-network-arkade/20 bg-network-arkade/5 p-3", children: [
8307
8345
  /* @__PURE__ */ jsx79("p", { className: "text-tiny leading-relaxed text-network-arkade/80", children: "Leave empty to receive any RGB asset, or enter a specific asset ID." }),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kaleido-ui",
3
- "version": "0.1.59",
3
+ "version": "0.1.61",
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",