@retinalabsllc/zairusjs 15.1.30 → 15.1.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -256,10 +256,6 @@ interface NotificationItem {
256
256
  interface UniversalHomeViewProps {
257
257
  fullName?: string;
258
258
  avatarSrc?: string | null;
259
- balanceLabel?: string;
260
- balanceAmount: string;
261
- balanceCurrency?: string;
262
- calculatorAction?: HomeActionBtn;
263
259
  buyCryptoAction?: HomeActionBtn;
264
260
  referralAction?: HomeActionBtn;
265
261
  notifications?: NotificationItem[];
package/dist/index.d.ts CHANGED
@@ -256,10 +256,6 @@ interface NotificationItem {
256
256
  interface UniversalHomeViewProps {
257
257
  fullName?: string;
258
258
  avatarSrc?: string | null;
259
- balanceLabel?: string;
260
- balanceAmount: string;
261
- balanceCurrency?: string;
262
- calculatorAction?: HomeActionBtn;
263
259
  buyCryptoAction?: HomeActionBtn;
264
260
  referralAction?: HomeActionBtn;
265
261
  notifications?: NotificationItem[];
package/dist/index.js CHANGED
@@ -1617,10 +1617,6 @@ var import_core_free_icons8 = require("@hugeicons/core-free-icons");
1617
1617
  var UniversalHomeView = ({
1618
1618
  fullName = "",
1619
1619
  avatarSrc,
1620
- balanceLabel = "Pending Balance",
1621
- balanceAmount,
1622
- balanceCurrency = "$",
1623
- calculatorAction,
1624
1620
  buyCryptoAction,
1625
1621
  referralAction,
1626
1622
  notifications = [],
@@ -1633,44 +1629,12 @@ var UniversalHomeView = ({
1633
1629
  customContent,
1634
1630
  transactionsProps
1635
1631
  }) => {
1636
- const [displayAmount, setDisplayAmount] = (0, import_react25.useState)("0.00");
1637
- const [isBalanceHidden, setIsBalanceHidden] = (0, import_react25.useState)(false);
1638
1632
  const [isAvatarLoaded, setIsAvatarLoaded] = (0, import_react25.useState)(false);
1639
1633
  const [showNotifDialog, setShowNotifDialog] = (0, import_react25.useState)(false);
1640
1634
  const [selectedNotif, setSelectedNotif] = (0, import_react25.useState)(null);
1641
1635
  const fallbackAvatarUrl = `/api/avatar/?name=${encodeURIComponent(fullName || " ")}&background=ffffff&color=000000&size=200&font-size=0.33`;
1642
1636
  const finalAvatarSrc = avatarSrc || fallbackAvatarUrl;
1643
1637
  const hasUnreadNotifs = notifications.some((n) => !n.isRead);
1644
- (0, import_react25.useEffect)(() => {
1645
- const target = parseFloat(balanceAmount.replace(/,/g, ""));
1646
- if (isNaN(target)) {
1647
- setDisplayAmount(balanceAmount);
1648
- return;
1649
- }
1650
- const decimalMatch = balanceAmount.match(/\.(\d+)/);
1651
- const fractionDigits = decimalMatch ? decimalMatch[1].length : 0;
1652
- let startTimestamp = null;
1653
- const duration = 1e3;
1654
- const step = (timestamp) => {
1655
- if (!startTimestamp) startTimestamp = timestamp;
1656
- const progress = Math.min((timestamp - startTimestamp) / duration, 1);
1657
- const easeProgress = progress === 1 ? 1 : 1 - Math.pow(2, -10 * progress);
1658
- const currentCount = easeProgress * target;
1659
- setDisplayAmount(currentCount.toLocaleString("en-US", {
1660
- minimumFractionDigits: fractionDigits,
1661
- maximumFractionDigits: fractionDigits
1662
- }));
1663
- if (progress < 1) requestAnimationFrame(step);
1664
- else {
1665
- setDisplayAmount(target.toLocaleString("en-US", {
1666
- minimumFractionDigits: fractionDigits,
1667
- maximumFractionDigits: fractionDigits
1668
- }));
1669
- }
1670
- };
1671
- requestAnimationFrame(step);
1672
- }, [balanceAmount]);
1673
- const [intPart, decPart] = displayAmount.includes(".") ? displayAmount.split(".") : [displayAmount, ""];
1674
1638
  return /* @__PURE__ */ import_react25.default.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 relative" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "flex items-center justify-between w-full pb-4 " }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "w-10 h-10 rounded-full bg-white p-0.75 flex items-center justify-center " }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "relative w-full h-full rounded-full overflow-hidden bg-neutral-100 flex items-center justify-center" }, !isAvatarLoaded && /* @__PURE__ */ import_react25.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-100" }, /* @__PURE__ */ import_react25.default.createElement(import_react26.HugeiconsIcon, { icon: import_core_free_icons8.Loading03Icon, size: 16, className: "animate-spin text-black" })), /* @__PURE__ */ import_react25.default.createElement(
1675
1639
  "img",
1676
1640
  {
@@ -1690,27 +1654,13 @@ var UniversalHomeView = ({
1690
1654
  },
1691
1655
  /* @__PURE__ */ import_react25.default.createElement(import_react26.HugeiconsIcon, { icon: import_core_free_icons8.Notification01Icon, size: 20, className: "text-black" }),
1692
1656
  hasUnreadNotifs && /* @__PURE__ */ import_react25.default.createElement("span", { className: "absolute top-2.5 right-2.5 w-2 h-2 bg-red-500 rounded-full border border-white" })
1693
- )), /* @__PURE__ */ import_react25.default.createElement("div", { className: "w-full pb-6 flex flex-col gap-4" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "bg-linear-to-tl from-[#4a4a4a] via-[#0b0e14] to-[#03060b] rounded-2xl p-6 relative overflow-hidden flex flex-col justify-center" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "relative z-10 flex flex-col items-start text-left w-full" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "flex items-center gap-2 mb-2" }, /* @__PURE__ */ import_react25.default.createElement("span", { className: "text-[12px] text-neutral-300" }, balanceLabel), /* @__PURE__ */ import_react25.default.createElement(
1694
- "button",
1695
- {
1696
- onClick: () => setIsBalanceHidden(!isBalanceHidden),
1697
- className: "text-neutral-400 hover:text-white transition-colors outline-none"
1698
- },
1699
- /* @__PURE__ */ import_react25.default.createElement(import_react26.HugeiconsIcon, { icon: isBalanceHidden ? import_core_free_icons8.ViewIcon : import_core_free_icons8.ViewOffSlashIcon, size: 16 })
1700
- )), /* @__PURE__ */ import_react25.default.createElement("p", { className: `text-2xl text-white tracking-tight mb-6 tabular-nums flex items-baseline transition-all duration-300 ${isBalanceHidden ? "blur-sm opacity-40 select-none" : ""}` }, /* @__PURE__ */ import_react25.default.createElement("span", { className: "text-lg text-neutral-400 mr-1" }, balanceCurrency), intPart, decPart && /* @__PURE__ */ import_react25.default.createElement("span", { className: "text-lg text-neutral-400" }, ".", decPart)), /* @__PURE__ */ import_react25.default.createElement("div", { className: "flex items-center w-full" }, calculatorAction && /* @__PURE__ */ import_react25.default.createElement(
1701
- "button",
1702
- {
1703
- onClick: calculatorAction.onClick,
1704
- className: "px-6 py-2 bg-transparent border border-white/20 text-white truncate text-[12px] rounded-full transition-colors hover:bg-white/10 outline-none text-center"
1705
- },
1706
- calculatorAction.label || "Rate Calculator"
1707
- )))), /* @__PURE__ */ import_react25.default.createElement("div", { className: "grid grid-cols-2 gap-2" }, /* @__PURE__ */ import_react25.default.createElement(
1657
+ )), /* @__PURE__ */ import_react25.default.createElement("div", { className: "w-full pb-6 flex flex-col gap-4" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "grid grid-cols-2 gap-2" }, /* @__PURE__ */ import_react25.default.createElement(
1708
1658
  "div",
1709
1659
  {
1710
1660
  onClick: buyCryptoAction?.onClick,
1711
1661
  className: "bg-[#143731] rounded-2xl p-5 relative overflow-hidden flex flex-col h-32 sm:h-36 cursor-pointer hover:opacity-90 transition-opacity"
1712
1662
  },
1713
- /* @__PURE__ */ import_react25.default.createElement("div", { className: "relative z-10 flex flex-col h-full justify-between" }, /* @__PURE__ */ import_react25.default.createElement("p", { className: "text-[15px] sm:text-[15px] text-white " }, "Buy Crypto"), /* @__PURE__ */ import_react25.default.createElement("div", { className: "w-8 h-8 rounded-full bg-white/10 border border-white/10 flex items-center justify-center" }, /* @__PURE__ */ import_react25.default.createElement(import_react26.HugeiconsIcon, { icon: import_core_free_icons8.ArrowUpRight01Icon, size: 16, className: "text-white" }))),
1663
+ /* @__PURE__ */ import_react25.default.createElement("div", { className: "relative z-10 flex flex-col h-full justify-between" }, /* @__PURE__ */ import_react25.default.createElement("p", { className: "text-[15px] sm:text-[15px] text-white leading-tight font-medium" }, "Buy", /* @__PURE__ */ import_react25.default.createElement("br", null), /* @__PURE__ */ import_react25.default.createElement("span", { className: "text-white/70" }, "Crypto")), /* @__PURE__ */ import_react25.default.createElement("div", { className: "w-8 h-8 rounded-full bg-white/10 flex items-center justify-center" }, /* @__PURE__ */ import_react25.default.createElement(import_react26.HugeiconsIcon, { icon: import_core_free_icons8.ArrowUpRight01Icon, size: 16, className: "text-white" }))),
1714
1664
  /* @__PURE__ */ import_react25.default.createElement(
1715
1665
  "img",
1716
1666
  {
@@ -1725,7 +1675,7 @@ var UniversalHomeView = ({
1725
1675
  onClick: referralAction?.onClick,
1726
1676
  className: "bg-[#ceff8a] rounded-2xl p-5 relative overflow-hidden flex flex-col h-32 sm:h-36 cursor-pointer hover:opacity-90 transition-opacity"
1727
1677
  },
1728
- /* @__PURE__ */ import_react25.default.createElement("div", { className: "relative z-10 flex flex-col h-full justify-between" }, /* @__PURE__ */ import_react25.default.createElement("p", { className: "text-[15px] sm:text-[15px] text-black " }, "Referral"), /* @__PURE__ */ import_react25.default.createElement("div", { className: "w-8 h-8 rounded-full bg-black/5 border border-black/5 flex items-center justify-center" }, /* @__PURE__ */ import_react25.default.createElement(import_react26.HugeiconsIcon, { icon: import_core_free_icons8.ArrowRight01Icon, size: 16, className: "text-black" }))),
1678
+ /* @__PURE__ */ import_react25.default.createElement("div", { className: "relative z-10 flex flex-col h-full justify-between" }, /* @__PURE__ */ import_react25.default.createElement("p", { className: "text-[15px] sm:text-[15px] text-black leading-tight font-medium" }, "My", /* @__PURE__ */ import_react25.default.createElement("br", null), /* @__PURE__ */ import_react25.default.createElement("span", { className: "text-black/60" }, "Rewards")), /* @__PURE__ */ import_react25.default.createElement("div", { className: "w-8 h-8 rounded-full bg-black/5 flex items-center justify-center" }, /* @__PURE__ */ import_react25.default.createElement(import_react26.HugeiconsIcon, { icon: import_core_free_icons8.ArrowRight01Icon, size: 16, className: "text-black" }))),
1729
1679
  /* @__PURE__ */ import_react25.default.createElement(
1730
1680
  "img",
1731
1681
  {
@@ -1739,7 +1689,7 @@ var UniversalHomeView = ({
1739
1689
  {
1740
1690
  ...transactionsProps,
1741
1691
  hideControls: true,
1742
- hideBalanceAmounts: isBalanceHidden,
1692
+ hideBalanceAmounts: false,
1743
1693
  hidePagination: true
1744
1694
  }
1745
1695
  )), showNotifDialog && /* @__PURE__ */ import_react25.default.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setShowNotifDialog(false) }), /* @__PURE__ */ import_react25.default.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 h-[80vh]" }, /* @__PURE__ */ import_react25.default.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, selectedNotif ? /* @__PURE__ */ import_react25.default.createElement("button", { onClick: () => setSelectedNotif(null), className: "text-neutral-400 hover:text-black transition-colors outline-none flex items-center gap-2 text-[11px] tracking-widest " }, /* @__PURE__ */ import_react25.default.createElement(import_react26.HugeiconsIcon, { icon: import_core_free_icons8.ArrowLeft01Icon, size: 14 }), " Back") : /* @__PURE__ */ import_react25.default.createElement("h3", { className: "text-[15px] text-black tracking-tight flex items-center gap-2" }, "Notifications", isNotifsLoading && /* @__PURE__ */ import_react25.default.createElement(import_react26.HugeiconsIcon, { icon: import_core_free_icons8.Loading03Icon, size: 14, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ import_react25.default.createElement("button", { onClick: () => setShowNotifDialog(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ import_react25.default.createElement(import_react26.HugeiconsIcon, { icon: import_core_free_icons8.CancelCircleIcon, size: 18 }))), /* @__PURE__ */ import_react25.default.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-2" }, selectedNotif ? /* @__PURE__ */ import_react25.default.createElement("div", { className: "p-4 text-left" }, /* @__PURE__ */ import_react25.default.createElement("h4", { className: "text-[14px] text-black mb-1 " }, selectedNotif.title), /* @__PURE__ */ import_react25.default.createElement("span", { className: "text-[10px] text-neutral-400 tracking-widest mb-4 block " }, formatNotifDate(selectedNotif.createdAt)), /* @__PURE__ */ import_react25.default.createElement("p", { className: "text-[12px] text-neutral-600 leading-relaxed whitespace-pre-wrap" }, selectedNotif.message)) : /* @__PURE__ */ import_react25.default.createElement("div", { className: "flex flex-col divide-y divide-neutral-50/50" }, notifications?.length === 0 && !isNotifsLoading ? /* @__PURE__ */ import_react25.default.createElement("div", { className: "p-8 text-center text-xs text-neutral-400" }, "You have no notifications.") : notifications?.map((notif) => /* @__PURE__ */ import_react25.default.createElement(
package/dist/index.mjs CHANGED
@@ -1557,11 +1557,9 @@ var UniversalTransactionPage = ({
1557
1557
  };
1558
1558
 
1559
1559
  // src/components/UniversalHomeView.tsx
1560
- import React16, { useState as useState10, useEffect as useEffect7 } from "react";
1560
+ import React16, { useState as useState10 } from "react";
1561
1561
  import { HugeiconsIcon as HugeiconsIcon10 } from "@hugeicons/react";
1562
1562
  import {
1563
- ViewOffSlashIcon,
1564
- ViewIcon,
1565
1563
  Loading03Icon as Loading03Icon5,
1566
1564
  Notification01Icon,
1567
1565
  ArrowLeft01Icon as ArrowLeft01Icon4,
@@ -1572,10 +1570,6 @@ import {
1572
1570
  var UniversalHomeView = ({
1573
1571
  fullName = "",
1574
1572
  avatarSrc,
1575
- balanceLabel = "Pending Balance",
1576
- balanceAmount,
1577
- balanceCurrency = "$",
1578
- calculatorAction,
1579
1573
  buyCryptoAction,
1580
1574
  referralAction,
1581
1575
  notifications = [],
@@ -1588,44 +1582,12 @@ var UniversalHomeView = ({
1588
1582
  customContent,
1589
1583
  transactionsProps
1590
1584
  }) => {
1591
- const [displayAmount, setDisplayAmount] = useState10("0.00");
1592
- const [isBalanceHidden, setIsBalanceHidden] = useState10(false);
1593
1585
  const [isAvatarLoaded, setIsAvatarLoaded] = useState10(false);
1594
1586
  const [showNotifDialog, setShowNotifDialog] = useState10(false);
1595
1587
  const [selectedNotif, setSelectedNotif] = useState10(null);
1596
1588
  const fallbackAvatarUrl = `/api/avatar/?name=${encodeURIComponent(fullName || " ")}&background=ffffff&color=000000&size=200&font-size=0.33`;
1597
1589
  const finalAvatarSrc = avatarSrc || fallbackAvatarUrl;
1598
1590
  const hasUnreadNotifs = notifications.some((n) => !n.isRead);
1599
- useEffect7(() => {
1600
- const target = parseFloat(balanceAmount.replace(/,/g, ""));
1601
- if (isNaN(target)) {
1602
- setDisplayAmount(balanceAmount);
1603
- return;
1604
- }
1605
- const decimalMatch = balanceAmount.match(/\.(\d+)/);
1606
- const fractionDigits = decimalMatch ? decimalMatch[1].length : 0;
1607
- let startTimestamp = null;
1608
- const duration = 1e3;
1609
- const step = (timestamp) => {
1610
- if (!startTimestamp) startTimestamp = timestamp;
1611
- const progress = Math.min((timestamp - startTimestamp) / duration, 1);
1612
- const easeProgress = progress === 1 ? 1 : 1 - Math.pow(2, -10 * progress);
1613
- const currentCount = easeProgress * target;
1614
- setDisplayAmount(currentCount.toLocaleString("en-US", {
1615
- minimumFractionDigits: fractionDigits,
1616
- maximumFractionDigits: fractionDigits
1617
- }));
1618
- if (progress < 1) requestAnimationFrame(step);
1619
- else {
1620
- setDisplayAmount(target.toLocaleString("en-US", {
1621
- minimumFractionDigits: fractionDigits,
1622
- maximumFractionDigits: fractionDigits
1623
- }));
1624
- }
1625
- };
1626
- requestAnimationFrame(step);
1627
- }, [balanceAmount]);
1628
- const [intPart, decPart] = displayAmount.includes(".") ? displayAmount.split(".") : [displayAmount, ""];
1629
1591
  return /* @__PURE__ */ React16.createElement("div", { className: "w-full max-w-3xl mx-auto flex flex-col animate-in fade-in duration-300 relative" }, /* @__PURE__ */ React16.createElement("div", { className: "flex items-center justify-between w-full pb-4 " }, /* @__PURE__ */ React16.createElement("div", { className: "w-10 h-10 rounded-full bg-white p-0.75 flex items-center justify-center " }, /* @__PURE__ */ React16.createElement("div", { className: "relative w-full h-full rounded-full overflow-hidden bg-neutral-100 flex items-center justify-center" }, !isAvatarLoaded && /* @__PURE__ */ React16.createElement("div", { className: "absolute inset-0 flex items-center justify-center z-10 bg-neutral-100" }, /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: Loading03Icon5, size: 16, className: "animate-spin text-black" })), /* @__PURE__ */ React16.createElement(
1630
1592
  "img",
1631
1593
  {
@@ -1645,27 +1607,13 @@ var UniversalHomeView = ({
1645
1607
  },
1646
1608
  /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: Notification01Icon, size: 20, className: "text-black" }),
1647
1609
  hasUnreadNotifs && /* @__PURE__ */ React16.createElement("span", { className: "absolute top-2.5 right-2.5 w-2 h-2 bg-red-500 rounded-full border border-white" })
1648
- )), /* @__PURE__ */ React16.createElement("div", { className: "w-full pb-6 flex flex-col gap-4" }, /* @__PURE__ */ React16.createElement("div", { className: "bg-linear-to-tl from-[#4a4a4a] via-[#0b0e14] to-[#03060b] rounded-2xl p-6 relative overflow-hidden flex flex-col justify-center" }, /* @__PURE__ */ React16.createElement("div", { className: "relative z-10 flex flex-col items-start text-left w-full" }, /* @__PURE__ */ React16.createElement("div", { className: "flex items-center gap-2 mb-2" }, /* @__PURE__ */ React16.createElement("span", { className: "text-[12px] text-neutral-300" }, balanceLabel), /* @__PURE__ */ React16.createElement(
1649
- "button",
1650
- {
1651
- onClick: () => setIsBalanceHidden(!isBalanceHidden),
1652
- className: "text-neutral-400 hover:text-white transition-colors outline-none"
1653
- },
1654
- /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: isBalanceHidden ? ViewIcon : ViewOffSlashIcon, size: 16 })
1655
- )), /* @__PURE__ */ React16.createElement("p", { className: `text-2xl text-white tracking-tight mb-6 tabular-nums flex items-baseline transition-all duration-300 ${isBalanceHidden ? "blur-sm opacity-40 select-none" : ""}` }, /* @__PURE__ */ React16.createElement("span", { className: "text-lg text-neutral-400 mr-1" }, balanceCurrency), intPart, decPart && /* @__PURE__ */ React16.createElement("span", { className: "text-lg text-neutral-400" }, ".", decPart)), /* @__PURE__ */ React16.createElement("div", { className: "flex items-center w-full" }, calculatorAction && /* @__PURE__ */ React16.createElement(
1656
- "button",
1657
- {
1658
- onClick: calculatorAction.onClick,
1659
- className: "px-6 py-2 bg-transparent border border-white/20 text-white truncate text-[12px] rounded-full transition-colors hover:bg-white/10 outline-none text-center"
1660
- },
1661
- calculatorAction.label || "Rate Calculator"
1662
- )))), /* @__PURE__ */ React16.createElement("div", { className: "grid grid-cols-2 gap-2" }, /* @__PURE__ */ React16.createElement(
1610
+ )), /* @__PURE__ */ React16.createElement("div", { className: "w-full pb-6 flex flex-col gap-4" }, /* @__PURE__ */ React16.createElement("div", { className: "grid grid-cols-2 gap-2" }, /* @__PURE__ */ React16.createElement(
1663
1611
  "div",
1664
1612
  {
1665
1613
  onClick: buyCryptoAction?.onClick,
1666
1614
  className: "bg-[#143731] rounded-2xl p-5 relative overflow-hidden flex flex-col h-32 sm:h-36 cursor-pointer hover:opacity-90 transition-opacity"
1667
1615
  },
1668
- /* @__PURE__ */ React16.createElement("div", { className: "relative z-10 flex flex-col h-full justify-between" }, /* @__PURE__ */ React16.createElement("p", { className: "text-[15px] sm:text-[15px] text-white " }, "Buy Crypto"), /* @__PURE__ */ React16.createElement("div", { className: "w-8 h-8 rounded-full bg-white/10 border border-white/10 flex items-center justify-center" }, /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: ArrowUpRight01Icon2, size: 16, className: "text-white" }))),
1616
+ /* @__PURE__ */ React16.createElement("div", { className: "relative z-10 flex flex-col h-full justify-between" }, /* @__PURE__ */ React16.createElement("p", { className: "text-[15px] sm:text-[15px] text-white leading-tight font-medium" }, "Buy", /* @__PURE__ */ React16.createElement("br", null), /* @__PURE__ */ React16.createElement("span", { className: "text-white/70" }, "Crypto")), /* @__PURE__ */ React16.createElement("div", { className: "w-8 h-8 rounded-full bg-white/10 flex items-center justify-center" }, /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: ArrowUpRight01Icon2, size: 16, className: "text-white" }))),
1669
1617
  /* @__PURE__ */ React16.createElement(
1670
1618
  "img",
1671
1619
  {
@@ -1680,7 +1628,7 @@ var UniversalHomeView = ({
1680
1628
  onClick: referralAction?.onClick,
1681
1629
  className: "bg-[#ceff8a] rounded-2xl p-5 relative overflow-hidden flex flex-col h-32 sm:h-36 cursor-pointer hover:opacity-90 transition-opacity"
1682
1630
  },
1683
- /* @__PURE__ */ React16.createElement("div", { className: "relative z-10 flex flex-col h-full justify-between" }, /* @__PURE__ */ React16.createElement("p", { className: "text-[15px] sm:text-[15px] text-black " }, "Referral"), /* @__PURE__ */ React16.createElement("div", { className: "w-8 h-8 rounded-full bg-black/5 border border-black/5 flex items-center justify-center" }, /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: ArrowRight01Icon2, size: 16, className: "text-black" }))),
1631
+ /* @__PURE__ */ React16.createElement("div", { className: "relative z-10 flex flex-col h-full justify-between" }, /* @__PURE__ */ React16.createElement("p", { className: "text-[15px] sm:text-[15px] text-black leading-tight font-medium" }, "My", /* @__PURE__ */ React16.createElement("br", null), /* @__PURE__ */ React16.createElement("span", { className: "text-black/60" }, "Rewards")), /* @__PURE__ */ React16.createElement("div", { className: "w-8 h-8 rounded-full bg-black/5 flex items-center justify-center" }, /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: ArrowRight01Icon2, size: 16, className: "text-black" }))),
1684
1632
  /* @__PURE__ */ React16.createElement(
1685
1633
  "img",
1686
1634
  {
@@ -1694,7 +1642,7 @@ var UniversalHomeView = ({
1694
1642
  {
1695
1643
  ...transactionsProps,
1696
1644
  hideControls: true,
1697
- hideBalanceAmounts: isBalanceHidden,
1645
+ hideBalanceAmounts: false,
1698
1646
  hidePagination: true
1699
1647
  }
1700
1648
  )), showNotifDialog && /* @__PURE__ */ React16.createElement("div", { className: "fixed inset-0 z-120 flex items-center justify-center p-4 pointer-events-auto" }, /* @__PURE__ */ React16.createElement("div", { className: "absolute inset-0 bg-black/30", onClick: () => setShowNotifDialog(false) }), /* @__PURE__ */ React16.createElement("div", { className: "relative w-full max-w-sm bg-white rounded-2xl flex flex-col overflow-hidden shadow-2xl animate-in zoom-in-95 duration-200 h-[80vh]" }, /* @__PURE__ */ React16.createElement("div", { className: "flex items-center justify-between p-5 shrink-0 " }, selectedNotif ? /* @__PURE__ */ React16.createElement("button", { onClick: () => setSelectedNotif(null), className: "text-neutral-400 hover:text-black transition-colors outline-none flex items-center gap-2 text-[11px] tracking-widest " }, /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: ArrowLeft01Icon4, size: 14 }), " Back") : /* @__PURE__ */ React16.createElement("h3", { className: "text-[15px] text-black tracking-tight flex items-center gap-2" }, "Notifications", isNotifsLoading && /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: Loading03Icon5, size: 14, className: "animate-spin text-neutral-400" })), /* @__PURE__ */ React16.createElement("button", { onClick: () => setShowNotifDialog(false), className: "text-neutral-400 hover:text-black transition-colors outline-none" }, /* @__PURE__ */ React16.createElement(HugeiconsIcon10, { icon: CancelCircleIcon3, size: 18 }))), /* @__PURE__ */ React16.createElement("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-2" }, selectedNotif ? /* @__PURE__ */ React16.createElement("div", { className: "p-4 text-left" }, /* @__PURE__ */ React16.createElement("h4", { className: "text-[14px] text-black mb-1 " }, selectedNotif.title), /* @__PURE__ */ React16.createElement("span", { className: "text-[10px] text-neutral-400 tracking-widest mb-4 block " }, formatNotifDate(selectedNotif.createdAt)), /* @__PURE__ */ React16.createElement("p", { className: "text-[12px] text-neutral-600 leading-relaxed whitespace-pre-wrap" }, selectedNotif.message)) : /* @__PURE__ */ React16.createElement("div", { className: "flex flex-col divide-y divide-neutral-50/50" }, notifications?.length === 0 && !isNotifsLoading ? /* @__PURE__ */ React16.createElement("div", { className: "p-8 text-center text-xs text-neutral-400" }, "You have no notifications.") : notifications?.map((notif) => /* @__PURE__ */ React16.createElement(
@@ -2015,7 +1963,7 @@ var UniversalWalletPage = ({
2015
1963
  };
2016
1964
 
2017
1965
  // src/components/UniversalCardPage.tsx
2018
- import React19, { useState as useState12, useEffect as useEffect8 } from "react";
1966
+ import React19, { useState as useState12, useEffect as useEffect7 } from "react";
2019
1967
  import { useRouter } from "next/navigation";
2020
1968
  import toast6 from "react-hot-toast";
2021
1969
  import { HugeiconsIcon as HugeiconsIcon13 } from "@hugeicons/react";
@@ -2023,7 +1971,7 @@ import {
2023
1971
  SnowIcon,
2024
1972
  Delete02Icon,
2025
1973
  ArrowRight01Icon as ArrowRight01Icon3,
2026
- ViewOffSlashIcon as ViewOffSlashIcon2,
1974
+ ViewOffSlashIcon,
2027
1975
  Loading03Icon as Loading03Icon8,
2028
1976
  CancelCircleIcon as CancelCircleIcon5,
2029
1977
  Copy01Icon as Copy01Icon3,
@@ -2051,7 +1999,7 @@ var UniversalCardPage = ({
2051
1999
  const [isFreezing, setIsFreezing] = useState12(false);
2052
2000
  const [showDeleteDialog, setShowDeleteDialog] = useState12(false);
2053
2001
  const [isDeleting, setIsDeleting] = useState12(false);
2054
- useEffect8(() => {
2002
+ useEffect7(() => {
2055
2003
  setIsBgLoaded(false);
2056
2004
  if (!activeCard?.cardBgSrc) return;
2057
2005
  const img = new Image();
@@ -2132,7 +2080,7 @@ var UniversalCardPage = ({
2132
2080
  ), /* @__PURE__ */ React19.createElement(
2133
2081
  MenuRow,
2134
2082
  {
2135
- icon: ViewOffSlashIcon2,
2083
+ icon: ViewOffSlashIcon,
2136
2084
  title: "Reveal Information",
2137
2085
  subtitle: "Show secure card details",
2138
2086
  onClick: () => {
@@ -2192,7 +2140,7 @@ var CardInfoDialog = ({ isOpen, onClose, cardDetails }) => {
2192
2140
  var FundCardDialog = ({ isOpen, onClose, onSubmit }) => {
2193
2141
  const [amount, setAmount] = useState12("");
2194
2142
  const [isProcessing, setIsProcessing] = useState12(false);
2195
- useEffect8(() => {
2143
+ useEffect7(() => {
2196
2144
  if (isOpen) {
2197
2145
  setAmount("");
2198
2146
  }
@@ -2472,7 +2420,7 @@ var UniversalSidebar = ({
2472
2420
  };
2473
2421
 
2474
2422
  // src/components/HeroSection.tsx
2475
- import React23, { useState as useState16, useEffect as useEffect9, useRef as useRef4 } from "react";
2423
+ import React23, { useState as useState16, useEffect as useEffect8, useRef as useRef4 } from "react";
2476
2424
  import Link6 from "next/link";
2477
2425
  import Image3 from "next/image";
2478
2426
 
@@ -2587,7 +2535,7 @@ var HeroSection = ({
2587
2535
  const [isAnimating, setIsAnimating] = useState16(false);
2588
2536
  const [isWaitlistOpen, setIsWaitlistOpen] = useState16(false);
2589
2537
  const titleRef = useRef4(null);
2590
- useEffect9(() => {
2538
+ useEffect8(() => {
2591
2539
  const observer = new IntersectionObserver(
2592
2540
  ([entry]) => {
2593
2541
  if (entry.isIntersecting) {
@@ -2680,12 +2628,12 @@ var HeroSection = ({
2680
2628
  };
2681
2629
 
2682
2630
  // src/components/AppBento2.tsx
2683
- import React24, { useState as useState17, useEffect as useEffect10, useRef as useRef5 } from "react";
2631
+ import React24, { useState as useState17, useEffect as useEffect9, useRef as useRef5 } from "react";
2684
2632
  import { HugeiconsIcon as HugeiconsIcon16 } from "@hugeicons/react";
2685
2633
  var AppBento2 = ({ tagline, headline, features }) => {
2686
2634
  const [isAnimating, setIsAnimating] = useState17(false);
2687
2635
  const titleRef = useRef5(null);
2688
- useEffect10(() => {
2636
+ useEffect9(() => {
2689
2637
  const observer = new IntersectionObserver(
2690
2638
  ([entry]) => {
2691
2639
  if (entry.isIntersecting) {
@@ -2961,7 +2909,7 @@ var MenuRow3 = ({
2961
2909
  );
2962
2910
 
2963
2911
  // src/components/FeatureScroll.tsx
2964
- import React26, { useRef as useRef6, useState as useState19, useEffect as useEffect11 } from "react";
2912
+ import React26, { useRef as useRef6, useState as useState19, useEffect as useEffect10 } from "react";
2965
2913
  import Image4 from "next/image";
2966
2914
  import { HugeiconsIcon as HugeiconsIcon18 } from "@hugeicons/react";
2967
2915
  import { ArrowLeft01Icon as ArrowLeft01Icon7, ArrowRight01Icon as ArrowRight01Icon6, Loading03Icon as Loading03Icon11 } from "@hugeicons/core-free-icons";
@@ -3015,7 +2963,7 @@ var FeatureScroll = ({ tagline, headline, features }) => {
3015
2963
  setCanScrollRight(scrollLeft < scrollWidth - clientWidth - 2);
3016
2964
  }
3017
2965
  };
3018
- useEffect11(() => {
2966
+ useEffect10(() => {
3019
2967
  checkScroll();
3020
2968
  window.addEventListener("resize", checkScroll);
3021
2969
  return () => window.removeEventListener("resize", checkScroll);
@@ -3096,7 +3044,7 @@ var PlatformFeatures = ({
3096
3044
  };
3097
3045
 
3098
3046
  // src/components/ManagedDocument.tsx
3099
- import React28, { useState as useState20, useEffect as useEffect12, useRef as useRef7 } from "react";
3047
+ import React28, { useState as useState20, useEffect as useEffect11, useRef as useRef7 } from "react";
3100
3048
  var ManagedDocument = ({
3101
3049
  tagline,
3102
3050
  title,
@@ -3106,7 +3054,7 @@ var ManagedDocument = ({
3106
3054
  }) => {
3107
3055
  const [isAnimating, setIsAnimating] = useState20(false);
3108
3056
  const titleRef = useRef7(null);
3109
- useEffect12(() => {
3057
+ useEffect11(() => {
3110
3058
  const observer = new IntersectionObserver(
3111
3059
  ([entry]) => {
3112
3060
  if (entry.isIntersecting) {
@@ -3146,11 +3094,11 @@ var ManagedDocument = ({
3146
3094
  };
3147
3095
 
3148
3096
  // src/components/ManagedContactBlock.tsx
3149
- import React29, { useState as useState21, useEffect as useEffect13 } from "react";
3097
+ import React29, { useState as useState21, useEffect as useEffect12 } from "react";
3150
3098
  import { HugeiconsIcon as HugeiconsIcon20 } from "@hugeicons/react";
3151
3099
  var SecureEmail = ({ user, domain, className }) => {
3152
3100
  const [isMounted, setIsMounted] = useState21(false);
3153
- useEffect13(() => {
3101
+ useEffect12(() => {
3154
3102
  setIsMounted(true);
3155
3103
  }, []);
3156
3104
  if (!isMounted) {
@@ -3211,7 +3159,7 @@ var ManagedContactBlock = ({
3211
3159
  };
3212
3160
 
3213
3161
  // src/components/ManagedPricingBlock.tsx
3214
- import React30, { useState as useState22, useEffect as useEffect14, useRef as useRef8 } from "react";
3162
+ import React30, { useState as useState22, useEffect as useEffect13, useRef as useRef8 } from "react";
3215
3163
  import Link7 from "next/link";
3216
3164
  import Image5 from "next/image";
3217
3165
  var CheckIcon = ({ className = "" }) => /* @__PURE__ */ React30.createElement("svg", { viewBox: "0 0 24 24", fill: "none", className: `w-4 h-4 shrink-0 ${className}`, xmlns: "http://www.w3.org/2000/svg" }, /* @__PURE__ */ React30.createElement("circle", { cx: "12", cy: "12", r: "10", fill: "black" }), /* @__PURE__ */ React30.createElement("path", { d: "M8 12L11 15L16 9", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }));
@@ -3225,7 +3173,7 @@ var ManagedPricingBlock = ({
3225
3173
  const [isAnimating, setIsAnimating] = useState22(false);
3226
3174
  const [activeTabIndex, setActiveTabIndex] = useState22(0);
3227
3175
  const titleRef = useRef8(null);
3228
- useEffect14(() => {
3176
+ useEffect13(() => {
3229
3177
  const observer = new IntersectionObserver(
3230
3178
  ([entry]) => {
3231
3179
  if (entry.isIntersecting) {
@@ -3440,14 +3388,14 @@ var ManagedNewsletterSplitBlock = ({
3440
3388
  };
3441
3389
 
3442
3390
  // src/components/PortfolioHero.tsx
3443
- import React34, { useEffect as useEffect15, useRef as useRef9 } from "react";
3391
+ import React34, { useEffect as useEffect14, useRef as useRef9 } from "react";
3444
3392
  import Link8 from "next/link";
3445
3393
  import Image8 from "next/image";
3446
3394
  import { HugeiconsIcon as HugeiconsIcon22 } from "@hugeicons/react";
3447
3395
  import { ArrowRight01Icon as ArrowRight01Icon7 } from "@hugeicons/core-free-icons";
3448
3396
  var useScrollAnimation = () => {
3449
3397
  const elementRef = useRef9(null);
3450
- useEffect15(() => {
3398
+ useEffect14(() => {
3451
3399
  const el = elementRef.current;
3452
3400
  if (!el) return;
3453
3401
  const observer = new IntersectionObserver(
@@ -3575,7 +3523,7 @@ var GifFeatureCard = ({
3575
3523
  };
3576
3524
 
3577
3525
  // src/components/MedicalFeatureStatsBlock.tsx
3578
- import React36, { useState as useState24, useEffect as useEffect16, useRef as useRef10 } from "react";
3526
+ import React36, { useState as useState24, useEffect as useEffect15, useRef as useRef10 } from "react";
3579
3527
  import Image10 from "next/image";
3580
3528
  var MedicalFeatureStatsBlock = ({
3581
3529
  bottomHeadline,
@@ -3586,7 +3534,7 @@ var MedicalFeatureStatsBlock = ({
3586
3534
  }) => {
3587
3535
  const [isAnimating, setIsAnimating] = useState24(false);
3588
3536
  const titleRef = useRef10(null);
3589
- useEffect16(() => {
3537
+ useEffect15(() => {
3590
3538
  const observer = new IntersectionObserver(
3591
3539
  ([entry]) => {
3592
3540
  if (entry.isIntersecting) {
@@ -4291,7 +4239,7 @@ var UniversalCardActionPage = ({
4291
4239
  };
4292
4240
 
4293
4241
  // src/components/PinDialerBottomSheet.tsx
4294
- import React44, { useState as useState30, useEffect as useEffect17 } from "react";
4242
+ import React44, { useState as useState30, useEffect as useEffect16 } from "react";
4295
4243
  import { HugeiconsIcon as HugeiconsIcon30 } from "@hugeicons/react";
4296
4244
  import { CancelCircleIcon as CancelCircleIcon8 } from "@hugeicons/core-free-icons";
4297
4245
  var PinDialerBottomSheet = ({
@@ -4302,7 +4250,7 @@ var PinDialerBottomSheet = ({
4302
4250
  onComplete
4303
4251
  }) => {
4304
4252
  const [pin, setPin] = useState30("");
4305
- useEffect17(() => {
4253
+ useEffect16(() => {
4306
4254
  setPin("");
4307
4255
  }, [isOpen]);
4308
4256
  const handleSubmit = (e) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@retinalabsllc/zairusjs",
3
- "version": "15.1.30",
3
+ "version": "15.1.35",
4
4
  "description": "A perceptive, Ai data driven Next.js UI component library.",
5
5
  "author": "Retina Labs Company",
6
6
  "license": "MIT",