From 084ff2462cf1e3f1b891f9c9706bb98a7647afcf Mon Sep 17 00:00:00 2001 From: Brandon Hopkins <76761586+TechHutTV@users.noreply.github.com> Date: Mon, 5 Oct 2026 18:12:39 -0700 Subject: [PATCH] Fix mobile rendering issues (#1022) --- mdx/rehype.mjs | 2 +- src/components/Layout.jsx | 8 ++--- src/components/MobileNavigation.jsx | 10 ++++-- .../AnnouncementBanner.jsx | 31 ++++++++++++++----- .../AnnouncementBannerProvider.jsx | 8 ++--- src/components/mdx.jsx | 13 ++++++++ typography.js | 8 +++-- 7 files changed, 59 insertions(+), 21 deletions(-) diff --git a/mdx/rehype.mjs b/mdx/rehype.mjs index 0ddd7c78..d6b85d9d 100644 --- a/mdx/rehype.mjs +++ b/mdx/rehype.mjs @@ -54,7 +54,7 @@ function rehypeInsertLastUpdated() { type: 'element', tagName: 'p', properties: { - className: ['not-prose', 'text-sm', 'text-slate-400', 'dark:text-zinc-500', 'mt-0', 'mb-8', 'ml-2.5'], + className: ['not-prose', 'text-sm', 'text-slate-400', 'dark:text-zinc-500', 'mt-0', 'mb-8', 'md:ml-2.5'], }, children: [ { type: 'text', value: 'Updated ' }, diff --git a/src/components/Layout.jsx b/src/components/Layout.jsx index a54a6e11..4eefa80c 100644 --- a/src/components/Layout.jsx +++ b/src/components/Layout.jsx @@ -188,7 +188,7 @@ export function Layout({ children, title, tableOfContents }) {
-
-
- {children} +
+
+ {children}
diff --git a/src/components/MobileNavigation.jsx b/src/components/MobileNavigation.jsx index 54c531be..64188353 100644 --- a/src/components/MobileNavigation.jsx +++ b/src/components/MobileNavigation.jsx @@ -7,6 +7,7 @@ import { Header } from '@/components/Header' import { NavigationAPI } from '@/components/NavigationAPI' import {NavigationDocs} from "@/components/NavigationDocs"; import {useRouter} from "next/router"; +import { useAnnouncements } from '@/components/announcement-banner/AnnouncementBannerProvider' function MenuIcon(props) { return ( @@ -52,6 +53,7 @@ export const useMobileNavigationStore = create((set) => ({ export function MobileNavigation() { let isInsideMobileNavigation = useIsInsideMobileNavigation() let { isOpen, toggle, close } = useMobileNavigationStore() + let { bannerHeight } = useAnnouncements() let ToggleIcon = isOpen ? XIcon : MenuIcon let router = useRouter() @@ -78,7 +80,10 @@ export function MobileNavigation() { leaveFrom="opacity-100" leaveTo="opacity-0" > -
+
@@ -105,7 +110,8 @@ export function MobileNavigation() { > {router.route.startsWith("/ipa") ? : } diff --git a/src/components/announcement-banner/AnnouncementBanner.jsx b/src/components/announcement-banner/AnnouncementBanner.jsx index 1ae0e96f..f2ce8f57 100644 --- a/src/components/announcement-banner/AnnouncementBanner.jsx +++ b/src/components/announcement-banner/AnnouncementBanner.jsx @@ -1,4 +1,4 @@ -import clsx from 'clsx' +import { useLayoutEffect, useRef } from 'react' import Link from 'next/link' import { useAnnouncements } from '@/components/announcement-banner/AnnouncementBannerProvider' @@ -36,19 +36,34 @@ function CloseIcon(props) { function AnnouncementItem({ announcement, onClose }) { const announcementLink = useCustomQueryURL(announcement.link || '') + const bannerRef = useRef(null) + const { setBannerHeight } = useAnnouncements() + + useLayoutEffect(() => { + const banner = bannerRef.current + // Text wrapping and viewport changes can make the banner taller on phones. + const updateHeight = () => setBannerHeight(banner.getBoundingClientRect().height) + updateHeight() + const observer = new ResizeObserver(updateHeight) + observer.observe(banner) + + return () => { + observer.disconnect() + setBannerHeight(0) + } + }, [setBannerHeight]) return (
-
+
{announcement.tag ? ( -
+ {announcement.tag} -
+ ) : null} {announcement.text} @@ -101,4 +116,4 @@ export function AnnouncementBanner() { onClose={closeAnnouncement} /> ) -} \ No newline at end of file +} diff --git a/src/components/announcement-banner/AnnouncementBannerProvider.jsx b/src/components/announcement-banner/AnnouncementBannerProvider.jsx index 51f17ac0..72231de9 100644 --- a/src/components/announcement-banner/AnnouncementBannerProvider.jsx +++ b/src/components/announcement-banner/AnnouncementBannerProvider.jsx @@ -12,10 +12,10 @@ const ANNOUNCEMENTS_URL = 'https://raw.githubusercontent.com/netbirdio/dashboard/main/announcements.json' const STORAGE_KEY = 'netbird-announcements' const CACHE_DURATION_MS = 30 * 60 * 1000 -const BANNER_HEIGHT = 33 const AnnouncementContext = createContext({ bannerHeight: 0, + setBannerHeight: () => {}, announcements: undefined, closeAnnouncement: () => {}, }) @@ -83,6 +83,7 @@ const saveAnnouncements = (closedAnnouncements) => { export function AnnouncementBannerProvider({ children }) { const [announcements, setAnnouncements] = useState(undefined) + const [bannerHeight, setBannerHeight] = useState(0) const fetchingRef = useRef(false) useEffect(() => { @@ -108,12 +109,11 @@ export function AnnouncementBannerProvider({ children }) { [announcements] ) - const bannerHeight = announcements?.some((a) => a.isOpen) ? BANNER_HEIGHT : 0 - return ( + + + ) +} + export const h2 = function H2(props) { return } diff --git a/typography.js b/typography.js index 5915d5a4..b5fa59c4 100644 --- a/typography.js +++ b/typography.js @@ -48,9 +48,13 @@ module.exports = ({ theme }) => ({ // Layout '> *': { - maxWidth: theme('maxWidth.2xl'), - marginLeft: 10, + maxWidth: '100%', + marginLeft: 0, marginRight: 'auto', + '@screen md': { + maxWidth: theme('maxWidth.2xl'), + marginLeft: 10, + }, '@screen lg': { maxWidth: theme('maxWidth.3xl'), marginLeft: 10,