diff --git a/subgraph-client/index.html b/subgraph-client/index.html index 1c28ea4..c47a24b 100644 --- a/subgraph-client/index.html +++ b/subgraph-client/index.html @@ -1,5 +1,5 @@ - + diff --git a/subgraph-client/public/fonts/AspektaVF.woff2 b/subgraph-client/public/fonts/AspektaVF.woff2 new file mode 100644 index 0000000..8296752 Binary files /dev/null and b/subgraph-client/public/fonts/AspektaVF.woff2 differ diff --git a/subgraph-client/public/fonts/FunnelSans-Italic.woff2 b/subgraph-client/public/fonts/FunnelSans-Italic.woff2 new file mode 100644 index 0000000..00a15b0 Binary files /dev/null and b/subgraph-client/public/fonts/FunnelSans-Italic.woff2 differ diff --git a/subgraph-client/public/fonts/FunnelSans.woff2 b/subgraph-client/public/fonts/FunnelSans.woff2 new file mode 100644 index 0000000..28efaea Binary files /dev/null and b/subgraph-client/public/fonts/FunnelSans.woff2 differ diff --git a/subgraph-client/public/fonts/GeistVariableVF.woff2 b/subgraph-client/public/fonts/GeistVariableVF.woff2 deleted file mode 100644 index 328a020..0000000 Binary files a/subgraph-client/public/fonts/GeistVariableVF.woff2 and /dev/null differ diff --git a/subgraph-client/src/components/ProofSetDetails/JsonDisplay.tsx b/subgraph-client/src/components/ProofSetDetails/JsonDisplay.tsx index 6250f18..449409e 100644 --- a/subgraph-client/src/components/ProofSetDetails/JsonDisplay.tsx +++ b/subgraph-client/src/components/ProofSetDetails/JsonDisplay.tsx @@ -1,11 +1,8 @@ import JsonView from "@uiw/react-json-view"; -import { githubDarkTheme } from "@uiw/react-json-view/githubDark"; import { githubLightTheme } from "@uiw/react-json-view/githubLight"; -import { useTheme } from "@/components/shared/ThemeProvider"; const JsonDisplay = ({ jsonData }) => { - const { theme } = useTheme(); - return ; + return ; }; export default JsonDisplay; diff --git a/subgraph-client/src/components/go-home.tsx b/subgraph-client/src/components/go-home.tsx deleted file mode 100644 index 3421be3..0000000 --- a/subgraph-client/src/components/go-home.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { Link } from "react-router-dom"; - -export default function GoHomeLink() { - return ( - - ← Go Home - - ); -} diff --git a/subgraph-client/src/components/layout/FocMark.tsx b/subgraph-client/src/components/layout/FocMark.tsx new file mode 100644 index 0000000..1f0b1f3 --- /dev/null +++ b/subgraph-client/src/components/layout/FocMark.tsx @@ -0,0 +1,29 @@ +// FOC mark ported from the filecoin-design-system bundle (FocLogo.jsx, color tone). +// Path data is authored on a 1000 x 896.787 canvas. +const CIRCLE = + "M 450.756 0.008 C 696.155 1.464 897.499 202.444 895.678 452.215 C 895.321 502.975 886.412 551.241 870.727 596.664 C 837.283 560.016 789.586 536.683 736.72 535.386 L 733.201 535.331 C 662.086 534.908 600.402 573.984 568.137 631.393 C 495.132 638.865 438.13 700.538 438.13 775.53 L 438.143 777.404 C 438.753 825.592 462.888 868.109 499.589 894.004 C 482.635 895.932 465.376 896.889 447.843 896.778 C 200.622 897.87 -1.087 695.433 0.004 446.392 C 1.097 200.262 202.078 -1.449 450.756 0.008 Z M 614.961 163.486 C 570.18 161.666 538.139 184.242 513.017 218.83 C 488.257 253.057 477.334 293.105 465.32 332.791 C 462.043 344.443 459.129 356.095 455.487 368.836 C 412.159 362.647 370.29 356.456 327.327 350.266 C 325.87 361.919 324.414 372.843 322.955 384.495 C 365.556 391.049 406.335 397.238 448.207 403.789 C 442.38 427.82 437.281 450.029 431.821 472.604 C 390.679 466.779 351.356 461.318 312.032 455.858 C 310.576 468.601 309.121 478.43 307.665 489.717 C 347.351 495.906 385.582 501.732 423.812 507.557 C 423.812 511.925 424.538 514.478 423.812 516.661 C 411.433 568.725 400.145 621.521 386.31 673.224 C 379.756 697.981 369.195 721.647 348.807 739.123 C 332.06 753.322 313.488 751.135 300.745 733.297 C 294.921 725.287 290.188 715.821 282.543 710.358 C 277.08 706.355 264.701 703.806 260.698 707.083 C 254.871 712.181 250.502 722.739 250.867 730.749 C 251.233 737.667 258.146 746.042 264.335 750.775 C 285.089 766.796 309.852 768.979 334.609 764.246 C 376.48 755.87 405.97 729.657 424.177 692.883 C 438.738 664.119 449.299 633.171 459.492 602.221 C 468.596 574.187 474.786 545.424 482.066 516.298 C 523.209 522.488 563.261 528.311 604.404 534.136 C 608.045 522.487 610.957 511.564 614.234 500.277 C 571.271 493.723 530.129 487.894 488.986 481.705 C 494.084 457.313 498.451 435.829 503.184 412.163 C 542.141 417.626 580.374 423.087 619.695 428.549 C 622.972 416.898 625.884 406.705 629.161 395.053 C 588.748 389.228 550.153 383.4 508.645 377.21 C 522.845 327.693 534.86 280.36 549.787 234.12 C 554.52 218.829 565.808 204.63 577.095 192.616 C 592.024 177.322 612.413 180.599 625.157 197.71 C 630.255 204.629 635.35 212.276 641.543 218.466 C 649.553 226.111 661.566 230.115 669.576 222.47 C 674.674 217.372 677.952 205.358 675.037 196.983 C 672.49 190.065 671.034 189.338 668.122 186.061 C 653.922 170.04 634.988 164.216 614.961 163.486 Z"; +const F = + "M 208.65 438.837 C 198.454 469.787 187.896 500.734 173.332 529.498 C 155.126 566.272 125.635 592.489 83.763 600.861 C 59.005 605.594 34.248 603.411 13.494 587.391 C 7.305 582.657 0.386 574.282 0.021 567.363 C -0.344 559.353 4.028 548.795 9.852 543.697 C 13.856 540.42 26.238 542.971 31.698 546.974 C 39.343 552.437 44.076 561.904 49.904 569.914 C 62.647 587.755 81.215 589.938 97.962 575.739 C 118.354 558.262 128.912 534.596 135.466 509.838 C 149.301 458.135 160.588 405.343 172.967 353.275 C 173.697 351.092 172.967 348.542 172.967 344.173 C 134.737 338.349 96.506 332.521 56.82 326.332 C 58.276 315.045 59.735 305.216 61.191 292.473 C 100.513 297.933 139.835 303.395 180.977 309.22 C 186.44 286.645 191.535 264.435 197.363 240.408 C 155.49 233.853 114.713 227.664 72.114 221.11 C 73.57 209.458 75.026 198.535 76.482 186.883 C 119.446 193.073 161.315 199.262 204.643 205.454 C 208.285 192.711 211.198 181.059 214.475 169.407 C 226.489 129.72 237.414 89.672 262.171 55.445 C 287.294 20.856 319.335 -1.718 364.119 0.103 C 384.143 0.832 403.076 6.657 417.276 22.677 C 420.188 25.954 421.644 26.681 424.195 33.6 C 427.107 41.975 423.83 53.989 418.732 59.087 C 410.722 66.732 398.708 62.729 390.698 55.08 C 384.508 48.891 379.41 41.245 374.312 34.326 C 361.569 17.214 341.18 13.937 326.251 29.231 C 314.966 41.245 303.679 55.445 298.946 70.736 C 284.016 116.977 272.003 164.312 257.803 213.826 C 299.307 220.016 337.903 225.843 378.319 231.668 C 375.042 243.32 372.129 253.513 368.852 265.165 C 329.528 259.702 291.3 254.242 252.34 248.78 C 247.607 272.446 243.239 293.929 238.141 318.322 C 279.283 324.511 320.426 330.338 363.39 336.893 C 360.113 348.18 357.2 359.102 353.558 370.752 C 312.416 364.927 272.364 359.102 231.222 352.913 C 224.306 382.039 218.116 410.803 208.65 438.837 Z"; +const CLOUD_BG = + "M 269.158 0.003 C 333.987 0.39 390.353 39.244 415.773 95.308 L 416.935 95.308 C 482.732 95.308 536.11 148.647 536.11 214.444 C 536.11 280.24 482.772 333.578 416.975 333.579 L 119.135 333.579 C 53.338 333.578 0 280.24 0 214.444 C 0 148.647 53.379 95.308 119.175 95.308 L 120.426 95.308 C 145.978 39.012 202.853 -0.392 269.158 0.003 Z"; +const CLOUD_RING = + "M 416.975 333.579 C 482.772 333.578 536.11 280.24 536.11 214.444 C 536.11 148.647 482.732 95.308 416.935 95.308 L 415.773 95.308 C 390.353 39.244 333.987 0.39 269.158 0.003 C 202.853 -0.392 145.978 39.012 120.426 95.308 L 119.175 95.308 C 53.379 95.308 0 148.647 0 214.444 C 0 280.24 53.338 333.578 119.135 333.579 L 416.975 333.579 Z M 489.744 214.444 C 489.744 254.633 457.165 287.212 416.975 287.213 L 119.135 287.213 C 78.946 287.212 46.366 254.633 46.366 214.444 L 46.389 212.567 C 47.385 173.264 79.594 141.675 119.175 141.675 L 150.3 141.675 L 162.646 114.472 C 180.965 74.113 221.644 46.088 268.882 46.369 C 314.993 46.644 355.339 74.301 373.545 114.454 L 385.886 141.675 L 416.935 141.675 C 457.145 141.675 489.744 174.275 489.744 214.444 Z"; + +export function FocMark({ className }: { className?: string }) { + return ( + + + + + + + + + + + + + + + ); +} diff --git a/subgraph-client/src/components/layout/Footer.tsx b/subgraph-client/src/components/layout/Footer.tsx new file mode 100644 index 0000000..2fb4a88 --- /dev/null +++ b/subgraph-client/src/components/layout/Footer.tsx @@ -0,0 +1,49 @@ +import { Link } from "react-router-dom"; +import { NameLogo } from "./NameLogo"; + +export function Footer() { + return ( + + ); +} diff --git a/subgraph-client/src/components/layout/Header.tsx b/subgraph-client/src/components/layout/Header.tsx new file mode 100644 index 0000000..0ad9c0e --- /dev/null +++ b/subgraph-client/src/components/layout/Header.tsx @@ -0,0 +1,100 @@ +import { Menu, X } from "lucide-react"; +import { useState } from "react"; +import { Link, useLocation } from "react-router-dom"; +import { NetworkSelector } from "@/components/shared/NetworkSelector"; +import { useNetwork } from "@/contexts/NetworkContext"; +import { cn } from "@/lib/utils"; +import { NameLogo } from "./NameLogo"; + +export function Header() { + const { network } = useNetwork(); + const location = useLocation(); + const [mobileMenuOpen, setMobileMenuOpen] = useState(false); + + const navItems = [ + { label: "Providers", to: `/${network}/providers` }, + { label: "Datasets", to: `/${network}/datasets` }, + { label: "Services", to: `/${network}/services` }, + { label: "Docs", to: "/documentation" }, + { label: "Gas Calculator", to: "/gas-calculator" }, + ]; + + const isActive = (to: string) => location.pathname === to || location.pathname.startsWith(`${to}/`); + + const desktopLinkClass = (active: boolean) => + cn( + "text-[15px] tracking-wide transition-colors", + active ? "font-medium text-foreground" : "text-muted-foreground hover:text-foreground", + ); + + const mobileLinkClass = (active: boolean) => + cn( + "rounded-md p-2 text-sm tracking-wide transition-colors", + active + ? "bg-secondary font-medium text-foreground" + : "text-muted-foreground hover:bg-secondary hover:text-foreground", + ); + + const closeMobileMenu = () => setMobileMenuOpen(false); + + return ( +
+
+ + + + + + + +
+ + {mobileMenuOpen && ( + + )} +
+ ); +} diff --git a/subgraph-client/src/components/layout/Layout.tsx b/subgraph-client/src/components/layout/Layout.tsx new file mode 100644 index 0000000..0caf468 --- /dev/null +++ b/subgraph-client/src/components/layout/Layout.tsx @@ -0,0 +1,15 @@ +import { Outlet } from "react-router-dom"; +import { Footer } from "@/components/layout/Footer"; +import { Header } from "@/components/layout/Header"; + +export function Layout() { + return ( +
+
+
+ +
+
+
+ ); +} diff --git a/subgraph-client/src/components/layout/NameLogo.tsx b/subgraph-client/src/components/layout/NameLogo.tsx new file mode 100644 index 0000000..11fec3e --- /dev/null +++ b/subgraph-client/src/components/layout/NameLogo.tsx @@ -0,0 +1,10 @@ +import { FocMark } from "./FocMark"; + +export function NameLogo() { + return ( + + + PDP Explorer + + ); +} diff --git a/subgraph-client/src/components/page-header.tsx b/subgraph-client/src/components/page-header.tsx deleted file mode 100644 index 3130283..0000000 --- a/subgraph-client/src/components/page-header.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import { Activity, Book, Calculator, FileCode, Menu, Server } from "lucide-react"; -import { useState } from "react"; -import { Link, useNavigate } from "react-router-dom"; -import { useNetwork } from "@/contexts/NetworkContext"; -import { NetworkSelector } from "./shared/NetworkSelector"; - -export default function PageHeader() { - const { network } = useNetwork(); - const navigate = useNavigate(); - const [mobileMenuOpen, setMobileMenuOpen] = useState(false); - return ( -
-
-
navigate("/")} - > -
- -
-

- PDP Explorer -

- {/* */} -
- {/* Mobile menu button */} - -
- - {/* Desktop Navigation */} -
- - - PDP Services - - - - Docs - - - - Gas Calculator - - - Status - - {/* Network Selector */} - - {/* TODO: Fix colors to add this toggle ( default theme is light) */} - {/* */} -
- - {/* Mobile Navigation */} - {mobileMenuOpen && ( -
- - - Docs - - - - Services - - - - Gas Calculator - - - Status - - -
- )} -
- ); -} diff --git a/subgraph-client/src/components/shared/Footer.tsx b/subgraph-client/src/components/shared/Footer.tsx deleted file mode 100644 index 05736b9..0000000 --- a/subgraph-client/src/components/shared/Footer.tsx +++ /dev/null @@ -1,12 +0,0 @@ -export const Footer = () => { - return ( -
-

- Made with ❤️ by{" "} - - FilOz - -

-
- ); -}; diff --git a/subgraph-client/src/components/shared/Header.tsx b/subgraph-client/src/components/shared/Header.tsx deleted file mode 100644 index 69c563c..0000000 --- a/subgraph-client/src/components/shared/Header.tsx +++ /dev/null @@ -1,7 +0,0 @@ -export const Header = () => { - return ( -
-

Header

-
- ); -}; diff --git a/subgraph-client/src/components/shared/NetworkSelector.tsx b/subgraph-client/src/components/shared/NetworkSelector.tsx index 04a0af8..b105986 100644 --- a/subgraph-client/src/components/shared/NetworkSelector.tsx +++ b/subgraph-client/src/components/shared/NetworkSelector.tsx @@ -33,17 +33,15 @@ export const NetworkSelector = () => { } }; - // Network display names and colors + // Network display names and brand status colors const networkConfig = { mainnet: { name: "Filecoin Mainnet", - color: "bg-green-500", - textColor: "text-green-700", + color: "bg-[#00ffae]", }, calibration: { name: "Filecoin Calibration", - color: "bg-purple-500", - textColor: "text-purple-700", + color: "bg-[#d400ff]", }, }; @@ -51,14 +49,14 @@ export const NetworkSelector = () => {
- - - setTheme("light")}>Light - setTheme("dark")}>Dark - setTheme("system")}>System - - - ); -} diff --git a/subgraph-client/src/components/ui/alert.tsx b/subgraph-client/src/components/ui/alert.tsx index b972db1..b19b7b2 100644 --- a/subgraph-client/src/components/ui/alert.tsx +++ b/subgraph-client/src/components/ui/alert.tsx @@ -4,12 +4,12 @@ import * as React from "react"; import { cn } from "@/lib/utils"; const alertVariants = cva( - "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground", + "relative w-full rounded-xl p-4 ring-1 ring-inset [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4", { variants: { variant: { - default: "bg-background text-foreground", - destructive: "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive", + default: "bg-primary/[0.06] text-foreground ring-primary/25 [&>svg]:text-primary", + destructive: "bg-destructive/[0.06] text-foreground ring-destructive/30 [&>svg]:text-destructive", }, }, defaultVariants: { @@ -28,7 +28,7 @@ Alert.displayName = "Alert"; const AlertTitle = React.forwardRef>( ({ className, ...props }, ref) => ( -
+
), ); AlertTitle.displayName = "AlertTitle"; diff --git a/subgraph-client/src/components/ui/button.tsx b/subgraph-client/src/components/ui/button.tsx index 55feaf6..fd11848 100644 --- a/subgraph-client/src/components/ui/button.tsx +++ b/subgraph-client/src/components/ui/button.tsx @@ -5,23 +5,26 @@ import * as React from "react"; import { cn } from "@/lib/utils"; const buttonVariants = cva( - "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", + "inline-flex items-center justify-center whitespace-nowrap rounded-lg font-display text-sm font-semibold tracking-wide ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", { variants: { variant: { - default: "bg-primary text-primary-foreground hover:bg-primary/90", - destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90", - outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground", - secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80", + default: "bg-primary text-primary-foreground hover:bg-primary-hover active:bg-primary-active", + destructive: "bg-destructive text-destructive-foreground hover:bg-destructive-hover", + outline: "border border-input bg-background hover:border-foreground hover:bg-secondary", + secondary: "bg-secondary text-secondary-foreground hover:bg-zinc-100", ghost: "hover:bg-accent hover:text-accent-foreground", - link: "text-primary underline-offset-4 hover:underline", + link: "text-primary underline-offset-4 hover:text-primary-hover hover:underline", }, size: { default: "h-10 px-4 py-2", sm: "h-9 rounded-md px-3", - lg: "h-11 rounded-md px-8", + lg: "h-11 rounded-lg px-8", icon: "h-10 w-10", }, + glow: { + true: "shadow-glow-blue", + }, }, defaultVariants: { variant: "default", @@ -37,9 +40,9 @@ export interface ButtonProps } const Button = React.forwardRef( - ({ className, variant, size, asChild = false, ...props }, ref) => { + ({ className, variant, size, glow, asChild = false, ...props }, ref) => { const Comp = asChild ? Slot : "button"; - return ; + return ; }, ); Button.displayName = "Button"; diff --git a/subgraph-client/src/components/ui/card.tsx b/subgraph-client/src/components/ui/card.tsx index 16f1f5e..db5ec70 100644 --- a/subgraph-client/src/components/ui/card.tsx +++ b/subgraph-client/src/components/ui/card.tsx @@ -1,25 +1,35 @@ import type * as React from "react"; +import { cn } from "@/lib/utils"; + export function Card({ className, ...props }: React.HTMLAttributes) { - return
; + return ( +
+ ); } export function CardHeader({ className, ...props }: React.HTMLAttributes) { - return
; + return
; } export function CardTitle({ className, ...props }: React.HTMLAttributes) { - return

; + return

; } export function CardDescription({ className, ...props }: React.HTMLAttributes) { - return

; + return

; } export function CardContent({ className, ...props }: React.HTMLAttributes) { - return

; + return
; } export function CardFooter({ className, ...props }: React.HTMLAttributes) { - return
; + return
; } diff --git a/subgraph-client/src/components/ui/dialog.tsx b/subgraph-client/src/components/ui/dialog.tsx index 8946bdc..e9e6d2c 100644 --- a/subgraph-client/src/components/ui/dialog.tsx +++ b/subgraph-client/src/components/ui/dialog.tsx @@ -67,7 +67,7 @@ const DialogTitle = React.forwardRef< >(({ className, ...props }, ref) => ( )); diff --git a/subgraph-client/src/components/ui/pagination.tsx b/subgraph-client/src/components/ui/pagination.tsx index 19dd5f7..f35e567 100644 --- a/subgraph-client/src/components/ui/pagination.tsx +++ b/subgraph-client/src/components/ui/pagination.tsx @@ -1,6 +1,6 @@ import { ChevronLeft, ChevronRight } from "lucide-react"; import React from "react"; -import { Button } from "./button"; +import { cn } from "@/lib/utils"; interface PaginationProps { currentPage: number; @@ -8,6 +8,17 @@ interface PaginationProps { onPageChange: (page: number) => void; } +const navButtonClass = + "inline-flex items-center gap-1 rounded-md px-2.5 py-1.5 text-sm text-muted-foreground transition-colors hover:text-foreground disabled:pointer-events-none disabled:opacity-40"; + +const pageCellClass = (active: boolean) => + cn( + "inline-flex h-10 min-w-10 items-center justify-center rounded-md px-2 text-sm transition-colors", + active + ? "bg-secondary font-semibold text-foreground shadow-[inset_0_0_0_1px_hsl(var(--border))]" + : "text-muted-foreground hover:text-foreground", + ); + export const Pagination: React.FC = ({ currentPage, totalPages, onPageChange }) => { const pages = Array.from({ length: totalPages }, (_, i) => i + 1); @@ -18,48 +29,46 @@ export const Pagination: React.FC = ({ currentPage, totalPages, }); return ( -
- - - {visiblePages.map((page, index) => { - // Add ellipsis - if (index > 0 && page - visiblePages[index - 1] > 1) { - return ( - - ... - - - ); - } + Prev + - return ( - - ); - })} + + {visiblePages.map((page, index) => ( + + {index > 0 && page - visiblePages[index - 1] > 1 && ( + + … + + )} + + + ))} + - -
+ + ); }; diff --git a/subgraph-client/src/main.tsx b/subgraph-client/src/main.tsx index 49c7fad..1925581 100644 --- a/subgraph-client/src/main.tsx +++ b/subgraph-client/src/main.tsx @@ -5,7 +5,6 @@ import AppRoutes from "./router/routes"; import "./styles/index.css"; import { SWRConfig } from "swr"; import { ProgressBar } from "@/components/shared/ProgressBar"; -import { ThemeProvider } from "@/components/shared/ThemeProvider"; import { Toaster } from "@/components/ui/toaster"; import { NetworkProvider } from "@/contexts/NetworkContext"; import { fetcher } from "@/utility/fetcher"; @@ -22,15 +21,13 @@ ReactDOM.createRoot(document.getElementById("root")!).render( onError: (err) => console.error("GraphQL SWR error:", err), }} > - - - - - - - - - + + + + + + + , ); diff --git a/subgraph-client/src/pages/Documentation.tsx b/subgraph-client/src/pages/Documentation.tsx index 7d4253b..da9d031 100644 --- a/subgraph-client/src/pages/Documentation.tsx +++ b/subgraph-client/src/pages/Documentation.tsx @@ -6,7 +6,6 @@ import rehypeHighlight from "rehype-highlight"; import rehypeRaw from "rehype-raw"; import remarkGfm from "remark-gfm"; import slugify from "slugify"; -import GoHomeLink from "@/components/go-home"; // Documentation structure const docs = [ @@ -85,12 +84,7 @@ export const Documentation = () => { }, [docId, navigate]); return ( -
- {/* Back button */} -
- -
- +
{/* Sidebar */}
diff --git a/subgraph-client/src/pages/GasCalculator.tsx b/subgraph-client/src/pages/GasCalculator.tsx index f4ad097..858a600 100644 --- a/subgraph-client/src/pages/GasCalculator.tsx +++ b/subgraph-client/src/pages/GasCalculator.tsx @@ -1,5 +1,4 @@ import { useEffect, useState } from "react"; -import GoHomeLink from "@/components/go-home"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; @@ -119,12 +118,9 @@ export const GasCalculator = () => { }; return ( -
+
-
- -

PDP Gas & Costs Calculator

Calculate gas costs, fees, and profitability of Filecoin PDP based on your parameters diff --git a/subgraph-client/src/pages/Landing.tsx b/subgraph-client/src/pages/Landing.tsx index 2033023..0f953c4 100644 --- a/subgraph-client/src/pages/Landing.tsx +++ b/subgraph-client/src/pages/Landing.tsx @@ -6,7 +6,6 @@ import { type SearchResult, search } from "@/api/apiService"; import { NetworkStatsCard } from "@/components/Landing/NetworkStatsCard"; import { RecentProofSetsTable } from "@/components/Landing/RecentProofSetsTable"; import { RecentProvidersTable } from "@/components/Landing/RecentProvidersTable"; -import PageHeader from "@/components/page-header"; import { useNetwork } from "@/contexts/NetworkContext"; import { useToast } from "@/hooks/use-toast"; import useGraphQL from "@/hooks/useGraphQL"; @@ -155,10 +154,8 @@ export const Landing = () => { const faultedPeriods7d = weeklyActivities.reduce((sum, a) => sum + Number(a.totalFaultedPeriods || 0), 0); return ( -

+
- {/* Responsive header for title, navigation and network selector */} -
{ {/* Network Wide Metrics Section */}
-

Network Overview

+

Network Overview

{
-
+

Want to Learn More?

diff --git a/subgraph-client/src/pages/PieceDetails.tsx b/subgraph-client/src/pages/PieceDetails.tsx index 5642e7e..aeb2547 100644 --- a/subgraph-client/src/pages/PieceDetails.tsx +++ b/subgraph-client/src/pages/PieceDetails.tsx @@ -1,6 +1,5 @@ import { useEffect, useState } from "react"; import { useParams } from "react-router-dom"; -import GoHomeLink from "@/components/go-home"; import { PieceDataSetsTable } from "@/components/PieceDetails/PieceDataSetsTable"; import { PieceOverviewCard } from "@/components/PieceDetails/PieceOverviewCard"; import usePiecePageData from "@/hooks/usePiecePageData"; @@ -34,10 +33,7 @@ export const PieceDetails = () => { } return ( -
-
- -
+
{/* Show title only when details are loaded/loading, not on invalid ID state */} {cid && isValidPieceId &&

Piece Id: {cid}

} diff --git a/subgraph-client/src/pages/ProofSetDetails.tsx b/subgraph-client/src/pages/ProofSetDetails.tsx index 4a020b9..fa9dbac 100644 --- a/subgraph-client/src/pages/ProofSetDetails.tsx +++ b/subgraph-client/src/pages/ProofSetDetails.tsx @@ -1,6 +1,5 @@ import { useState } from "react"; import { useParams } from "react-router-dom"; -import GoHomeLink from "@/components/go-home"; import { ActivityTabs } from "@/components/ProofSetDetails/ActivityTabs"; import { HeatmapSection } from "@/components/ProofSetDetails/HeatmapSection"; import { ProofSetActivityChart } from "@/components/ProofSetDetails/ProofSetActivityChart"; @@ -66,10 +65,7 @@ export const ProofSetDetails = () => { }; return ( -
-
- -
+
{/* Show title only if core proofSet data loaded, avoid showing before ID is confirmed valid */} {proofSet &&

Data Set Details: {dataSetId}

} diff --git a/subgraph-client/src/pages/ProofSets.tsx b/subgraph-client/src/pages/ProofSets.tsx index 914a92b..ea0f26e 100644 --- a/subgraph-client/src/pages/ProofSets.tsx +++ b/subgraph-client/src/pages/ProofSets.tsx @@ -1,7 +1,6 @@ import { Search } from "lucide-react"; import { useEffect, useState } from "react"; import { ProofSetsTable } from "@/components/ProofSets/ProofSetsTable"; -import PageHeader from "@/components/page-header"; import { Input } from "@/components/ui/input"; import { Pagination } from "@/components/ui/pagination"; import useGraphQL from "@/hooks/useGraphQL"; @@ -52,8 +51,7 @@ export const ProofSets = () => { }, [validatedSearch]); // intentionally keyed off the debounced value return ( -
- +

Data Sets

diff --git a/subgraph-client/src/pages/ProviderDetails.tsx b/subgraph-client/src/pages/ProviderDetails.tsx index 5401d59..c2d225c 100644 --- a/subgraph-client/src/pages/ProviderDetails.tsx +++ b/subgraph-client/src/pages/ProviderDetails.tsx @@ -1,6 +1,5 @@ import { useState } from "react"; import { useParams } from "react-router-dom"; -import GoHomeLink from "@/components/go-home"; import { ProviderActivityChart } from "@/components/ProviderDetails/ProviderActivityChart"; import { ProviderOverviewCard } from "@/components/ProviderDetails/ProviderOverviewCard"; import { ProviderProofSetsTable } from "@/components/ProviderDetails/ProviderProofSetsTable"; @@ -31,10 +30,7 @@ export const ProviderDetails = () => { } return ( -
-
- -
+
{/* Show title only when details are loaded/loading, not on invalid ID state */} {providerId && isValidProviderId &&

Provider: {providerId}

} diff --git a/subgraph-client/src/pages/Providers.tsx b/subgraph-client/src/pages/Providers.tsx index e4ac8fb..030327d 100644 --- a/subgraph-client/src/pages/Providers.tsx +++ b/subgraph-client/src/pages/Providers.tsx @@ -1,7 +1,6 @@ import { Search } from "lucide-react"; import { useEffect, useState } from "react"; import { ProvidersTable } from "@/components/Providers/ProvidersTable"; -import PageHeader from "@/components/page-header"; import { Input } from "@/components/ui/input"; import { Pagination } from "@/components/ui/pagination"; import useGraphQL from "@/hooks/useGraphQL"; @@ -57,8 +56,7 @@ export const Providers = () => { }, [validatedSearch]); // Effect depends on the debounced value return ( -
- +

Storage Providers

diff --git a/subgraph-client/src/pages/ServiceDetails.tsx b/subgraph-client/src/pages/ServiceDetails.tsx index 331f72d..abc6004 100644 --- a/subgraph-client/src/pages/ServiceDetails.tsx +++ b/subgraph-client/src/pages/ServiceDetails.tsx @@ -1,7 +1,6 @@ import { AlertTriangle } from "lucide-react"; import { useState } from "react"; import { useParams } from "react-router-dom"; -import GoHomeLink from "@/components/go-home"; import { ProofSetsTable } from "@/components/ProofSets/ProofSetsTable"; import { ProvidersTable } from "@/components/Providers/ProvidersTable"; import { CopyableText } from "@/components/shared/CopyableText"; @@ -101,10 +100,7 @@ export const ServiceDetails = () => { } return ( -
-
- -
+

Service Contract Details

diff --git a/subgraph-client/src/pages/Services.tsx b/subgraph-client/src/pages/Services.tsx index 8782ec7..dfbe386 100644 --- a/subgraph-client/src/pages/Services.tsx +++ b/subgraph-client/src/pages/Services.tsx @@ -1,6 +1,5 @@ import { Search } from "lucide-react"; import { useEffect, useState } from "react"; -import PageHeader from "@/components/page-header"; import { ServicesTable } from "@/components/Services/ServicesTable"; import { Input } from "@/components/ui/input"; import { Pagination } from "@/components/ui/pagination"; @@ -52,8 +51,7 @@ export const Services = () => { }, [validatedSearch]); // intentionally keyed off the debounced value return ( -

- +

Service Contracts

Browse all service contracts in the PDP network

diff --git a/subgraph-client/src/router/Layout.tsx b/subgraph-client/src/router/Layout.tsx deleted file mode 100644 index a3ab1ee..0000000 --- a/subgraph-client/src/router/Layout.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { Footer } from "@/components/shared/Footer"; -import { Header } from "../components/shared/Header"; - -export const Layout = ({ children }: { children: React.ReactNode }) => { - return ( -
-
- {children} -
-
- ); -}; - -export default Layout; diff --git a/subgraph-client/src/router/routes.tsx b/subgraph-client/src/router/routes.tsx index 85eb216..30f4fdc 100644 --- a/subgraph-client/src/router/routes.tsx +++ b/subgraph-client/src/router/routes.tsx @@ -1,5 +1,6 @@ import { useEffect } from "react"; import { Navigate, Route, Routes, useNavigate, useParams } from "react-router-dom"; +import { Layout } from "@/components/layout/Layout"; import { useNetwork } from "@/contexts/NetworkContext"; import { Documentation } from "@/pages/Documentation"; import { GasCalculator } from "@/pages/GasCalculator"; @@ -32,38 +33,40 @@ const AppRoutes = () => { return ( - {/* Root route redirects to network-specific path */} - } /> + }> + {/* Root route redirects to network-specific path */} + } /> - {/* Network-specific routes */} - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> + {/* Network-specific routes */} + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> - {/* Network-agnostic routes */} - } /> - } /> - } /> + {/* Network-agnostic routes */} + } /> + } /> + } /> - {/* Legacy routes for backward compatibility */} - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> + {/* Legacy routes for backward compatibility */} + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> - {/* Catch-all route */} - } /> + {/* Catch-all route */} + } /> + ); }; diff --git a/subgraph-client/src/styles/index.css b/subgraph-client/src/styles/index.css index d26ad79..7369209 100644 --- a/subgraph-client/src/styles/index.css +++ b/subgraph-client/src/styles/index.css @@ -2,6 +2,9 @@ @import "tailwindcss/components"; @import "tailwindcss/utilities"; +/* Filecoin Onchain Cloud tokens — light-section + data-brand="onchain-cloud" + values from filecoin-design-system/project/tokens/colors.css, kept as + HSL triplets so Tailwind /opacity modifiers keep working. */ @layer base { :root { --background: 0 0% 100%; @@ -10,60 +13,53 @@ --card-foreground: 240 10% 3.9%; --popover: 0 0% 100%; --popover-foreground: 240 10% 3.9%; - --primary: 240 5.9% 10%; - --primary-foreground: 0 0% 98%; - --secondary: 240 4.8% 95.9%; - --secondary-foreground: 240 5.9% 10%; - --muted: 240 4.8% 95.9%; - --muted-foreground: 240 3.8% 46.1%; - --accent: 240 4.8% 95.9%; - --accent-foreground: 240 5.9% 10%; - --destructive: 0 84.2% 60.2%; - --destructive-foreground: 0 0% 98%; + --primary: 212 100% 46.3%; + --primary-hover: 206 100% 50%; + --primary-active: 223 82% 47%; + --primary-foreground: 0 0% 100%; + --secondary: 0 0% 98%; + --secondary-foreground: 240 10% 3.9%; + --muted: 0 0% 98%; + --muted-foreground: 0 0% 43.5%; + --accent: 208 68% 96%; + --accent-foreground: 212 100% 46.3%; + --destructive: 0 100% 65%; + --destructive-hover: 0 100% 60%; + --destructive-foreground: 0 0% 100%; --border: 240 5.9% 90%; --input: 240 5.9% 90%; - --ring: 240 5.9% 10%; - --radius: 0.5rem; - --chart-1: 12 76% 61%; - --chart-2: 173 58% 39%; - --chart-3: 197 37% 24%; - --chart-4: 43 74% 66%; - --chart-5: 27 87% 67%; + --ring: 206 100% 50%; + --radius: 0.75rem; + --chart-1: 206 100% 50%; + --chart-2: 184 58% 51%; + --chart-3: 223 82% 47%; + --chart-4: 161 100% 50%; + --chart-5: 48 100% 50%; } +} - .dark { - --background: 240 10% 3.9%; - --foreground: 0 0% 98%; - --card: 240 10% 3.9%; - --card-foreground: 0 0% 98%; - --popover: 240 10% 3.9%; - --popover-foreground: 0 0% 98%; - --primary: 0 0% 98%; - --primary-foreground: 240 5.9% 10%; - --secondary: 240 3.7% 15.9%; - --secondary-foreground: 0 0% 98%; - --muted: 240 3.7% 15.9%; - --muted-foreground: 240 5% 64.9%; - --accent: 240 3.7% 15.9%; - --accent-foreground: 0 0% 98%; - --destructive: 0 62.8% 30.6%; - --destructive-foreground: 0 0% 98%; - --border: 240 3.7% 15.9%; - --input: 240 3.7% 15.9%; - --ring: 240 4.9% 83.9%; - --chart-1: 220 70% 50%; - --chart-2: 160 60% 45%; - --chart-3: 30 80% 55%; - --chart-4: 280 65% 60%; - --chart-5: 340 75% 55%; - } +@font-face { + font-family: "Aspekta"; + src: url("/fonts/AspektaVF.woff2") format("woff2-variations"); + font-weight: 100 900; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: "Funnel Sans"; + src: url("/fonts/FunnelSans.woff2") format("woff2-variations"); + font-weight: 300 800; + font-style: normal; + font-display: swap; } @font-face { - font-family: "geist"; - src: url("/fonts/GeistVariableVF.woff2") format("woff2"); - /* font-weight: normal; - font-style: normal; */ + font-family: "Funnel Sans"; + src: url("/fonts/FunnelSans-Italic.woff2") format("woff2-variations"); + font-weight: 300 800; + font-style: italic; + font-display: swap; } @layer base { @@ -72,8 +68,14 @@ } body { - @apply bg-background text-foreground; - font-family: "geist"; + @apply bg-background font-sans tracking-wide text-foreground antialiased; + } + + h1, + h2, + h3, + h4 { + @apply font-display tracking-wide; } } @@ -87,15 +89,15 @@ html { /* Track */ ::-webkit-scrollbar-track { - background: #141414; + background: #fafafa; } ::-webkit-scrollbar-thumb { - background: #3a3939; + background: #d4d4d8; } ::-webkit-scrollbar-thumb:hover { - background: #555; + background: #9f9fa9; } .gradient { diff --git a/subgraph-client/tailwind.config.js b/subgraph-client/tailwind.config.js index 202c8bb..b8a732e 100644 --- a/subgraph-client/tailwind.config.js +++ b/subgraph-client/tailwind.config.js @@ -21,7 +21,9 @@ module.exports = { theme: { fontFamily: { - geist: ["geist", "sans-serif"], + sans: ["Funnel Sans", "-apple-system", "BlinkMacSystemFont", "Segoe UI", "sans-serif"], + display: ["Aspekta", "-apple-system", "BlinkMacSystemFont", "Segoe UI", "sans-serif"], + mono: ["IBM Plex Mono", "ui-monospace", "SF Mono", "Menlo", "monospace"], }, container: { center: true, @@ -39,6 +41,8 @@ module.exports = { foreground: "hsl(var(--foreground))", primary: { DEFAULT: "hsl(var(--primary))", + hover: "hsl(var(--primary-hover))", + active: "hsl(var(--primary-active))", foreground: "hsl(var(--primary-foreground))", }, secondary: { @@ -47,6 +51,7 @@ module.exports = { }, destructive: { DEFAULT: "hsl(var(--destructive))", + hover: "hsl(var(--destructive-hover))", foreground: "hsl(var(--destructive-foreground))", }, muted: { @@ -70,6 +75,11 @@ module.exports = { lg: "var(--radius)", md: "calc(var(--radius) - 2px)", sm: "calc(var(--radius) - 4px)", + xl: "1rem", + "2xl": "1.5rem", + }, + boxShadow: { + "glow-blue": "0 0 0 1px rgba(0, 144, 255, 0.5), 0 0 32px rgba(0, 144, 255, 0.35)", }, keyframes: { "caret-blink": {