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.
Files changed (303) hide show
  1. package/.eslintrc.cjs +21 -0
  2. package/.tool-versions +1 -0
  3. package/i18n/.github/workflows/validate.yml +13 -0
  4. package/i18n/README.md +7 -0
  5. package/i18n/translations/template.json +448 -0
  6. package/i18n/update-template.js +19 -0
  7. package/i18n/validate.js +10 -0
  8. package/lib/esm/i18n/translations/template.json +448 -0
  9. package/lib/esm/src/components/buttons/Button.js +37 -0
  10. package/lib/esm/src/components/buttons/Popout.js +56 -0
  11. package/lib/esm/src/components/buttons/TxButton.js +42 -0
  12. package/lib/esm/src/components/buttons/__Popout.js +34 -0
  13. package/lib/esm/src/components/cards/Card.js +8 -0
  14. package/lib/esm/src/components/cards/GradientCard.js +8 -0
  15. package/lib/esm/src/components/footer/Footer.js +11 -0
  16. package/lib/esm/src/components/header/Accounts.js +211 -0
  17. package/lib/esm/src/components/header/Header.js +69 -0
  18. package/lib/esm/src/components/header/QuickLauncher.js +10 -0
  19. package/lib/esm/src/components/header/ResolveLink.js +13 -0
  20. package/lib/esm/src/components/icons/IconDenom.js +358 -0
  21. package/lib/esm/src/components/icons/Icons.js +228 -0
  22. package/lib/esm/src/components/icons/Networks.js +32 -0
  23. package/lib/esm/src/components/icons/Wallets.js +62 -0
  24. package/lib/esm/src/components/inputs/Checkbox.js +12 -0
  25. package/lib/esm/src/components/inputs/DecimalInput.js +35 -0
  26. package/lib/esm/src/components/inputs/DenomInput.js +22 -0
  27. package/lib/esm/src/components/inputs/DenomSelect.js +66 -0
  28. package/lib/esm/src/components/inputs/Input.js +25 -0
  29. package/lib/esm/src/components/inputs/Numeric.js +18 -0
  30. package/lib/esm/src/components/inputs/Radio.js +12 -0
  31. package/lib/esm/src/components/inputs/Select.js +29 -0
  32. package/lib/esm/src/components/inputs/Textarea.js +25 -0
  33. package/lib/esm/src/components/inputs/Toggle.js +13 -0
  34. package/lib/esm/src/components/loader/Loader.js +3 -0
  35. package/lib/esm/src/components/logos/RujiraLogo.js +2 -0
  36. package/lib/esm/src/components/notices/Warning.js +10 -0
  37. package/lib/esm/src/components/numbers/Decimal.js +14 -0
  38. package/lib/esm/src/components/numbers/Fiat.js +19 -0
  39. package/lib/esm/src/components/progress/Progress.js +9 -0
  40. package/lib/esm/src/components/slider/Slider.js +5 -0
  41. package/lib/esm/src/context/Affiliate.js +34 -0
  42. package/lib/esm/src/context/GlobalModal.js +35 -0
  43. package/lib/esm/src/d.js +1 -0
  44. package/lib/esm/src/helpers/index.js +65 -0
  45. package/lib/esm/src/helpers/number.js +8 -0
  46. package/lib/esm/src/hooks/useClickOutside.js +19 -0
  47. package/lib/esm/src/hooks/useLocalStorage.js +12 -0
  48. package/lib/esm/src/hooks/useQueryParam.js +31 -0
  49. package/lib/esm/src/hooks/useWindowSize.js +19 -0
  50. package/lib/esm/src/i18n/i18n.js +90 -0
  51. package/lib/esm/src/i18n/index.js +1 -0
  52. package/lib/esm/src/index.js +38 -0
  53. package/lib/esm/src/services/account.js +42 -0
  54. package/lib/esm/tsconfig.tsbuildinfo +1 -0
  55. package/package.json +47 -0
  56. package/src/assets/ghost-tokens/akt.png +0 -0
  57. package/src/assets/ghost-tokens/ampkuji.png +0 -0
  58. package/src/assets/ghost-tokens/arb.png +0 -0
  59. package/src/assets/ghost-tokens/atom.png +0 -0
  60. package/src/assets/ghost-tokens/axlusdc.png +0 -0
  61. package/src/assets/ghost-tokens/cro.png +0 -0
  62. package/src/assets/ghost-tokens/dot.png +0 -0
  63. package/src/assets/ghost-tokens/fet.png +0 -0
  64. package/src/assets/ghost-tokens/fuzn.png +0 -0
  65. package/src/assets/ghost-tokens/glmr.png +0 -0
  66. package/src/assets/ghost-tokens/gpaxg.png +0 -0
  67. package/src/assets/ghost-tokens/inj.png +0 -0
  68. package/src/assets/ghost-tokens/juno.png +0 -0
  69. package/src/assets/ghost-tokens/kuji.png +0 -0
  70. package/src/assets/ghost-tokens/luna.png +0 -0
  71. package/src/assets/ghost-tokens/lunc.png +0 -0
  72. package/src/assets/ghost-tokens/mnta.png +0 -0
  73. package/src/assets/ghost-tokens/ntrn.png +0 -0
  74. package/src/assets/ghost-tokens/osmo.png +0 -0
  75. package/src/assets/ghost-tokens/scrt.png +0 -0
  76. package/src/assets/ghost-tokens/shd.png +0 -0
  77. package/src/assets/ghost-tokens/sol.png +0 -0
  78. package/src/assets/ghost-tokens/stars.png +0 -0
  79. package/src/assets/ghost-tokens/statom.png +0 -0
  80. package/src/assets/ghost-tokens/stosmo.png +0 -0
  81. package/src/assets/ghost-tokens/usdc.png +0 -0
  82. package/src/assets/ghost-tokens/usk.png +0 -0
  83. package/src/assets/ghost-tokens/wavax.png +0 -0
  84. package/src/assets/ghost-tokens/wbnb.png +0 -0
  85. package/src/assets/ghost-tokens/wbtc.png +0 -0
  86. package/src/assets/ghost-tokens/weth.png +0 -0
  87. package/src/assets/ghost-tokens/wftm.png +0 -0
  88. package/src/assets/ghost-tokens/wglmr.png +0 -0
  89. package/src/assets/ghost-tokens/wmatic.png +0 -0
  90. package/src/assets/mono.woff +0 -0
  91. package/src/assets/tokens/acre.png +0 -0
  92. package/src/assets/tokens/akt.png +0 -0
  93. package/src/assets/tokens/amber.png +0 -0
  94. package/src/assets/tokens/ampkuji.png +0 -0
  95. package/src/assets/tokens/ampluna.png +0 -0
  96. package/src/assets/tokens/ampmnta.png +0 -0
  97. package/src/assets/tokens/ampwhale.png +0 -0
  98. package/src/assets/tokens/andr.png +0 -0
  99. package/src/assets/tokens/aqla.png +0 -0
  100. package/src/assets/tokens/aqua.png +0 -0
  101. package/src/assets/tokens/arb.png +0 -0
  102. package/src/assets/tokens/arch.png +0 -0
  103. package/src/assets/tokens/astro.png +0 -0
  104. package/src/assets/tokens/atom.png +0 -0
  105. package/src/assets/tokens/auto.png +0 -0
  106. package/src/assets/tokens/avax.png +0 -0
  107. package/src/assets/tokens/axl.png +0 -0
  108. package/src/assets/tokens/axlusdc.png +0 -0
  109. package/src/assets/tokens/axlusdt.png +0 -0
  110. package/src/assets/tokens/bad.png +0 -0
  111. package/src/assets/tokens/bch.png +0 -0
  112. package/src/assets/tokens/bfit.png +0 -0
  113. package/src/assets/tokens/bnb.png +0 -0
  114. package/src/assets/tokens/btc.png +0 -0
  115. package/src/assets/tokens/cheq.png +0 -0
  116. package/src/assets/tokens/cmdx.png +0 -0
  117. package/src/assets/tokens/cmst.png +0 -0
  118. package/src/assets/tokens/cnto.png +0 -0
  119. package/src/assets/tokens/core.png +0 -0
  120. package/src/assets/tokens/crbrus.png +0 -0
  121. package/src/assets/tokens/cre.png +0 -0
  122. package/src/assets/tokens/cro.png +0 -0
  123. package/src/assets/tokens/cub.png +0 -0
  124. package/src/assets/tokens/dai.png +0 -0
  125. package/src/assets/tokens/default.png +0 -0
  126. package/src/assets/tokens/doge.png +0 -0
  127. package/src/assets/tokens/dot.png +0 -0
  128. package/src/assets/tokens/dvpn.png +0 -0
  129. package/src/assets/tokens/dydx.png +0 -0
  130. package/src/assets/tokens/dym.png +0 -0
  131. package/src/assets/tokens/eth.png +0 -0
  132. package/src/assets/tokens/evmos.png +0 -0
  133. package/src/assets/tokens/flix.png +0 -0
  134. package/src/assets/tokens/frnz.png +0 -0
  135. package/src/assets/tokens/fury.legacy.png +0 -0
  136. package/src/assets/tokens/fury.png +0 -0
  137. package/src/assets/tokens/fuzn.png +0 -0
  138. package/src/assets/tokens/glmr.png +0 -0
  139. package/src/assets/tokens/glto.png +0 -0
  140. package/src/assets/tokens/gpaxg.png +0 -0
  141. package/src/assets/tokens/grav.png +0 -0
  142. package/src/assets/tokens/inj.png +0 -0
  143. package/src/assets/tokens/jkl.png +0 -0
  144. package/src/assets/tokens/juno.png +0 -0
  145. package/src/assets/tokens/kart.png +0 -0
  146. package/src/assets/tokens/kuji.png +0 -0
  147. package/src/assets/tokens/kune.png +0 -0
  148. package/src/assets/tokens/link.png +0 -0
  149. package/src/assets/tokens/loop.png +0 -0
  150. package/src/assets/tokens/ltc.png +0 -0
  151. package/src/assets/tokens/luna.png +0 -0
  152. package/src/assets/tokens/lunc.png +0 -0
  153. package/src/assets/tokens/lvn.png +0 -0
  154. package/src/assets/tokens/mars.png +0 -0
  155. package/src/assets/tokens/mnta.png +0 -0
  156. package/src/assets/tokens/mntl.png +0 -0
  157. package/src/assets/tokens/nami.png +0 -0
  158. package/src/assets/tokens/nausd.png +0 -0
  159. package/src/assets/tokens/nbtc.png +0 -0
  160. package/src/assets/tokens/neok.png +0 -0
  161. package/src/assets/tokens/newt.png +0 -0
  162. package/src/assets/tokens/nstk.png +0 -0
  163. package/src/assets/tokens/ntrn.png +0 -0
  164. package/src/assets/tokens/odin.png +0 -0
  165. package/src/assets/tokens/osmo.png +0 -0
  166. package/src/assets/tokens/pepe.png +0 -0
  167. package/src/assets/tokens/plnk.png +0 -0
  168. package/src/assets/tokens/plq.png +0 -0
  169. package/src/assets/tokens/qcaqla.png +0 -0
  170. package/src/assets/tokens/qcatom.png +0 -0
  171. package/src/assets/tokens/qcfuzn.png +0 -0
  172. package/src/assets/tokens/qckuji.png +0 -0
  173. package/src/assets/tokens/qcmnta.png +0 -0
  174. package/src/assets/tokens/rac.legacy.png +0 -0
  175. package/src/assets/tokens/rac.png +0 -0
  176. package/src/assets/tokens/ratom.png +0 -0
  177. package/src/assets/tokens/regen.png +0 -0
  178. package/src/assets/tokens/rfuzn.png +0 -0
  179. package/src/assets/tokens/rio.png +0 -0
  180. package/src/assets/tokens/rkuji.png +0 -0
  181. package/src/assets/tokens/roar.png +0 -0
  182. package/src/assets/tokens/ruji.png +0 -0
  183. package/src/assets/tokens/rune.png +0 -0
  184. package/src/assets/tokens/sayve.png +0 -0
  185. package/src/assets/tokens/scrt.png +0 -0
  186. package/src/assets/tokens/shd.legacy.png +0 -0
  187. package/src/assets/tokens/shd.png +0 -0
  188. package/src/assets/tokens/silk.png +0 -0
  189. package/src/assets/tokens/sol.png +0 -0
  190. package/src/assets/tokens/somm.png +0 -0
  191. package/src/assets/tokens/stars.png +0 -0
  192. package/src/assets/tokens/statom.png +0 -0
  193. package/src/assets/tokens/stinj.png +0 -0
  194. package/src/assets/tokens/stluna.png +0 -0
  195. package/src/assets/tokens/stosmo.png +0 -0
  196. package/src/assets/tokens/strd.png +0 -0
  197. package/src/assets/tokens/swth.png +0 -0
  198. package/src/assets/tokens/tia.png +0 -0
  199. package/src/assets/tokens/tori.png +0 -0
  200. package/src/assets/tokens/umee.png +0 -0
  201. package/src/assets/tokens/uni.png +0 -0
  202. package/src/assets/tokens/usdc.png +0 -0
  203. package/src/assets/tokens/usk.png +0 -0
  204. package/src/assets/tokens/usk_black.png +0 -0
  205. package/src/assets/tokens/ustc.png +0 -0
  206. package/src/assets/tokens/wavax.png +0 -0
  207. package/src/assets/tokens/wbtc.png +0 -0
  208. package/src/assets/tokens/wftm.png +0 -0
  209. package/src/assets/tokens/whale.png +0 -0
  210. package/src/assets/tokens/whlocal.png +0 -0
  211. package/src/assets/tokens/wink.png +0 -0
  212. package/src/assets/tokens/wmatic.png +0 -0
  213. package/src/assets/tokens/wsteth.png +0 -0
  214. package/src/assets/tokens/wtao.png +0 -0
  215. package/src/assets/tokens/xastro.png +0 -0
  216. package/src/assets/tokens/yieldeth.png +0 -0
  217. package/src/assets/tokens/yum.png +0 -0
  218. package/src/components/buttons/Button.tsx +80 -0
  219. package/src/components/buttons/Popout.tsx +74 -0
  220. package/src/components/buttons/TxButton.tsx +103 -0
  221. package/src/components/buttons/__Popout.tsx +56 -0
  222. package/src/components/cards/Card.tsx +17 -0
  223. package/src/components/cards/GradientCard.tsx +17 -0
  224. package/src/components/footer/Footer.tsx +117 -0
  225. package/src/components/header/Accounts.tsx +1021 -0
  226. package/src/components/header/Header.tsx +745 -0
  227. package/src/components/header/QuickLauncher.tsx +67 -0
  228. package/src/components/header/ResolveLink.tsx +81 -0
  229. package/src/components/icons/IconDenom.tsx +400 -0
  230. package/src/components/icons/Icons.tsx +686 -0
  231. package/src/components/icons/Networks.tsx +687 -0
  232. package/src/components/icons/Wallets.tsx +947 -0
  233. package/src/components/inputs/Checkbox.tsx +35 -0
  234. package/src/components/inputs/DecimalInput.tsx +72 -0
  235. package/src/components/inputs/DenomInput.tsx +65 -0
  236. package/src/components/inputs/DenomSelect.tsx +178 -0
  237. package/src/components/inputs/Input.tsx +66 -0
  238. package/src/components/inputs/Numeric.tsx +49 -0
  239. package/src/components/inputs/Radio.tsx +33 -0
  240. package/src/components/inputs/Select.tsx +69 -0
  241. package/src/components/inputs/Textarea.tsx +65 -0
  242. package/src/components/inputs/Toggle.tsx +38 -0
  243. package/src/components/loader/Loader.tsx +103 -0
  244. package/src/components/logos/RujiraLogo.tsx +83 -0
  245. package/src/components/notices/Warning.tsx +42 -0
  246. package/src/components/numbers/Decimal.tsx +43 -0
  247. package/src/components/numbers/Fiat.tsx +56 -0
  248. package/src/components/progress/Progress.tsx +40 -0
  249. package/src/components/slider/Slider.tsx +12 -0
  250. package/src/context/Affiliate.tsx +65 -0
  251. package/src/context/GlobalModal.tsx +115 -0
  252. package/src/d.ts +4 -0
  253. package/src/helpers/index.ts +73 -0
  254. package/src/helpers/number.ts +12 -0
  255. package/src/hooks/useClickOutside.ts +27 -0
  256. package/src/hooks/useLocalStorage.ts +20 -0
  257. package/src/hooks/useQueryParam.ts +46 -0
  258. package/src/hooks/useWindowSize.ts +26 -0
  259. package/src/i18n/i18n.tsx +102 -0
  260. package/src/i18n/index.ts +1 -0
  261. package/src/index.ts +54 -0
  262. package/src/scss/base/_colors.scss +23 -0
  263. package/src/scss/base/_display.scss +85 -0
  264. package/src/scss/base/_filters.scss +20 -0
  265. package/src/scss/base/_flex.scss +612 -0
  266. package/src/scss/base/_important.scss +3 -0
  267. package/src/scss/base/_normalize.scss +351 -0
  268. package/src/scss/base/_spacing.scss +290 -0
  269. package/src/scss/base/_tooltip.scss +9 -0
  270. package/src/scss/base/_typography.scss +279 -0
  271. package/src/scss/base/_variables.scss +72 -0
  272. package/src/scss/components/_button-group.scss +61 -0
  273. package/src/scss/components/_button.scss +459 -0
  274. package/src/scss/components/_decimal.scss +40 -0
  275. package/src/scss/components/_denom-select.scss +270 -0
  276. package/src/scss/components/_fiat.scss +34 -0
  277. package/src/scss/components/_footer.scss +27 -0
  278. package/src/scss/components/_header.scss +665 -0
  279. package/src/scss/components/_input.scss +82 -0
  280. package/src/scss/components/_loader.scss +20 -0
  281. package/src/scss/components/_modal.scss +138 -0
  282. package/src/scss/components/_numeric-input.scss +98 -0
  283. package/src/scss/components/_popout.scss +63 -0
  284. package/src/scss/components/_progress.scss +62 -0
  285. package/src/scss/components/_radio-checkbox.scss +79 -0
  286. package/src/scss/components/_select.scss +106 -0
  287. package/src/scss/components/_slider.scss +34 -0
  288. package/src/scss/components/_toggle.scss +120 -0
  289. package/src/scss/components/_warning.scss +65 -0
  290. package/src/scss/index.scss +37 -0
  291. package/src/scss/styledcomponents/_card.scss +130 -0
  292. package/src/scss/styledcomponents/_drawer.scss +36 -0
  293. package/src/scss/styledcomponents/_general.scss +20 -0
  294. package/src/scss/styledcomponents/_table.scss +302 -0
  295. package/src/scss/styledcomponents/_tabs.scss +97 -0
  296. package/src/scss/styledcomponents/_tag.scss +155 -0
  297. package/src/scss/unsorted/_general.scss +259 -0
  298. package/src/services/account.ts +53 -0
  299. package/tsconfig.json +25 -0
  300. package/tsconfig.node.json +11 -0
  301. package/vite.config.ts +7 -0
  302. package/vitest-setup.js +1 -0
  303. 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);