@rash2x/bridge-widget 0.1.9 → 0.1.11

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.
@@ -32,8 +32,8 @@ const reactSlot = require("@radix-ui/react-slot");
32
32
  const classVarianceAuthority = require("class-variance-authority");
33
33
  const clsx = require("clsx");
34
34
  const tailwindMerge = require("tailwind-merge");
35
- const reactDom = require("react-dom");
36
- const framerMotion = require("framer-motion");
35
+ const DialogPrimitive = require("@radix-ui/react-dialog");
36
+ const lucideReact = require("lucide-react");
37
37
  const TooltipPrimitive = require("@radix-ui/react-tooltip");
38
38
  const wagmi = require("wagmi");
39
39
  const tronwalletAdapterReactHooks = require("@tronweb3/tronwallet-adapter-react-hooks");
@@ -42,7 +42,7 @@ const reactQuery = require("@tanstack/react-query");
42
42
  const core = require("@ton/core");
43
43
  const reactWindow = require("react-window");
44
44
  const SwitchPrimitive = require("@radix-ui/react-switch");
45
- const lucideReact = require("lucide-react");
45
+ const framerMotion = require("framer-motion");
46
46
  const AccordionPrimitive = require("@radix-ui/react-accordion");
47
47
  const i18next = require("i18next");
48
48
  const sonner = require("sonner");
@@ -67,6 +67,7 @@ function _interopNamespaceDefault(e) {
67
67
  return Object.freeze(n);
68
68
  }
69
69
  const require$$0__namespace = /* @__PURE__ */ _interopNamespaceDefault(require$$0);
70
+ const DialogPrimitive__namespace = /* @__PURE__ */ _interopNamespaceDefault(DialogPrimitive);
70
71
  const TooltipPrimitive__namespace = /* @__PURE__ */ _interopNamespaceDefault(TooltipPrimitive);
71
72
  const SwitchPrimitive__namespace = /* @__PURE__ */ _interopNamespaceDefault(SwitchPrimitive);
72
73
  const AccordionPrimitive__namespace = /* @__PURE__ */ _interopNamespaceDefault(AccordionPrimitive);
@@ -309,32 +310,6 @@ const ArrowSwapIcon = (props) => {
309
310
  }
310
311
  );
311
312
  };
