feat(docs): refine navigation and sponsor experience
This commit is contained in:
parent
628371fa3f
commit
09c5a6cd22
|
|
@ -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" },
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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: "QQ:86554840",
|
||||
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>
|
||||
);
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,10 @@ description: 使用 1Panel 应用商店安装、访问和更新 DBX Web 版。
|
|||
|
||||
1Panel 应用商店提供了 DBX 官方 Docker 镜像,可以直接在服务器上完成安装和更新,不需要手动编写 Docker 命令。
|
||||
|
||||
## 可选的服务器方案
|
||||
|
||||
如果你还没有用于部署 DBX 的服务器,可以了解[雨云](https://www.rainyun.com/MTE5Mjc4Ng==_)。雨云是面向开发者和站长的云服务提供商,提供云服务器、物理服务器、游戏云和配套基础设施服务。当然,任何满足 Docker 和 1Panel 运行要求的服务器都可以部署 DBX。
|
||||
|
||||
## 安装 DBX
|
||||
|
||||
1. 登录 1Panel,打开 **应用商店**。
|
||||
|
|
|
|||
|
|
@ -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**.
|
||||
|
|
|
|||
|
|
@ -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 管理
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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};
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,6 @@
|
|||
allowBuilds:
|
||||
esbuild: true
|
||||
sharp: true
|
||||
|
||||
patchedDependencies:
|
||||
next-themes@0.4.6: patches/next-themes@0.4.6.patch
|
||||
|
|
|
|||
Loading…
Reference in New Issue