footer.tsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import type { Props as ButtonProps } from "@pythnetwork/component-library/Button";
  2. import { Button } from "@pythnetwork/component-library/Button";
  3. import { DrawerTrigger } from "@pythnetwork/component-library/Drawer";
  4. import { Link } from "@pythnetwork/component-library/Link";
  5. import type { ComponentProps, ElementType } from "react";
  6. import styles from "./footer.module.scss";
  7. import { socialLinks } from "./social-links";
  8. import { SupportDrawer } from "./support-drawer";
  9. import Wordmark from "./wordmark.svg";
  10. export const Footer = () => (
  11. <footer className={styles.footer}>
  12. <div className={styles.topContent}>
  13. <div className={styles.main}>
  14. <Link href="https://www.pyth.network" className={styles.logoLink ?? ""}>
  15. <Wordmark className={styles.logo} />
  16. <div className={styles.logoLabel}>Pyth Homepage</div>
  17. </Link>
  18. <div className={styles.divider} />
  19. <div className={styles.help}>
  20. <DrawerTrigger>
  21. <Link>Help</Link>
  22. <SupportDrawer />
  23. </DrawerTrigger>
  24. <Link href="https://docs.pyth.network" target="_blank">
  25. Documentation
  26. </Link>
  27. </div>
  28. </div>
  29. <div className={styles.socialLinks}>
  30. {socialLinks.map(({ name, ...props }) => (
  31. <SocialLink {...props} key={name}>
  32. {name}
  33. </SocialLink>
  34. ))}
  35. </div>
  36. </div>
  37. <div className={styles.trademarkDisclaimer}>
  38. <div className={styles.trademarkDisclaimerContent}>
  39. <h3 className={styles.trademarkDisclaimerHeader}>
  40. TRADEMARK DISCLAIMER
  41. </h3>
  42. <p className={styles.trademarkDisclaimerBody}>
  43. This website may display ticker symbols, product names, and other
  44. identifiers that are trademarks, service marks or trade names of third
  45. parties. Such display is for informational purposes only and does not
  46. constitute any claim of ownership thereof by Pyth Data Association or
  47. any of its subsidiaries and other affiliates (collectively,
  48. &quot;Association&quot;) or any sponsorship or endorsement by
  49. Association of any associated products or services, and should not be
  50. construed as indicating any affiliation, sponsorship or other
  51. connection between Association and the third-party owners of such
  52. identifiers. Any such third-party identifiers associated with
  53. financial data are made solely to identify the relevant financial
  54. products for which price data is made available via the website. All
  55. trademarks, service marks, logos, product names, trade names and
  56. company names mentioned on the website are the property of their
  57. respective owners and are protected by trademark and other
  58. intellectual property laws. Association makes no representations or
  59. warranties with respect to any such identifiers or any data or other
  60. information associated therewith and reserves the right to modify or
  61. remove any such displays at its discretion.
  62. </p>
  63. </div>
  64. </div>
  65. <div className={styles.bottomContent}>
  66. <small className={styles.copyright}>© 2025 Pyth Data Association</small>
  67. <div className={styles.legal}>
  68. <Link href="https://www.pyth.network/privacy-policy" target="_blank">
  69. Privacy Policy
  70. </Link>
  71. <Link href="https://www.pyth.network/terms-of-use" target="_blank">
  72. Terms of Use
  73. </Link>
  74. <Link
  75. href="https://www.pyth.network/trademark-disclaimer"
  76. target="_blank"
  77. >
  78. Trademark Disclaimer
  79. </Link>
  80. </div>
  81. </div>
  82. </footer>
  83. );
  84. type SocialLinkProps<T extends ElementType> = Omit<
  85. ButtonProps<T>,
  86. "target" | "variant" | "size" | "beforeIcon" | "hideText"
  87. > & {
  88. icon: ComponentProps<typeof Button>["beforeIcon"];
  89. };
  90. const SocialLink = <T extends ElementType>({
  91. icon,
  92. ...props
  93. }: SocialLinkProps<T>) => (
  94. <Button
  95. target="_blank"
  96. variant="ghost"
  97. size="sm"
  98. beforeIcon={icon}
  99. hideText
  100. {...props}
  101. />
  102. );