312
- const CloseIcon = (props) => {
313
- return /* @__PURE__ */ jsxRuntime.jsxs(
314
- "svg",
315
- {
316
- width: "24",
317
- height: "24",
318
- viewBox: "0 0 24 24",
319
- fill: "none",
320
- xmlns: "http://www.w3.org/2000/svg",
321
- ...props,
322
- children: [
323
- /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "24", height: "24", rx: "12", fill: "black", fillOpacity: "0.8" }),
324
- /* @__PURE__ */ jsxRuntime.jsx(
325
- "path",
326
- {
327
- d: "M16 8.00005L8 16M16 16L8 8",
328
- stroke: "white",
329
- strokeWidth: "1.5",
330
- strokeLinecap: "round",
331
- strokeLinejoin: "round"
332
- }
333
- )
334
- ]
335
- }
336
- );
337
- };
338
313
  const SearchIcon = (props) => {
339
314
  return /* @__PURE__ */ jsxRuntime.jsxs(
340
315
  "svg",
@@ -592,142 +567,103 @@ const Button = require$$0__namespace.forwardRef(
592
567
  }
593
568
  );
594
569
  Button.displayName = "Button";
595
- const ModalContainerContext = require$$0.createContext(void 0);
596
- const ModalContainerProvider = ({
597
- containerId,
598
- children
599
- }) => {
600
- return /* @__PURE__ */ jsxRuntime.jsx(ModalContainerContext.Provider, { value: containerId, children });
601
- };
602
- const useModalContainer = () => {
603
- const containerId = require$$0.useContext(ModalContainerContext);
604
- if (typeof document === "undefined") {
605
- return null;
606
- }
607
- if (!containerId) {
608
- return document.body;
609
- }
610
- return document.getElementById(containerId) || document.body;
611
- };
612
- const ModalContent = ({ children, className }) => {
613
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("p-5 flex flex-col h-full", className), children });
614
- };
615
- const ModalHeader = ({ children, className }) => {
616
- return /* @__PURE__ */ jsxRuntime.jsx(
617
- "div",
618
- {
619
- className: cn("relative flex gap-4 flex-col justify-between", className),
620
- children
621
- }
622
- );
623
- };
624
- const ModalTitle = ({ children, className }) => {
570
+ function Dialog({
571
+ ...props
572
+ }) {
573
+ return /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Root, { "data-slot": "dialog", ...props });
574
+ }
575
+ function DialogPortal({
576
+ ...props
577
+ }) {
578
+ return /* @__PURE__ */ jsxRuntime.jsx(DialogPrimitive__namespace.Portal, { "data-slot": "dialog-portal", ...props });
579
+ }
580
+ function DialogOverlay({
581
+ className,
582
+ ...props
583
+ }) {
625
584
  return /* @__PURE__ */ jsxRuntime.jsx(
626
- "h2",
585
+ DialogPrimitive__namespace.Overlay,
627
586
  {
587
+ "data-slot": "dialog-overlay",
628
588
  className: cn(
629
- "text-2xl leading-7.5 font-bold font-display text-dialog-foreground",
589
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
630
590
  className
631
591
  ),
632
- children
592
+ ...props
633
593
  }
634
594
  );
635
- };
636
- const ModalDescription = ({ children, className }) => {
595
+ }
596
+ function DialogContent({
597
+ className,
598
+ children,
599
+ showCloseButton = true,
600
+ ...props
601
+ }) {
602
+ return /* @__PURE__ */ jsxRuntime.jsxs(DialogPortal, { "data-slot": "dialog-portal", children: [
603
+ /* @__PURE__ */ jsxRuntime.jsx(DialogOverlay, {}),
604
+ /* @__PURE__ */ jsxRuntime.jsxs(
605
+ DialogPrimitive__namespace.Content,
606
+ {
607
+ "data-slot": "dialog-content",
608
+ className: cn(
609
+ "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
610
+ className
611
+ ),
612
+ ...props,
613
+ children: [
614
+ children,
615
+ showCloseButton && /* @__PURE__ */ jsxRuntime.jsxs(
616
+ DialogPrimitive__namespace.Close,
617
+ {
618
+ "data-slot": "dialog-close",
619
+ className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
620
+ children: [
621
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XIcon, {}),
622
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Close" })
623
+ ]
624
+ }
625
+ )
626
+ ]
627
+ }
628
+ )
629
+ ] });
630
+ }
631
+ function DialogHeader({ className, ...props }) {
637
632
  return /* @__PURE__ */ jsxRuntime.jsx(
638
- "p",
633
+ "div",
639
634
  {
640
- className: cn(
641
- "text-base font-medium text-muted-foreground leading-5",
642
- className
643
- ),
644
- children
635
+ "data-slot": "dialog-header",
636
+ className: cn("flex flex-col gap-2 text-center sm:text-left", className),
637
+ ...props
645
638
  }
646
639
  );
647
- };
648
- const ModalClose = ({ onClick, children, className }) => {
640
+ }
641
+ function DialogTitle({
642
+ className,
643
+ ...props
644
+ }) {
649
645
  return /* @__PURE__ */ jsxRuntime.jsx(
650
- "button",
646
+ DialogPrimitive__namespace.Title,
651
647
  {
652
- className: cn(
653
- "cursor-pointer absolute right-0 top-0 p-0 bg-transparent rounded-full hover:bg-transparent shadow-none w-6 h-6",
654
- className
655
- ),
656
- onClick,
657
- children
648
+ "data-slot": "dialog-title",
649
+ className: cn("text-lg leading-none font-semibold", className),
650
+ ...props
658
651
  }
659
652
  );
660
- };
661
- const Modal = ({
662
- isOpen,
663
- onClose,
664
- children,
665
- className
666
- }) => {
667
- const panelRef = require$$0.useRef(null);
668
- const lastActiveRef = require$$0.useRef(null);
669
- const container = useModalContainer();
670
- require$$0.useEffect(() => {
671
- if (!isOpen) return;
672
- lastActiveRef.current = document.activeElement;
673
- const t = setTimeout(() => {
674
- panelRef.current?.focus();
675
- }, 0);
676
- return () => {
677
- clearTimeout(t);
678
- lastActiveRef.current?.focus?.();
679
- };
680
- }, [isOpen]);
681
- require$$0.useEffect(() => {
682
- if (!isOpen) return;
683
- window.document.body.style.overflow = "hidden";
684
- const onKey = (e) => {
685
- if (e.key === "Escape") onClose();
686
- };
687
- window.addEventListener("keydown", onKey);
688
- return () => window.removeEventListener("keydown", onKey);
689
- }, [isOpen, onClose]);
690
- if (typeof document === "undefined") return null;
691
- return reactDom.createPortal(
692
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: isOpen && /* @__PURE__ */ jsxRuntime.jsxs(
693
- framerMotion.motion.div,
694
- {
695
- className: "fixed m-auto border border-border max-w-md max-h-[80%] z-[100] bg-dialog sm:absolute sm:inset-0 sm:top-0 sm:bottom-0 sm:w-full rounded-xl",
696
- initial: { opacity: 0 },
697
- animate: { opacity: 1 },
698
- exit: { opacity: 0 },
699
- children: [
700
- /* @__PURE__ */ jsxRuntime.jsx(
701
- framerMotion.motion.div,
702
- {
703
- ref: panelRef,
704
- role: "dialog",
705
- "aria-modal": "true",
706
- tabIndex: -1,
707
- className: cn(
708
- "outline-none overflow-auto relative z-30 w-screen h-screen rounded-none sm:w-full sm:h-full sm:rounded-3xl",
709
- className
710
- ),
711
- initial: { opacity: 0, scale: 0.9 },
712
- animate: { opacity: 1, scale: 1 },
713
- exit: { opacity: 0, scale: 0.9 },
714
- transition: {
715
- type: "spring",
716
- stiffness: 480,
717
- damping: 32,
718
- mass: 0.6
719
- },
720
- onMouseDown: (e) => e.stopPropagation(),
721
- children
722
- }
723
- ),
724
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed inset-0 backdrop-blur-sm bg-background/10 z-10" })
725
- ]
726
- }
727
- ) }),
728
- container
653
+ }
654
+ function DialogDescription({
655
+ className,
656
+ ...props
657
+ }) {
658
+ return /* @__PURE__ */ jsxRuntime.jsx(
659
+ DialogPrimitive__namespace.Description,
660
+ {
661
+ "data-slot": "dialog-description",
662
+ className: cn("text-muted-foreground text-sm", className),
663
+ ...props
664
+ }
729
665
  );
730
- };
666
+ }
731
667
  const TipIcon = (props) => {
732
668
  return /* @__PURE__ */ jsxRuntime.jsxs(
733
669
  "svg",
@@ -833,14 +769,7 @@ function TooltipContent({
833
769
  const Tip = (props) => {
834
770
  const { children, text } = props;
835
771
  return /* @__PURE__ */ jsxRuntime.jsxs(Tooltip, { children: [
836
- /* @__PURE__ */ jsxRuntime.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
837
- Button,
838
- {
839
- variant: "default",
840
- className: "cursor-pointer rounded-none shadow-none shrink-0 !p-0 !m-0 !w-fit !h-auto !bg-transparent hover:bg-transparent",
841
- children
842
- }
843
- ) }),
772
+ /* @__PURE__ */ jsxRuntime.jsx(TooltipTrigger, { children }),
844
773
  /* @__PURE__ */ jsxRuntime.jsx(TooltipContent, { children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: text }) })
845
774
  ] });
