From 6b4dc4ca8da63f54fef01a876c4c1e80632f411c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sun, 15 Sep 2024 14:51:01 -0500 Subject: [PATCH] feat: navbar --- packages/core/src/blitzkit/fetchCdonLz4.ts | 2 +- packages/website/src/components/Footer.astro | 2 +- packages/website/src/components/Navbar.astro | 368 ++++++++++++++++++ .../src/components/Navbar/index.css.ts | 69 ---- .../website/src/components/Navbar/index.tsx | 332 ---------------- .../website/src/components/ToolCard.astro | 2 - .../components => }/WargamingAccountName.tsx | 2 +- .../components => }/WargamingLoginButton.tsx | 2 +- packages/website/src/constants/navbar.ts | 1 + packages/website/src/layouts/RootLayout.astro | 4 +- 10 files changed, 375 insertions(+), 409 deletions(-) create mode 100644 packages/website/src/components/Navbar.astro delete mode 100644 packages/website/src/components/Navbar/index.css.ts delete mode 100644 packages/website/src/components/Navbar/index.tsx rename packages/website/src/components/{Navbar/components => }/WargamingAccountName.tsx (92%) rename packages/website/src/components/{Navbar/components => }/WargamingLoginButton.tsx (96%) create mode 100644 packages/website/src/constants/navbar.ts diff --git a/packages/core/src/blitzkit/fetchCdonLz4.ts b/packages/core/src/blitzkit/fetchCdonLz4.ts index eefa1c615..762631533 100644 --- a/packages/core/src/blitzkit/fetchCdonLz4.ts +++ b/packages/core/src/blitzkit/fetchCdonLz4.ts @@ -1,4 +1,4 @@ -import { superDecompress } from '@blitzkit/core'; +import { superDecompress } from './superDecompress'; export async function fetchCdonLz4(url: string) { return await fetch(url, { cache: 'no-store' }) diff --git a/packages/website/src/components/Footer.astro b/packages/website/src/components/Footer.astro index 02885c710..50815a294 100644 --- a/packages/website/src/components/Footer.astro +++ b/packages/website/src/components/Footer.astro @@ -30,7 +30,7 @@ const awaitedGameDefinitions = await gameDefinitions; sm: 'start', }} > - BlitzKit + BlitzKit Everything World of Tanks Blitz Unaffiliated with Wargaming or any service diff --git a/packages/website/src/components/Navbar.astro b/packages/website/src/components/Navbar.astro new file mode 100644 index 000000000..d41d52107 --- /dev/null +++ b/packages/website/src/components/Navbar.astro @@ -0,0 +1,368 @@ +--- +import { assertSecret, imgur, ImgurSize } from '@blitzkit/core'; +import { + Cross1Icon, + DiscordLogoIcon, + GearIcon, + HamburgerMenuIcon, +} from '@radix-ui/react-icons'; +import { + Box, + Code, + Flex, + Grid, + IconButton, + Link, + ScrollArea, + Separator, + Text, +} from '@radix-ui/themes'; +import { BRANCH_NAMES } from '../constants/branches'; +import { NAVBAR_HEIGHT } from '../constants/navbar'; +import { homeTool, TOOLS } from '../constants/tools'; +import { PatreonIcon } from './PatreonIcon'; + +const toolsFiltered = TOOLS.filter((tool) => !('href' in tool)); +const tools = [homeTool, ...toolsFiltered]; +const isBranchNamed = + process.env.PUBLIC_ASSET_BRANCH && + BRANCH_NAMES[process.env.PUBLIC_ASSET_BRANCH]; +--- + + + + + + + + + + + + + + + + + + BlitzKit + { + isBranchNamed && ( + + {BRANCH_NAMES[process.env.PUBLIC_ASSET_BRANCH!]} + + ) + } + + + + + + + + { + toolsFiltered.map((tool, index) => { + const unavailableOnBranch = tool.branches?.every( + (branch) => + branch !== assertSecret(process.env.PUBLIC_ASSET_BRANCH), + ); + // const selected = window.location.pathname.startsWith( + // `/tools/${tool.id}`, + // ); + const selected = false; + + if (unavailableOnBranch) return null; + + return ( + + {index > 0 && } + + {tool.title} + + + ); + }) + } + + + + + + + + + + + + + + + + + + + + + + { + tools.map((tool) => { + const unavailableOnBranch = tool.branches?.every( + (branch) => + branch !== assertSecret(process.env.PUBLIC_ASSET_BRANCH), + ); + + if (unavailableOnBranch) return null; + + return ( + + + + + + {tool.title} + + + + ); + }) + } + + + + diff --git a/packages/website/src/components/Navbar/index.css.ts b/packages/website/src/components/Navbar/index.css.ts deleted file mode 100644 index 91b9e95ba..000000000 --- a/packages/website/src/components/Navbar/index.css.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { style, styleVariants } from '@vanilla-extract/css'; - -const MIN_WIDTH = 640 + 128; -export const NAVBAR_HEIGHT = 48; - -export const hamburger = style({ - display: 'inline-flex', - - '@media': { - [`screen and (min-width: ${MIN_WIDTH}px)`]: { - display: 'none', - }, - }, -}); - -export const tools = style({ - display: 'none', - - '@media': { - [`screen and (min-width: ${MIN_WIDTH}px)`]: { - display: 'flex', - }, - }, -}); - -export const navbar = style({ - height: NAVBAR_HEIGHT, - marginBottom: -1, // 1px overlap with content to bleed color - position: 'sticky', - top: 0, - zIndex: 1, -}); - -const navbarExpanderBase = style({ - transitionDuration: '250ms', - height: '1000px', - width: '100%', - overflow: 'hidden', - - backdropFilter: 'blur(4rem) brightness(0.75)', - WebkitBackdropFilter: 'blur(4rem) brightness(0.75)', - - '@media': { - [`screen and (min-width: ${MIN_WIDTH}px)`]: { - maxHeight: NAVBAR_HEIGHT, - }, - }, -}); - -export const navbarExpander = styleVariants({ - false: [ - navbarExpanderBase, - { - maxHeight: NAVBAR_HEIGHT, - }, - ], - true: [ - navbarExpanderBase, - { - maxHeight: '100vh', - overscrollBehavior: 'contain', - }, - ], -}); - -export const navbarContent = style({ - width: '100%', - maxHeight: '100vh', -}); diff --git a/packages/website/src/components/Navbar/index.tsx b/packages/website/src/components/Navbar/index.tsx deleted file mode 100644 index 1dfc106f1..000000000 --- a/packages/website/src/components/Navbar/index.tsx +++ /dev/null @@ -1,332 +0,0 @@ -import { - assertSecret, - imgur, - ImgurSize, - patreonLoginUrl, -} from '@blitzkit/core'; -import { useStore } from '@nanostores/react'; -import { - Cross1Icon, - DiscordLogoIcon, - GearIcon, - HamburgerMenuIcon, - PersonIcon, -} from '@radix-ui/react-icons'; -import { - Box, - Button, - Code, - Flex, - Grid, - IconButton, - Inset, - Link, - Popover, - ScrollArea, - Separator, - Skeleton, - Text, -} from '@radix-ui/themes'; -import { Fragment, Suspense, useState } from 'react'; -import { BRANCH_NAMES } from '../../constants/branches'; -import { homeTool, TOOLS } from '../../constants/tools'; -import { $patreonLogin } from '../../stores/patreonLogin'; -import { $wargamingLogin } from '../../stores/wargamingLogin'; -import { PatreonIcon } from '../PatreonIcon'; -import { WargamingIcon } from '../WargamingIcon'; -import { WargamingAccountName } from './components/WargamingAccountName'; -import { WargamingLoginButton } from './components/WargamingLoginButton'; -import * as styles from './index.css'; - -export function Navbar() { - const [showHamburgerMenu, setShowHamburgerMenu] = useState(false); - const patreonLogin = useStore($patreonLogin); - const wargamingLogin = useStore($wargamingLogin); - const toolsFiltered = TOOLS.filter((tool) => !('href' in tool)); - const tools = [homeTool, ...toolsFiltered]; - const isBranchNamed = - process.env.PUBLIC_ASSET_BRANCH && - BRANCH_NAMES[process.env.PUBLIC_ASSET_BRANCH]; - - return ( - - setShowHamburgerMenu(false)} - direction="column" - gap="2" - > - - - - { - event.stopPropagation(); - console.log('click!'); - setShowHamburgerMenu((state) => !state); - }} - > - {showHamburgerMenu ? : } - - - setShowHamburgerMenu(false)} - > - - BlitzKit - {isBranchNamed && ( - - {BRANCH_NAMES[process.env.PUBLIC_ASSET_BRANCH!]} - - )} - - - - - - - - {toolsFiltered.map((tool, index) => { - const unavailableOnBranch = tool.branches?.every( - (branch) => - branch !== assertSecret(process.env.PUBLIC_ASSET_BRANCH), - ); - // const selected = window.location.pathname.startsWith( - // `/tools/${tool.id}`, - // ); - const selected = false; - - if (unavailableOnBranch) return null; - - return ( - - {index > 0 && } - setShowHamburgerMenu(false)} - color="gray" - highContrast={selected} - size="2" - href={`/tools/${tool.id}`} - underline={selected ? 'always' : 'hover'} - > - {tool.title} - - - ); - })} - - - - - - setShowHamburgerMenu(false)} - > - - - setShowHamburgerMenu(false)} - > - - - setShowHamburgerMenu(false)} - > - - - - - - - - - - event.preventDefault()} - > - {(patreonLogin.token || wargamingLogin.token) && ( - - - Logged in accounts - - - {patreonLogin.token && ( - - - Patreon - - - )} - - {wargamingLogin.token && ( - - - - } - > - - - - - - )} - - )} - - {!patreonLogin.token !== !wargamingLogin.token && ( - - - - )} - - {(!patreonLogin.token || !wargamingLogin.token) && ( - - - Log in with... - - - {!patreonLogin.token && ( - - - - )} - - {!wargamingLogin.token && } - - )} - - - - - - - - - {tools.map((tool) => { - const unavailableOnBranch = tool.branches?.every( - (branch) => - branch !== assertSecret(process.env.PUBLIC_ASSET_BRANCH), - ); - - if (unavailableOnBranch) return null; - - return ( - setShowHamburgerMenu(false)} - style={{ - position: 'relative', - borderRadius: 'var(--radius-2)', - overflow: 'hidden', - backgroundImage: `url(${imgur(tool.image, { - format: 'jpeg', - size: ImgurSize.MediumThumbnail, - })})`, - backgroundSize: 'cover', - backgroundPosition: 'center', - aspectRatio: '2 / 1', - }} - > - - - - - {tool.title} - - - - ); - })} - - - - - ); -} diff --git a/packages/website/src/components/ToolCard.astro b/packages/website/src/components/ToolCard.astro index 3d90c7140..5301f18e2 100644 --- a/packages/website/src/components/ToolCard.astro +++ b/packages/website/src/components/ToolCard.astro @@ -12,8 +12,6 @@ const { tool } = Astro.props; const disabled = tool.branches?.every( (branch) => branch !== assertSecret(process.env.PUBLIC_ASSET_BRANCH), ); - -console.log(process.env); ---