Merge remote-tracking branch 'origin/main'

# Conflicts:
#	db/custom.db
#	src/components/FuseButton.tsx
#	src/components/SlideCommit.tsx
This commit is contained in:
Z User committed 2026-10-28 17:41:22 +00:00
commit 58521ca03a
23 files changed
+2622 -26

No files matched your search

+23
View File
@@ -1,5 +1,6 @@
'use client'
import { useState, useEffect } from 'react'
import { useAos } from '@/store/aos'
import { SidebarNav } from './sidebar-nav'
import { TopBar } from './top-bar'
@@ -38,10 +39,32 @@ import { MobileBottomNav } from './mobile-bottom-nav'
export function AppShell() {
const { view, sidebarOpen, setSidebarOpen, portalMode } = useAos()
const [mounted, setMounted] = useState(false)
// Hydration gate: wait for client mount before rendering interactive UI
// This prevents Radix UI useId() mismatches between server and client
useEffect(() => {
// eslint-disable-next-line react-hooks/set-state-in-effect
setMounted(true)
}, [])
// Portal mode renders a completely separate experience
if (portalMode) return <PortalShell />
// Before mount: render a minimal skeleton to prevent hydration mismatch
if (!mounted) {
return (
<div className="flex min-h-screen w-full bg-background">
<aside className="hidden w-64 shrink-0 border-r border-border md:block" />
<div className="flex min-w-0 flex-1 flex-col">
<header className="h-16 border-b border-border" />
<main className="flex-1" />
<Footer />
</div>
</div>
)
}
return (
<div className="flex min-h-screen w-full bg-background">
{/* Desktop sidebar */}