846
775
  };
@@ -1108,10 +1037,7 @@ const routePresets = [
1108
1037
  RoutePriority.CHEAPEST,
1109
1038
  RoutePriority.RECOMMENDED
1110
1039
  ];
1111
- const SettingModal = ({
1112
- isOpen,
1113
- onClose
1114
- }) => {
1040
+ const SettingModal = ({ isOpen, onClose }) => {
1115
1041
  const { t } = reactI18next.useTranslation();
1116
1042
  const { toChain } = useChainsStore();
1117
1043
  const { tokens } = useTokensStore();
@@ -1144,13 +1070,10 @@ const SettingModal = ({
1144
1070
  );
1145
1071
  const activeBtn = "bg-settings-active hover:bg-settings-active/80 text-settings-active-foreground";
1146
1072
  const notActiveBtn = "bg-settings-button hover:bg-settings-button/80 text-settings-button-foreground";
1147
- return /* @__PURE__ */ jsxRuntime.jsx(Modal, { isOpen, onClose, children: /* @__PURE__ */ jsxRuntime.jsxs(ModalContent, { children: [
1148
- /* @__PURE__ */ jsxRuntime.jsxs(ModalHeader, { children: [
1149
- /* @__PURE__ */ jsxRuntime.jsx(ModalTitle, { children: t("settings.title", { defaultValue: "Settings" }) }),
1150
- /* @__PURE__ */ jsxRuntime.jsx(ModalClose, { className: "", onClick: onClose, children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon, { className: "size-6 p-0 [&>rect]:fill-modal-x [&>path]:stroke-modal-x-foreground" }) })
1151
- ] }),
1152
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-5 mt-7.5", children: [
1153
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2.5 flex flex-col gap-5", children: [
1073
+ return /* @__PURE__ */ jsxRuntime.jsx(Dialog, { open: isOpen, onOpenChange: (open) => !open && onClose(), children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { children: [
1074
+ /* @__PURE__ */ jsxRuntime.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: t("settings.title", { defaultValue: "Settings" }) }) }),
1075
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-5", children: [
1076
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-5", children: [
1154
1077
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between items-center", children: [
1155
1078
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1.5", children: [
1156
1079
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground text-sm font-medium leading-3.5", children: t("settings.gasOnDestination") }),
@@ -1664,14 +1587,14 @@ const TokenRow = ({
1664
1587
  Button,
1665
1588
  {
1666
1589
  onClick: onPick,
1667
- className: `w-full h-[50px] cursor-pointer bg-transparent flex shadow-none items-center justify-between gap-2.5 px-5 py-2.5 hover:bg-modal-item-hover rounded-12 transition-[300] ${isSelected ? "border border-ring" : ""}`,
1590
+ className: `w-full h-12.5 rounded-md cursor-pointer bg-transparent flex shadow-none items-center justify-between gap-2.5 px-5 py-2.5 hover:bg-modal-item-hover transition-[300] ${isSelected ? "border border-ring" : ""}`,
1668
1591
  children: [
1669
1592
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
1670
1593
  /* @__PURE__ */ jsxRuntime.jsx(
1671
1594
  TokenSymbol,
1672
1595
  {
1673
1596
  symbol,
1674
- className: "w-7.5 h-7.5 rounded-full",
1597
+ className: "size-7.5 max-w-7.5 rounded-full",
1675
1598
  alt: symbol
1676
1599
  }
1677
1600
  ),
@@ -1719,7 +1642,7 @@ const VirtualizedTokenList = ({
1719
1642
  const bal = getBalance(node.token.symbol);
1720
1643
  const usd = getTokenUsdValue(node.token.symbol, node.token.price?.usd);
1721
1644
  const isSelected = selectedAssetSymbol?.toUpperCase() === node.token.symbol.toUpperCase();
1722
- return /* @__PURE__ */ jsxRuntime.jsx("div", { style, className: "px-0", children: /* @__PURE__ */ jsxRuntime.jsx(
1645
+ return /* @__PURE__ */ jsxRuntime.jsx(
1723
1646
  TokenRow,
1724
1647
  {
1725
1648
  symbol: node.token.symbol,
@@ -1731,7 +1654,7 @@ const VirtualizedTokenList = ({
1731
1654
  isBalanceLoading: balancesLoading,
1732
1655
  onPick: () => onPick(node.token.symbol, node.willChangeSrc)
1733
1656
  }
1734
- ) });
1657
+ );
1735
1658
  };
1736
1659
  const getItemSize = (index) => {
1737
1660
  const node = nodes[index];
@@ -1838,72 +1761,64 @@ const TokenSelectModal = ({
1838
1761
  }
1839
1762
  return out;
1840
1763
  }, [effectiveTab, myTokens, groupedTokens, t]);
1841
- return /* @__PURE__ */ jsxRuntime.jsx(
1842
- Modal,
1843
- {
1844
- isOpen,
1845
- onClose: handleClose,
1846
- children: /* @__PURE__ */ jsxRuntime.jsxs(ModalContent, { children: [
1847
- /* @__PURE__ */ jsxRuntime.jsxs(ModalHeader, { children: [
1848
- /* @__PURE__ */ jsxRuntime.jsx(ModalTitle, { children: t("bridge.selectToken") }),
1849
- /* @__PURE__ */ jsxRuntime.jsx(ModalClose, { onClick: handleClose, children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon, { className: "size-6 p-0 [&>rect]:fill-modal-x [&>path]:stroke-modal-x-foreground" }) })
1850
- ] }),
1851
- /* @__PURE__ */ jsxRuntime.jsxs(
1852
- "div",
1853
- {
1854
- className: `flex items-center gap-2.5 px-5 py-3.5 bg-input rounded-12 mt-6 h-12.5 transition-all duration-200 ${isFocused ? "border border-ring" : "border border-transparent"}`,
1855
- children: [
1856
- /* @__PURE__ */ jsxRuntime.jsx(SearchIcon, { className: "size-6 text-input-icon" }),
1857
- /* @__PURE__ */ jsxRuntime.jsx(
1858
- Input,
1859
- {
1860
- placeholder: t("bridge.searchToken"),
1861
- className: "w-full outline-none leading-0 p-0 h-6 text-base text-input-text placeholder:text-input-placeholder bg-none dark:bg-transparent",
1862
- value: query,
1863
- onChange: (e) => setQuery(e.target.value),
1864
- onFocus: () => setIsFocused(true),
1865
- onBlur: () => setIsFocused(false)
1866
- }
1867
- )
1868
- ]
1869
- }
1870
- ),
1871
- hasAnyWallet() && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 flex gap-2", children: [
1872
- /* @__PURE__ */ jsxRuntime.jsx(
1873
- Button,
1874
- {
1875
- className: `px-5 py-2.5 rounded-full text-sm font-bold hover:bg-filter-active hover:text-filter-active-foreground cursor-pointer ${tab === "my" ? "bg-filter-active text-filter-active-foreground" : "bg-filter text-filter-foreground"}`,
1876
- onClick: () => setTab("my"),
1877
- children: t("bridge.myTokens")
1878
- }
1879
- ),
1880
- /* @__PURE__ */ jsxRuntime.jsx(
1881
- Button,
1882
- {
1883
- className: `px-4 py-2 rounded-full text-sm font-bold hover:bg-filter-active hover:text-filter-active-foreground cursor-pointer ${tab === "all" ? "bg-filter-active text-filter-active-foreground" : "bg-filter text-filter-foreground"}`,
1884
- onClick: () => setTab("all"),
1885
- children: t("bridge.allTokens")
1886
- }
1887
- )
1888
- ] }),
1889
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 flex-1 overflow-hidden", children: virtualNodes.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground px-5 py-3.5", children: t("bridge.noResults") }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1890
- effectiveTab === "my" && myTokens.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "leading-4 text-base font-semibold text-muted-foreground uppercase px-5 py-2", children: t("bridge.noBalancesFound") }),
1764
+ return /* @__PURE__ */ jsxRuntime.jsx(Dialog, { open: isOpen, onOpenChange: (open) => !open && handleClose(), children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: "!max-h-[80dvh] overflow-auto", children: [
1765
+ /* @__PURE__ */ jsxRuntime.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: t("bridge.selectToken") }) }),
1766
+ /* @__PURE__ */ jsxRuntime.jsxs(
1767
+ "div",
1768
+ {
1769
+ className: `flex items-center gap-2.5 px-5 py-3.5 bg-input rounded-12 h-12.5 transition-all duration-200 ${isFocused ? "border border-ring" : "border border-transparent"}`,
1770
+ children: [
1771
+ /* @__PURE__ */ jsxRuntime.jsx(SearchIcon, { className: "size-6 text-input-icon" }),
1891
1772
  /* @__PURE__ */ jsxRuntime.jsx(
1892
- VirtualizedTokenList,
1773
+ Input,
1893
1774
  {
1894
- nodes: virtualNodes,
1895
- balancesLoading: balancesQuery.isLoading || balancesQuery.isFetching,
1896
- hasAnyWallet: hasAnyWallet(),
1897
- selectedAssetSymbol,
1898
- getBalance,
1899
- getTokenUsdValue,
1900
- onPick
1775
+ placeholder: t("bridge.searchToken"),
1776
+ className: "w-full outline-none leading-0 p-0 h-6 text-base text-input-text placeholder:text-input-placeholder bg-none dark:bg-transparent",
1777
+ value: query,
1778
+ onChange: (e) => setQuery(e.target.value),
1779
+ onFocus: () => setIsFocused(true),
1780
+ onBlur: () => setIsFocused(false)
1901
1781
  }
1902
1782
  )
1903
- ] }) })
1904
- ] })
1905
- }
1906
- );
1783
+ ]
1784
+ }
1785
+ ),
1786
+ hasAnyWallet() && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
1787
+ /* @__PURE__ */ jsxRuntime.jsx(
1788
+ Button,
1789
+ {
1790
+ variant: tab === "my" ? "default" : "outline",
1791
+ onClick: () => setTab("my"),
1792
+ size: "sm",
1793
+ children: t("bridge.myTokens")
1794
+ }
1795
+ ),
1796
+ /* @__PURE__ */ jsxRuntime.jsx(
1797
+ Button,
1798
+ {
1799
+ variant: tab === "all" ? "default" : "outline",
1800
+ onClick: () => setTab("all"),
1801
+ size: "sm",
1802
+ children: t("bridge.allTokens")
1803
+ }
1804
+ )
1805
+ ] }),
1806
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-hidden -mx-5", children: virtualNodes.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground px-5 py-3.5", children: t("bridge.noResults") }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1807
+ effectiveTab === "my" && myTokens.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "leading-4 text-base font-semibold text-muted-foreground uppercase px-5 py-2", children: t("bridge.noBalancesFound") }),
1808
+ /* @__PURE__ */ jsxRuntime.jsx(
1809
+ VirtualizedTokenList,
1810
+ {
1811
+ nodes: virtualNodes,
1812
+ balancesLoading: balancesQuery.isLoading || balancesQuery.isFetching,
1813
+ hasAnyWallet: hasAnyWallet(),
1814
+ selectedAssetSymbol,
1815
+ getBalance,
1816
+ getTokenUsdValue,
1817
+ onPick
1818
+ }
1819
+ )
1820
+ ] }) })
1821
+ ] }) });
1907
1822
  };
