feat(docs): refine navigation and sponsor experience

This commit is contained in:
t8y2 2026-07-27 10:50:50 +08:00
parent 628371fa3f
commit 09c5a6cd22
No known key found for this signature in database
12 changed files with 193 additions and 35 deletions

View File

@ -49,7 +49,7 @@ const databaseSupport = [
{ name: "Trino", icon: "/icons/database/trino.svg", tone: "#dd00a1" },
{ name: "PrestoSQL", icon: "/icons/database/presto.svg", tone: "#5890ff" },
{ name: "Hive", icon: "/icons/database/hive.svg", tone: "#fdcb00" },
{ name: "Apache Spark", shortLabel: "SP", tone: "#e25a1c" },
{ name: "Spark", shortLabel: "SP", tone: "#e25a1c" },
{ name: "DB2", icon: "/icons/database/db2.svg", tone: "#054ada" },
{ name: "SAP HANA", icon: "/icons/database/saphana.webp", tone: "#008fd3" },
{ name: "Teradata", icon: "/icons/database/teradata.webp", tone: "#f37440" },
@ -77,7 +77,7 @@ const databaseSupport = [
{ name: "Etcd", icon: "/icons/database/etcd.svg", tone: "#419eda" },
{ name: "ZooKeeper", icon: "/icons/database/zookeeper.svg", tone: "#3b82f6" },
{ name: "Pulsar", icon: "/icons/database/pulsar.svg", tone: "#188fff" },
{ name: "Apache Kafka", shortLabel: "KF", tone: "#231f20" },
{ name: "Kafka", shortLabel: "KF", tone: "#231f20" },
{ name: "Nacos", icon: "/icons/database/nacos.png", tone: "#2f80ed" },
{ name: "IRIS", icon: "/icons/database/iris.png", tone: "#0085ca" },
{ name: "JDBC", icon: "/icons/database/jdbc.svg", tone: "#6ea8ff" },

View File

@ -1,7 +1,7 @@
import { source } from "@/lib/source";
import { notFound } from "next/navigation";
import type { Metadata } from "next";
import { DocsPage, DocsBody, DocsTitle, DocsDescription } from "fumadocs-ui/page";
import { DocsPage, DocsBody, DocsTitle } from "fumadocs-ui/page";
import defaultMdxComponents from "fumadocs-ui/mdx";
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
@ -92,7 +92,6 @@ export default async function Page({ params }: { params: Promise<{ lang: string;
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(breadcrumbJsonLd) }} />
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(articleJsonLd) }} />
<DocsTitle>{title}</DocsTitle>
<DocsDescription>{description}</DocsDescription>
<DocsBody>
<MDX components={mdxComponents} />
</DocsBody>

View File

@ -86,7 +86,7 @@ const databaseSupport = [
{ name: "Trino", icon: "/icons/database/trino.svg", tone: "#dd00a1" },
{ name: "PrestoSQL", icon: "/icons/database/presto.svg", tone: "#5890ff" },
{ name: "Hive", icon: "/icons/database/hive.svg", tone: "#fdcb00" },
{ name: "Apache Spark", shortLabel: "SP", tone: "#e25a1c" },
{ name: "Spark", shortLabel: "SP", tone: "#e25a1c" },
{ name: "DB2", icon: "/icons/database/db2.svg", tone: "#054ada" },
{ name: "SAP HANA", icon: "/icons/database/saphana.webp", tone: "#008fd3" },
{ name: "Teradata", icon: "/icons/database/teradata.webp", tone: "#f37440" },
@ -114,7 +114,7 @@ const databaseSupport = [
{ name: "Etcd", icon: "/icons/database/etcd.svg", tone: "#419eda" },
{ name: "ZooKeeper", icon: "/icons/database/zookeeper.svg", tone: "#3b82f6" },
{ name: "Pulsar", icon: "/icons/database/pulsar.svg", tone: "#188fff" },
{ name: "Apache Kafka", shortLabel: "KF", tone: "#231f20" },
{ name: "Kafka", shortLabel: "KF", tone: "#231f20" },
{ name: "Nacos", icon: "/icons/database/nacos.png", tone: "#2f80ed" },
{ name: "IRIS", icon: "/icons/database/iris.png", tone: "#0085ca" },
{ name: "JDBC", icon: "/icons/database/jdbc.svg", tone: "#6ea8ff" },
@ -369,8 +369,9 @@ const i18nText = {
docsStartDesc: "Install DBX, create your first connection, and learn the main workflow.",
workflowsTitle: "Core workflows",
workflowsDesc: "The docs are organized around what you actually do in a database client.",
supportTitle: "Supports many databases",
supportDesc: "Connect and manage SQL, NoSQL, embedded databases, and MySQL/PostgreSQL-compatible engines without switching tools.",
supportTitle: "Supports 70+ databases",
supportDesc: "Connect SQL, NoSQL, vector, time-series, and embedded databases, message queues, and compatible engines in one place.",
supportLink: "View all",
testimonialsTitle: "What DBX is good at",
testimonialsDesc: "A closer look at the everyday database workflows DBX is built to make smoother.",
capabilitiesTitle: "Built for real database work",
@ -394,8 +395,9 @@ const i18nText = {
docsStartDesc: "安装 DBX、创建第一个连接并了解主要工作流。",
workflowsTitle: "核心工作流",
workflowsDesc: "文档围绕数据库客户端里的真实任务组织,而不是堆功能清单。",
supportTitle: "支持多种数据库",
supportDesc: "告别频繁切换工具的烦恼。DBX 可以连接和管理多种数据库类型,让你更专注于查询、分析和数据本身。",
supportTitle: "支持70+种数据库",
supportDesc: "统一连接和管理 SQL、NoSQL、向量、时序、嵌入式数据库、消息队列及兼容引擎。",
supportLink: "查看全部",
testimonialsTitle: "DBX 适合什么样的工作",
testimonialsDesc: "从连接管理、数据浏览到 AI 辅助DBX 围绕高频数据库工作流打磨体验。",
capabilitiesTitle: "面向真实数据库工作的能力",
@ -526,7 +528,13 @@ export default async function LandingPage({ params }: { params: Promise<{ lang:
<RevealSection className="relative max-w-[1180px] mx-auto px-7 pt-[70px] pb-1 max-[760px]:px-[18px]">
<div className="grid grid-cols-[minmax(260px,0.28fr)_minmax(0,0.72fr)] gap-9 items-end mb-[30px] max-[760px]:block">
<h2 className="m-0 text-[25px] font-[720] text-landing-ink">{t.supportTitle}</h2>
<p className="mt-2 max-w-[760px] text-landing-muted text-sm leading-[1.65] justify-self-end text-right max-[760px]:max-w-none max-[760px]:text-left">{t.supportDesc}</p>
<div className="flex items-center justify-end gap-5 justify-self-end max-w-[760px] text-right max-[760px]:block max-[760px]:max-w-none max-[760px]:text-left">
<p className="m-0 text-landing-muted text-sm leading-[1.65]">{t.supportDesc}</p>
<Link href={`/${l}/databases`} className="landing-inline-link inline-flex shrink-0 items-center gap-[7px] text-sm font-[650] max-[760px]:mt-3">
{t.supportLink}
<ArrowRight size={15} />
</Link>
</div>
</div>
<div className="grid grid-cols-9 gap-3 max-[1240px]:grid-cols-7 max-[960px]:grid-cols-5 max-[640px]:grid-cols-3 max-[440px]:grid-cols-2 max-[760px]:gap-2.5">
{databaseSupport.map((db) => {
@ -588,9 +596,6 @@ export default async function LandingPage({ params }: { params: Promise<{ lang:
<ContributorsWallContent contributors={contributors} title={t.contributorsTitle} desc={t.contributorsDesc} lang={l} />
</RevealSection>
{/* Updates */}
<LandingLatestUpdates lang={l} fallbackVersion={appVersion} initialRelease={initialChangelog.releases[0]} initialLatestRelease={initialLatestRelease} />
{/* Sponsor */}
<RevealSection className="max-w-[1180px] mx-auto px-7 mt-10 max-[760px]:px-[18px]">
<div className="flex items-center justify-between gap-5 rounded-[10px] border border-landing-line bg-landing-panel px-5 py-4 max-[760px]:block">
@ -607,6 +612,9 @@ export default async function LandingPage({ params }: { params: Promise<{ lang:
</div>
</RevealSection>
{/* Updates */}
<LandingLatestUpdates lang={l} fallbackVersion={appVersion} initialRelease={initialChangelog.releases[0]} initialLatestRelease={initialLatestRelease} />
{/* Final CTA */}
<RevealSection className="flex items-center justify-between gap-6 max-w-[1180px] mx-auto px-7 border border-landing-line rounded-[10px] bg-landing-panel mt-[72px] mb-14 py-[30px] max-[760px]:block max-[760px]:px-[18px]">
<div>

View File

@ -0,0 +1,87 @@
import type { Metadata } from "next";
import Link from "next/link";
import { LandingFooter } from "@/components/landing/LandingFooter";
import { LandingNav } from "@/components/landing/LandingNav";
import { buildMetadata } from "@/lib/metadata";
const i18n = {
en: {
title: "Sponsors & Partners",
desc: "Thank you to the sponsors and partners supporting DBX through funding, resources, services, and collaboration.",
sponsorDesc: "RainYun is a cloud service provider offering cloud servers, physical servers, game hosting, and developer-friendly infrastructure services.",
sponsorAction: "Visit RainYun",
becomeTitle: "Support DBX",
becomeDesc: "Financial sponsorship, infrastructure, developer tools, services, and other forms of support are all welcome from individuals and organizations.",
becomeContact: "QQ: 86554840",
becomeAction: "Contact us",
},
cn: {
title: "赞助商与合作伙伴",
desc: "感谢赞助商与合作伙伴通过资金、资源、服务和协作等方式支持 DBX 持续发展。",
sponsorDesc: "雨云是面向开发者和站长的云服务提供商,提供云服务器、物理服务器、游戏云和配套基础设施服务。",
sponsorAction: "访问雨云",
becomeTitle: "支持 DBX",
becomeDesc: "无论是个人还是团队,资金赞助、基础设施、开发工具、服务资源或其他形式的支持都十分欢迎。",
becomeContact: "QQ86554840",
becomeAction: "联系赞助合作",
},
};
export async function generateMetadata({ params }: { params: Promise<{ lang: string }> }): Promise<Metadata> {
const { lang } = await params;
const locale = lang === "cn" ? "cn" : "en";
const t = i18n[locale];
return buildMetadata({
title: t.title,
description: t.desc,
path: `/${locale}/sponsors`,
lang: locale,
});
}
export default async function SponsorsPage({ params }: { params: Promise<{ lang: string }> }) {
const { lang } = await params;
const locale = lang === "cn" ? "cn" : "en";
const t = i18n[locale];
return (
<main className="min-h-screen bg-[#0b1120] text-landing-ink">
<LandingNav lang={locale} active="sponsors" />
<section className="max-w-[860px] mx-auto px-6 pt-32 pb-24">
<h1 className="text-4xl font-[820] tracking-tight">{t.title}</h1>
<p className="mt-3 max-w-[700px] text-landing-muted text-lg leading-relaxed">{t.desc}</p>
<div className="mt-10 rounded-xl border border-landing-line bg-landing-panel p-6">
<div className="flex items-center gap-6 max-[640px]:block">
<Link href="https://www.rainyun.com/MTE5Mjc4Ng==_" target="_blank" className="flex h-24 w-44 shrink-0 items-center justify-center rounded-lg bg-white px-5 shadow-[0_10px_30px_rgba(15,23,42,0.08)] max-[640px]:w-max">
<img src="https://www.rainyun.com/img/logo.d193755d.png" alt="RainYun" className="h-12 w-auto max-w-[150px]" />
</Link>
<div className="min-w-0 max-[640px]:mt-5">
<h2 className="text-2xl font-[760]">RainYun</h2>
<p className="mt-2 text-sm leading-[1.7] text-landing-muted">{t.sponsorDesc}</p>
<Link href="https://www.rainyun.com/MTE5Mjc4Ng==_" target="_blank" className="landing-inline-link mt-4 inline-flex items-center gap-[7px] text-sm font-[650]">
{t.sponsorAction}
<span aria-hidden="true"></span>
</Link>
</div>
</div>
</div>
<div className="mt-10 rounded-xl border border-landing-line bg-landing-panel px-6 py-5">
<h2 className="text-xl font-[720]">{t.becomeTitle}</h2>
<p className="mt-2 text-sm leading-[1.7] text-landing-muted">{t.becomeDesc}</p>
<div className="mt-5 flex flex-wrap items-center gap-4">
<span className="text-sm font-[650] text-landing-muted">{t.becomeContact}</span>
<Link href="https://github.com/t8y2/dbx/discussions" target="_blank" className="landing-final-link inline-flex min-h-[42px] items-center justify-center rounded-[7px] px-4 text-sm font-[650]">
{t.becomeAction}
</Link>
</div>
</div>
</section>
<LandingFooter lang={locale} />
</main>
);
}

View File

@ -1,23 +1,24 @@
"use client";
import Link from "next/link";
import { Github } from "lucide-react";
import { useEffect, useRef } from "react";
const i18n = {
en: {
home: "Home",
docs: "Docs",
databases: "Databases",
changelog: "Changelog",
community: "Community",
sponsors: "Sponsors",
contributors: "Contributors",
drivers: "Offline Drivers",
lang: "中文",
langLabel: "Switch to Chinese",
},
cn: { home: "首页", docs: "文档", databases: "数据库", changelog: "更新日志", community: "交流群", contributors: "贡献者", drivers: "离线驱动", lang: "English" },
cn: { home: "首页", docs: "文档", changelog: "更新日志", community: "交流群", sponsors: "赞助商", contributors: "贡献者", drivers: "离线驱动", langLabel: "切换到英文" },
};
export function LandingNav({ lang, active }: { lang: "en" | "cn"; active?: "home" | "databases" | "changelog" | "community" | "contributors" | "drivers" }) {
export function LandingNav({ lang, active }: { lang: "en" | "cn"; active?: "home" | "databases" | "changelog" | "community" | "sponsors" | "contributors" | "drivers" }) {
const ref = useRef<HTMLElement>(null);
const t = i18n[lang];
const otherLang = lang === "cn" ? "en" : "cn";
@ -25,6 +26,7 @@ export function LandingNav({ lang, active }: { lang: "en" | "cn"; active?: "home
databases: `/${otherLang}/databases`,
changelog: `/${otherLang}/changelog`,
community: `/${otherLang}/community`,
sponsors: `/${otherLang}/sponsors`,
contributors: `/${otherLang}/contributors`,
drivers: `/${otherLang}/drivers`,
};
@ -57,26 +59,26 @@ export function LandingNav({ lang, active }: { lang: "en" | "cn"; active?: "home
<Link href={`/${lang}/docs/what-is-dbx`} className="landing-nav-link rounded-[7px] px-[11px] py-2 text-[13px] font-medium max-[760px]:hidden text-landing-muted">
{t.docs}
</Link>
<Link href={`/${lang}/databases`} className={`landing-nav-link rounded-[7px] px-[11px] py-2 text-[13px] font-medium max-[760px]:hidden ${active === "databases" ? "text-landing-ink" : "text-landing-muted"}`}>
{t.databases}
</Link>
<Link href={`/${lang}/changelog`} className={`landing-nav-link rounded-[7px] px-[11px] py-2 text-[13px] font-medium max-[760px]:hidden ${active === "changelog" ? "text-landing-ink" : "text-landing-muted"}`}>
{t.changelog}
</Link>
<Link href={`/${lang}/community`} className={`landing-nav-link rounded-[7px] px-[11px] py-2 text-[13px] font-medium max-[760px]:hidden ${active === "community" ? "text-landing-ink" : "text-landing-muted"}`}>
{t.community}
</Link>
<Link href={`/${lang}/sponsors`} className={`landing-nav-link rounded-[7px] px-[11px] py-2 text-[13px] font-medium max-[900px]:hidden ${active === "sponsors" ? "text-landing-ink" : "text-landing-muted"}`}>
{t.sponsors}
</Link>
<Link href={`/${lang}/contributors`} className={`landing-nav-link rounded-[7px] px-[11px] py-2 text-[13px] font-medium max-[900px]:hidden ${active === "contributors" ? "text-landing-ink" : "text-landing-muted"}`}>
{t.contributors}
</Link>
<Link href={`/${lang}/drivers`} className={`landing-nav-link rounded-[7px] px-[11px] py-2 text-[13px] font-medium max-[760px]:hidden ${active === "drivers" ? "text-landing-ink" : "text-landing-muted"}`}>
{t.drivers}
</Link>
<Link href="https://github.com/t8y2/dbx" target="_blank" className="landing-nav-link rounded-[7px] px-[11px] py-2 text-landing-muted text-[13px] font-medium max-[760px]:hidden">
GitHub
<Link href="https://github.com/t8y2/dbx" target="_blank" aria-label="GitHub" title="GitHub" className="landing-nav-link inline-flex size-9 items-center justify-center rounded-[7px] text-landing-muted max-[760px]:hidden">
<Github size={18} strokeWidth={2} />
</Link>
<Link href={langHref} className="landing-nav-link rounded-[7px] px-[11px] py-2 text-landing-muted text-[13px] font-medium ml-1.5 border border-landing-line">
{t.lang}
<Link href={langHref} aria-label={t.langLabel} title={t.langLabel} className="landing-nav-link ml-1.5 inline-flex h-9 items-center justify-center rounded-[7px] border border-landing-line px-2.5 text-[12px] font-[650] tracking-tight text-landing-muted">
/A
</Link>
</div>
</div>

View File

@ -5,6 +5,10 @@ description: 使用 1Panel 应用商店安装、访问和更新 DBX Web 版。
1Panel 应用商店提供了 DBX 官方 Docker 镜像,可以直接在服务器上完成安装和更新,不需要手动编写 Docker 命令。
## 可选的服务器方案
如果你还没有用于部署 DBX 的服务器,可以了解[雨云](https://www.rainyun.com/MTE5Mjc4Ng==_)。雨云是面向开发者和站长的云服务提供商,提供云服务器、物理服务器、游戏云和配套基础设施服务。当然,任何满足 Docker 和 1Panel 运行要求的服务器都可以部署 DBX。
## 安装 DBX
1. 登录 1Panel打开 **应用商店**。

View File

@ -5,6 +5,10 @@ description: Install, access, and update the DBX web edition from the 1Panel app
The 1Panel app store provides the official DBX Docker image, so you can install and update the DBX web edition without writing Docker commands manually.
## Optional server choice
If you still need a server for DBX, you can take a look at [RainYun](https://www.rainyun.com/MTE5Mjc4Ng==_). RainYun is a cloud service provider offering cloud servers, physical servers, game hosting, and developer-friendly infrastructure services. Any server that meets the Docker and 1Panel requirements can host DBX as well.
## Install DBX
1. Sign in to 1Panel and open **App Store**.

View File

@ -28,10 +28,26 @@ DBX 使用混合驱动架构:内置 Rust 驱动、独立原生 Agent以及
## 安装驱动
<Steps>
<Step>### 打开驱动商店 导航到**设置 → 驱动**或点击连接对话框中的驱动安装提示。</Step>
<Step>### 选择驱动 找到所需的数据库驱动。每个条目显示支持的数据库和驱动版本。</Step>
<Step>### 点击安装 DBX 会下载原生 Agent 可执行文件或 JDBC Agent JAR以及所需运行时。下载过程中显示进度。</Step>
<Step>### 创建连接 返回连接对话框。驱动此时即可使用。</Step>
<Step>
### 打开驱动商店
导航到**设置 → 驱动**或点击连接对话框中的驱动安装提示。
</Step>
<Step>
### 选择驱动
找到所需的数据库驱动。每个条目显示支持的数据库和驱动版本。
</Step>
<Step>
### 点击安装
DBX 会下载原生 Agent 可执行文件或 JDBC Agent JAR以及所需运行时。下载过程中显示进度。
</Step>
<Step>
### 创建连接
返回连接对话框。驱动此时即可使用。
</Step>
</Steps>
## JRE 管理

View File

@ -28,10 +28,26 @@ Open the Driver Store from **Settings → Drivers** or click the driver hint tha
## Installing Drivers
<Steps>
<Step>### Open Driver Store Navigate to **Settings → Drivers** or click the driver install hint in the connection dialog.</Step>
<Step>### Choose a Driver Find the database driver you need. Each entry shows the supported database and driver version.</Step>
<Step>### Click Install DBX downloads the native Agent executable or JDBC Agent JAR and any required runtime. Progress is shown during download.</Step>
<Step>### Create a Connection Return to the connection dialog. The driver is now ready for use.</Step>
<Step>
### Open Driver Store
Navigate to **Settings → Drivers** or click the driver install hint in the connection dialog.
</Step>
<Step>
### Choose a Driver
Find the database driver you need. Each entry shows the supported database and driver version.
</Step>
<Step>
### Click Install
DBX downloads the native Agent executable or JDBC Agent JAR and any required runtime. Progress is shown during download.
</Step>
<Step>
### Create a Connection
Return to the connection dialog. The driver is now ready for use.
</Step>
</Steps>
## JRE Management

View File

@ -0,0 +1,14 @@
diff --git a/dist/index.js b/dist/index.js
index 7de36edd1ab173cb0410492a9c3ff211314147e5..370ee0b550ff215413549533f3eb7ee92d11802b 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -1 +1 @@
-"use client";var N=Object.create;var R=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var H=Object.getPrototypeOf,W=Object.prototype.hasOwnProperty;var $=(e,s)=>{for(var n in s)R(e,n,{get:s[n],enumerable:!0})},b=(e,s,n,l)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of _(s))!W.call(e,o)&&o!==n&&R(e,o,{get:()=>s[o],enumerable:!(l=V(s,o))||l.enumerable});return e};var j=(e,s,n)=>(n=e!=null?N(H(e)):{},b(s||!e||!e.__esModule?R(n,"default",{value:e,enumerable:!0}):n,e)),z=e=>b(R({},"__esModule",{value:!0}),e);var ee={};$(ee,{ThemeProvider:()=>F,useTheme:()=>B});module.exports=z(ee);var t=j(require("react"));var I=(e,s,n,l,o,d,u,h)=>{let m=document.documentElement,w=["light","dark"];function p(r){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&d?o.map(f=>d[f]||f):o;k?(m.classList.remove(...S),m.classList.add(d&&d[r]?d[r]:r)):m.setAttribute(y,r)}),C(r)}function C(r){h&&w.includes(r)&&(m.style.colorScheme=r)}function a(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(l)p(l);else try{let r=localStorage.getItem(s)||n,y=u&&r==="system"?a():r;p(y)}catch(r){}};var Q=["light","dark"],D="(prefers-color-scheme: dark)",J=typeof window=="undefined",L=t.createContext(void 0),q={setTheme:e=>{},themes:[]},B=()=>{var e;return(e=t.useContext(L))!=null?e:q},F=e=>t.useContext(L)?t.createElement(t.Fragment,null,e.children):t.createElement(X,{...e}),G=["light","dark"],X=({forcedTheme:e,disableTransitionOnChange:s=!1,enableSystem:n=!0,enableColorScheme:l=!0,storageKey:o="theme",themes:d=G,defaultTheme:u=n?"system":"light",attribute:h="data-theme",value:m,children:w,nonce:p,scriptProps:C})=>{let[a,r]=t.useState(()=>Z(o,u)),[T,y]=t.useState(()=>a==="system"?x():a),k=m?Object.values(m):d,S=t.useCallback(i=>{let c=i;if(!c)return;i==="system"&&n&&(c=x());let v=m?m[c]:c,E=s?K(p):null,P=document.documentElement,M=g=>{g==="class"?(P.classList.remove(...k),v&&P.classList.add(v)):g.startsWith("data-")&&(v?P.setAttribute(g,v):P.removeAttribute(g))};if(Array.isArray(h)?h.forEach(M):M(h),l){let g=Q.includes(u)?u:null,U=Q.includes(c)?c:g;P.style.colorScheme=U}E==null||E()},[p]),f=t.useCallback(i=>{let c=typeof i=="function"?i(a):i;r(c);try{localStorage.setItem(o,c)}catch(v){}},[a]),A=t.useCallback(i=>{let c=x(i);y(c),a==="system"&&n&&!e&&S("system")},[a,e]);t.useEffect(()=>{let i=window.matchMedia(D);return i.addListener(A),A(i),()=>i.removeListener(A)},[A]),t.useEffect(()=>{let i=c=>{c.key===o&&(c.newValue?r(c.newValue):f(u))};return window.addEventListener("storage",i),()=>window.removeEventListener("storage",i)},[f]),t.useEffect(()=>{S(e!=null?e:a)},[e,a]);let O=t.useMemo(()=>({theme:a,setTheme:f,forcedTheme:e,resolvedTheme:a==="system"?T:a,themes:n?[...d,"system"]:d,systemTheme:n?T:void 0}),[a,f,e,T,n,d]);return t.createElement(L.Provider,{value:O},t.createElement(Y,{forcedTheme:e,storageKey:o,attribute:h,enableSystem:n,enableColorScheme:l,defaultTheme:u,value:m,themes:d,nonce:p,scriptProps:C}),w)},Y=t.memo(({forcedTheme:e,storageKey:s,attribute:n,enableSystem:l,enableColorScheme:o,defaultTheme:d,value:u,themes:h,nonce:m,scriptProps:w})=>{let p=JSON.stringify([n,s,d,e,h,u,l,o]).slice(1,-1);return t.createElement("script",{...w,suppressHydrationWarning:!0,nonce:typeof window=="undefined"?m:"",dangerouslySetInnerHTML:{__html:`(${I.toString()})(${p})`}})}),Z=(e,s)=>{if(J)return;let n;try{n=localStorage.getItem(e)||void 0}catch(l){}return n||s},K=e=>{let s=document.createElement("style");return e&&s.setAttribute("nonce",e),s.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(s),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(s)},1)}},x=e=>(e||(e=window.matchMedia(D)),e.matches?"dark":"light");0&&(module.exports={ThemeProvider,useTheme});
+"use client";var N=Object.create;var R=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var H=Object.getPrototypeOf,W=Object.prototype.hasOwnProperty;var $=(e,s)=>{for(var n in s)R(e,n,{get:s[n],enumerable:!0})},b=(e,s,n,l)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of _(s))!W.call(e,o)&&o!==n&&R(e,o,{get:()=>s[o],enumerable:!(l=V(s,o))||l.enumerable});return e};var j=(e,s,n)=>(n=e!=null?N(H(e)):{},b(s||!e||!e.__esModule?R(n,"default",{value:e,enumerable:!0}):n,e)),z=e=>b(R({},"__esModule",{value:!0}),e);var ee={};$(ee,{ThemeProvider:()=>F,useTheme:()=>B});module.exports=z(ee);var t=j(require("react"));var I=(e,s,n,l,o,d,u,h)=>{let m=document.documentElement,w=["light","dark"];function p(r){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&d?o.map(f=>d[f]||f):o;k?(m.classList.remove(...S),m.classList.add(d&&d[r]?d[r]:r)):m.setAttribute(y,r)}),C(r)}function C(r){h&&w.includes(r)&&(m.style.colorScheme=r)}function a(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(l)p(l);else try{let r=localStorage.getItem(s)||n,y=u&&r==="system"?a():r;p(y)}catch(r){}};var Q=["light","dark"],D="(prefers-color-scheme: dark)",J=typeof window=="undefined",L=t.createContext(void 0),q={setTheme:e=>{},themes:[]},B=()=>{var e;return(e=t.useContext(L))!=null?e:q},F=e=>t.useContext(L)?t.createElement(t.Fragment,null,e.children):t.createElement(X,{...e}),G=["light","dark"],X=({forcedTheme:e,disableTransitionOnChange:s=!1,enableSystem:n=!0,enableColorScheme:l=!0,storageKey:o="theme",themes:d=G,defaultTheme:u=n?"system":"light",attribute:h="data-theme",value:m,children:w,nonce:p,scriptProps:C})=>{let[a,r]=t.useState(()=>Z(o,u)),[T,y]=t.useState(()=>a==="system"?x():a),k=m?Object.values(m):d,S=t.useCallback(i=>{let c=i;if(!c)return;i==="system"&&n&&(c=x());let v=m?m[c]:c,E=s?K(p):null,P=document.documentElement,M=g=>{g==="class"?(P.classList.remove(...k),v&&P.classList.add(v)):g.startsWith("data-")&&(v?P.setAttribute(g,v):P.removeAttribute(g))};if(Array.isArray(h)?h.forEach(M):M(h),l){let g=Q.includes(u)?u:null,U=Q.includes(c)?c:g;P.style.colorScheme=U}E==null||E()},[p]),f=t.useCallback(i=>{let c=typeof i=="function"?i(a):i;r(c);try{localStorage.setItem(o,c)}catch(v){}},[a]),A=t.useCallback(i=>{let c=x(i);y(c),a==="system"&&n&&!e&&S("system")},[a,e]);t.useEffect(()=>{let i=window.matchMedia(D);return i.addListener(A),A(i),()=>i.removeListener(A)},[A]),t.useEffect(()=>{let i=c=>{c.key===o&&(c.newValue?r(c.newValue):f(u))};return window.addEventListener("storage",i),()=>window.removeEventListener("storage",i)},[f]),t.useEffect(()=>{S(e!=null?e:a)},[e,a]);let O=t.useMemo(()=>({theme:a,setTheme:f,forcedTheme:e,resolvedTheme:a==="system"?T:a,themes:n?[...d,"system"]:d,systemTheme:n?T:void 0}),[a,f,e,T,n,d]);return t.createElement(L.Provider,{value:O},t.createElement(Y,{forcedTheme:e,storageKey:o,attribute:h,enableSystem:n,enableColorScheme:l,defaultTheme:u,value:m,themes:d,nonce:p,scriptProps:C}),w)},Y=t.memo(({forcedTheme:e,storageKey:s,attribute:n,enableSystem:l,enableColorScheme:o,defaultTheme:d,value:u,themes:h,nonce:m,scriptProps:w})=>{let p=JSON.stringify([n,s,d,e,h,u,l,o]).slice(1,-1);return typeof window=="undefined"?t.createElement("script",{...w,suppressHydrationWarning:!0,nonce:typeof window=="undefined"?m:"",dangerouslySetInnerHTML:{__html:`(${I.toString()})(${p})`}}):null}),Z=(e,s)=>{if(J)return;let n;try{n=localStorage.getItem(e)||void 0}catch(l){}return n||s},K=e=>{let s=document.createElement("style");return e&&s.setAttribute("nonce",e),s.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(s),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(s)},1)}},x=e=>(e||(e=window.matchMedia(D)),e.matches?"dark":"light");0&&(module.exports={ThemeProvider,useTheme});
diff --git a/dist/index.mjs b/dist/index.mjs
index 9675b38b88b935960dbf4d2203cfaaaef13cbef4..bd7d5f797dd60609976433faceb9d62a2da9c141 100644
--- a/dist/index.mjs
+++ b/dist/index.mjs
@@ -1 +1 @@
-"use client";import*as t from"react";var M=(e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}};var b=["light","dark"],I="(prefers-color-scheme: dark)",O=typeof window=="undefined",x=t.createContext(void 0),U={setTheme:e=>{},themes:[]},z=()=>{var e;return(e=t.useContext(x))!=null?e:U},J=e=>t.useContext(x)?t.createElement(t.Fragment,null,e.children):t.createElement(V,{...e}),N=["light","dark"],V=({forcedTheme:e,disableTransitionOnChange:i=!1,enableSystem:s=!0,enableColorScheme:u=!0,storageKey:m="theme",themes:a=N,defaultTheme:l=s?"system":"light",attribute:h="data-theme",value:d,children:w,nonce:p,scriptProps:R})=>{let[c,n]=t.useState(()=>H(m,l)),[T,y]=t.useState(()=>c==="system"?E():c),k=d?Object.values(d):a,S=t.useCallback(o=>{let r=o;if(!r)return;o==="system"&&s&&(r=E());let v=d?d[r]:r,C=i?W(p):null,P=document.documentElement,L=g=>{g==="class"?(P.classList.remove(...k),v&&P.classList.add(v)):g.startsWith("data-")&&(v?P.setAttribute(g,v):P.removeAttribute(g))};if(Array.isArray(h)?h.forEach(L):L(h),u){let g=b.includes(l)?l:null,D=b.includes(r)?r:g;P.style.colorScheme=D}C==null||C()},[p]),f=t.useCallback(o=>{let r=typeof o=="function"?o(c):o;n(r);try{localStorage.setItem(m,r)}catch(v){}},[c]),A=t.useCallback(o=>{let r=E(o);y(r),c==="system"&&s&&!e&&S("system")},[c,e]);t.useEffect(()=>{let o=window.matchMedia(I);return o.addListener(A),A(o),()=>o.removeListener(A)},[A]),t.useEffect(()=>{let o=r=>{r.key===m&&(r.newValue?n(r.newValue):f(l))};return window.addEventListener("storage",o),()=>window.removeEventListener("storage",o)},[f]),t.useEffect(()=>{S(e!=null?e:c)},[e,c]);let Q=t.useMemo(()=>({theme:c,setTheme:f,forcedTheme:e,resolvedTheme:c==="system"?T:c,themes:s?[...a,"system"]:a,systemTheme:s?T:void 0}),[c,f,e,T,s,a]);return t.createElement(x.Provider,{value:Q},t.createElement(_,{forcedTheme:e,storageKey:m,attribute:h,enableSystem:s,enableColorScheme:u,defaultTheme:l,value:d,themes:a,nonce:p,scriptProps:R}),w)},_=t.memo(({forcedTheme:e,storageKey:i,attribute:s,enableSystem:u,enableColorScheme:m,defaultTheme:a,value:l,themes:h,nonce:d,scriptProps:w})=>{let p=JSON.stringify([s,i,a,e,h,l,u,m]).slice(1,-1);return t.createElement("script",{...w,suppressHydrationWarning:!0,nonce:typeof window=="undefined"?d:"",dangerouslySetInnerHTML:{__html:`(${M.toString()})(${p})`}})}),H=(e,i)=>{if(O)return;let s;try{s=localStorage.getItem(e)||void 0}catch(u){}return s||i},W=e=>{let i=document.createElement("style");return e&&i.setAttribute("nonce",e),i.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(i),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(i)},1)}},E=e=>(e||(e=window.matchMedia(I)),e.matches?"dark":"light");export{J as ThemeProvider,z as useTheme};
+"use client";import*as t from"react";var M=(e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}};var b=["light","dark"],I="(prefers-color-scheme: dark)",O=typeof window=="undefined",x=t.createContext(void 0),U={setTheme:e=>{},themes:[]},z=()=>{var e;return(e=t.useContext(x))!=null?e:U},J=e=>t.useContext(x)?t.createElement(t.Fragment,null,e.children):t.createElement(V,{...e}),N=["light","dark"],V=({forcedTheme:e,disableTransitionOnChange:i=!1,enableSystem:s=!0,enableColorScheme:u=!0,storageKey:m="theme",themes:a=N,defaultTheme:l=s?"system":"light",attribute:h="data-theme",value:d,children:w,nonce:p,scriptProps:R})=>{let[c,n]=t.useState(()=>H(m,l)),[T,y]=t.useState(()=>c==="system"?E():c),k=d?Object.values(d):a,S=t.useCallback(o=>{let r=o;if(!r)return;o==="system"&&s&&(r=E());let v=d?d[r]:r,C=i?W(p):null,P=document.documentElement,L=g=>{g==="class"?(P.classList.remove(...k),v&&P.classList.add(v)):g.startsWith("data-")&&(v?P.setAttribute(g,v):P.removeAttribute(g))};if(Array.isArray(h)?h.forEach(L):L(h),u){let g=b.includes(l)?l:null,D=b.includes(r)?r:g;P.style.colorScheme=D}C==null||C()},[p]),f=t.useCallback(o=>{let r=typeof o=="function"?o(c):o;n(r);try{localStorage.setItem(m,r)}catch(v){}},[c]),A=t.useCallback(o=>{let r=E(o);y(r),c==="system"&&s&&!e&&S("system")},[c,e]);t.useEffect(()=>{let o=window.matchMedia(I);return o.addListener(A),A(o),()=>o.removeListener(A)},[A]),t.useEffect(()=>{let o=r=>{r.key===m&&(r.newValue?n(r.newValue):f(l))};return window.addEventListener("storage",o),()=>window.removeEventListener("storage",o)},[f]),t.useEffect(()=>{S(e!=null?e:c)},[e,c]);let Q=t.useMemo(()=>({theme:c,setTheme:f,forcedTheme:e,resolvedTheme:c==="system"?T:c,themes:s?[...a,"system"]:a,systemTheme:s?T:void 0}),[c,f,e,T,s,a]);return t.createElement(x.Provider,{value:Q},t.createElement(_,{forcedTheme:e,storageKey:m,attribute:h,enableSystem:s,enableColorScheme:u,defaultTheme:l,value:d,themes:a,nonce:p,scriptProps:R}),w)},_=t.memo(({forcedTheme:e,storageKey:i,attribute:s,enableSystem:u,enableColorScheme:m,defaultTheme:a,value:l,themes:h,nonce:d,scriptProps:w})=>{let p=JSON.stringify([s,i,a,e,h,l,u,m]).slice(1,-1);return typeof window=="undefined"?t.createElement("script",{...w,suppressHydrationWarning:!0,nonce:typeof window=="undefined"?d:"",dangerouslySetInnerHTML:{__html:`(${M.toString()})(${p})`}}):null}),H=(e,i)=>{if(O)return;let s;try{s=localStorage.getItem(e)||void 0}catch(u){}return s||i},W=e=>{let i=document.createElement("style");return e&&i.setAttribute("nonce",e),i.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),document.head.appendChild(i),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(i)},1)}},E=e=>(e||(e=window.matchMedia(I)),e.matches?"dark":"light");export{J as ThemeProvider,z as useTheme};

View File

@ -4,6 +4,11 @@ settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
patchedDependencies:
next-themes@0.4.6:
hash: bc954c2c679c43ecf5351d4a9d68d9f36a9b8fb2dc4237fdbf57304cae4b0c04
path: patches/next-themes@0.4.6.patch
importers:
.:
@ -2955,7 +2960,7 @@ snapshots:
fumadocs-core: 16.8.7(@mdx-js/mdx@3.1.1)(@types/estree-jsx@1.0.5)(@types/hast@3.0.4)(@types/mdast@4.0.4)(@types/react@19.2.14)(lucide-react@0.515.0(react@19.2.5))(next@16.2.4(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(zod@4.4.3)
lucide-react: 1.14.0(react@19.2.5)
motion: 12.38.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
next-themes: 0.4.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
next-themes: 0.4.6(patch_hash=bc954c2c679c43ecf5351d4a9d68d9f36a9b8fb2dc4237fdbf57304cae4b0c04)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)
react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.5)
@ -3623,7 +3628,7 @@ snapshots:
nanoid@3.3.12: {}
next-themes@0.4.6(react-dom@19.2.5(react@19.2.5))(react@19.2.5):
next-themes@0.4.6(patch_hash=bc954c2c679c43ecf5351d4a9d68d9f36a9b8fb2dc4237fdbf57304cae4b0c04)(react-dom@19.2.5(react@19.2.5))(react@19.2.5):
dependencies:
react: 19.2.5
react-dom: 19.2.5(react@19.2.5)

View File

@ -1,3 +1,6 @@
allowBuilds:
esbuild: true
sharp: true
patchedDependencies:
next-themes@0.4.6: patches/next-themes@0.4.6.patch