feat: vibrancy and root providers (#14)

Signed-off-by: Innei <i@innei.in>
This commit is contained in:
Innei 2024-05-26 22:45:33 +08:00 committed by GitHub
parent 0b01915e32
commit b62771139e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 86 additions and 76 deletions

View File

@ -22,6 +22,8 @@ export function createWindow(options?: {
sandbox: false,
},
titleBarStyle: "hiddenInset",
vibrancy: "window",
visualEffectState: "active",
})
window.on("ready-to-show", () => {
@ -55,17 +57,18 @@ export function createWindow(options?: {
]
window.webContents.session.webRequest.onBeforeSendHeaders(
(details, callback) => {
const trueUrl = process.env["VITE_IMGPROXY_URL"] &&
const trueUrl =
process.env["VITE_IMGPROXY_URL"] &&
details.url.startsWith(process.env["VITE_IMGPROXY_URL"]) ?
decodeURIComponent(
details.url.replace(
new RegExp(
`^${process.env["VITE_IMGPROXY_URL"]}/unsafe/\\d+x\\d+/`,
decodeURIComponent(
details.url.replace(
new RegExp(
`^${process.env["VITE_IMGPROXY_URL"]}/unsafe/\\d+x\\d+/`,
),
"",
),
"",
),
) :
details.url
) :
details.url
const refererMatch = refererMatchs.find((item) => item.url.test(trueUrl))
callback({
requestHeaders: {

View File

@ -1,8 +1,5 @@
import { Provider } from "jotai"
import { Outlet } from "react-router-dom"
import { jotaiStore } from "./lib/jotai"
function App() {
return (
<>
@ -10,9 +7,8 @@ function App() {
className="drag-region absolute inset-x-0 top-0 h-10 shrink-0"
aria-hidden
/>
<Provider store={jotaiStore}>
<Outlet />
</Provider>
<Outlet />
</>
)
}

View File

@ -71,6 +71,6 @@
@apply border-border;
}
body {
@apply bg-background text-foreground;
@apply text-foreground;
}
}

View File

@ -2,7 +2,6 @@ import { Button } from "@renderer/components/ui/button"
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "@renderer/components/ui/tooltip"
import { UserButton } from "@renderer/components/user-button"
@ -87,7 +86,7 @@ export function FeedColumn() {
<div className="flex items-center">
<Button variant="ghost" size="sm">
<Link to="/profile" className="flex">
<UserButton className="h-5 p-0" hideName={true} />
<UserButton className="h-5 p-0" hideName />
</Link>
</Button>
<Button variant="ghost" size="sm">
@ -98,35 +97,33 @@ export function FeedColumn() {
</div>
</div>
<div className="flex w-full justify-between px-3 text-xl text-zinc-500">
<TooltipProvider>
{views.map((item, index) => (
<Tooltip key={item.name}>
<TooltipTrigger asChild>
<Button
className={cn(
active === index && item.className,
"flex items-center text-xl",
)}
variant="ghost"
size="sm"
onClick={(e) => {
setActive(index)
setActiveList?.({
level: "view",
id: index,
name: views[index].name,
view: index,
})
e.stopPropagation()
}}
>
{item.icon}
</Button>
</TooltipTrigger>
<TooltipContent side="bottom">{item.name}</TooltipContent>
</Tooltip>
))}
</TooltipProvider>
{views.map((item, index) => (
<Tooltip key={item.name}>
<TooltipTrigger asChild>
<Button
className={cn(
active === index && item.className,
"flex items-center text-xl",
)}
variant="ghost"
size="sm"
onClick={(e) => {
setActive(index)
setActiveList?.({
level: "view",
id: index,
name: views[index].name,
view: index,
})
e.stopPropagation()
}}
>
{item.icon}
</Button>
</TooltipTrigger>
<TooltipContent side="bottom">{item.name}</TooltipContent>
</Tooltip>
))}
</div>
<div className="size-full overflow-hidden" ref={carouselRef}>
<m.div className="flex h-full" style={{ x: spring }}>

View File

@ -1,15 +1,12 @@
import "./assets/main.css"
import { authConfigManager, SessionProvider } from "@hono/auth-js/react"
import { Toaster } from "@renderer/components/ui/toaster"
import { queryClient } from "@renderer/lib/query-client"
import { QueryClientProvider } from "@tanstack/react-query"
import { LazyMotion, MotionConfig } from "framer-motion"
import { authConfigManager } from "@hono/auth-js/react"
import * as React from "react"
import ReactDOM from "react-dom/client"
import { createBrowserRouter, RouterProvider } from "react-router-dom"
import App from "./App"
import { RootProviders } from "./providers/root-providers"
const router = createBrowserRouter([
{
@ -97,9 +94,6 @@ const router = createBrowserRouter([
},
])
const loadFeatures = () =>
import("./framer-lazy-feature").then((res) => res.default)
authConfigManager.setConfig({
baseUrl: import.meta.env.VITE_API_URL,
basePath: "/auth",
@ -108,21 +102,8 @@ authConfigManager.setConfig({
ReactDOM.createRoot(document.querySelector("#root") as HTMLElement).render(
<React.StrictMode>
<LazyMotion features={loadFeatures} strict key="framer">
<MotionConfig
transition={{
type: "tween",
duration: 0.15,
ease: "easeInOut",
}}
>
<SessionProvider>
<QueryClientProvider client={queryClient}>
<RouterProvider router={router} />
</QueryClientProvider>
</SessionProvider>
</MotionConfig>
</LazyMotion>
<Toaster />
<RootProviders>
<RouterProvider router={router} />
</RootProviders>
</React.StrictMode>,
)

View File

@ -4,11 +4,12 @@ import { Outlet } from "react-router-dom"
export function Component() {
return (
<div className="flex h-full">
<div className="w-64 shrink-0 border-r bg-native pt-10">
<div className="w-64 shrink-0 border-r bg-native/80 pt-10 backdrop-blur">
<FeedColumn />
</div>
<Outlet />
<div className="flex flex-1 bg-background">
<Outlet />
</div>
</div>
)
}

View File

@ -32,7 +32,7 @@ export function Component() {
Follow Settings
</div> */}
<div className="flex flex-1">
<div className="w-44 border-r bg-native p-3 pt-10">
<div className="w-44 border-r bg-native/80 p-3 pt-10 backdrop-blur">
<div className="mx-2 mb-5 flex items-center gap-1 text-xl font-bold">
<img src="./icon.svg" alt="logo" className="size-6" />
Settings
@ -50,7 +50,7 @@ export function Component() {
</Link>
))}
</div>
<div className="p-8">
<div className="flex-1 bg-background p-8">
<Outlet />
</div>
</div>

View File

@ -0,0 +1,32 @@
import { SessionProvider } from "@hono/auth-js/react"
import { Toaster } from "@renderer/components/ui/toaster"
import { TooltipProvider } from "@renderer/components/ui/tooltip"
import { jotaiStore } from "@renderer/lib/jotai"
import { queryClient } from "@renderer/lib/query-client"
import { QueryClientProvider } from "@tanstack/react-query"
import { LazyMotion, MotionConfig } from "framer-motion"
import { Provider } from "jotai"
import type { FC, PropsWithChildren } from "react"
const loadFeatures = () =>
import("../framer-lazy-feature").then((res) => res.default)
export const RootProviders: FC<PropsWithChildren> = (props) => (
<LazyMotion features={loadFeatures} strict key="framer">
<MotionConfig
transition={{
type: "tween",
duration: 0.15,
ease: "easeInOut",
}}
>
<SessionProvider>
<QueryClientProvider client={queryClient}>
<TooltipProvider>
<Provider store={jotaiStore}>{props.children}</Provider>
</TooltipProvider>
</QueryClientProvider>
</SessionProvider>
</MotionConfig>
<Toaster />
</LazyMotion>
)