1908
1823
  const useBridgeQuoteStore = zustand.create((set) => ({
1909
1824
  inputAmount: "",
@@ -2037,7 +1952,7 @@ function Card({ className, ...props }) {
2037
1952
  {
2038
1953
  "data-slot": "card",
2039
1954
  className: cn(
2040
- "bg-card text-card-foreground flex flex-col gap-4 rounded-xl border py-4 shadow-sm",
1955
+ "bg-card text-card-foreground flex flex-col gap-4 rounded-lg border py-4 shadow-sm",
2041
1956
  className
2042
1957
  ),
2043
1958
  ...props
@@ -2766,7 +2681,7 @@ const ChainSelectModal = ({
2766
2681
  };
2767
2682
  const renderChainItem = (chain, willChangeSrc) => {
2768
2683
  const isSelected = fromChain?.chainKey === chain.chainKey || toChain?.chainKey === chain.chainKey;
2769
- return /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
2684
+ return /* @__PURE__ */ jsxRuntime.jsx(
2770
2685
  Button,
2771
2686
  {
2772
2687
  onClick: () => onChainPick(chain, willChangeSrc),
@@ -2782,52 +2697,43 @@ const ChainSelectModal = ({
2782
2697
  ),
2783
2698
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col items-start", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1 ", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-foreground text-base font-extrabold leading-[100%]", children: chain.name }) }) })
2784
2699
  ] })
2785
- }
2786
- ) }, chain.chainKey);
2700
+ },
2701
+ chain.chainKey
2702
+ );
2787
2703
  };
