rujira.ui 0.1.0
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/.eslintrc.cjs +21 -0
- package/.tool-versions +1 -0
- package/i18n/.github/workflows/validate.yml +13 -0
- package/i18n/README.md +7 -0
- package/i18n/translations/template.json +448 -0
- package/i18n/update-template.js +19 -0
- package/i18n/validate.js +10 -0
- package/lib/esm/i18n/translations/template.json +448 -0
- package/lib/esm/src/components/buttons/Button.js +37 -0
- package/lib/esm/src/components/buttons/Popout.js +56 -0
- package/lib/esm/src/components/buttons/TxButton.js +42 -0
- package/lib/esm/src/components/buttons/__Popout.js +34 -0
- package/lib/esm/src/components/cards/Card.js +8 -0
- package/lib/esm/src/components/cards/GradientCard.js +8 -0
- package/lib/esm/src/components/footer/Footer.js +11 -0
- package/lib/esm/src/components/header/Accounts.js +211 -0
- package/lib/esm/src/components/header/Header.js +69 -0
- package/lib/esm/src/components/header/QuickLauncher.js +10 -0
- package/lib/esm/src/components/header/ResolveLink.js +13 -0
- package/lib/esm/src/components/icons/IconDenom.js +358 -0
- package/lib/esm/src/components/icons/Icons.js +228 -0
- package/lib/esm/src/components/icons/Networks.js +32 -0
- package/lib/esm/src/components/icons/Wallets.js +62 -0
- package/lib/esm/src/components/inputs/Checkbox.js +12 -0
- package/lib/esm/src/components/inputs/DecimalInput.js +35 -0
- package/lib/esm/src/components/inputs/DenomInput.js +22 -0
- package/lib/esm/src/components/inputs/DenomSelect.js +66 -0
- package/lib/esm/src/components/inputs/Input.js +25 -0
- package/lib/esm/src/components/inputs/Numeric.js +18 -0
- package/lib/esm/src/components/inputs/Radio.js +12 -0
- package/lib/esm/src/components/inputs/Select.js +29 -0
- package/lib/esm/src/components/inputs/Textarea.js +25 -0
- package/lib/esm/src/components/inputs/Toggle.js +13 -0
- package/lib/esm/src/components/loader/Loader.js +3 -0
- package/lib/esm/src/components/logos/RujiraLogo.js +2 -0
- package/lib/esm/src/components/notices/Warning.js +10 -0
- package/lib/esm/src/components/numbers/Decimal.js +14 -0
- package/lib/esm/src/components/numbers/Fiat.js +19 -0
- package/lib/esm/src/components/progress/Progress.js +9 -0
- package/lib/esm/src/components/slider/Slider.js +5 -0
- package/lib/esm/src/context/Affiliate.js +34 -0
- package/lib/esm/src/context/GlobalModal.js +35 -0
- package/lib/esm/src/d.js +1 -0
- package/lib/esm/src/helpers/index.js +65 -0
- package/lib/esm/src/helpers/number.js +8 -0
- package/lib/esm/src/hooks/useClickOutside.js +19 -0
- package/lib/esm/src/hooks/useLocalStorage.js +12 -0
- package/lib/esm/src/hooks/useQueryParam.js +31 -0
- package/lib/esm/src/hooks/useWindowSize.js +19 -0
- package/lib/esm/src/i18n/i18n.js +90 -0
- package/lib/esm/src/i18n/index.js +1 -0
- package/lib/esm/src/index.js +38 -0
- package/lib/esm/src/services/account.js +42 -0
- package/lib/esm/tsconfig.tsbuildinfo +1 -0
- package/package.json +47 -0
- package/src/assets/ghost-tokens/akt.png +0 -0
- package/src/assets/ghost-tokens/ampkuji.png +0 -0
- package/src/assets/ghost-tokens/arb.png +0 -0
- package/src/assets/ghost-tokens/atom.png +0 -0
- package/src/assets/ghost-tokens/axlusdc.png +0 -0
- package/src/assets/ghost-tokens/cro.png +0 -0
- package/src/assets/ghost-tokens/dot.png +0 -0
- package/src/assets/ghost-tokens/fet.png +0 -0
- package/src/assets/ghost-tokens/fuzn.png +0 -0
- package/src/assets/ghost-tokens/glmr.png +0 -0
- package/src/assets/ghost-tokens/gpaxg.png +0 -0
- package/src/assets/ghost-tokens/inj.png +0 -0
- package/src/assets/ghost-tokens/juno.png +0 -0
- package/src/assets/ghost-tokens/kuji.png +0 -0
- package/src/assets/ghost-tokens/luna.png +0 -0
- package/src/assets/ghost-tokens/lunc.png +0 -0
- package/src/assets/ghost-tokens/mnta.png +0 -0
- package/src/assets/ghost-tokens/ntrn.png +0 -0
- package/src/assets/ghost-tokens/osmo.png +0 -0
- package/src/assets/ghost-tokens/scrt.png +0 -0
- package/src/assets/ghost-tokens/shd.png +0 -0
- package/src/assets/ghost-tokens/sol.png +0 -0
- package/src/assets/ghost-tokens/stars.png +0 -0
- package/src/assets/ghost-tokens/statom.png +0 -0
- package/src/assets/ghost-tokens/stosmo.png +0 -0
- package/src/assets/ghost-tokens/usdc.png +0 -0
- package/src/assets/ghost-tokens/usk.png +0 -0
- package/src/assets/ghost-tokens/wavax.png +0 -0
- package/src/assets/ghost-tokens/wbnb.png +0 -0
- package/src/assets/ghost-tokens/wbtc.png +0 -0
- package/src/assets/ghost-tokens/weth.png +0 -0
- package/src/assets/ghost-tokens/wftm.png +0 -0
- package/src/assets/ghost-tokens/wglmr.png +0 -0
- package/src/assets/ghost-tokens/wmatic.png +0 -0
- package/src/assets/mono.woff +0 -0
- package/src/assets/tokens/acre.png +0 -0
- package/src/assets/tokens/akt.png +0 -0
- package/src/assets/tokens/amber.png +0 -0
- package/src/assets/tokens/ampkuji.png +0 -0
- package/src/assets/tokens/ampluna.png +0 -0
- package/src/assets/tokens/ampmnta.png +0 -0
- package/src/assets/tokens/ampwhale.png +0 -0
- package/src/assets/tokens/andr.png +0 -0
- package/src/assets/tokens/aqla.png +0 -0
- package/src/assets/tokens/aqua.png +0 -0
- package/src/assets/tokens/arb.png +0 -0
- package/src/assets/tokens/arch.png +0 -0
- package/src/assets/tokens/astro.png +0 -0
- package/src/assets/tokens/atom.png +0 -0
- package/src/assets/tokens/auto.png +0 -0
- package/src/assets/tokens/avax.png +0 -0
- package/src/assets/tokens/axl.png +0 -0
- package/src/assets/tokens/axlusdc.png +0 -0
- package/src/assets/tokens/axlusdt.png +0 -0
- package/src/assets/tokens/bad.png +0 -0
- package/src/assets/tokens/bch.png +0 -0
- package/src/assets/tokens/bfit.png +0 -0
- package/src/assets/tokens/bnb.png +0 -0
- package/src/assets/tokens/btc.png +0 -0
- package/src/assets/tokens/cheq.png +0 -0
- package/src/assets/tokens/cmdx.png +0 -0
- package/src/assets/tokens/cmst.png +0 -0
- package/src/assets/tokens/cnto.png +0 -0
- package/src/assets/tokens/core.png +0 -0
- package/src/assets/tokens/crbrus.png +0 -0
- package/src/assets/tokens/cre.png +0 -0
- package/src/assets/tokens/cro.png +0 -0
- package/src/assets/tokens/cub.png +0 -0
- package/src/assets/tokens/dai.png +0 -0
- package/src/assets/tokens/default.png +0 -0
- package/src/assets/tokens/doge.png +0 -0
- package/src/assets/tokens/dot.png +0 -0
- package/src/assets/tokens/dvpn.png +0 -0
- package/src/assets/tokens/dydx.png +0 -0
- package/src/assets/tokens/dym.png +0 -0
- package/src/assets/tokens/eth.png +0 -0
- package/src/assets/tokens/evmos.png +0 -0
- package/src/assets/tokens/flix.png +0 -0
- package/src/assets/tokens/frnz.png +0 -0
- package/src/assets/tokens/fury.legacy.png +0 -0
- package/src/assets/tokens/fury.png +0 -0
- package/src/assets/tokens/fuzn.png +0 -0
- package/src/assets/tokens/glmr.png +0 -0
- package/src/assets/tokens/glto.png +0 -0
- package/src/assets/tokens/gpaxg.png +0 -0
- package/src/assets/tokens/grav.png +0 -0
- package/src/assets/tokens/inj.png +0 -0
- package/src/assets/tokens/jkl.png +0 -0
- package/src/assets/tokens/juno.png +0 -0
- package/src/assets/tokens/kart.png +0 -0
- package/src/assets/tokens/kuji.png +0 -0
- package/src/assets/tokens/kune.png +0 -0
- package/src/assets/tokens/link.png +0 -0
- package/src/assets/tokens/loop.png +0 -0
- package/src/assets/tokens/ltc.png +0 -0
- package/src/assets/tokens/luna.png +0 -0
- package/src/assets/tokens/lunc.png +0 -0
- package/src/assets/tokens/lvn.png +0 -0
- package/src/assets/tokens/mars.png +0 -0
- package/src/assets/tokens/mnta.png +0 -0
- package/src/assets/tokens/mntl.png +0 -0
- package/src/assets/tokens/nami.png +0 -0
- package/src/assets/tokens/nausd.png +0 -0
- package/src/assets/tokens/nbtc.png +0 -0
- package/src/assets/tokens/neok.png +0 -0
- package/src/assets/tokens/newt.png +0 -0
- package/src/assets/tokens/nstk.png +0 -0
- package/src/assets/tokens/ntrn.png +0 -0
- package/src/assets/tokens/odin.png +0 -0
- package/src/assets/tokens/osmo.png +0 -0
- package/src/assets/tokens/pepe.png +0 -0
- package/src/assets/tokens/plnk.png +0 -0
- package/src/assets/tokens/plq.png +0 -0
- package/src/assets/tokens/qcaqla.png +0 -0
- package/src/assets/tokens/qcatom.png +0 -0
- package/src/assets/tokens/qcfuzn.png +0 -0
- package/src/assets/tokens/qckuji.png +0 -0
- package/src/assets/tokens/qcmnta.png +0 -0
- package/src/assets/tokens/rac.legacy.png +0 -0
- package/src/assets/tokens/rac.png +0 -0
- package/src/assets/tokens/ratom.png +0 -0
- package/src/assets/tokens/regen.png +0 -0
- package/src/assets/tokens/rfuzn.png +0 -0
- package/src/assets/tokens/rio.png +0 -0
- package/src/assets/tokens/rkuji.png +0 -0
- package/src/assets/tokens/roar.png +0 -0
- package/src/assets/tokens/ruji.png +0 -0
- package/src/assets/tokens/rune.png +0 -0
- package/src/assets/tokens/sayve.png +0 -0
- package/src/assets/tokens/scrt.png +0 -0
- package/src/assets/tokens/shd.legacy.png +0 -0
- package/src/assets/tokens/shd.png +0 -0
- package/src/assets/tokens/silk.png +0 -0
- package/src/assets/tokens/sol.png +0 -0
- package/src/assets/tokens/somm.png +0 -0
- package/src/assets/tokens/stars.png +0 -0
- package/src/assets/tokens/statom.png +0 -0
- package/src/assets/tokens/stinj.png +0 -0
- package/src/assets/tokens/stluna.png +0 -0
- package/src/assets/tokens/stosmo.png +0 -0
- package/src/assets/tokens/strd.png +0 -0
- package/src/assets/tokens/swth.png +0 -0
- package/src/assets/tokens/tia.png +0 -0
- package/src/assets/tokens/tori.png +0 -0
- package/src/assets/tokens/umee.png +0 -0
- package/src/assets/tokens/uni.png +0 -0
- package/src/assets/tokens/usdc.png +0 -0
- package/src/assets/tokens/usk.png +0 -0
- package/src/assets/tokens/usk_black.png +0 -0
- package/src/assets/tokens/ustc.png +0 -0
- package/src/assets/tokens/wavax.png +0 -0
- package/src/assets/tokens/wbtc.png +0 -0
- package/src/assets/tokens/wftm.png +0 -0
- package/src/assets/tokens/whale.png +0 -0
- package/src/assets/tokens/whlocal.png +0 -0
- package/src/assets/tokens/wink.png +0 -0
- package/src/assets/tokens/wmatic.png +0 -0
- package/src/assets/tokens/wsteth.png +0 -0
- package/src/assets/tokens/wtao.png +0 -0
- package/src/assets/tokens/xastro.png +0 -0
- package/src/assets/tokens/yieldeth.png +0 -0
- package/src/assets/tokens/yum.png +0 -0
- package/src/components/buttons/Button.tsx +80 -0
- package/src/components/buttons/Popout.tsx +74 -0
- package/src/components/buttons/TxButton.tsx +103 -0
- package/src/components/buttons/__Popout.tsx +56 -0
- package/src/components/cards/Card.tsx +17 -0
- package/src/components/cards/GradientCard.tsx +17 -0
- package/src/components/footer/Footer.tsx +117 -0
- package/src/components/header/Accounts.tsx +1021 -0
- package/src/components/header/Header.tsx +745 -0
- package/src/components/header/QuickLauncher.tsx +67 -0
- package/src/components/header/ResolveLink.tsx +81 -0
- package/src/components/icons/IconDenom.tsx +400 -0
- package/src/components/icons/Icons.tsx +686 -0
- package/src/components/icons/Networks.tsx +687 -0
- package/src/components/icons/Wallets.tsx +947 -0
- package/src/components/inputs/Checkbox.tsx +35 -0
- package/src/components/inputs/DecimalInput.tsx +72 -0
- package/src/components/inputs/DenomInput.tsx +65 -0
- package/src/components/inputs/DenomSelect.tsx +178 -0
- package/src/components/inputs/Input.tsx +66 -0
- package/src/components/inputs/Numeric.tsx +49 -0
- package/src/components/inputs/Radio.tsx +33 -0
- package/src/components/inputs/Select.tsx +69 -0
- package/src/components/inputs/Textarea.tsx +65 -0
- package/src/components/inputs/Toggle.tsx +38 -0
- package/src/components/loader/Loader.tsx +103 -0
- package/src/components/logos/RujiraLogo.tsx +83 -0
- package/src/components/notices/Warning.tsx +42 -0
- package/src/components/numbers/Decimal.tsx +43 -0
- package/src/components/numbers/Fiat.tsx +56 -0
- package/src/components/progress/Progress.tsx +40 -0
- package/src/components/slider/Slider.tsx +12 -0
- package/src/context/Affiliate.tsx +65 -0
- package/src/context/GlobalModal.tsx +115 -0
- package/src/d.ts +4 -0
- package/src/helpers/index.ts +73 -0
- package/src/helpers/number.ts +12 -0
- package/src/hooks/useClickOutside.ts +27 -0
- package/src/hooks/useLocalStorage.ts +20 -0
- package/src/hooks/useQueryParam.ts +46 -0
- package/src/hooks/useWindowSize.ts +26 -0
- package/src/i18n/i18n.tsx +102 -0
- package/src/i18n/index.ts +1 -0
- package/src/index.ts +54 -0
- package/src/scss/base/_colors.scss +23 -0
- package/src/scss/base/_display.scss +85 -0
- package/src/scss/base/_filters.scss +20 -0
- package/src/scss/base/_flex.scss +612 -0
- package/src/scss/base/_important.scss +3 -0
- package/src/scss/base/_normalize.scss +351 -0
- package/src/scss/base/_spacing.scss +290 -0
- package/src/scss/base/_tooltip.scss +9 -0
- package/src/scss/base/_typography.scss +279 -0
- package/src/scss/base/_variables.scss +72 -0
- package/src/scss/components/_button-group.scss +61 -0
- package/src/scss/components/_button.scss +459 -0
- package/src/scss/components/_decimal.scss +40 -0
- package/src/scss/components/_denom-select.scss +270 -0
- package/src/scss/components/_fiat.scss +34 -0
- package/src/scss/components/_footer.scss +27 -0
- package/src/scss/components/_header.scss +665 -0
- package/src/scss/components/_input.scss +82 -0
- package/src/scss/components/_loader.scss +20 -0
- package/src/scss/components/_modal.scss +138 -0
- package/src/scss/components/_numeric-input.scss +98 -0
- package/src/scss/components/_popout.scss +63 -0
- package/src/scss/components/_progress.scss +62 -0
- package/src/scss/components/_radio-checkbox.scss +79 -0
- package/src/scss/components/_select.scss +106 -0
- package/src/scss/components/_slider.scss +34 -0
- package/src/scss/components/_toggle.scss +120 -0
- package/src/scss/components/_warning.scss +65 -0
- package/src/scss/index.scss +37 -0
- package/src/scss/styledcomponents/_card.scss +130 -0
- package/src/scss/styledcomponents/_drawer.scss +36 -0
- package/src/scss/styledcomponents/_general.scss +20 -0
- package/src/scss/styledcomponents/_table.scss +302 -0
- package/src/scss/styledcomponents/_tabs.scss +97 -0
- package/src/scss/styledcomponents/_tag.scss +155 -0
- package/src/scss/unsorted/_general.scss +259 -0
- package/src/services/account.ts +53 -0
- package/tsconfig.json +25 -0
- package/tsconfig.node.json +11 -0
- package/vite.config.ts +7 -0
- package/vitest-setup.js +1 -0
- package/vitest.config.js +13 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import clsx from "clsx";
|
|
3
|
+
import { RujiraLogo } from "../logos/RujiraLogo";
|
|
4
|
+
import { Discord, Telegram, X } from "../icons/Icons";
|
|
5
|
+
import { ResolveLink } from "../header/ResolveLink";
|
|
6
|
+
export const Footer = ({ className, domain = "", routerElement, }) => {
|
|
7
|
+
return (_jsx("div", { className: clsx({
|
|
8
|
+
rujira__footer: true,
|
|
9
|
+
[`${className}`]: className,
|
|
10
|
+
}), children: _jsxs("div", { className: "rujira__inner", children: [_jsxs("div", { className: "flex wrap pad-tight", children: [_jsxs("div", { className: "col-12 col-xs-6 col-lg-3", children: [_jsx("h4", { className: "fs-14 lh-18 fw-600 color-white", children: "Everyone" }), _jsxs("nav", { className: "flex dir-c", children: [_jsx(ResolveLink, { as: routerElement, domain: domain, to: "/migrate", children: "Migrate" }), _jsx("a", { href: "https://docs.rujira.network", target: "_blank", children: "Documentation" }), _jsx("a", { href: "https://docs.rujira.network/resources/branding", target: "_blank", children: "Brand Assets" }), _jsx("a", { href: "https://runescan.io", target: "_blank", children: "Blockchain Explorer" })] })] }), _jsxs("div", { className: "col-12 col-xs-6 col-lg-3 mt-3 mt-xs-0", children: [_jsx("h4", { className: "fs-14 lh-18 fw-600 color-white", children: "Developers" }), _jsxs("nav", { className: "flex dir-c", children: [_jsx(ResolveLink, { as: routerElement, domain: domain, to: "/developers", children: "Getting Started" }), _jsx(ResolveLink, { as: routerElement, domain: domain, to: "/developer-tools", children: "Developer Tools" }), _jsx("a", { href: "https://docs.rujira.network/developers/getting-started", target: "_blank", children: "Documentation" }), _jsx("a", { href: "https://gitlab.com/thorchain/rujira", target: "_blank", children: "GitLab" }), _jsx("a", { href: "https://gitlab.com/thorchain/rujira-ui", target: "_blank", children: "Rujira.ui" })] })] }), _jsxs("div", { className: "col-12 col-xs-6 col-lg-3 mt-3 mt-lg-0", children: [_jsx("h4", { className: "fs-14 lh-18 fw-600 color-white", children: "Ecosystem" }), _jsxs("nav", { className: "flex dir-c", children: [_jsx(ResolveLink, { as: routerElement, domain: domain, to: "/ecosystem", children: "Built on Rujira" }), _jsx("a", { href: "https://station.rujira.network/", target: "_blank", children: "Station Wallet" })] })] }), _jsxs("div", { className: "col-12 col-xs-6 col-lg-3 mt-3 mt-lg-0", children: [_jsx("h4", { className: "fs-14 lh-18 fw-600 color-white", children: "Community" }), _jsxs("nav", { className: "flex wrap mt-1", children: [_jsx("a", { href: "https://x.com/RujiraNetwork", target: "_blank", className: "block px-0.5", children: _jsx(X, { className: "h-3 w-a" }) }), _jsx("a", { href: "https://t.me/team_kujira", target: "_blank", className: "block px-0.5", children: _jsx(Telegram, { className: "h-3 w-a" }) }), _jsx("a", { href: "https://discord.gg/ddWCkJjD4u", target: "_blank", className: "block px-0.5", children: _jsx(Discord, { className: "h-3 w-a" }) })] })] })] }), _jsxs("div", { className: "mt-4 flex wrap ai-c", children: [_jsx(RujiraLogo, { animate: true, textColor: "#fff", className: "block w-a h-8 mr-3" }), _jsx("p", { className: "fs-12 lh-16 fw-500 color-grey my-2", children: "All Rujira brand is in public domain. No rights reserved." })] })] }) }));
|
|
11
|
+
};
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import clsx from "clsx";
|
|
3
|
+
import { AnimatePresence, motion, useAnimate } from "motion/react";
|
|
4
|
+
import { useEffect, useState } from "react";
|
|
5
|
+
import toast from "react-hot-toast";
|
|
6
|
+
import { Network, networkLabel, Provider, } from "rujira.js";
|
|
7
|
+
import { useGlobalModalContext } from "../../context/GlobalModal";
|
|
8
|
+
import { useLocalStorage } from "../../hooks/useLocalStorage";
|
|
9
|
+
import { i18n } from "../../i18n";
|
|
10
|
+
import { AngleDown, CircleUser, Deposit, LinkConnect, LinkDisconnect, Plus, Users, } from "../icons/Icons";
|
|
11
|
+
import { Ctrl, Keplr, KeplrSimple, Leap, LeapSimple, MetaMask, MetaMaskSimple, Sonar, SonarSimple, StationSimple, StationText, Vultisig, VultisigSimple, } from "../icons/Wallets";
|
|
12
|
+
import { Fiat } from "../numbers/Fiat";
|
|
13
|
+
import { ResolveLink } from "./ResolveLink";
|
|
14
|
+
import { Button, Input, NetworkIcons } from "../..";
|
|
15
|
+
let referral = localStorage.getItem("referral");
|
|
16
|
+
export const Accounts = ({ provider, routingElement }) => {
|
|
17
|
+
const { accounts, disconnectAll, selected } = provider;
|
|
18
|
+
const [hoverBalance, setHoverBalance] = useState(false);
|
|
19
|
+
const [showBlur, setShowBlur] = useState(false);
|
|
20
|
+
const { hideModal, showModal } = useGlobalModalContext();
|
|
21
|
+
const ConnectModal = () => {
|
|
22
|
+
showModal({
|
|
23
|
+
title: "Connect Your Account",
|
|
24
|
+
backgroundClose: true,
|
|
25
|
+
children: _jsx(Wallets, { modalLayout: true, provider: provider }),
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
const ReferralModal = () => {
|
|
29
|
+
showModal({
|
|
30
|
+
title: "Refer And Earn",
|
|
31
|
+
backgroundClose: true,
|
|
32
|
+
children: (_jsxs(_Fragment, { children: [_jsx("p", { className: "p balance", children: "Share your unique referral link and earn affiliate fees on trades, swaps, and all DeFi interactions." }), _jsx("div", { className: "pointer", onClick: () => {
|
|
33
|
+
toast.success("referral copied to clipboard");
|
|
34
|
+
navigator.clipboard.writeText(`https://rujira.network/?ref=${referral}`);
|
|
35
|
+
}, children: _jsx(Input, { value: `https://rujira.network/?ref=${referral}`, readOnly: true, label: "Click to copy" }) }), _jsx("p", { className: "fs-12 color-grey mt-2", children: "This referral link is valid until ..." }), _jsx("div", { className: "modal__footer mt-4 px-3 py-2 text-right", children: _jsx(Button, { label: "Close", onClick: hideModal }) })] })),
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
const grouped = accounts.reduce((a, v) => {
|
|
39
|
+
const current = a.find((x) => x.primary.provider === v.provider);
|
|
40
|
+
return [
|
|
41
|
+
...a.filter((x) => x.primary.provider !== v.provider),
|
|
42
|
+
current
|
|
43
|
+
? // If this is the currently selected provider, the selected account needs to be primary
|
|
44
|
+
selected?.provider === v.provider && selected.network === v.network
|
|
45
|
+
? { primary: v, other: [...current.other, current.primary] }
|
|
46
|
+
: { ...current, other: [...current.other, v] }
|
|
47
|
+
: { primary: v, other: [] },
|
|
48
|
+
];
|
|
49
|
+
}, []);
|
|
50
|
+
return (_jsx(_Fragment, { children: accounts.length === 0 ? (_jsx(ConnectAnimation, { children: _jsx(Wallets, { provider: provider, routingElement: routingElement }) })) : (_jsxs(MyAccount, { routingElement: routingElement, address: accounts[0].address, onHide: () => setShowBlur(false), children: [_jsxs(ResolveLink, { as: routingElement, to: "/portfolio", className: "balance", onMouseEnter: () => setHoverBalance(true), onMouseLeave: () => setHoverBalance(false), children: [_jsx(Fiat, { amount: 0n, symbol: "~$", padSymbol: false, className: "color-white fs-26 condensed" }), _jsx("p", { className: "fs-12 condensed color-grey mt-0.5", children: !hoverBalance
|
|
51
|
+
? i18n.t("Approximate value for selected account")
|
|
52
|
+
: i18n.t("View portfolio") })] }), grouped.map((g) => (_jsx(Address, { provider: provider, account: g.primary, other: g.other, showBlur: setShowBlur, selected: !!selected && selected.provider === g.primary.provider }, g.primary.provider))), _jsx("hr", { className: "hr hr--dark mt-1.5 mb-0" }), _jsxs("nav", { className: "actions", children: [referral && (_jsxs("button", { className: "action transparent", onClick: ReferralModal, children: [_jsx(Users, {}), _jsx("span", { children: "Referral Link" })] })), _jsxs("button", { className: "action transparent", onClick: ConnectModal, children: [_jsx(Plus, {}), _jsx("span", { children: "Connect another account" })] }), _jsxs("button", { className: "action transparent", children: [_jsx(Deposit, {}), _jsx("span", { children: "Deposit" })] }), _jsxs("button", { className: "action transparent", onClick: disconnectAll, children: [_jsx(LinkDisconnect, {}), _jsx("span", { children: "Disconnect all" })] })] }), showBlur && _jsx("div", { className: "blur" })] })) }));
|
|
53
|
+
};
|
|
54
|
+
const ConnectAnimation = ({ children }) => {
|
|
55
|
+
const [show, setShow] = useState(false);
|
|
56
|
+
const [scope, animate] = useAnimate();
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (show) {
|
|
59
|
+
animate(scope.current, { width: 98, color: "#ffffff" });
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
animate(scope.current, {
|
|
63
|
+
width: scope.current.clientHeight,
|
|
64
|
+
color: "#161721",
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}, [show]);
|
|
68
|
+
return (_jsxs("div", { id: "connect-wallet", className: "relative py-q1", onMouseOver: () => setShow(true), onMouseOut: () => setShow(false), children: [_jsxs(motion.a, { className: "rujira-header__connect", ref: scope, initial: { width: 36 }, children: [_jsx(AnimatePresence, { children: show && (_jsx(motion.div, { className: "fs-14 fw-500 condensed", initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, children: i18n.t("Connect") })) }), _jsx(LinkConnect, {})] }), _jsx(AnimatePresence, { children: show && (_jsxs(motion.div, { className: "rujira-header__popup right condensed w-32 text-center p-2", initial: { opacity: 0, marginTop: -4 }, animate: { opacity: 1, marginTop: 4 }, exit: { opacity: 0, marginTop: -4 }, children: [_jsx(i18n.p, { className: "color-white", children: "Connect Your Account" }), _jsx(i18n.small, { className: "color-grey mb-1", children: "Create or connect an existing account" }), children] })) })] }));
|
|
69
|
+
};
|
|
70
|
+
const Wallets = ({ modalLayout = false, provider, routingElement }) => {
|
|
71
|
+
const { connect } = provider;
|
|
72
|
+
const { hideModal } = useGlobalModalContext();
|
|
73
|
+
return (_jsxs("div", { className: "rujira-header__wallets", children: [_jsx("div", { className: clsx({
|
|
74
|
+
"flex w-full ai-c jc-c wrap": true,
|
|
75
|
+
"mb-1": modalLayout,
|
|
76
|
+
}), children: _jsx("button", { id: "connect-station", className: clsx({
|
|
77
|
+
"transparent block pointer big": true,
|
|
78
|
+
//"desaturate opacity-10": !window.station,
|
|
79
|
+
}),
|
|
80
|
+
//disabled={!window.station}
|
|
81
|
+
onClick: () => {
|
|
82
|
+
connect(Provider.Station).then(hideModal);
|
|
83
|
+
}, children: _jsx(StationText, {}) }) }), _jsxs("div", { className: "flex w-full ai-c jc-c wrap", children: [_jsx("button", { id: "connect-vultisig", className: clsx({
|
|
84
|
+
"transparent block pointer": true,
|
|
85
|
+
medium: modalLayout,
|
|
86
|
+
//"desaturate opacity-10": !window.vultisig,
|
|
87
|
+
}),
|
|
88
|
+
//disabled={!window.vultisig}
|
|
89
|
+
onClick: () => {
|
|
90
|
+
connect(Provider.Vultisig).then(hideModal);
|
|
91
|
+
}, children: _jsx(Vultisig, {}) }), _jsx("button", { className: clsx({
|
|
92
|
+
"transparent block pointer": true,
|
|
93
|
+
medium: modalLayout,
|
|
94
|
+
}), onClick: () => {
|
|
95
|
+
connect(Provider.Sonar).then(hideModal);
|
|
96
|
+
}, children: _jsx(Sonar, {}) }), _jsx("button", { id: "connect-keplr", className: clsx({
|
|
97
|
+
"transparent block pointer": true,
|
|
98
|
+
medium: modalLayout,
|
|
99
|
+
//"desaturate opacity-10": !window.keplr,
|
|
100
|
+
}),
|
|
101
|
+
//disabled={!window.keplr}
|
|
102
|
+
onClick: () => {
|
|
103
|
+
connect(Provider.Keplr).then(hideModal);
|
|
104
|
+
}, children: _jsx(Keplr, {}) }), _jsx("button", { id: "connect-leap", className: clsx({
|
|
105
|
+
"transparent block pointer": true,
|
|
106
|
+
medium: modalLayout,
|
|
107
|
+
// "desaturate opacity-10": !window.leap,
|
|
108
|
+
}),
|
|
109
|
+
//disabled={!window.leap}
|
|
110
|
+
onClick: () => {
|
|
111
|
+
connect(Provider.Leap).then(hideModal);
|
|
112
|
+
}, children: _jsx(Leap, {}) }), !modalLayout && _jsx("div", { className: "break" }), _jsx("button", { id: "connect-ctrl", className: clsx({
|
|
113
|
+
"transparent block pointer": true,
|
|
114
|
+
medium: modalLayout,
|
|
115
|
+
//"desaturate opacity-10": !window.xfi,
|
|
116
|
+
}),
|
|
117
|
+
//disabled={!window.xfi}
|
|
118
|
+
onClick: () => {
|
|
119
|
+
connect(Provider.Ctrl).then(hideModal);
|
|
120
|
+
}, children: _jsx(Ctrl, { className: "color-white" }) }), _jsx("button", { id: "connect-mm", className: clsx({
|
|
121
|
+
"transparent block pointer": true,
|
|
122
|
+
medium: modalLayout,
|
|
123
|
+
}), onClick: () => {
|
|
124
|
+
connect(Provider.Metamask).then(hideModal);
|
|
125
|
+
}, children: _jsx(MetaMask, {}) })] }), _jsx("hr", { className: clsx({
|
|
126
|
+
hr: true,
|
|
127
|
+
"my-1.5": !modalLayout,
|
|
128
|
+
"my-2": modalLayout,
|
|
129
|
+
}) }), _jsx(ResolveLink, { as: routingElement, to: "/ecosystem/wallets", children: "Need help deciding?" })] }));
|
|
130
|
+
};
|
|
131
|
+
const MyAccount = ({ address, children, onHide, routingElement, }) => {
|
|
132
|
+
const [show, setShow] = useState(false);
|
|
133
|
+
const [avatar] = useLocalStorage("avatar:" + address, "");
|
|
134
|
+
useEffect(() => {
|
|
135
|
+
onHide();
|
|
136
|
+
}, [show]);
|
|
137
|
+
return (_jsxs("div", { className: "relative py-q1", onMouseEnter: () => setShow(true), onMouseLeave: () => setShow(false), children: [_jsx(ResolveLink, { as: routingElement, path: "/portfolio", className: "rujira-header__pfp", style: avatar !== ""
|
|
138
|
+
? {
|
|
139
|
+
backgroundImage: `url(${avatar})`,
|
|
140
|
+
}
|
|
141
|
+
: {}, children: avatar === "" && _jsx(CircleUser, {}) }), _jsx(AnimatePresence, { children: show && (_jsx(motion.div, { className: "rujira-header__popup right condensed p-1.5 br-2", initial: { opacity: 0, marginTop: -4, right: -8 }, animate: { opacity: 1, marginTop: 4, right: -8 }, exit: { opacity: 0, marginTop: -4, right: -8 }, children: children })) })] }));
|
|
142
|
+
};
|
|
143
|
+
const ProviderIcon = ({ provider, selected, }) => {
|
|
144
|
+
switch (provider) {
|
|
145
|
+
case Provider.Keplr:
|
|
146
|
+
return selected ? (_jsx(Keplr, { className: "address__wallet" })) : (_jsx(KeplrSimple, { className: "address__wallet" }));
|
|
147
|
+
case Provider.Leap:
|
|
148
|
+
return selected ? (_jsx(Leap, { className: "address__wallet" })) : (_jsx(LeapSimple, { className: "address__wallet" }));
|
|
149
|
+
case Provider.Metamask:
|
|
150
|
+
return selected ? (_jsx(MetaMask, { className: "address__wallet" })) : (_jsx(MetaMaskSimple, { className: "address__wallet" }));
|
|
151
|
+
case Provider.Sonar:
|
|
152
|
+
return (_jsx(SonarSimple, { className: clsx({ address__wallet: true, "color-white": selected }) }));
|
|
153
|
+
case Provider.Station:
|
|
154
|
+
return _jsx(StationSimple, { className: "address__wallet", gradient: selected });
|
|
155
|
+
case Provider.Vultisig:
|
|
156
|
+
return selected ? (_jsx(Vultisig, { className: "address__wallet" })) : (_jsx(VultisigSimple, { className: "address__wallet" }));
|
|
157
|
+
case Provider.Ctrl:
|
|
158
|
+
return (_jsx(Ctrl, { className: clsx({ address__wallet: true, "color-white": selected }) }));
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
export const NetworkIcon = ({ network, className, }) => {
|
|
162
|
+
switch (network) {
|
|
163
|
+
case Network.Avalanche:
|
|
164
|
+
return _jsx(NetworkIcons.Avalanche, { className: className });
|
|
165
|
+
case Network.Bitcoin:
|
|
166
|
+
return _jsx(NetworkIcons.Bitcoin, { className: className });
|
|
167
|
+
case Network.BitcoinCash:
|
|
168
|
+
return _jsx(NetworkIcons.BitcoinCash, { className: className });
|
|
169
|
+
case Network.Bsc:
|
|
170
|
+
return _jsx(NetworkIcons.BinanceSmartChain, { className: className });
|
|
171
|
+
case Network.Dogecoin:
|
|
172
|
+
return _jsx(NetworkIcons.Doge, { className: className });
|
|
173
|
+
case Network.Ethereum:
|
|
174
|
+
return _jsx(NetworkIcons.Ethereum, { className: className });
|
|
175
|
+
case Network.Gaia:
|
|
176
|
+
return _jsx(NetworkIcons.Cosmos, { className: className });
|
|
177
|
+
case Network.Kujira:
|
|
178
|
+
return _jsx(NetworkIcons.Kujira, { className: className });
|
|
179
|
+
case Network.Litecoin:
|
|
180
|
+
return _jsx(NetworkIcons.Litecoin, { className: className });
|
|
181
|
+
case Network.Thorchain:
|
|
182
|
+
return _jsx(NetworkIcons.Thorchain, { className: className });
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
const Address = ({ account, showBlur, selected, other, provider }) => {
|
|
186
|
+
const [showNetworkSelect, setShowNetworkSelect] = useState(false);
|
|
187
|
+
const { select, disconnect } = provider;
|
|
188
|
+
const networks = [account.network, ...other.map((x) => x.network)].sort((a, b) => a.localeCompare(b));
|
|
189
|
+
return (_jsxs("div", { className: clsx({
|
|
190
|
+
"flex ai-c px-1 address": true,
|
|
191
|
+
"address--selected": selected,
|
|
192
|
+
}), children: [_jsx(ProviderIcon, { provider: account.provider, selected: selected }), _jsxs("p", { className: "address__address pointer", onClick: () => {
|
|
193
|
+
if (selected) {
|
|
194
|
+
toast.success("address copied to clipboard");
|
|
195
|
+
navigator.clipboard.writeText(account.address);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
select(account);
|
|
199
|
+
}
|
|
200
|
+
}, children: [account.address.substring(0, 10), "...", account.address.slice(-12)] }), selected && (_jsxs("div", { className: "relative ml-a mr-1", children: [_jsxs("button", { className: "address__network transparent", onClick: () => {
|
|
201
|
+
setShowNetworkSelect(true);
|
|
202
|
+
showBlur(true);
|
|
203
|
+
}, children: [_jsx(NetworkIcon, { network: account.network }), _jsx(AngleDown, {})] }), showNetworkSelect && (_jsx("div", { className: "address__network-select", children: networks.map((a) => (_jsxs("button", { className: clsx({
|
|
204
|
+
transparent: true,
|
|
205
|
+
selected: account.network === a,
|
|
206
|
+
}), onClick: () => {
|
|
207
|
+
select({ network: a, provider: account.provider });
|
|
208
|
+
showBlur(false);
|
|
209
|
+
setShowNetworkSelect(false);
|
|
210
|
+
}, children: [_jsx(NetworkIcon, { network: a }), _jsx("span", { children: networkLabel(a) })] }, a))) }))] })), _jsx(LinkDisconnect, { className: "address__disconnect", onClick: () => disconnect(account.provider) })] }));
|
|
211
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import clsx from "clsx";
|
|
3
|
+
import { AnimatePresence, motion } from "motion/react";
|
|
4
|
+
import { useEffect, useState } from "react";
|
|
5
|
+
import { useWindowSize } from "../../hooks/useWindowSize";
|
|
6
|
+
import { i18n } from "../../i18n";
|
|
7
|
+
import { AngleDown, Book, Building, Chart, ChartUp, ChartUpDown, Earth, External, Gavel, MoneyTransfer, NFT, PieChart, Seedling, Stake, Swap, Terminal, } from "../icons/Icons";
|
|
8
|
+
import { RujiraLogo } from "../logos/RujiraLogo";
|
|
9
|
+
import { Accounts } from "./Accounts";
|
|
10
|
+
import { QuickLauncher } from "./QuickLauncher";
|
|
11
|
+
import { ResolveLink } from "./ResolveLink";
|
|
12
|
+
export * from "./Accounts";
|
|
13
|
+
export * from "./QuickLauncher";
|
|
14
|
+
export const Header = ({ accountProvider, className, domain = "", routingElement, }) => {
|
|
15
|
+
return (_jsxs(Container, { className: className, children: [_jsx(ResolveLink, { as: routingElement, to: "/", children: _jsx(Logo, {}) }), _jsx(MobileNav, { domain: domain, routingElement: routingElement }), _jsx(MainNav, { domain: domain, accountProvider: accountProvider, routingElement: routingElement }), _jsxs("div", { className: "ml-a mr-0 flex ai-c", children: [_jsx(QuickLauncher, { domain: domain || "", routingElement: routingElement }), _jsx(Accounts, { provider: accountProvider, routingElement: routingElement })] })] }));
|
|
16
|
+
};
|
|
17
|
+
export const Container = ({ children, className, }) => {
|
|
18
|
+
return (_jsx("div", { className: clsx({
|
|
19
|
+
"rujira-header": true,
|
|
20
|
+
[`${className}`]: className,
|
|
21
|
+
}), children: children }));
|
|
22
|
+
};
|
|
23
|
+
export const Logo = () => {
|
|
24
|
+
const size = useWindowSize();
|
|
25
|
+
return (_jsx(RujiraLogo, { textColor: "#fff", className: "rujira-header__logo", showText: size.width >= 1024, animate: true }));
|
|
26
|
+
};
|
|
27
|
+
export const MainNav = ({ domain, accountProvider, routingElement }) => {
|
|
28
|
+
const { accounts } = accountProvider;
|
|
29
|
+
const [showTrade, setShowTrade] = useState(false);
|
|
30
|
+
const [showEarn, setShowEarn] = useState(false);
|
|
31
|
+
const [showMore, setShowMore] = useState(false);
|
|
32
|
+
const [showDiscover, setShowDiscover] = useState(false);
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
if (showTrade || showMore || showDiscover || showEarn) {
|
|
35
|
+
const popup = document.querySelector(".rujira-header__popup");
|
|
36
|
+
if (popup) {
|
|
37
|
+
const box = popup.getBoundingClientRect();
|
|
38
|
+
const body = document.body;
|
|
39
|
+
const docEl = document.documentElement;
|
|
40
|
+
const scrollLeft = window.scrollX || docEl.scrollLeft || body.scrollLeft;
|
|
41
|
+
const clientLeft = docEl.clientLeft || body.clientLeft || 0;
|
|
42
|
+
const left = box.left + scrollLeft - clientLeft;
|
|
43
|
+
if (left + box.width > window.innerWidth - 20) {
|
|
44
|
+
const diff = Math.round(left + box.width - window.innerWidth + 20);
|
|
45
|
+
popup.style.transform = "translateX(-" + diff + "px)";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}, [showTrade, showMore, showDiscover, showEarn]);
|
|
50
|
+
return (_jsxs("nav", { className: "rujira-header__nav", children: [accounts.length > 0 && (_jsx(ResolveLink, { as: routingElement, domain: domain, to: "/portfolio", children: i18n.t("Portfolio") })), _jsxs("span", { onMouseOver: () => setShowTrade(true), onMouseOut: () => setShowTrade(false), children: [i18n.t("Trade"), _jsx(AngleDown, {}), _jsx(AnimatePresence, { children: showTrade && (_jsx(SubTrade, { domain: domain, routingElement: routingElement })) })] }), _jsxs("span", { onMouseOver: () => setShowEarn(true), onMouseOut: () => setShowEarn(false), children: [i18n.t("Earn"), _jsx(AngleDown, {}), _jsx(AnimatePresence, { children: showEarn && (_jsx(SubEarn, { domain: domain, routingElement: routingElement })) })] }), _jsxs("span", { onMouseOver: () => setShowMore(true), onMouseOut: () => setShowMore(false), children: [i18n.t("Market"), _jsx(AngleDown, {}), _jsx(AnimatePresence, { children: showMore && (_jsx(SubMore, { domain: domain, routingElement: routingElement })) })] }), _jsxs("span", { onMouseOver: () => setShowDiscover(true), onMouseOut: () => setShowDiscover(false), children: [i18n.t("Discover"), _jsx(AngleDown, {}), _jsx(AnimatePresence, { children: showDiscover && (_jsx(SubDiscover, { domain: domain, routingElement: routingElement })) })] })] }));
|
|
51
|
+
};
|
|
52
|
+
export const MobileNav = ({ domain, routingElement, }) => {
|
|
53
|
+
const [showMobile, setShowMobile] = useState(false);
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
if (showMobile) {
|
|
56
|
+
document.body.style.overflow = "hidden";
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
document.body.style.overflow = "auto";
|
|
60
|
+
}
|
|
61
|
+
}, [showMobile]);
|
|
62
|
+
return (_jsxs(_Fragment, { children: [_jsx("button", { className: "rujira-header__hamburger", onClick: () => setShowMobile(true), children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", children: _jsx("path", { d: "M0 64H448v48H0V64zM0 224H448v48H0V224zM448 384v48H0V384H448z", fill: "currentColor" }) }) }), _jsx(AnimatePresence, { children: showMobile && (_jsxs(motion.nav, { className: "rujira-header__mobile-nav", initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, children: [_jsx("button", { className: "rujira-header__mobile-close", onClick: () => setShowMobile(false), children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 384 512", children: _jsx("path", { fill: "currentColor", d: "M345 137l17-17L328 86.1l-17 17-119 119L73 103l-17-17L22.1 120l17 17 119 119L39 375l-17 17L56 425.9l17-17 119-119L311 409l17 17L361.9 392l-17-17-119-119L345 137z" }) }) }), _jsx(MobileMenu, { domain: domain, routingElement: routingElement, setShowMobile: setShowMobile })] })) })] }));
|
|
63
|
+
};
|
|
64
|
+
const Popup = ({ children }) => (_jsx(motion.div, { className: "rujira-header__popup sub-nav fw-400 p-2", initial: { opacity: 0, marginTop: -4 }, animate: { opacity: 1, marginTop: 0 }, exit: { opacity: 0, marginTop: -4 }, children: children }));
|
|
65
|
+
const SubTrade = ({ domain, routingElement }) => (_jsx(Popup, { children: _jsxs("div", { className: "row wrap pad w-60 mt-1", children: [_jsxs(ResolveLink, { as: routingElement, domain: domain, to: "/swap", className: "col-6 flex", children: [_jsx(Swap, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Token Swap" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Swap tokens at the best available rate" })] })] }), _jsxs(ResolveLink, { as: routingElement, domain: domain, to: "/trade", className: "col-6 flex", children: [_jsx(Chart, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Spot Trading" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Buy and sell on the spot market without slippage" })] })] }), _jsxs(ResolveLink, { as: routingElement, domain: domain, to: "/options", className: "col-6 flex mt-3", children: [_jsx(ChartUp, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Options" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Designed to simplify options trading" })] })] }), _jsxs(ResolveLink, { as: "a", href: "http://perps.rujira.network/perps", target: "_blank", className: "col-6 flex mt-3", children: [_jsx(ChartUpDown, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Perps" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Buy and sell perpetual futures contracts" })] })] })] }) }));
|
|
66
|
+
const SubEarn = ({ domain, routingElement }) => (_jsx(Popup, { children: _jsxs("div", { className: "row wrap pad w-60 mt-1", children: [_jsxs(ResolveLink, { as: routingElement, domain: domain, to: "/stake", className: "col-6 flex ai-s", children: [_jsx(Stake, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Stake" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Earn a percentage of fees and secure the network" })] })] }), _jsxs(ResolveLink, { as: routingElement, domain: domain, to: "/provide", className: "col-6 flex ai-s", children: [_jsx(Building, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Liquidity Pools" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Multi-strategy automated market maker pools" })] })] }), _jsxs(ResolveLink, { as: routingElement, domain: domain, to: "/money-market", className: "col-6 flex mt-3 ai-s", children: [_jsx(MoneyTransfer, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Lend & Borrow" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Earn yield by lending your tokens to others" })] })] }), _jsxs(ResolveLink, { as: routingElement, domain: domain, to: "/liquidate", className: "col-6 flex mt-3", children: [_jsx(Gavel, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Liquidate" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Beat the bots and bid on liquidated collateral" })] })] })] }) }));
|
|
67
|
+
const SubMore = ({ domain, routingElement }) => (_jsx(Popup, { children: _jsxs("div", { className: "row wrap pad w-60 mt-1", children: [_jsxs(ResolveLink, { as: routingElement, domain: domain, to: "/ventures", className: "col-6 flex ai-s", children: [_jsx(Seedling, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600 flex ai-c", children: "Ventures" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Early access to promising protocols & opportunities" })] })] }), _jsxs(ResolveLink, { as: routingElement, domain: domain, to: "/nfts", className: "col-6 flex ai-s", children: [_jsx(NFT, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600 flex ai-c", children: "Collections (Gojira)" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "A sustainable NFT marketplace" })] })] })] }) }));
|
|
68
|
+
const SubDiscover = ({ domain, routingElement }) => (_jsx(Popup, { children: _jsxs("div", { className: "row wrap pad w-60 mt-1", children: [_jsxs(ResolveLink, { as: routingElement, domain: domain, to: "/ecosystem", className: "col-6 flex ai-s", children: [_jsx(Earth, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Ecosystem" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Protocols, products and services calling Rujira their home" })] })] }), _jsxs(ResolveLink, { as: routingElement, domain: domain, to: "/dashboard", className: "col-6 flex ai-s", children: [_jsx(PieChart, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Token Analytics" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Discover RUJI tokenomics and analytics" })] })] }), _jsxs(ResolveLink, { as: routingElement, domain: domain, to: "/developers", className: "col-6 flex mt-3", children: [_jsx(Terminal, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Developers" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Rujira is built for builders, get started here." })] })] }), _jsxs("a", { href: "https://docs.rujira.network/", target: "_blank", className: "col-6 flex mt-3 ai-s", children: [_jsx(Book, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsxs(i18n.h4, { className: "fs-14 fw-600 flex ai-c", children: ["Documentation ", _jsx(External, { className: "h-1.5 w-a ml-1" })] }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Dive deep into the Rujira network" })] })] })] }) }));
|
|
69
|
+
const MobileMenu = ({ domain, routingElement, setShowMobile }) => (_jsxs(_Fragment, { children: [_jsxs(ResolveLink, { onClick: () => setShowMobile && setShowMobile(false), as: routingElement, domain: domain, to: "/swap", className: "mt-3 flex", children: [_jsx(Swap, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Token Swap" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Swap tokens at the best available rate" })] })] }), _jsxs(ResolveLink, { onClick: () => setShowMobile && setShowMobile(false), as: routingElement, domain: domain, to: "/trade", className: "mt-3 flex", children: [_jsx(Chart, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Spot Trading" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Buy and sell on the spot market without slippage" })] })] }), _jsxs(ResolveLink, { onClick: () => setShowMobile && setShowMobile(false), as: routingElement, domain: domain, to: "/options", className: "flex mt-3", children: [_jsx(ChartUp, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Options" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Designed to simplify options trading" })] })] }), _jsxs(ResolveLink, { onClick: () => setShowMobile && setShowMobile(false), as: "a", href: "http://perps.rujira.network/perps", target: "_blank", className: "mt-3 flex", children: [_jsx(ChartUpDown, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Futures" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Buy and sell perpetual futures contracts" })] })] }), _jsxs(ResolveLink, { onClick: () => setShowMobile && setShowMobile(false), as: routingElement, domain: domain, to: "/stake", className: "mt-3 flex ai-s", children: [_jsx(Stake, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Stake" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Earn a percentage of fees and secure the network" })] })] }), _jsxs(ResolveLink, { onClick: () => setShowMobile && setShowMobile(false), as: routingElement, domain: domain, to: "/provide", className: "flex mt-3 ai-s", children: [_jsx(Building, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Liquidity Pools" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Multi-strategy automated market maker pools" })] })] }), _jsxs(ResolveLink, { onClick: () => setShowMobile && setShowMobile(false), as: routingElement, domain: domain, to: "/money-market", className: "flex mt-3 ai-s", children: [_jsx(MoneyTransfer, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Lend & Borrow" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Earn yield by lending your tokens to others" })] })] }), _jsxs(ResolveLink, { onClick: () => setShowMobile && setShowMobile(false), as: routingElement, domain: domain, to: "/liquidate", className: "flex mt-3", children: [_jsx(Gavel, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Liquidate" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Beat the bots and bid on liquidated collateral" })] })] }), _jsxs(ResolveLink, { onClick: () => setShowMobile && setShowMobile(false), as: routingElement, domain: domain, to: "/ventures", className: "flex mt-3 ai-s", children: [_jsx(Seedling, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600 flex ai-c", children: "Ventures" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Early access to promising protocols and opportunities" })] })] }), _jsxs(ResolveLink, { onClick: () => setShowMobile && setShowMobile(false), as: routingElement, domain: domain, to: "/nfts", className: "flex mt-3 ai-s", children: [_jsx(NFT, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600 flex ai-c", children: "Collections (Gojira)" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "A sustainable NFT marketplace" })] })] }), _jsxs(ResolveLink, { onClick: () => setShowMobile && setShowMobile(false), as: routingElement, domain: domain, to: "/ecosystem", className: "mt-3 flex ai-s", children: [_jsx(Earth, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Ecosystem" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Protocols, products and services calling Rujira their home" })] })] }), _jsxs(ResolveLink, { onClick: () => setShowMobile && setShowMobile(false), as: routingElement, domain: domain, to: "/dashboard", className: "mt-3 flex ai-s", children: [_jsx(PieChart, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Token Analytics" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Discover RUJI tokenomics and analytics" })] })] }), _jsxs(ResolveLink, { onClick: () => setShowMobile && setShowMobile(false), as: routingElement, domain: domain, to: "/developers", className: "flex mt-3", children: [_jsx(Terminal, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Developers" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Rujira is built for builders, get started here." })] })] }), _jsxs("a", { href: "https://docs.rujira.network/", target: "_blank", className: "flex mt-3 ai-s", children: [_jsx(Book, { className: "color-grey h-3.5 w-a block mr-2 no-shrink mt-0" }), _jsxs("div", { children: [_jsx(i18n.h4, { className: "fs-14 fw-600", children: "Documentation" }), _jsx(i18n.p, { className: "fs-12 mt-0.5", children: "Dive deep into the Rujira network" })] })] })] }));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { AnimatePresence, motion } from "motion/react";
|
|
3
|
+
import { Grid } from "../icons/Icons";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import { ResolveLink } from "./ResolveLink";
|
|
6
|
+
import { i18n } from "../../i18n";
|
|
7
|
+
export const QuickLauncher = ({ domain, routingElement, }) => {
|
|
8
|
+
const [showMenu, setShowMenu] = useState(false);
|
|
9
|
+
return (_jsxs("div", { className: "rujira-header__quick", onMouseOver: () => setShowMenu(true), onMouseOut: () => setShowMenu(false), children: [_jsx(Grid, {}), _jsx(AnimatePresence, { children: showMenu && (_jsxs(motion.div, { className: "rujira-header__popup sub-nav fw-400 px-2 py-1.5", initial: { opacity: 0, marginTop: -4 }, animate: { opacity: 1, marginTop: 0 }, exit: { opacity: 0, marginTop: -4 }, children: [_jsx(ResolveLink, { domain: domain, as: routingElement, to: "/buy", children: _jsx(i18n.span, { className: "fs-12 fw-500", children: "Buy Crypto" }) }), _jsx(ResolveLink, { domain: domain, as: routingElement, to: "/swap", children: _jsx(i18n.span, { className: "fs-12 fw-500", children: "Token Swap" }) }), _jsx(ResolveLink, { domain: domain, as: routingElement, to: "/trade", children: _jsx(i18n.span, { className: "fs-12 fw-500", children: "Spot Trading" }) }), _jsx(ResolveLink, { domain: domain, as: routingElement, to: "/options", children: _jsx(i18n.span, { className: "fs-12 fw-500", children: "Options" }) }), _jsx(ResolveLink, { domain: domain, as: routingElement, to: "/perps", children: _jsx(i18n.span, { className: "fs-12 fw-500", children: "Perps" }) }), _jsx(ResolveLink, { domain: domain, as: routingElement, to: "/stake", children: _jsx(i18n.span, { className: "fs-12 fw-500", children: "Stake" }) }), _jsx(ResolveLink, { domain: domain, as: routingElement, to: "/lp", children: _jsx(i18n.span, { className: "fs-12 fw-500", children: "Liquidity Pools" }) }), _jsx(ResolveLink, { domain: domain, as: routingElement, to: "/money-market", children: _jsx(i18n.span, { className: "fs-12 fw-500", children: "Lend & Borrow" }) }), _jsx(ResolveLink, { domain: domain, as: routingElement, to: "/liquidate", children: _jsx(i18n.span, { className: "fs-12 fw-500", children: "Liquidate" }) }), _jsx(ResolveLink, { domain: domain, as: routingElement, to: "/ventures", children: _jsx(i18n.span, { className: "fs-12 fw-500", children: "Ventures" }) }), _jsx(ResolveLink, { domain: domain, as: routingElement, to: "/nfts", children: _jsx(i18n.span, { className: "fs-12 fw-500", children: "Collections" }) })] })) })] }));
|
|
10
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef, } from "react";
|
|
3
|
+
const fixedForwardRef = forwardRef;
|
|
4
|
+
export const UnwrappedAnyComponent = (props, ref) => {
|
|
5
|
+
const { as: Comp = "a", children, domain, ...rest } = props;
|
|
6
|
+
if (!domain ||
|
|
7
|
+
window.location.hostname === "rujira.network" ||
|
|
8
|
+
domain === "") {
|
|
9
|
+
return (_jsx(Comp, { ...rest, ref: ref, children: children }));
|
|
10
|
+
}
|
|
11
|
+
return (_jsx("a", { href: props.to || props.href, ...rest, children: children }));
|
|
12
|
+
};
|
|
13
|
+
export const ResolveLink = fixedForwardRef(UnwrappedAnyComponent);
|