UNPKG

fumadocs-ui

Version:

The Radix UI version of Fumadocs UI

85 lines (84 loc) 2.63 kB
"use client"; import { useI18n } from "../../contexts/i18n.js"; import { LanguageSelect, LanguageSelectText } from "./slots/language-select.js"; import { FullSearchTrigger, SearchTrigger } from "./slots/search-trigger.js"; import { ThemeSwitch } from "./slots/theme-switch.js"; import { isLinkItemActive } from "./index.js"; import Link from "fumadocs-core/link"; import { usePathname } from "fumadocs-core/framework"; import { jsx } from "react/jsx-runtime"; //#region src/layouts/shared/client.tsx function LinkItem({ ref, item, ...props }) { const active = isLinkItemActive(item, usePathname()); return /* @__PURE__ */ jsx(Link, { ref, href: item.url, external: item.external, ...props, "data-active": active, children: props.children }); } function baseSlots({ useProps }) { function InlineThemeSwitch(props) { const { themeSwitch } = useProps(); if (themeSwitch.component) return themeSwitch.component; return /* @__PURE__ */ jsx(ThemeSwitch, { ...props, ...themeSwitch }); } function InlineSearchTrigger(props) { const { searchToggle } = useProps(); if (searchToggle.components?.sm) return searchToggle.components.sm; return /* @__PURE__ */ jsx(SearchTrigger, { ...props, ...searchToggle.sm }); } function InlineSearchTriggerFull(props) { const { searchToggle } = useProps(); if (searchToggle.components?.lg) return searchToggle.components.lg; return /* @__PURE__ */ jsx(FullSearchTrigger, { ...props, ...searchToggle.full }); } function InlineNavTitle({ href: defaultUrl = "/", ...props }) { const { url = defaultUrl, title } = useProps().nav ?? {}; if (typeof title === "function") return title({ href: url, ...props }); return /* @__PURE__ */ jsx(Link, { href: url, ...props, children: title }); } return { useProvider(options) { const { locales = [] } = useI18n(); const { nav, slots = {}, i18n = locales.length > 1, searchToggle: { enabled: searchToggleEnabled = true, ...searchToggle } = {}, themeSwitch: { enabled: themeSwitchEnabled = true, ...themeSwitch } = {} } = options; return { baseSlots: { navTitle: slots.navTitle ?? InlineNavTitle, themeSwitch: themeSwitchEnabled && (slots.themeSwitch ?? InlineThemeSwitch), languageSelect: i18n ? slots.languageSelect ?? { root: LanguageSelect, text: LanguageSelectText } : false, searchTrigger: searchToggleEnabled && (slots.searchTrigger ?? { sm: InlineSearchTrigger, full: InlineSearchTriggerFull }) }, baseProps: { nav, searchToggle, themeSwitch } }; } }; } //#endregion export { LinkItem, baseSlots };