2788
- return /* @__PURE__ */ jsxRuntime.jsx(
2789
- Modal,
2790
- {
2791
- isOpen,
2792
- onClose: handleClose,
2793
- children: /* @__PURE__ */ jsxRuntime.jsxs(ModalContent, { children: [
2794
- /* @__PURE__ */ jsxRuntime.jsxs(ModalHeader, { children: [
2795
- /* @__PURE__ */ jsxRuntime.jsx(ModalTitle, { children: t("bridge.selectNetwork") }),
2796
- /* @__PURE__ */ jsxRuntime.jsx(ModalClose, { onClick: handleClose, children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon, { className: "size-6 p-0 [&>rect]:fill-modal-x [&>path]:stroke-modal-x-foreground" }) })
2797
- ] }),
2798
- /* @__PURE__ */ jsxRuntime.jsxs(
2799
- "div",
2800
- {
2801
- className: `flex items-center gap-2.5 px-5 py-3.5 bg-input rounded-12 mt-6 h-12.5 transition-all duration-200 ${isFocused ? "border border-ring" : "border border-transparent"}`,
2802
- children: [
2803
- /* @__PURE__ */ jsxRuntime.jsx(SearchIcon, { className: "size-6 text-muted-foreground" }),
2804
- /* @__PURE__ */ jsxRuntime.jsx(
2805
- Input,
2806
- {
2807
- placeholder: t("bridge.searchDestinationChain"),
2808
- className: "w-full outline-none leading-0 p-0 h-6 text-base text-foreground placeholder:text-muted-foreground bg-none dark:bg-transparent",
2809
- value: query,
2810
- onChange: (e) => setQuery(e.target.value),
2811
- onFocus: () => setIsFocused(true),
2812
- onBlur: () => setIsFocused(false)
2813
- }
2814
- )
2815
- ]
2816
- }
2817
- ),
2818
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 flex-1 overflow-y-auto", children: [
2819
- groupedChains.available.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { children: groupedChains.available.map((c) => renderChainItem(c, false)) }),
2820
- groupedChains.available.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4", children: [
2821
- groupedChains.willChangeSrc.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-5 py-2 leading-4 text-base font-semibold text-muted-foreground uppercase", children: t("bridge.willChangeSourceChain") }),
2822
- groupedChains.willChangeSrc.length > 0 && groupedChains.willChangeSrc.map(
2823
- (c) => renderChainItem(c, true)
2824
- )
2825
- ] }),
2826
- groupedChains.available.length === 0 && groupedChains.willChangeSrc.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-5 py-3.5 text-sm text-muted-foreground", children: t("bridge.noResults") })
2827
- ] })
2828
- ] })
2829
- }
2830
- );
2704
+ return /* @__PURE__ */ jsxRuntime.jsx(Dialog, { open: isOpen, onOpenChange: (open) => !open && handleClose(), children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: "!max-h-[80dvh] overflow-hidden", children: [
2705
+ /* @__PURE__ */ jsxRuntime.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: t("bridge.selectNetwork") }) }),
2706
+ /* @__PURE__ */ jsxRuntime.jsxs(
2707
+ "div",
2708
+ {
2709
+ className: `flex items-center gap-2.5 px-5 py-3.5 bg-input rounded-md h-12.5 transition-all duration-200 ${isFocused ? "border border-ring" : "border border-transparent"}`,
2710
+ children: [
2711
+ /* @__PURE__ */ jsxRuntime.jsx(SearchIcon, { className: "size-6 text-muted-foreground" }),
2712
+ /* @__PURE__ */ jsxRuntime.jsx(
2713
+ Input,
2714
+ {
2715
+ placeholder: t("bridge.searchDestinationChain"),
2716
+ className: "w-full outline-none leading-0 p-0 h-6 text-base text-foreground placeholder:text-muted-foreground bg-none dark:bg-transparent",
2717
+ value: query,
2718
+ onChange: (e) => setQuery(e.target.value),
2719
+ onFocus: () => setIsFocused(true),
2720
+ onBlur: () => setIsFocused(false)
2721
+ }
2722
+ )
2723
+ ]
2724
+ }
2725
+ ),
2726
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 overflow-y-auto", children: [
2727
+ groupedChains.available.length > 0 && groupedChains.available.map((c) => renderChainItem(c, false)),
2728
+ groupedChains.available.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4", children: [
2729
+ groupedChains.willChangeSrc.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "px-5 py-2 leading-4 text-base font-semibold text-muted-foreground uppercase", children: t("bridge.willChangeSourceChain") }),
2730
+ groupedChains.willChangeSrc.length > 0 && groupedChains.willChangeSrc.map(
2731
+ (c) => renderChainItem(c, true)
2732
+ )
2733
+ ] }),
2734
+ groupedChains.available.length === 0 && groupedChains.willChangeSrc.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-5 py-3.5 text-sm text-muted-foreground", children: t("bridge.noResults") })
2735
+ ] })
2736
+ ] }) });
2831
2737
  };
2832
2738
  const useWalletSelectModal = zustand.create((set) => ({
2833
2739
  isOpen: false,
@@ -3125,7 +3031,7 @@ const ToggleRow = ({ enabled, onToggle }) => {
3125
3031
  } catch {
3126
3032
  }
3127
3033
  };
3128
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4 flex flex-col rounded-b-xl gap-2 bg-muted", children: [
3034
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4 flex flex-col rounded-b-lg gap-2 bg-muted", children: [
3129
3035
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
3130
3036
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm leading-4.5 font-medium text-muted-foreground", children: t("bridge.sendToAnotherAddress") }),
3131
3037
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -3393,8 +3299,8 @@ const Details = () => {
3393
3299
  })();
3394
3300
  const currentSlippageText = formatPercentage(slippageBps);
3395
3301
  const routeText = quote?.route ? getRouteDisplayName(quote.route) : t(`settings.routePresets.${routePriority}`);
3396
- return /* @__PURE__ */ jsxRuntime.jsx(Accordion, { type: "single", collapsible: true, className: "w-full", children: /* @__PURE__ */ jsxRuntime.jsxs(AccordionItem, { value: "item-1", className: "bg-muted rounded-xl", children: [
3397
- /* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { className: "w-full gap-1 items-center py-6 px-5 rounded-b-xl data-[state=open]:pb-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full flex items-center justify-between", children: [
3302
+ return /* @__PURE__ */ jsxRuntime.jsx(Accordion, { type: "single", collapsible: true, className: "w-full", children: /* @__PURE__ */ jsxRuntime.jsxs(AccordionItem, { value: "item-1", className: "bg-muted rounded-lg", children: [
3303
+ /* @__PURE__ */ jsxRuntime.jsx(AccordionTrigger, { className: "w-full gap-1 items-center py-6 px-5 rounded-b-lg data-[state=open]:pb-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full flex items-center justify-between", children: [
3398
3304
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-normal text-priority leading-3.5", children: t("bridge.youWillReceive", { defaultValue: "You will receive" }) }),
3399
3305
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-transparent hover:bg-transparent shadow-none h-4 p-0 px-0 py-0 flex items-center gap-1.5", children: [
3400
3306
  /* @__PURE__ */ jsxRuntime.jsx(TokenSymbol, { symbol, className: "w-4 h-4", alt: "token" }),
@@ -4195,20 +4101,17 @@ const WalletSelectModal = () => {
4195
4101
  console.error("Failed to connect wallet:", error);
4196
4102
  }
4197
4103
  };
4198
- return /* @__PURE__ */ jsxRuntime.jsx(Modal, { isOpen, onClose, children: /* @__PURE__ */ jsxRuntime.jsxs(ModalContent, { children: [
4199
- /* @__PURE__ */ jsxRuntime.jsxs(ModalHeader, { children: [
4200
- /* @__PURE__ */ jsxRuntime.jsx(ModalTitle, { children: t("wallets.chooseWallet", { defaultValue: "Choose wallet" }) }),
4201
- /* @__PURE__ */ jsxRuntime.jsx(ModalDescription, { children: t("wallets.oneWalletPerEnv", {
4202
- defaultValue: "You can only connect one wallet per environment."
4203
- }) }),
4204
- /* @__PURE__ */ jsxRuntime.jsx(ModalClose, { onClick: onClose, children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon, { className: "size-6 p-0 [&>rect]:fill-modal-x [&>path]:stroke-modal-x-foreground" }) })
4104
+ return /* @__PURE__ */ jsxRuntime.jsx(Dialog, { open: isOpen, onOpenChange: (open) => !open && onClose(), children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { children: [
4105
+ /* @__PURE__ */ jsxRuntime.jsxs(DialogHeader, { children: [
4106
+ /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { children: t("wallets.chooseWallet") }),
4107
+ /* @__PURE__ */ jsxRuntime.jsx(DialogDescription, { children: t("wallets.oneWalletPerEnv") })
4205
4108
  ] }),
4206
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-5 flex flex-col gap-3.5", children: [
4109
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4", children: [
4207
4110
  connectedWallets.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
4208
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-5 py-2 leading-4 text-base font-semibold text-muted-foreground uppercase", children: t("wallets.connected") }),
4111
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-2 font-semibold text-muted-foreground uppercase", children: t("wallets.connected") }),
4209
4112
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "", children: connectedWallets.map((wallet) => {
4210
4113
  const IconComponent = wallet.icon;
4211
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "", children: /* @__PURE__ */ jsxRuntime.jsxs(Button, { className: "w-full cursor-pointer bg-transparent flex shadow-none items-center justify-between gap-2.5 px-5 py-2.5 hover:bg-muted h-auto rounded-12 transition-[300]", children: [
4114
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "-mx-5", children: /* @__PURE__ */ jsxRuntime.jsxs(Button, { className: "w-full cursor-pointer bg-transparent flex shadow-none items-center justify-between gap-2.5 px-5 py-2.5 hover:bg-muted h-auto rounded-12 transition-[300]", children: [
4212
4115
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-3 min-w-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2.5", children: [
4213
4116
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-7.5 h-7.5 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(IconComponent, { className: "size-7.5" }) }),
4214
4117
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-start min-w-0", children: [
@@ -4231,8 +4134,8 @@ const WalletSelectModal = () => {
4231
4134
  }) })
4232
4135
  ] }),
4233
4136
  categories.map((category) => /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
4234
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-5 py-2 leading-4 text-base font-semibold text-muted-foreground uppercase", children: category.title }),
4235
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "", children: category.wallets.map((wallet) => {
4137
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-2 font-semibold text-muted-foreground uppercase", children: category.title }),
4138
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "-mx-5", children: category.wallets.map((wallet) => {
4236
4139
  const IconComponent = wallet.icon;
4237
4140
  const isEvmConnector = category.title === t("wallets.evmWallets");
4238
4141
  const connector = isEvmConnector ? connectors.find((c) => c.id === wallet.id) : null;
@@ -6205,8 +6108,8 @@ const TransactionManager = () => {
6205
6108
  if (status === "completed") {
6206
6109
  step = /* @__PURE__ */ jsxRuntime.jsx(SuccessStep, {});
6207
6110
  }
6208
- return /* @__PURE__ */ jsxRuntime.jsx(Modal, { isOpen: true, onClose: () => {
6209
- }, children: step });
6111
+ return /* @__PURE__ */ jsxRuntime.jsx(Dialog, { open: true, onOpenChange: () => {
6112
+ }, children: /* @__PURE__ */ jsxRuntime.jsx(DialogContent, { showCloseButton: false, className: "p-0 gap-0 border-none max-w-[calc(100%-2rem)] sm:max-w-md", children: step }) });
6210
6113
  };
6211
6114
  const useTokensRequest = () => {
6212
6115
  const { setTokens, setSelectedToken, setSelectedAssetSymbol } = useTokensStore();
@@ -6709,6 +6612,7 @@ class EvmChainStrategy {
6709
6612
  console.warn("No publicClient available for balance query");
6710
6613
  return {};
6711
6614
  }
6615
+ console.log("publicClient", this.publicClient);
6712
6616
  return await getEvmBalances(this.publicClient, address, tokens, priorityToken);
6713
6617
  }
6714
6618
  isAddressValid(address) {
@@ -7975,7 +7879,7 @@ const EvaaBridgeWithProviders = (props) => {
7975
7879
  require$$0.useEffect(() => {
7976
7880
  setTronConnected(!!tronConnected);
7977
7881
  }, [tronConnected, setTronConnected]);
7978
- return /* @__PURE__ */ jsxRuntime.jsx(ModalContainerProvider, { containerId: props.modalContainerId, children: /* @__PURE__ */ jsxRuntime.jsx(
7882
+ return /* @__PURE__ */ jsxRuntime.jsx(
7979
7883
  ChainStrategyProvider,
7980
7884
  {
7981
7885
  evmWallet: {
@@ -8000,7 +7904,7 @@ const EvaaBridgeWithProviders = (props) => {
8000
7904
  tonApiKey: props.tonApiKey,
8001
7905
  children: /* @__PURE__ */ jsxRuntime.jsx(EvaaBridgeContent, { ...props })
8002
7906
  }
8003
- ) });
7907
+ );
8004
7908
  };
8005
7909
  const EvaaBridgeContent = ({
8006
7910
  className,
@@ -8113,7 +8017,7 @@ const EvaaBridgeContent = ({
8113
8017
  /* @__PURE__ */ jsxRuntime.jsx(
8114
8018
  SwapSection,
8115
8019
  {
8116
- className: "rounded-t-xl",
8020
+ className: "rounded-t-lg",
8117
8021
  label: t("bridge.sourceNetwork"),
8118
8022
  balance: fromBalance,
8119
8023
  chain: fromChain,