@unterberg/nivel 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/nivel/brands/bluesky.svg +4 -0
- package/assets/nivel/brands/discord.svg +3 -0
- package/assets/nivel/brands/github.svg +2 -0
- package/assets/nivel/brands/linkedin.svg +3 -0
- package/assets/nivel/brands/typescript.svg +26 -0
- package/assets/nivel/brands/x.svg +4 -0
- package/assets/nivel/decorators/pattern-light.png +0 -0
- package/assets/nivel/decorators/pattern.png +0 -0
- package/assets/nivel/fonts/fonts-inter.css +26 -0
- package/assets/nivel/fonts/inter-v20-latin-600.woff2 +0 -0
- package/assets/nivel/fonts/inter-v20-latin-800.woff2 +0 -0
- package/assets/nivel/fonts/inter-v20-latin-regular.woff2 +0 -0
- package/dist/chunk-3JJ6TYWL.js +614 -0
- package/dist/chunk-3JJ6TYWL.js.map +1 -0
- package/dist/chunk-45CLUNJW.js +657 -0
- package/dist/chunk-45CLUNJW.js.map +1 -0
- package/dist/chunk-4WTEOEV2.js +36 -0
- package/dist/chunk-4WTEOEV2.js.map +1 -0
- package/dist/chunk-62MBEYU7.js +1091 -0
- package/dist/chunk-62MBEYU7.js.map +1 -0
- package/dist/chunk-73NPVCDQ.js +353 -0
- package/dist/chunk-73NPVCDQ.js.map +1 -0
- package/dist/chunk-FLO5CJZH.js +42 -0
- package/dist/chunk-FLO5CJZH.js.map +1 -0
- package/dist/chunk-PHHK2BAF.js +350 -0
- package/dist/chunk-PHHK2BAF.js.map +1 -0
- package/dist/client.d.ts +70 -0
- package/dist/client.js +26 -0
- package/dist/client.js.map +1 -0
- package/dist/code-blocks.d.ts +35 -0
- package/dist/code-blocks.js +21 -0
- package/dist/code-blocks.js.map +1 -0
- package/dist/config.d.ts +16 -0
- package/dist/config.js +101 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +143 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/mdx.d.ts +6 -0
- package/dist/mdx.js +35 -0
- package/dist/mdx.js.map +1 -0
- package/dist/runtime/client.d.ts +7 -0
- package/dist/runtime/client.js +26 -0
- package/dist/runtime/client.js.map +1 -0
- package/dist/runtime/index.d.ts +15 -0
- package/dist/runtime/index.js +18 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/types-mvLNHHrf.d.ts +177 -0
- package/package.json +90 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/AppLayout.tsx","../src/runtime/components/Navbar.tsx","../src/runtime/components/Brand.tsx","../src/runtime/components/LayoutComponent.tsx","../src/runtime/components/ThemeSwitch.tsx","../src/runtime/store/settings-store.ts","../src/runtime/store/settings-storage.ts","../src/runtime/theme.ts","../src/runtime/components/UserSettingsSync.tsx","../src/runtime/components/MetaHead/FaviconLinks.tsx","../src/runtime/components/MetaHead/FontLinks.tsx","../src/runtime/components/MetaHead/ThemeBootstrap.tsx","../src/runtime/components/MetaHead/index.tsx","../src/runtime/components/ProseContainer.tsx","../src/runtime/DocsPage.tsx","../src/runtime/components/DocsPagination.tsx","../src/runtime/components/Footer.tsx","../src/runtime/components/Sidebar.tsx","../src/runtime/components/TableOfContents.tsx","../src/runtime/getMdxRuntimeValue.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport type { DocsConfig } from '../types.js'\nimport { Navbar } from './components/Navbar.js'\nimport { UserSettingsSync } from './components/UserSettingsSync.js'\nimport { getActiveSectionByPathname, resolveDocsConfig } from './resolveDocsConfig.js'\n\ninterface AppLayoutProps {\n children: ReactNode\n docsConfig: DocsConfig\n}\n\nexport const AppLayout = ({ children, docsConfig }: AppLayoutProps) => {\n const pageContext = usePageContext()\n const resolvedConfig = resolveDocsConfig(docsConfig)\n const activeSection = getActiveSectionByPathname(resolvedConfig, pageContext.urlPathname)\n\n return (\n <>\n <UserSettingsSync theme={resolvedConfig.theme} />\n <div className=\"min-h-screen bg-base-100 text-base-content\">\n <Navbar\n brand={resolvedConfig.brand}\n activeSectionId={activeSection?.id ?? null}\n navbarItems={resolvedConfig.navbarItems}\n theme={resolvedConfig.theme}\n />\n <div className=\"pt-16\">{children}</div>\n </div>\n </>\n )\n}\n","import { cmMerge } from '@classmatejs/react'\nimport { useEffect, useState } from 'react'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport { renderInlineMarkdown } from '../../components/renderInlineMarkdown.js'\nimport { baseAssets, withSiteBaseUrl } from '../../nivelAssets.js'\nimport type { DocsThemeConfig, ResolvedDocsBrandConfig, ResolvedNavbarItem } from '../../types.js'\nimport { Brand } from './Brand.js'\nimport { LayoutComponent } from './LayoutComponent.js'\nimport { ThemeSwitch } from './ThemeSwitch.js'\n\ninterface NavbarProps {\n brand: ResolvedDocsBrandConfig\n activeSectionId: string | null\n navbarItems: ResolvedNavbarItem[]\n theme: Required<DocsThemeConfig>\n}\n\nexport const Navbar = ({ brand, activeSectionId, navbarItems, theme }: NavbarProps) => {\n const { urlPathname } = usePageContext()\n const isLandingPage = urlPathname === '/'\n const [isLandingPageScrolled, setIsLandingPageScrolled] = useState(false)\n\n useEffect(() => {\n if (!isLandingPage) {\n setIsLandingPageScrolled(false)\n return\n }\n\n const handleScroll = () => {\n setIsLandingPageScrolled(window.scrollY > 20)\n }\n\n handleScroll()\n window.addEventListener('scroll', handleScroll, { passive: true })\n\n return () => {\n window.removeEventListener('scroll', handleScroll)\n }\n }, [isLandingPage])\n\n const showChrome = !isLandingPage || isLandingPageScrolled\n\n return (\n <header\n className={cmMerge(\n 'fixed top-0 left-0 z-20 h-16 w-full border-b border-transparent',\n showChrome &&\n 'bg-linear-to-t from-base-100/30 via-base-100/60 to-base-100 backdrop-grayscale border-base-muted-light dark:shadow',\n )}\n >\n <div\n className=\"absolute inset-0 hidden dark:block\"\n // biome-ignore lint/nursery/noInlineStyles: decorator\n style={{ backgroundImage: `url(${baseAssets}decorators/pattern.png)` }}\n />\n <div\n className=\"absolute inset-0 dark:hidden\"\n // biome-ignore lint/nursery/noInlineStyles: decorator\n style={{ backgroundImage: `url(${baseAssets}decorators/pattern-light.png)` }}\n />\n <LayoutComponent className=\"h-full\">\n {isLandingPage ? (\n <div className=\"relative z-3 flex h-full items-center justify-between py-4\">\n <div className=\"flex flex-1 items-center gap-4\">\n <Brand brand={brand} />\n </div>\n <nav\n aria-label=\"Primary\"\n className=\"top-0 left-0 flex min-w-0 flex-1 items-center justify-center gap-4 overflow-x-auto\"\n >\n <ul className=\"flex items-center gap-2 font-semibold\">\n {navbarItems.map((item) => (\n <li key={item.id}>\n <a\n href={withSiteBaseUrl(item.href)}\n className={cmMerge(\n 'btn px-2 whitespace-nowrap',\n item.id === activeSectionId ? 'btn-primary btn-soft' : 'btn-ghost',\n )}\n >\n {renderInlineMarkdown(item.title)}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n <div className=\"flex flex-1 items-center justify-end gap-2\">\n <ThemeSwitch theme={theme} />\n </div>\n </div>\n ) : (\n <div className=\"relative z-3 flex h-full items-center justify-between py-4\">\n <div className=\"flex w-80 flex-1 items-center justify-between gap-2 lg:flex-none\">\n <Brand brand={brand} />\n </div>\n <nav\n aria-label=\"Primary\"\n className=\"top-0 left-0 flex min-w-0 flex-1 items-center justify-center gap-4 overflow-x-auto lg:justify-start lg:pl-6 xl:pl-10\"\n >\n <ul className=\"flex items-center gap-2 font-semibold\">\n {navbarItems.map((item) => (\n <li key={item.id}>\n <a\n href={withSiteBaseUrl(item.href)}\n className={cmMerge(\n 'btn px-2 whitespace-nowrap',\n item.id === activeSectionId ? 'btn-primary btn-soft' : 'btn-ghost',\n )}\n >\n {renderInlineMarkdown(item.title)}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n <div className=\"flex flex-1 items-center justify-end gap-2 lg:flex-none\">\n <ThemeSwitch theme={theme} />\n </div>\n </div>\n )}\n </LayoutComponent>\n </header>\n )\n}\n","import { cmMerge } from '@classmatejs/react'\nimport type { ResolvedDocsBrandConfig } from '../../types.js'\n\ninterface BrandProps {\n brand: ResolvedDocsBrandConfig\n noText?: boolean\n}\n\nexport const Brand = ({ brand, noText = false }: BrandProps) => {\n const defaultLogo = brand.logoLight ?? brand.logoDark\n\n return (\n <a href={brand.href} className=\"flex items-center gap-3 text-base-content no-underline\">\n {defaultLogo && (\n <span className=\"relative block h-7 w-7 shrink-0\">\n {brand.logoLight && (\n <img\n src={brand.logoLight}\n alt={brand.logoAlt}\n className={cmMerge('h-7 w-7 object-contain', brand.logoDark ? 'block dark:hidden' : 'block')}\n />\n )}\n {brand.logoDark && (\n <img\n src={brand.logoDark}\n alt={brand.logoAlt}\n className={cmMerge('h-7 w-7 object-contain', brand.logoLight ? 'hidden dark:block' : 'block')}\n />\n )}\n </span>\n )}\n {!noText && <span className=\"text-xl font-semibold tracking-tight\">{brand.text}</span>}\n </a>\n )\n}\n","import cm from '@classmatejs/react'\n\nconst LayoutSize = {\n xxs: 'xxs',\n xs: 'xs',\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n xl: 'xl',\n full: 'full',\n} as const\ntype LayoutSize = (typeof LayoutSize)[keyof typeof LayoutSize]\n\nconst layoutComponentSizeMapping: { [key in LayoutSize]: string } = {\n xxs: 'max-w-[480px]',\n xs: 'max-w-[768px]',\n sm: 'max-w-5xl',\n md: 'max-w-6xl',\n lg: 'max-w-7xl',\n xl: 'max-w-[1440px]',\n full: 'max-w-full',\n} as const\n\ninterface LayoutComponentProps {\n $size?: LayoutSize\n $noGrow?: boolean\n}\n\nexport const LayoutComponent = cm.div.variants<LayoutComponentProps>({\n base: ({ $noGrow }) => `px-4 ${$noGrow ? '' : 'mx-auto w-full'} relative`,\n variants: {\n $size: layoutComponentSizeMapping,\n },\n defaultVariants: {\n $size: LayoutSize.xl,\n },\n})\n","import { Moon, Sun } from 'lucide-react'\nimport type { DocsThemeConfig } from '../../types.js'\nimport { useDocsUserSettingsStore } from '../store/settings-store.js'\nimport { resolveThemePreference } from '../theme.js'\n\nexport const ThemeSwitch = ({ theme }: { theme: Required<DocsThemeConfig> }) => {\n const themePreference = useDocsUserSettingsStore((state) => state.themePreference)\n const setThemePreference = useDocsUserSettingsStore((state) => state.setThemePreference)\n const effectiveThemePreference = resolveThemePreference(themePreference, theme)\n\n return (\n <button\n type=\"button\"\n aria-label=\"Toggle theme\"\n onClick={() => setThemePreference(effectiveThemePreference === 'light' ? 'dark' : 'light')}\n className=\"relative flex h-8 w-8 cursor-pointer items-center justify-center rounded-full border border-base-muted-light bg-base-200\"\n >\n <Sun className=\"h-4 w-4 dark:hidden\" />\n <Moon className=\"hidden h-4 w-4 dark:block\" />\n </button>\n )\n}\n","import { create } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\nimport type { UniversalMdxCodeBlockChoiceStore } from '../../components/types.js'\nimport type { ThemePreference } from '../../types.js'\nimport { readLegacyCodeBlockChoice, USER_SETTINGS_STORAGE_KEY } from './settings-storage.js'\n\ntype DocsUserSettingsState = {\n codeBlockChoices: Record<string, string>\n themePreference: ThemePreference | null\n setCodeBlockChoice: (choiceGroupName: string, choice: string) => void\n setThemePreference: (themePreference: ThemePreference) => void\n}\n\nexport const useDocsUserSettingsStore = create<DocsUserSettingsState>()(\n persist(\n (set) => ({\n codeBlockChoices: {},\n themePreference: null,\n setCodeBlockChoice: (choiceGroupName, choice) =>\n set((state) => ({\n codeBlockChoices: {\n ...state.codeBlockChoices,\n [choiceGroupName]: choice,\n },\n })),\n setThemePreference: (themePreference) => set({ themePreference }),\n }),\n {\n name: USER_SETTINGS_STORAGE_KEY,\n storage: createJSONStorage(() => localStorage),\n partialize: ({ codeBlockChoices, themePreference }) => ({\n codeBlockChoices,\n themePreference,\n }),\n },\n ),\n)\n\nexport const docsCodeBlockChoiceStore: UniversalMdxCodeBlockChoiceStore = {\n subscribe: (listener) => useDocsUserSettingsStore.subscribe(listener),\n getChoice: (choiceGroupName) => useDocsUserSettingsStore.getState().codeBlockChoices[choiceGroupName] ?? null,\n setChoice: (choiceGroupName, choice) =>\n useDocsUserSettingsStore.getState().setCodeBlockChoice(choiceGroupName, choice),\n getLegacyChoice: readLegacyCodeBlockChoice,\n}\n","export const USER_SETTINGS_STORAGE_KEY = 'nivel-user-settings'\nconst LEGACY_CODE_BLOCK_CHOICE_STORAGE_KEY_PREFIX = 'vike-docpress:choice:'\n\nconst isRecord = (value: unknown): value is Record<string, unknown> => {\n return typeof value === 'object' && value !== null\n}\n\nconst readPersistedSettingsState = () => {\n if (typeof window === 'undefined') {\n return null\n }\n\n try {\n const rawValue = window.localStorage.getItem(USER_SETTINGS_STORAGE_KEY)\n if (!rawValue) {\n return null\n }\n\n const parsedValue = JSON.parse(rawValue) as unknown\n if (!isRecord(parsedValue)) {\n return null\n }\n\n const state = parsedValue.state\n return isRecord(state) ? state : null\n } catch {\n return null\n }\n}\n\nexport const readLegacyCodeBlockChoice = (choiceGroupName: string) => {\n if (typeof window === 'undefined') {\n return null\n }\n\n try {\n const value = window.localStorage.getItem(`${LEGACY_CODE_BLOCK_CHOICE_STORAGE_KEY_PREFIX}${choiceGroupName}`)\n return value || null\n } catch {\n return null\n }\n}\n","import type { DocsThemeConfig, ThemePreference } from '../types.js'\n\nexport const DEFAULT_THEME_PREFERENCE: ThemePreference = 'light'\nexport const DARK_THEME_MEDIA_QUERY = '(prefers-color-scheme: dark)'\n\nconst getDataTheme = (themePreference: ThemePreference, themeConfig: Required<DocsThemeConfig>) => {\n return themePreference === 'dark' ? themeConfig.dark : themeConfig.light\n}\n\nconst isThemePreference = (value: unknown): value is ThemePreference => {\n return value === 'light' || value === 'dark'\n}\n\nconst getSystemThemePreference = (fallbackThemePreference: ThemePreference): ThemePreference => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return fallbackThemePreference\n }\n\n return window.matchMedia(DARK_THEME_MEDIA_QUERY).matches ? 'dark' : 'light'\n}\n\nexport const resolveThemePreference = (\n themePreference: ThemePreference | null | undefined,\n themeConfig: Required<DocsThemeConfig>,\n) => {\n if (isThemePreference(themePreference)) {\n return themePreference\n }\n\n return getSystemThemePreference(themeConfig.defaultPreference)\n}\n\nexport const applyThemePreference = (\n themePreference: ThemePreference | null | undefined,\n themeConfig: Required<DocsThemeConfig>,\n) => {\n if (typeof document === 'undefined') {\n return\n }\n\n document.documentElement.setAttribute(\n 'data-theme',\n getDataTheme(resolveThemePreference(themePreference, themeConfig), themeConfig),\n )\n}\n","import { useEffect } from 'react'\nimport type { DocsConfig } from '../../types.js'\nimport { useDocsUserSettingsStore } from '../store/settings-store.js'\nimport { applyThemePreference, resolveThemePreference } from '../theme.js'\n\nexport const UserSettingsSync = ({ theme }: { theme?: DocsConfig['theme'] }) => {\n const themePreference = useDocsUserSettingsStore((state) => state.themePreference)\n const lightTheme = theme?.light ?? 'consumer-light'\n const darkTheme = theme?.dark ?? 'consumer-dark'\n const defaultThemePreference = theme?.defaultPreference ?? 'light'\n const resolvedTheme = { light: lightTheme, dark: darkTheme, defaultPreference: defaultThemePreference }\n const effectiveThemePreference = resolveThemePreference(themePreference, resolvedTheme)\n\n useEffect(() => {\n applyThemePreference(effectiveThemePreference, resolvedTheme)\n }, [darkTheme, defaultThemePreference, effectiveThemePreference, lightTheme])\n\n return null\n}\n","import type { ResolvedDocsHeadConfig } from '../../../types.js'\n\nexport const FaviconLinks = ({ head }: { head: ResolvedDocsHeadConfig }) => {\n const { appleTouchIcon, faviconIco, faviconSvg } = head\n\n return (\n <>\n {appleTouchIcon && <link rel=\"apple-touch-icon\" href={appleTouchIcon} />}\n {faviconSvg && <link rel=\"icon\" type=\"image/svg+xml\" href={faviconSvg} />}\n {faviconIco && (\n <>\n <link rel=\"shortcut icon\" type=\"image/x-icon\" href={faviconIco} />\n <link rel=\"icon\" type=\"image/x-icon\" href={faviconIco} />\n </>\n )}\n </>\n )\n}\n","import type { ResolvedDocsHeadConfig } from '../../../types.js'\n\nexport const FontLinks = ({ head }: { head: ResolvedDocsHeadConfig }) => {\n const { fontStylesheetHref, fontPreloadHrefs } = head\n const effectivePreloadHrefs = fontPreloadHrefs ?? []\n\n return (\n <>\n {effectivePreloadHrefs.map((href) => (\n <link key={href} rel=\"preload\" href={href} as=\"font\" type=\"font/woff2\" crossOrigin=\"anonymous\" />\n ))}\n {fontStylesheetHref && <link rel=\"stylesheet\" href={fontStylesheetHref} />}\n </>\n )\n}\n","import type { DocsThemeConfig } from '../../../types.js'\nimport { USER_SETTINGS_STORAGE_KEY } from '../../store/settings-storage.js'\nimport { DARK_THEME_MEDIA_QUERY } from '../../theme.js'\n\nconst getThemeBootstrapScript = (theme: Required<DocsThemeConfig>) => {\n return `(() => {\n const storageKey = ${JSON.stringify(USER_SETTINGS_STORAGE_KEY)};\n const darkThemeMediaQuery = ${JSON.stringify(DARK_THEME_MEDIA_QUERY)};\n const defaultThemePreference = ${JSON.stringify(theme.defaultPreference)};\n const themes = {\n light: ${JSON.stringify(theme.light)},\n dark: ${JSON.stringify(theme.dark)}\n };\n\n try {\n const persistedValue = window.localStorage.getItem(storageKey);\n const parsedValue = persistedValue ? JSON.parse(persistedValue) : null;\n const storedThemePreference = parsedValue?.state?.themePreference;\n const themePreference =\n storedThemePreference === 'light' || storedThemePreference === 'dark'\n ? storedThemePreference\n : typeof window.matchMedia === 'function'\n ? window.matchMedia(darkThemeMediaQuery).matches\n ? 'dark'\n : 'light'\n : defaultThemePreference;\n\n document.documentElement.setAttribute('data-theme', themes[themePreference]);\n } catch {\n const themePreference =\n typeof window.matchMedia === 'function'\n ? window.matchMedia(darkThemeMediaQuery).matches\n ? 'dark'\n : 'light'\n : defaultThemePreference;\n\n document.documentElement.setAttribute('data-theme', themes[themePreference]);\n }\n})();`\n}\n\nexport const ThemeBootstrap = ({ theme }: { theme: Required<DocsThemeConfig> }) => {\n return (\n <script\n dangerouslySetInnerHTML={{\n __html: getThemeBootstrapScript(theme),\n }}\n />\n )\n}\n","import type { DocsConfig } from '../../../types.js'\nimport { resolveDocsConfig } from '../../resolveDocsConfig.js'\nimport { FaviconLinks } from './FaviconLinks.js'\nimport { FontLinks } from './FontLinks.js'\nimport { ThemeBootstrap } from './ThemeBootstrap.js'\n\nexport const MetaHead = ({ docsConfig }: { docsConfig: DocsConfig }) => {\n const resolvedConfig = resolveDocsConfig(docsConfig)\n\n return (\n <>\n <ThemeBootstrap theme={resolvedConfig.theme} />\n <FaviconLinks head={resolvedConfig.head} />\n <FontLinks head={resolvedConfig.head} />\n </>\n )\n}\n","import cm from '@classmatejs/react'\n\nexport const ProseContainer = cm.section`\n prose \n prose-neutral\n max-w-none\n dark:prose-invert\n prose-a:text-primary\n\n prose-pre:bg-base-200!\n\n prose-code:py-0!\n prose-code:px-1!\n\n prose-code:rounded!\n prose-code:dark:inset-shadow-2xs\n\n prose-code:bg-primary/5!\n prose-code:border-primary/15!\n\n prose-code:dark:bg-primary/10!\n prose-code:dark:border-primary/20!\n\n prose-p:leading-[200%]\n prose-li:leading-[200%]\n prose-table:my-8\n prose-table:w-full\n prose-table:text-sm\n prose-th:align-top\n prose-th:font-semibold\n prose-td:align-top\n [&_table_code]:whitespace-nowrap\n [&_thead]:bg-base-200/70\n\n prose-p:after:content-none\n prose-p:before:content-none\n prose-blockquote:not-italic\n prose-blockquote:bg-base-200\n prose-blockquote:py-2\n prose-li:my-1\n prose-figure:mb-0\n [&_figure_*]:mb-0\n [&_blockquote_p]:mt-0\n [&_blockquote_p]:mb-2\n [&_blockquote_ul]:pl-4\n [&_blockquote_ul]:mt-2\n [&_blockquote_li]:mt-2\n [&_blockquote_blockquote]:mt-2\n [&_blockquote_blockquote]:mb-0\n [&_blockquote_blockquote]:bg-base-300/40\n [&_blockquote_blockquote]:pt-2\n [&_blockquote_blockquote]:pb-1\n`\n","import type { ComponentType } from 'react'\nimport { useData } from 'vike-react/useData'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport { renderInlineMarkdown } from '../components/renderInlineMarkdown.js'\nimport { UniversalMdxProvider } from '../components/UniversalMdxProvider.js'\nimport type { DocPageData, DocsConfig } from '../types.js'\nimport { LayoutComponent, ProseContainer } from './client.js'\nimport { DocsPagination } from './components/DocsPagination.js'\nimport { DocsFooter } from './components/Footer.js'\nimport { Sidebar } from './components/Sidebar.js'\nimport { TableOfContents } from './components/TableOfContents.js'\nimport { getMdxRuntimeValue } from './getMdxRuntimeValue.js'\nimport { resolveDocsConfig } from './resolveDocsConfig.js'\n\ninterface DocsPageProps {\n Content: ComponentType\n docsConfig: DocsConfig\n}\n\nexport const DocsPage = ({ Content, docsConfig }: DocsPageProps) => {\n const pageContext = usePageContext()\n const { activeSectionId, page, sidebarSections, headings, footer, previousPage, nextPage } = useData() as DocPageData\n const resolvedConfig = resolveDocsConfig(docsConfig)\n\n return (\n <UniversalMdxProvider\n value={getMdxRuntimeValue({\n docsConfig: docsConfig,\n currentPathname: pageContext.urlPathname,\n })}\n >\n <div className=\"absolute top-0 left-0 w-full h-[60svh] bg-radial-[at_65%_-85%] from-primary-muted-light to-65%\" />\n\n <LayoutComponent>\n <div className=\"lg:flex lg:gap-10 xl:gap-14\">\n <Sidebar sections={sidebarSections} activeSectionId={activeSectionId} currentHref={page.href} />\n\n <main className=\"mt-10 min-w-0 flex-1 basis-auto shrink\">\n <ProseContainer data-doc-content=\"\">\n <h1 className=\"scroll-mt-24\">{renderInlineMarkdown(page.title)}</h1>\n <Content />\n </ProseContainer>\n {footer.pagination ? <DocsPagination previousPage={previousPage} nextPage={nextPage} /> : null}\n <DocsFooter brand={resolvedConfig.brand} />\n </main>\n <TableOfContents headings={headings} partners={resolvedConfig.partners} />\n </div>\n </LayoutComponent>\n </UniversalMdxProvider>\n )\n}\n","import { cmMerge } from '@classmatejs/react'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { withSiteBaseUrl } from '../../nivelAssets.js'\nimport { renderInlineMarkdown } from '../../components/renderInlineMarkdown.js'\nimport type { DocPageData } from '../../types.js'\n\ninterface PaginationCardProps {\n item: NonNullable<DocPageData['previousPage']>\n direction: 'previous' | 'next'\n isOffset?: boolean\n}\n\nconst PaginationCard = ({ item, direction, isOffset }: PaginationCardProps) => {\n const isPrevious = direction === 'previous'\n\n return (\n <a\n href={withSiteBaseUrl(item.href)}\n className={cmMerge(\n 'group rounded-box border border-base-muted-light bg-base-100 p-5 no-underline hover:border-primary-muted-medium hover:bg-base-200',\n isPrevious ? 'text-left' : 'text-right',\n isOffset && 'sm:col-start-2',\n )}\n aria-label={`${isPrevious ? 'Previous' : 'Next'}: ${item.title}`}\n >\n <div className=\"flex flex-col justify-between gap-2\">\n <p className=\"text-lg font-semibold text-base-content\">{renderInlineMarkdown(item.title)}</p>\n <div\n className={cmMerge(\n 'flex items-center gap-1 text-base-muted group-hover:text-base-content',\n isPrevious ? 'justify-start' : 'justify-end',\n )}\n >\n {isPrevious && <ChevronLeft className=\"h-4 w-4\" />}\n <span>{isPrevious ? 'Previous' : 'Next'}</span>\n {!isPrevious && <ChevronRight className=\"h-4 w-4\" />}\n </div>\n </div>\n </a>\n )\n}\n\ninterface DocsPaginationProps {\n previousPage: DocPageData['previousPage']\n nextPage: DocPageData['nextPage']\n}\n\nexport const DocsPagination = ({ previousPage, nextPage }: DocsPaginationProps) => {\n if (!previousPage && !nextPage) {\n return null\n }\n\n return (\n <nav className=\"mb-10 mt-16\" aria-label=\"Previous Next\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {previousPage && <PaginationCard item={previousPage} direction=\"previous\" />}\n {nextPage && <PaginationCard isOffset={!previousPage} item={nextPage} direction=\"next\" />}\n </div>\n </nav>\n )\n}\n","import { Bug, Pencil } from 'lucide-react'\nimport type { ResolvedDocsBrandConfig } from '../../types'\nimport { Brand } from './Brand'\n\ninterface DocsFooterProps {\n brand?: ResolvedDocsBrandConfig\n}\n\nexport const DocsFooter = ({ brand }: DocsFooterProps) => {\n return (\n <footer className=\"mb-8 mt-12 text-sm border-t border-base-muted-light pt-10\">\n <div className=\"mb-16 flex items-center gap-2\">\n <a href=\"edit\" className=\"btn btn-sm btn-primary btn-soft\">\n <Pencil className=\"w-3 h-3\" /> Edit this page\n </a>\n <a href=\"edit\" className=\"btn btn-sm btn-primary btn-soft\">\n <Bug className=\"w-3 h-3\" /> Report Issue\n </a>\n </div>\n <div className=\"flex justify-between items-center\">\n {/* Social Icons Here */}\n <div className=\"flex gap-2 items-center\">{brand && <Brand brand={brand} noText />}</div>\n </div>\n </footer>\n )\n}\n","import { cmMerge } from '@classmatejs/react'\nimport { useEffect } from 'react'\nimport { create } from 'zustand'\nimport { withSiteBaseUrl } from '../../nivelAssets.js'\nimport { renderInlineMarkdown } from '../../components/renderInlineMarkdown.js'\nimport type {\n ResolvedDocsSection,\n ResolvedSidebarGroup,\n ResolvedSidebarNode,\n ResolvedSidebarPage,\n} from '../../types.js'\n\ntype SidebarDisclosureState = {\n openNodes: Record<string, boolean>\n setNodeOpen: (nodeId: string, isOpen: boolean) => void\n}\n\nconst useSidebarDisclosureStore = create<SidebarDisclosureState>()((set) => ({\n openNodes: {},\n setNodeOpen: (nodeId, isOpen) =>\n set((state) => {\n if (state.openNodes[nodeId] === isOpen) {\n return state\n }\n\n return {\n openNodes: {\n ...state.openNodes,\n [nodeId]: isOpen,\n },\n }\n }),\n}))\n\nconst containsActiveHref = (items: ResolvedSidebarNode[], currentHref: string): boolean => {\n return items.some((item) => {\n if (item.kind === 'page') {\n return item.href === currentHref\n }\n\n if (item.kind === 'group') {\n return containsActiveHref(item.items, currentHref)\n }\n\n return false\n })\n}\n\nconst hasActiveItem = (items: ResolvedSidebarNode[], activeHref: string) => {\n return items.some((item) => {\n if (item.kind === 'group') {\n return containsActiveHref(item.items, activeHref)\n }\n\n return item.kind === 'page' && item.href === activeHref\n })\n}\n\nconst getGroupLandingPage = (group: ResolvedSidebarGroup) => {\n return (\n group.items.find((item): item is ResolvedSidebarPage => {\n if (item.kind !== 'page') {\n return false\n }\n\n return item.navTitle === group.title || item.title === group.title\n }) ?? null\n )\n}\n\nconst getVisibleGroupItems = (group: ResolvedSidebarGroup, landingPage: ResolvedSidebarPage | null) => {\n if (!landingPage) {\n return group.items\n }\n\n return group.items.filter((item) => item.id !== landingPage.id)\n}\n\nconst useAutoOpenDetails = (nodeId: string, isOpenByDefault: boolean, hasActiveDescendant: boolean) => {\n const storedOpen = useSidebarDisclosureStore((state) => state.openNodes[nodeId])\n const setNodeOpen = useSidebarDisclosureStore((state) => state.setNodeOpen)\n const isOpen = storedOpen === undefined ? isOpenByDefault || hasActiveDescendant : storedOpen || hasActiveDescendant\n\n useEffect(() => {\n if (hasActiveDescendant) {\n setNodeOpen(nodeId, true)\n return\n }\n\n if (storedOpen === undefined && isOpenByDefault) {\n setNodeOpen(nodeId, true)\n }\n }, [hasActiveDescendant, isOpenByDefault, nodeId, setNodeOpen, storedOpen])\n\n return {\n isOpen,\n setIsOpen: (nextOpen: boolean) => setNodeOpen(nodeId, nextOpen),\n }\n}\n\ninterface SidebarPageLinkProps {\n title: string\n href: string\n currentHref: string\n}\n\nconst SidebarPageLink = ({ title, href, currentHref }: SidebarPageLinkProps) => {\n return (\n <li>\n <a\n href={withSiteBaseUrl(href)}\n className={cmMerge(\n 'text-base-muted hover:text-base-content justify-start hover:bg-base-200',\n href === currentHref && 'text-primary! font-semibold bg-base-200',\n )}\n >\n {renderInlineMarkdown(title, { codeClassName: 'text-sm!' })}\n </a>\n </li>\n )\n}\n\nconst SidebarDivider = ({ title }: { title: string }) => {\n return (\n <li className=\"ml-3 mt-2 mb-2 border-b border-base-muted-light text-xs text-base-muted-medium pointer-events-none font-semibold\">\n <span className=\"-ml-3\">{renderInlineMarkdown(title, { codeClassName: 'text-sm!' })}</span>\n </li>\n )\n}\n\ninterface SidebarGroupTitleProps {\n title: string\n href?: string\n isActive: boolean\n allowNavigation?: boolean\n}\n\nconst SidebarGroupTitle = ({ title, href, isActive, allowNavigation = false }: SidebarGroupTitleProps) => {\n const content = (\n <span\n className={cmMerge(\n allowNavigation ? 'font-medium' : 'font-semibold',\n isActive && allowNavigation && 'text-primary!',\n )}\n >\n {renderInlineMarkdown(title, { codeClassName: 'text-sm!' })}\n </span>\n )\n\n if (allowNavigation && href) {\n return (\n <a\n href={withSiteBaseUrl(href)}\n onClick={(event) => {\n event.stopPropagation()\n }}\n className={cmMerge(\n 'flex items-center gap-2 text-base-muted hover:text-base-content no-underline',\n isActive && 'text-primary! font-semibold',\n )}\n >\n {content}\n </a>\n )\n }\n\n return <span className=\"flex items-center gap-2 text-base-content\">{content}</span>\n}\n\ninterface SidebarItemListProps {\n items: ResolvedSidebarNode[]\n currentHref: string\n}\n\nconst SidebarItemList = ({ items, currentHref }: SidebarItemListProps) => {\n return (\n <ul>\n {items.map((item) => {\n if (item.kind === 'divider') {\n return <SidebarDivider key={item.id} title={item.title} />\n }\n\n if (item.kind === 'page') {\n return <SidebarPageLink key={item.id} title={item.navTitle} href={item.href} currentHref={currentHref} />\n }\n\n return <SidebarNestedGroup key={item.id} group={item} currentHref={currentHref} />\n })}\n </ul>\n )\n}\n\ninterface SidebarNestedGroupProps {\n group: ResolvedSidebarGroup\n currentHref: string\n}\n\nconst SidebarNestedGroup = ({ group, currentHref }: SidebarNestedGroupProps) => {\n const landingPage = getGroupLandingPage(group)\n const visibleItems = getVisibleGroupItems(group, landingPage)\n const isCollapsible = group.collapsible !== undefined\n const isOpenByDefault = group.collapsible?.isDefaultOpen ?? true\n const nestedHasActiveItem = landingPage?.href === currentHref || hasActiveItem(visibleItems, currentHref)\n const { isOpen, setIsOpen } = useAutoOpenDetails(`group:${group.id}`, isOpenByDefault, nestedHasActiveItem)\n\n if (!isCollapsible) {\n return (\n <li>\n <div className=\"px-4 py-2\">\n <SidebarGroupTitle\n title={group.title}\n href={landingPage?.href}\n isActive={nestedHasActiveItem}\n allowNavigation={Boolean(landingPage)}\n />\n </div>\n {visibleItems.length > 0 ? <SidebarItemList items={visibleItems} currentHref={currentHref} /> : null}\n </li>\n )\n }\n\n return (\n <li>\n <details\n open={isOpen}\n onToggle={(event) => {\n setIsOpen(event.currentTarget.open)\n }}\n >\n <summary>\n <SidebarGroupTitle\n title={group.title}\n href={landingPage?.href}\n isActive={nestedHasActiveItem}\n allowNavigation={Boolean(landingPage)}\n />\n </summary>\n {visibleItems.length > 0 ? <SidebarItemList items={visibleItems} currentHref={currentHref} /> : null}\n </details>\n </li>\n )\n}\n\ninterface SidebarSectionGroupProps {\n section: ResolvedDocsSection\n currentHref: string\n activeSectionId: string\n}\n\nconst SidebarSectionGroup = ({ section, currentHref, activeSectionId }: SidebarSectionGroupProps) => {\n const sectionHasActiveItem = section.id === activeSectionId || containsActiveHref(section.items, currentHref)\n const { isOpen, setIsOpen } = useAutoOpenDetails(\n `section:${section.id}`,\n section.id === activeSectionId,\n sectionHasActiveItem,\n )\n\n return (\n <li className=\"pb-4\">\n <details\n open={isOpen}\n onToggle={(event) => {\n setIsOpen(event.currentTarget.open)\n }}\n >\n <summary>\n <SidebarGroupTitle title={section.title} isActive={sectionHasActiveItem} />\n </summary>\n <SidebarItemList items={section.items} currentHref={currentHref} />\n </details>\n </li>\n )\n}\n\ninterface SidebarProps {\n sections: ResolvedDocsSection[]\n activeSectionId: string\n currentHref: string\n}\n\nexport const Sidebar = ({ sections, activeSectionId, currentHref }: SidebarProps) => {\n return (\n <aside className=\"hidden basis-76 shrink-0 lg:block\">\n <div className=\"-ml-3 sticky top-16\">\n <div className=\"absolute h-full w-px right-0 top-0 bg-linear-to-t to-base-muted-light via-base-muted-light pointer-events-none z-1\" />\n <div className=\"pr-4 h-[calc(100svh-16*var(--spacing))] overflow-y-scroll overflow-x-hidden relative z-10\">\n <ul className=\"menu w-full px-0 py-5 li:last-child:border-0\">\n {sections.map((section) => (\n <SidebarSectionGroup\n key={section.id}\n section={section}\n currentHref={currentHref}\n activeSectionId={activeSectionId}\n />\n ))}\n </ul>\n </div>\n </div>\n </aside>\n )\n}\n","import cm, { cmMerge } from '@classmatejs/react'\nimport { TableOfContentsIcon } from 'lucide-react'\nimport type { Dispatch, SetStateAction } from 'react'\nimport { useEffect, useState } from 'react'\nimport { useData } from 'vike-react/useData'\nimport type { DocHeading, DocPageData, ResolvedDocsPartnersConfig } from '../../types.js'\nimport { createHeadingSlugger, normalizeHeadingTitle } from '../docHeadings.js'\n\nconst getCurrentHash = () => {\n try {\n return decodeURIComponent(window.location.hash)\n } catch {\n return window.location.hash\n }\n}\n\nconst getHeadingElements = () => {\n const root = document.querySelector('[data-doc-content]')\n if (!(root instanceof HTMLElement)) {\n return []\n }\n\n return Array.from(root.querySelectorAll('h2, h3, h4')).filter(\n (element): element is HTMLHeadingElement => element instanceof HTMLHeadingElement,\n )\n}\n\nconst areHeadingsEqual = (left: DocHeading[], right: DocHeading[]) => {\n if (left.length !== right.length) {\n return false\n }\n\n return left.every((heading, index) => {\n const other = right[index]\n return (\n other !== undefined && heading.depth === other.depth && heading.id === other.id && heading.title === other.title\n )\n })\n}\n\nconst syncHeadingsFromDom = (setDomHeadings: Dispatch<SetStateAction<DocHeading[]>>) => {\n const root = document.querySelector('[data-doc-content]')\n if (!(root instanceof HTMLElement)) {\n return\n }\n\n const slugify = createHeadingSlugger()\n const nextHeadings = Array.from(root.querySelectorAll('h2, h3, h4'))\n .map((element) => {\n const title = normalizeHeadingTitle(element.textContent ?? '')\n if (!title) {\n return null\n }\n\n element.classList.add('scroll-mt-24')\n\n const id = element.id || slugify(title)\n if (!element.id) {\n element.id = id\n }\n\n return {\n depth: Number(element.tagName.slice(1)),\n id,\n title,\n } satisfies DocHeading\n })\n .filter((heading): heading is DocHeading => heading !== null)\n\n setDomHeadings((currentHeadings) => {\n if (areHeadingsEqual(currentHeadings, nextHeadings)) {\n return currentHeadings\n }\n\n return nextHeadings\n })\n}\n\nconst updateActiveHeadingFromScroll = (setActiveHeadingId: (value: string) => void) => {\n const headingElements = getHeadingElements()\n if (headingElements.length === 0) {\n return\n }\n\n const activationOffset = 144\n let nextActiveHeadingId = headingElements[0]?.id ?? ''\n\n for (const heading of headingElements) {\n if (!heading.id) {\n continue\n }\n\n if (heading.getBoundingClientRect().top <= activationOffset) {\n nextActiveHeadingId = heading.id\n continue\n }\n\n break\n }\n\n const lastHeading = headingElements.at(-1)\n if (lastHeading?.id && window.innerHeight + window.scrollY >= document.documentElement.scrollHeight - 8) {\n nextActiveHeadingId = lastHeading.id\n }\n\n setActiveHeadingId(nextActiveHeadingId)\n}\n\ninterface TableOfContentsProps {\n headings: DocHeading[]\n partners: ResolvedDocsPartnersConfig\n}\n\nexport const TableOfContents = ({ headings, partners }: TableOfContentsProps) => {\n const [activeHeadingId, setActiveHeadingId] = useState('')\n const [domHeadings, setDomHeadings] = useState<DocHeading[]>(headings)\n const effectiveHeadings = domHeadings.length > 0 ? domHeadings : headings\n const { page } = useData() as DocPageData\n\n useEffect(() => {\n let scrollFrame = 0\n\n const syncActiveHeading = () => {\n if (scrollFrame) {\n return\n }\n\n scrollFrame = window.requestAnimationFrame(() => {\n scrollFrame = 0\n updateActiveHeadingFromScroll(setActiveHeadingId)\n })\n }\n\n const updateHash = () => {\n const currentHash = getCurrentHash().replace(/^#/, '')\n if (currentHash !== '') {\n setActiveHeadingId(currentHash)\n return\n }\n\n syncActiveHeading()\n }\n\n updateHash()\n queueMicrotask(() => {\n syncHeadingsFromDom(setDomHeadings)\n syncActiveHeading()\n })\n\n window.addEventListener('hashchange', updateHash)\n window.addEventListener('scroll', syncActiveHeading, { passive: true })\n window.addEventListener('resize', syncActiveHeading)\n\n return () => {\n if (scrollFrame) {\n window.cancelAnimationFrame(scrollFrame)\n }\n\n window.removeEventListener('hashchange', updateHash)\n window.removeEventListener('scroll', syncActiveHeading)\n window.removeEventListener('resize', syncActiveHeading)\n }\n }, [])\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n setDomHeadings((currentHeadings) => {\n if (areHeadingsEqual(currentHeadings, headings)) {\n return currentHeadings\n }\n\n return headings\n })\n setActiveHeadingId('')\n\n queueMicrotask(() => {\n syncHeadingsFromDom(setDomHeadings)\n updateActiveHeadingFromScroll(setActiveHeadingId)\n })\n }, [headings])\n\n return (\n <aside className={cmMerge(page.tableOfContents ? 'w-64' : 'w-32', 'hidden shrink-0 xl:block')}>\n <div className=\"sticky top-16\">\n <div className=\"relative h-[calc(100svh-16*var(--spacing))] overflow-y-auto overflow-x-hidden pt-10 pb-8\">\n {page.tableOfContents\n ? effectiveHeadings.length > 0 && (\n <>\n <p className=\"mb-4 flex items-center gap-2 text-xs font-semibold uppercase tracking-widest text-base-muted\">\n <TableOfContentsIcon className=\"h-3 w-3\" />\n On this page\n </p>\n <nav aria-label=\"On this page\" className=\"mb-16\">\n <ul>\n {effectiveHeadings.map((heading, index) => (\n <li key={heading.id}>\n <a\n href={`#${heading.id}`}\n aria-current={activeHeadingId === heading.id ? 'location' : undefined}\n onClick={() => setActiveHeadingId(heading.id)}\n className={cmMerge(\n 'block border-l border-base-muted-light py-1.5 text-sm text-base-muted hover:border-primary-muted hover:text-base-content',\n heading.depth > 2 ? 'pl-6' : 'pl-4',\n activeHeadingId\n ? activeHeadingId === heading.id\n ? 'border-l-2 border-primary font-semibold text-base-content'\n : ''\n : index === 0\n ? 'border-l-2 border-primary font-semibold text-base-content'\n : '',\n )}\n >\n {heading.title}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n </>\n )\n : null}\n <Adbar partners={partners} />\n </div>\n </div>\n </aside>\n )\n}\n\nconst Adbar = ({ partners }: { partners: ResolvedDocsPartnersConfig }) => {\n if (partners.primary.length === 0 && partners.gold.length === 0) {\n return null\n }\n\n return (\n <ul className=\"grid grid-cols-[repeat(auto-fit,minmax(5.5rem,1fr))] gap-3 opacity-90\">\n {partners.primary.map((partner) => (\n <AdbarItem key={partner.name} className=\"col-span-full\">\n <AdbarLink href={partner.href} title={partner.name}>\n <PartnerLogo partner={partner} />\n </AdbarLink>\n </AdbarItem>\n ))}\n {partners.gold.map((partner) => (\n <AdbarItem key={partner.name}>\n <AdbarLink href={partner.href} title={partner.name}>\n <PartnerLogo partner={partner} />\n </AdbarLink>\n </AdbarItem>\n ))}\n </ul>\n )\n}\n\nconst PartnerLogo = ({\n partner,\n}: {\n partner: ResolvedDocsPartnersConfig['primary'][number] | ResolvedDocsPartnersConfig['gold'][number]\n}) => {\n return (\n <>\n <Image\n src={partner.logoLight}\n width={200}\n height={100}\n alt={partner.logoAlt}\n className={cmMerge('block', partner.logoDark ? 'dark:hidden' : 'dark:invert')}\n />\n {partner.logoDark ? (\n <Image src={partner.logoDark} width={200} height={100} alt={partner.logoAlt} className=\"hidden dark:block\" />\n ) : null}\n </>\n )\n}\n\nconst AdbarItem = cm.div`\n px-5\n py-5\n bg-base-200\n text-center\n flex\n items-center\n justify-center\n rounded-box\n`\n\nconst AdbarLink = cm.a`\n block\n w-full\n transition-opacity\n hover:opacity-100\n focus-visible:opacity-100\n`\n\nconst Image = cm.img`\n mx-auto\n w-24\n`\n","import type { DocsConfig } from '../types.js'\nimport type {\n UniversalMdxRuntimeValue,\n UniversalResolvedDocLink,\n UniversalResolvedOverviewItem,\n} from '../components/types.js'\nimport { withSiteBaseUrl } from '../nivelAssets.js'\nimport {\n getActiveSectionByPathname,\n getResolvedPageByPathname,\n getResolvedSectionById,\n isSamePagePathname,\n resolveDocsConfig,\n} from './resolveDocsConfig.js'\nimport { docsCodeBlockChoiceStore } from './store/settings-store.js'\n\nconst isExternalHref = (href: string) => {\n return /^(?:[a-z]+:)?\\/\\//i.test(href) || href.startsWith('mailto:') || href.startsWith('tel:')\n}\n\nconst splitHref = (href: string) => {\n const [pathname, hash = ''] = href.split('#')\n return {\n pathname,\n hash: hash ? `#${hash}` : '',\n }\n}\n\nconst toDocsPathname = (basePath: '/docs', href: string) => {\n if (!href.startsWith('/')) {\n return null\n }\n\n if (href === basePath || href.startsWith(`${basePath}/`)) {\n return href\n }\n\n const normalizedPath = href.replace(/^\\/+/, '')\n if (!normalizedPath) {\n return null\n }\n\n return `${basePath}/${normalizedPath}`\n}\n\nconst resolveDocLink = (options: {\n resolvedConfig: ReturnType<typeof resolveDocsConfig>\n currentPathname: string\n href: string\n}): UniversalResolvedDocLink | null => {\n const { currentPathname, href } = options\n if (href.startsWith('#') || isExternalHref(href)) {\n return null\n }\n\n const { pathname, hash } = splitHref(href)\n const docsPathname = toDocsPathname(options.resolvedConfig.basePath, pathname)\n\n if (!docsPathname) {\n return null\n }\n\n const page = getResolvedPageByPathname(options.resolvedConfig, docsPathname)\n if (!page) {\n return null\n }\n\n const section = getResolvedSectionById(options.resolvedConfig, page.sectionId)\n\n return {\n href: withSiteBaseUrl(`${page.href}${hash}`),\n title: page.title,\n breadcrumb: section ? [section.navTitle] : [],\n isCurrentPage: isSamePagePathname(page, currentPathname),\n }\n}\n\nconst resolveOverviewItem = (options: {\n resolvedConfig: ReturnType<typeof resolveDocsConfig>\n id: string\n}): UniversalResolvedOverviewItem | null => {\n const page = options.resolvedConfig.pages.find((candidate) => candidate.id === options.id)\n\n if (!page) {\n return null\n }\n\n return {\n title: page.title,\n href: withSiteBaseUrl(page.href),\n excerpt: page.description ?? null,\n }\n}\n\nexport const getMdxRuntimeValue = (options: {\n docsConfig: DocsConfig\n currentPathname: string\n}): UniversalMdxRuntimeValue => {\n const { currentPathname, docsConfig } = options\n const resolvedConfig = resolveDocsConfig(docsConfig)\n const activeSection = getActiveSectionByPathname(resolvedConfig, currentPathname)\n const currentPage = getResolvedPageByPathname(resolvedConfig, currentPathname)\n\n return {\n locale: 'en',\n codeBlockChoices: docsCodeBlockChoiceStore,\n localizeHref: (href) => {\n if (href.startsWith('#') || isExternalHref(href)) {\n return href\n }\n\n const { pathname, hash } = splitHref(href)\n const docsPathname = toDocsPathname(resolvedConfig.basePath, pathname)\n const page = docsPathname ? getResolvedPageByPathname(resolvedConfig, docsPathname) : null\n\n if (!page) {\n return withSiteBaseUrl(href)\n }\n\n return withSiteBaseUrl(`${page.href}${hash}`)\n },\n resolveDocLink: ({ href }) =>\n resolveDocLink({\n resolvedConfig,\n currentPathname,\n href,\n }),\n resolveOverviewItem: (id) =>\n resolveOverviewItem({\n resolvedConfig,\n id,\n }),\n t: (group, key) => {\n if (group === 'docs' && key === 'onThisPage') {\n return 'On this page'\n }\n\n if (group === 'docs' && key === 'previous') {\n return 'Previous'\n }\n\n if (group === 'docs' && key === 'next') {\n return 'Next'\n }\n\n if (group === 'docs' && key === 'currentSection') {\n return activeSection?.navTitle ?? currentPage?.title ?? 'Docs'\n }\n\n return key\n },\n }\n}\n"],"mappings":"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","names":["usePageContext","cmMerge","jsx","jsxs","jsx","jsxs","cmMerge","useEffect","useEffect","jsx","jsxs","usePageContext","Fragment","jsx","jsxs","Fragment","jsx","jsxs","jsx","Fragment","jsx","jsxs","cm","useData","usePageContext","cmMerge","jsx","jsxs","cmMerge","jsx","jsxs","cmMerge","useEffect","create","jsx","jsxs","create","useEffect","cmMerge","cm","cmMerge","useEffect","useState","Fragment","jsx","jsxs","useState","useEffect","cmMerge","cm","jsx","jsxs","usePageContext","useData"]}
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import {
|
|
2
|
+
nivelAssetUrl,
|
|
3
|
+
resolvePublicAssetUrl,
|
|
4
|
+
withSiteBaseUrl
|
|
5
|
+
} from "./chunk-FLO5CJZH.js";
|
|
6
|
+
|
|
7
|
+
// src/runtime/resolveDocsConfig.ts
|
|
8
|
+
var normalizeBasePath = (value) => {
|
|
9
|
+
const normalized = value.trim().replace(/^\/+|\/+$/g, "");
|
|
10
|
+
return `/${normalized}`;
|
|
11
|
+
};
|
|
12
|
+
var normalizeSlug = (value) => value.replace(/^\/+|\/+$/g, "");
|
|
13
|
+
var joinHref = (basePath, slug) => `${basePath}/${normalizeSlug(slug)}/`;
|
|
14
|
+
var normalizePathname = (value) => {
|
|
15
|
+
const pathname = value.split("?")[0]?.split("#")[0] ?? value;
|
|
16
|
+
const normalized = pathname.trim().replace(/\/+$/g, "");
|
|
17
|
+
return normalized === "" ? "/" : `${normalized}/`.replace(/\/+/g, "/");
|
|
18
|
+
};
|
|
19
|
+
var normalizeSourcePath = (value) => {
|
|
20
|
+
const segments = value.replaceAll("\\", "/").split("/");
|
|
21
|
+
const normalizedSegments = [];
|
|
22
|
+
for (const segment of segments) {
|
|
23
|
+
if (segment === "" || segment === ".") {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (segment === "..") {
|
|
27
|
+
normalizedSegments.pop();
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
normalizedSegments.push(segment);
|
|
31
|
+
}
|
|
32
|
+
return normalizedSegments.join("/");
|
|
33
|
+
};
|
|
34
|
+
var getSectionHref = (items) => {
|
|
35
|
+
for (const item of items) {
|
|
36
|
+
if (item.kind === "page") {
|
|
37
|
+
return item.href;
|
|
38
|
+
}
|
|
39
|
+
if (item.kind === "group") {
|
|
40
|
+
const href = getSectionHref(item.items);
|
|
41
|
+
if (href) {
|
|
42
|
+
return href;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
};
|
|
48
|
+
var resolveThemeConfig = (theme) => {
|
|
49
|
+
return {
|
|
50
|
+
light: theme?.light ?? "consumer-light",
|
|
51
|
+
dark: theme?.dark ?? "consumer-dark",
|
|
52
|
+
defaultPreference: theme?.defaultPreference ?? "light"
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
var resolveFooterConfig = (footer) => {
|
|
56
|
+
return {
|
|
57
|
+
pagination: footer?.pagination ?? false
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
var resolveBrandConfig = (brand, siteTitle) => {
|
|
61
|
+
const text = brand?.text ?? siteTitle;
|
|
62
|
+
return {
|
|
63
|
+
text,
|
|
64
|
+
href: withSiteBaseUrl(brand?.href ?? "/"),
|
|
65
|
+
logoLight: resolvePublicAssetUrl(brand?.logoLight),
|
|
66
|
+
logoDark: resolvePublicAssetUrl(brand?.logoDark),
|
|
67
|
+
logoAlt: brand?.logoAlt ?? `${text} logo`
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
var resolveHeadConfig = (head) => {
|
|
71
|
+
const fontPreset = head?.fontPreset ?? "inter";
|
|
72
|
+
const defaultFontStylesheetHref = fontPreset === "inter" ? nivelAssetUrl("fonts/fonts-inter.css") : void 0;
|
|
73
|
+
const defaultFontPreloadHrefs = fontPreset === "inter" ? [
|
|
74
|
+
nivelAssetUrl("fonts/inter-v20-latin-regular.woff2"),
|
|
75
|
+
nivelAssetUrl("fonts/inter-v20-latin-600.woff2"),
|
|
76
|
+
nivelAssetUrl("fonts/inter-v20-latin-800.woff2")
|
|
77
|
+
] : [];
|
|
78
|
+
return {
|
|
79
|
+
faviconSvg: resolvePublicAssetUrl(head?.faviconSvg),
|
|
80
|
+
faviconIco: resolvePublicAssetUrl(head?.faviconIco),
|
|
81
|
+
appleTouchIcon: resolvePublicAssetUrl(head?.appleTouchIcon),
|
|
82
|
+
fontPreset,
|
|
83
|
+
fontStylesheetHref: head?.fontStylesheetHref ?? defaultFontStylesheetHref,
|
|
84
|
+
fontPreloadHrefs: head?.fontPreloadHrefs ?? defaultFontPreloadHrefs
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
var resolvePartnerAssetUrl = (value) => {
|
|
88
|
+
if (!value) {
|
|
89
|
+
return void 0;
|
|
90
|
+
}
|
|
91
|
+
return resolvePublicAssetUrl(value);
|
|
92
|
+
};
|
|
93
|
+
var resolvePartner = (partner) => {
|
|
94
|
+
return {
|
|
95
|
+
name: partner.name,
|
|
96
|
+
href: withSiteBaseUrl(partner.href),
|
|
97
|
+
logoLight: resolvePartnerAssetUrl(partner.logoLight) ?? partner.logoLight,
|
|
98
|
+
logoDark: resolvePartnerAssetUrl(partner.logoDark),
|
|
99
|
+
logoAlt: partner.logoAlt ?? `${partner.name} logo`
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
var resolvePartnersConfig = (partners) => {
|
|
103
|
+
return {
|
|
104
|
+
primary: (partners?.primary ?? []).map(resolvePartner),
|
|
105
|
+
gold: (partners?.gold ?? []).map(resolvePartner)
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
var normalizeAliases = (aliases, slug) => {
|
|
109
|
+
const normalizedAliases = /* @__PURE__ */ new Set();
|
|
110
|
+
for (const alias of aliases ?? []) {
|
|
111
|
+
const normalizedAlias = normalizeSlug(alias);
|
|
112
|
+
if (!normalizedAlias || normalizedAlias === slug) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
normalizedAliases.add(normalizedAlias);
|
|
116
|
+
}
|
|
117
|
+
return [...normalizedAliases];
|
|
118
|
+
};
|
|
119
|
+
var resolveDocsConfig = (config) => {
|
|
120
|
+
if (normalizeBasePath(config.basePath) !== "/docs") {
|
|
121
|
+
throw new Error(`nivel currently requires basePath to be "/docs". Received ${JSON.stringify(config.basePath)}.`);
|
|
122
|
+
}
|
|
123
|
+
const pageIds = /* @__PURE__ */ new Set();
|
|
124
|
+
const pageSlugs = /* @__PURE__ */ new Set();
|
|
125
|
+
const pageAliases = /* @__PURE__ */ new Set();
|
|
126
|
+
const groupIds = /* @__PURE__ */ new Set();
|
|
127
|
+
const sectionIds = /* @__PURE__ */ new Set();
|
|
128
|
+
const dividerIds = /* @__PURE__ */ new Set();
|
|
129
|
+
const pages = [];
|
|
130
|
+
const navbarItems = [];
|
|
131
|
+
const resolveSidebarNodes = (nodes, sectionId) => {
|
|
132
|
+
return nodes.map((node) => {
|
|
133
|
+
if (node.kind === "group") {
|
|
134
|
+
if (groupIds.has(node.id)) {
|
|
135
|
+
throw new Error(`Duplicate docs group id "${node.id}".`);
|
|
136
|
+
}
|
|
137
|
+
groupIds.add(node.id);
|
|
138
|
+
return {
|
|
139
|
+
kind: "group",
|
|
140
|
+
id: node.id,
|
|
141
|
+
title: node.title,
|
|
142
|
+
collapsible: node.collapsible,
|
|
143
|
+
items: resolveSidebarNodes(node.items, sectionId)
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
if (node.kind === "divider") {
|
|
147
|
+
const divider = node;
|
|
148
|
+
if (dividerIds.has(divider.id)) {
|
|
149
|
+
throw new Error(`Duplicate docs divider id "${divider.id}".`);
|
|
150
|
+
}
|
|
151
|
+
dividerIds.add(divider.id);
|
|
152
|
+
return {
|
|
153
|
+
kind: "divider",
|
|
154
|
+
id: divider.id,
|
|
155
|
+
title: divider.title
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
if (node.kind !== "page") {
|
|
159
|
+
throw new Error(`Invalid docs sidebar node: ${JSON.stringify(node)}`);
|
|
160
|
+
}
|
|
161
|
+
const pageNode = node;
|
|
162
|
+
const slug = normalizeSlug(pageNode.slug);
|
|
163
|
+
const aliases = normalizeAliases(pageNode.aliases, slug);
|
|
164
|
+
if (!slug) {
|
|
165
|
+
throw new Error(`Docs page "${pageNode.id}" must define a non-empty slug.`);
|
|
166
|
+
}
|
|
167
|
+
if (pageIds.has(pageNode.id)) {
|
|
168
|
+
throw new Error(`Duplicate docs page id "${pageNode.id}".`);
|
|
169
|
+
}
|
|
170
|
+
if (pageSlugs.has(slug)) {
|
|
171
|
+
throw new Error(`Duplicate docs page slug "${slug}".`);
|
|
172
|
+
}
|
|
173
|
+
for (const alias of aliases) {
|
|
174
|
+
if (pageSlugs.has(alias) || pageAliases.has(alias)) {
|
|
175
|
+
throw new Error(`Duplicate docs page alias "${alias}".`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
pageIds.add(pageNode.id);
|
|
179
|
+
pageSlugs.add(slug);
|
|
180
|
+
for (const alias of aliases) {
|
|
181
|
+
pageAliases.add(alias);
|
|
182
|
+
}
|
|
183
|
+
const href = joinHref("/docs", slug);
|
|
184
|
+
const page = {
|
|
185
|
+
...pageNode,
|
|
186
|
+
slug,
|
|
187
|
+
aliases,
|
|
188
|
+
href,
|
|
189
|
+
aliasHrefs: aliases.map((alias) => joinHref("/docs", alias)),
|
|
190
|
+
tableOfContents: pageNode.tableOfContents ?? true,
|
|
191
|
+
sectionId,
|
|
192
|
+
documentTitle: `${pageNode.title} | ${config.siteTitle}`,
|
|
193
|
+
source: normalizeSourcePath(pageNode.source)
|
|
194
|
+
};
|
|
195
|
+
pages.push(page);
|
|
196
|
+
return {
|
|
197
|
+
kind: "page",
|
|
198
|
+
id: pageNode.id,
|
|
199
|
+
title: pageNode.title,
|
|
200
|
+
navTitle: pageNode.navTitle ?? pageNode.title,
|
|
201
|
+
href
|
|
202
|
+
};
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
const sections = config.graph.items.map((section) => {
|
|
206
|
+
if (section.kind !== "section") {
|
|
207
|
+
throw new Error(`Top-level docs graph items must be sections. Received ${JSON.stringify(section)}`);
|
|
208
|
+
}
|
|
209
|
+
if (sectionIds.has(section.id)) {
|
|
210
|
+
throw new Error(`Duplicate docs section id "${section.id}".`);
|
|
211
|
+
}
|
|
212
|
+
sectionIds.add(section.id);
|
|
213
|
+
const items = resolveSidebarNodes(section.items, section.id);
|
|
214
|
+
const href = getSectionHref(items);
|
|
215
|
+
if (!href) {
|
|
216
|
+
throw new Error(`Docs section "${section.id}" must contain at least one page.`);
|
|
217
|
+
}
|
|
218
|
+
const resolvedSection = {
|
|
219
|
+
id: section.id,
|
|
220
|
+
title: section.title,
|
|
221
|
+
navTitle: section.navTitle ?? section.title,
|
|
222
|
+
href,
|
|
223
|
+
items
|
|
224
|
+
};
|
|
225
|
+
navbarItems.push({
|
|
226
|
+
id: section.id,
|
|
227
|
+
title: resolvedSection.navTitle,
|
|
228
|
+
href: resolvedSection.href
|
|
229
|
+
});
|
|
230
|
+
return resolvedSection;
|
|
231
|
+
});
|
|
232
|
+
if (pages.length === 0) {
|
|
233
|
+
throw new Error("Docs graph must contain at least one page.");
|
|
234
|
+
}
|
|
235
|
+
return {
|
|
236
|
+
siteTitle: config.siteTitle,
|
|
237
|
+
siteDescription: config.siteDescription ?? null,
|
|
238
|
+
basePath: "/docs",
|
|
239
|
+
theme: resolveThemeConfig(config.theme),
|
|
240
|
+
footer: resolveFooterConfig(config.footer),
|
|
241
|
+
brand: resolveBrandConfig(config.brand, config.siteTitle),
|
|
242
|
+
head: resolveHeadConfig(config.head),
|
|
243
|
+
partners: resolvePartnersConfig(config.partners),
|
|
244
|
+
pages,
|
|
245
|
+
sections,
|
|
246
|
+
navbarItems
|
|
247
|
+
};
|
|
248
|
+
};
|
|
249
|
+
var getResolvedPageById = (config, pageId) => {
|
|
250
|
+
const page = config.pages.find((candidate) => candidate.id === pageId);
|
|
251
|
+
if (!page) {
|
|
252
|
+
throw new Error(`Unknown docs page id "${pageId}".`);
|
|
253
|
+
}
|
|
254
|
+
return page;
|
|
255
|
+
};
|
|
256
|
+
var getResolvedSectionById = (config, sectionId) => {
|
|
257
|
+
return config.sections.find((section) => section.id === sectionId) ?? null;
|
|
258
|
+
};
|
|
259
|
+
var getResolvedPageByPathname = (config, pathname) => {
|
|
260
|
+
const normalizedPathname = normalizePathname(pathname);
|
|
261
|
+
return config.pages.find((page) => {
|
|
262
|
+
if (normalizePathname(page.href) === normalizedPathname) {
|
|
263
|
+
return true;
|
|
264
|
+
}
|
|
265
|
+
return page.aliasHrefs.some((aliasHref) => normalizePathname(aliasHref) === normalizedPathname);
|
|
266
|
+
}) ?? null;
|
|
267
|
+
};
|
|
268
|
+
var getActiveSectionByPathname = (config, pathname) => {
|
|
269
|
+
const activePage = getResolvedPageByPathname(config, pathname);
|
|
270
|
+
if (!activePage) {
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
return getResolvedSectionById(config, activePage.sectionId);
|
|
274
|
+
};
|
|
275
|
+
var isSamePagePathname = (page, pathname) => {
|
|
276
|
+
const normalizedPathname = normalizePathname(pathname);
|
|
277
|
+
if (normalizePathname(page.href) === normalizedPathname) {
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
return page.aliasHrefs.some((aliasHref) => normalizePathname(aliasHref) === normalizedPathname);
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
// src/runtime/docHeadings.ts
|
|
284
|
+
var normalizeWhitespace = (value) => value.replace(/\s+/g, " ").trim();
|
|
285
|
+
var slugifyHeading = (value) => {
|
|
286
|
+
const normalized = normalizeWhitespace(value).normalize("NFKD").toLowerCase().replace(/['"]/g, "").replace(/[^\p{Letter}\p{Number}\s-]/gu, " ").replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "");
|
|
287
|
+
return normalized || "section";
|
|
288
|
+
};
|
|
289
|
+
var createHeadingSlugger = () => {
|
|
290
|
+
const slugCounts = /* @__PURE__ */ new Map();
|
|
291
|
+
return (value) => {
|
|
292
|
+
const baseSlug = slugifyHeading(value);
|
|
293
|
+
const count = slugCounts.get(baseSlug) ?? 0;
|
|
294
|
+
slugCounts.set(baseSlug, count + 1);
|
|
295
|
+
return count === 0 ? baseSlug : `${baseSlug}-${count}`;
|
|
296
|
+
};
|
|
297
|
+
};
|
|
298
|
+
var stripInlineMarkdown = (value) => {
|
|
299
|
+
return normalizeWhitespace(
|
|
300
|
+
value.replace(/!\[([^\]]*)\]\([^)]+\)/g, "$1").replace(/\[([^\]]+)\]\([^)]+\)/g, "$1").replace(/`([^`]+)`/g, "$1").replace(/<[^>]+>/g, " ").replace(/\\([\\`*_[\]{}()#+\-.!])/g, "$1").replace(/[*_~]/g, "").replace(/\{[^}]+\}/g, " ")
|
|
301
|
+
);
|
|
302
|
+
};
|
|
303
|
+
var getFenceMarker = (line) => {
|
|
304
|
+
const match = line.match(/^\s{0,3}(`{3,}|~{3,})/);
|
|
305
|
+
return match?.[1]?.[0] ?? null;
|
|
306
|
+
};
|
|
307
|
+
var extractDocHeadings = (source, minDepth = 2, maxDepth = 3) => {
|
|
308
|
+
const slugify = createHeadingSlugger();
|
|
309
|
+
const headings = [];
|
|
310
|
+
let activeFenceMarker = null;
|
|
311
|
+
for (const line of source.split("\n")) {
|
|
312
|
+
const fenceMarker = getFenceMarker(line);
|
|
313
|
+
if (activeFenceMarker) {
|
|
314
|
+
if (fenceMarker === activeFenceMarker) {
|
|
315
|
+
activeFenceMarker = null;
|
|
316
|
+
}
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
if (fenceMarker) {
|
|
320
|
+
activeFenceMarker = fenceMarker;
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
const match = line.match(/^\s{0,3}(#{1,6})\s+(.*?)(?:\s+#+\s*)?$/);
|
|
324
|
+
if (!match) {
|
|
325
|
+
continue;
|
|
326
|
+
}
|
|
327
|
+
const depth = match[1].length;
|
|
328
|
+
const title = stripInlineMarkdown(match[2] ?? "");
|
|
329
|
+
if (!title || depth < minDepth || depth > maxDepth) {
|
|
330
|
+
continue;
|
|
331
|
+
}
|
|
332
|
+
headings.push({
|
|
333
|
+
depth,
|
|
334
|
+
id: slugify(title),
|
|
335
|
+
title
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
return headings;
|
|
339
|
+
};
|
|
340
|
+
var normalizeHeadingTitle = (value) => normalizeWhitespace(value);
|
|
341
|
+
|
|
342
|
+
export {
|
|
343
|
+
resolveDocsConfig,
|
|
344
|
+
getResolvedPageById,
|
|
345
|
+
getResolvedSectionById,
|
|
346
|
+
getResolvedPageByPathname,
|
|
347
|
+
getActiveSectionByPathname,
|
|
348
|
+
isSamePagePathname,
|
|
349
|
+
createHeadingSlugger,
|
|
350
|
+
extractDocHeadings,
|
|
351
|
+
normalizeHeadingTitle
|
|
352
|
+
};
|
|
353
|
+
//# sourceMappingURL=chunk-73NPVCDQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/resolveDocsConfig.ts","../src/runtime/docHeadings.ts"],"sourcesContent":["import { nivelAssetUrl, resolvePublicAssetUrl, withSiteBaseUrl } from '../nivelAssets.js'\nimport type {\n DocsBrandConfig,\n DocsConfig,\n DocsDividerNode,\n DocsFooterConfig,\n DocsHeadConfig,\n DocsPartnerConfig,\n DocsPageNode,\n DocsSectionNode,\n DocsSidebarNode,\n ResolvedDocsBrandConfig,\n ResolvedDocsConfig,\n ResolvedDocsPartnerConfig,\n ResolvedDocsPage,\n ResolvedDocsPartnersConfig,\n ResolvedDocsSection,\n ResolvedNavbarItem,\n ResolvedSidebarNode,\n ThemePreference,\n} from '../types.js'\n\nconst normalizeBasePath = (value: string) => {\n const normalized = value.trim().replace(/^\\/+|\\/+$/g, '')\n return `/${normalized}` as '/docs'\n}\n\nconst normalizeSlug = (value: string) => value.replace(/^\\/+|\\/+$/g, '')\n\nconst joinHref = (basePath: '/docs', slug: string) => `${basePath}/${normalizeSlug(slug)}/`\n\nconst normalizePathname = (value: string) => {\n const pathname = value.split('?')[0]?.split('#')[0] ?? value\n const normalized = pathname.trim().replace(/\\/+$/g, '')\n return normalized === '' ? '/' : `${normalized}/`.replace(/\\/+/g, '/')\n}\n\nconst normalizeSourcePath = (value: string) => {\n const segments = value.replaceAll('\\\\', '/').split('/')\n const normalizedSegments: string[] = []\n\n for (const segment of segments) {\n if (segment === '' || segment === '.') {\n continue\n }\n\n if (segment === '..') {\n normalizedSegments.pop()\n continue\n }\n\n normalizedSegments.push(segment)\n }\n\n return normalizedSegments.join('/')\n}\n\nconst getSectionHref = (items: ResolvedSidebarNode[]): string | null => {\n for (const item of items) {\n if (item.kind === 'page') {\n return item.href\n }\n\n if (item.kind === 'group') {\n const href = getSectionHref(item.items)\n if (href) {\n return href\n }\n }\n }\n\n return null\n}\n\nconst resolveThemeConfig = (theme: DocsConfig['theme']) => {\n return {\n light: theme?.light ?? 'consumer-light',\n dark: theme?.dark ?? 'consumer-dark',\n defaultPreference: (theme?.defaultPreference ?? 'light') as ThemePreference,\n }\n}\n\nconst resolveFooterConfig = (footer: DocsFooterConfig | undefined) => {\n return {\n pagination: footer?.pagination ?? false,\n }\n}\n\nconst resolveBrandConfig = (brand: DocsBrandConfig | undefined, siteTitle: string): ResolvedDocsBrandConfig => {\n const text = brand?.text ?? siteTitle\n\n return {\n text,\n href: withSiteBaseUrl(brand?.href ?? '/'),\n logoLight: resolvePublicAssetUrl(brand?.logoLight),\n logoDark: resolvePublicAssetUrl(brand?.logoDark),\n logoAlt: brand?.logoAlt ?? `${text} logo`,\n }\n}\n\nconst resolveHeadConfig = (head: DocsHeadConfig | undefined) => {\n const fontPreset = head?.fontPreset ?? 'inter'\n const defaultFontStylesheetHref = fontPreset === 'inter' ? nivelAssetUrl('fonts/fonts-inter.css') : undefined\n const defaultFontPreloadHrefs =\n fontPreset === 'inter'\n ? [\n nivelAssetUrl('fonts/inter-v20-latin-regular.woff2'),\n nivelAssetUrl('fonts/inter-v20-latin-600.woff2'),\n nivelAssetUrl('fonts/inter-v20-latin-800.woff2'),\n ]\n : []\n\n return {\n faviconSvg: resolvePublicAssetUrl(head?.faviconSvg),\n faviconIco: resolvePublicAssetUrl(head?.faviconIco),\n appleTouchIcon: resolvePublicAssetUrl(head?.appleTouchIcon),\n fontPreset,\n fontStylesheetHref: head?.fontStylesheetHref ?? defaultFontStylesheetHref,\n fontPreloadHrefs: head?.fontPreloadHrefs ?? defaultFontPreloadHrefs,\n }\n}\n\nconst resolvePartnerAssetUrl = (value: string | undefined) => {\n if (!value) {\n return undefined\n }\n\n return resolvePublicAssetUrl(value)\n}\n\nconst resolvePartner = (partner: DocsPartnerConfig): ResolvedDocsPartnerConfig => {\n return {\n name: partner.name,\n href: withSiteBaseUrl(partner.href),\n logoLight: resolvePartnerAssetUrl(partner.logoLight) ?? partner.logoLight,\n logoDark: resolvePartnerAssetUrl(partner.logoDark),\n logoAlt: partner.logoAlt ?? `${partner.name} logo`,\n }\n}\n\nconst resolvePartnersConfig = (partners: DocsConfig['partners']): ResolvedDocsPartnersConfig => {\n return {\n primary: (partners?.primary ?? []).map(resolvePartner),\n gold: (partners?.gold ?? []).map(resolvePartner),\n }\n}\n\nconst normalizeAliases = (aliases: string[] | undefined, slug: string) => {\n const normalizedAliases = new Set<string>()\n\n for (const alias of aliases ?? []) {\n const normalizedAlias = normalizeSlug(alias)\n if (!normalizedAlias || normalizedAlias === slug) {\n continue\n }\n\n normalizedAliases.add(normalizedAlias)\n }\n\n return [...normalizedAliases]\n}\n\nexport const resolveDocsConfig = (config: DocsConfig): ResolvedDocsConfig => {\n if (normalizeBasePath(config.basePath) !== '/docs') {\n throw new Error(`nivel currently requires basePath to be \"/docs\". Received ${JSON.stringify(config.basePath)}.`)\n }\n\n const pageIds = new Set<string>()\n const pageSlugs = new Set<string>()\n const pageAliases = new Set<string>()\n const groupIds = new Set<string>()\n const sectionIds = new Set<string>()\n const dividerIds = new Set<string>()\n const pages: ResolvedDocsPage[] = []\n const navbarItems: ResolvedNavbarItem[] = []\n\n const resolveSidebarNodes = (nodes: DocsSidebarNode[], sectionId: string): ResolvedSidebarNode[] => {\n return nodes.map((node) => {\n if (node.kind === 'group') {\n if (groupIds.has(node.id)) {\n throw new Error(`Duplicate docs group id \"${node.id}\".`)\n }\n\n groupIds.add(node.id)\n\n return {\n kind: 'group',\n id: node.id,\n title: node.title,\n collapsible: node.collapsible,\n items: resolveSidebarNodes(node.items, sectionId),\n }\n }\n\n if (node.kind === 'divider') {\n const divider = node as DocsDividerNode\n if (dividerIds.has(divider.id)) {\n throw new Error(`Duplicate docs divider id \"${divider.id}\".`)\n }\n\n dividerIds.add(divider.id)\n\n return {\n kind: 'divider',\n id: divider.id,\n title: divider.title,\n }\n }\n\n if (node.kind !== 'page') {\n throw new Error(`Invalid docs sidebar node: ${JSON.stringify(node)}`)\n }\n\n const pageNode = node as DocsPageNode\n const slug = normalizeSlug(pageNode.slug)\n const aliases = normalizeAliases(pageNode.aliases, slug)\n\n if (!slug) {\n throw new Error(`Docs page \"${pageNode.id}\" must define a non-empty slug.`)\n }\n\n if (pageIds.has(pageNode.id)) {\n throw new Error(`Duplicate docs page id \"${pageNode.id}\".`)\n }\n\n if (pageSlugs.has(slug)) {\n throw new Error(`Duplicate docs page slug \"${slug}\".`)\n }\n\n for (const alias of aliases) {\n if (pageSlugs.has(alias) || pageAliases.has(alias)) {\n throw new Error(`Duplicate docs page alias \"${alias}\".`)\n }\n }\n\n pageIds.add(pageNode.id)\n pageSlugs.add(slug)\n for (const alias of aliases) {\n pageAliases.add(alias)\n }\n\n const href = joinHref('/docs', slug)\n const page: ResolvedDocsPage = {\n ...pageNode,\n slug,\n aliases,\n href,\n aliasHrefs: aliases.map((alias) => joinHref('/docs', alias)),\n tableOfContents: pageNode.tableOfContents ?? true,\n sectionId,\n documentTitle: `${pageNode.title} | ${config.siteTitle}`,\n source: normalizeSourcePath(pageNode.source),\n }\n pages.push(page)\n\n return {\n kind: 'page',\n id: pageNode.id,\n title: pageNode.title,\n navTitle: pageNode.navTitle ?? pageNode.title,\n href,\n }\n })\n }\n\n const sections: ResolvedDocsSection[] = config.graph.items.map((section: DocsSectionNode) => {\n if (section.kind !== 'section') {\n throw new Error(`Top-level docs graph items must be sections. Received ${JSON.stringify(section)}`)\n }\n\n if (sectionIds.has(section.id)) {\n throw new Error(`Duplicate docs section id \"${section.id}\".`)\n }\n\n sectionIds.add(section.id)\n\n const items = resolveSidebarNodes(section.items, section.id)\n const href = getSectionHref(items)\n\n if (!href) {\n throw new Error(`Docs section \"${section.id}\" must contain at least one page.`)\n }\n\n const resolvedSection: ResolvedDocsSection = {\n id: section.id,\n title: section.title,\n navTitle: section.navTitle ?? section.title,\n href,\n items,\n }\n\n navbarItems.push({\n id: section.id,\n title: resolvedSection.navTitle,\n href: resolvedSection.href,\n })\n\n return resolvedSection\n })\n\n if (pages.length === 0) {\n throw new Error('Docs graph must contain at least one page.')\n }\n\n return {\n siteTitle: config.siteTitle,\n siteDescription: config.siteDescription ?? null,\n basePath: '/docs',\n theme: resolveThemeConfig(config.theme),\n footer: resolveFooterConfig(config.footer),\n brand: resolveBrandConfig(config.brand, config.siteTitle),\n head: resolveHeadConfig(config.head),\n partners: resolvePartnersConfig(config.partners),\n pages,\n sections,\n navbarItems,\n }\n}\n\nexport const getResolvedPageById = (config: ResolvedDocsConfig, pageId: string) => {\n const page = config.pages.find((candidate) => candidate.id === pageId)\n if (!page) {\n throw new Error(`Unknown docs page id \"${pageId}\".`)\n }\n return page\n}\n\nexport const getResolvedSectionById = (config: ResolvedDocsConfig, sectionId: string) => {\n return config.sections.find((section) => section.id === sectionId) ?? null\n}\n\nexport const getResolvedPageByPathname = (config: ResolvedDocsConfig, pathname: string) => {\n const normalizedPathname = normalizePathname(pathname)\n\n return (\n config.pages.find((page) => {\n if (normalizePathname(page.href) === normalizedPathname) {\n return true\n }\n\n return page.aliasHrefs.some((aliasHref) => normalizePathname(aliasHref) === normalizedPathname)\n }) ?? null\n )\n}\n\nexport const getActiveSectionByPathname = (config: ResolvedDocsConfig, pathname: string) => {\n const activePage = getResolvedPageByPathname(config, pathname)\n\n if (!activePage) {\n return null\n }\n\n return getResolvedSectionById(config, activePage.sectionId)\n}\n\nexport const isSamePagePathname = (page: Pick<ResolvedDocsPage, 'href' | 'aliasHrefs'>, pathname: string) => {\n const normalizedPathname = normalizePathname(pathname)\n\n if (normalizePathname(page.href) === normalizedPathname) {\n return true\n }\n\n return page.aliasHrefs.some((aliasHref) => normalizePathname(aliasHref) === normalizedPathname)\n}\n","import type { DocHeading } from '../types.js'\n\nconst normalizeWhitespace = (value: string) => value.replace(/\\s+/g, ' ').trim()\n\nconst slugifyHeading = (value: string) => {\n const normalized = normalizeWhitespace(value)\n .normalize('NFKD')\n .toLowerCase()\n .replace(/['\"]/g, '')\n .replace(/[^\\p{Letter}\\p{Number}\\s-]/gu, ' ')\n .replace(/\\s+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-+|-+$/g, '')\n\n return normalized || 'section'\n}\n\nexport const createHeadingSlugger = () => {\n const slugCounts = new Map<string, number>()\n\n return (value: string) => {\n const baseSlug = slugifyHeading(value)\n const count = slugCounts.get(baseSlug) ?? 0\n slugCounts.set(baseSlug, count + 1)\n\n return count === 0 ? baseSlug : `${baseSlug}-${count}`\n }\n}\n\nconst stripInlineMarkdown = (value: string) => {\n return normalizeWhitespace(\n value\n .replace(/!\\[([^\\]]*)\\]\\([^)]+\\)/g, '$1')\n .replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1')\n .replace(/`([^`]+)`/g, '$1')\n .replace(/<[^>]+>/g, ' ')\n .replace(/\\\\([\\\\`*_[\\]{}()#+\\-.!])/g, '$1')\n .replace(/[*_~]/g, '')\n .replace(/\\{[^}]+\\}/g, ' '),\n )\n}\n\nconst getFenceMarker = (line: string) => {\n const match = line.match(/^\\s{0,3}(`{3,}|~{3,})/)\n return match?.[1]?.[0] ?? null\n}\n\nexport const extractDocHeadings = (source: string, minDepth = 2, maxDepth = 3): DocHeading[] => {\n const slugify = createHeadingSlugger()\n const headings: DocHeading[] = []\n let activeFenceMarker: string | null = null\n\n for (const line of source.split('\\n')) {\n const fenceMarker = getFenceMarker(line)\n\n if (activeFenceMarker) {\n if (fenceMarker === activeFenceMarker) {\n activeFenceMarker = null\n }\n continue\n }\n\n if (fenceMarker) {\n activeFenceMarker = fenceMarker\n continue\n }\n\n const match = line.match(/^\\s{0,3}(#{1,6})\\s+(.*?)(?:\\s+#+\\s*)?$/)\n if (!match) {\n continue\n }\n\n const depth = match[1].length\n const title = stripInlineMarkdown(match[2] ?? '')\n if (!title || depth < minDepth || depth > maxDepth) {\n continue\n }\n\n headings.push({\n depth,\n id: slugify(title),\n title,\n })\n }\n\n return headings\n}\n\nexport const normalizeHeadingTitle = (value: string) => normalizeWhitespace(value)\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// src/nivelAssets.ts
|
|
2
|
+
var normalizeSiteBasePath = (value) => {
|
|
3
|
+
const normalized = value?.trim().replace(/^\/+|\/+$/g, "") ?? "";
|
|
4
|
+
return normalized ? `/${normalized}/` : "/";
|
|
5
|
+
};
|
|
6
|
+
var importMetaEnv = import.meta.env;
|
|
7
|
+
var siteBasePath = normalizeSiteBasePath(importMetaEnv?.BASE_URL ?? process.env.PAGES_BASE_PATH);
|
|
8
|
+
var isExternalUrl = (value) => value.startsWith("//") || /^[a-z][a-z\d+.-]*:/i.test(value);
|
|
9
|
+
var withSiteBaseUrl = (value) => {
|
|
10
|
+
if (value === "" || value.startsWith("#") || isExternalUrl(value)) {
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
if (!value.startsWith("/")) {
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
if (siteBasePath !== "/" && (value === siteBasePath.slice(0, -1) || value.startsWith(siteBasePath))) {
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
return siteBasePath === "/" ? value : `${siteBasePath.slice(0, -1)}${value}`;
|
|
20
|
+
};
|
|
21
|
+
var resolvePublicAssetUrl = (value) => {
|
|
22
|
+
if (!value) {
|
|
23
|
+
return void 0;
|
|
24
|
+
}
|
|
25
|
+
if (value.startsWith("#") || isExternalUrl(value)) {
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
const pathname = value.startsWith("/") ? value : `/${value.replace(/^\/+/, "")}`;
|
|
29
|
+
return withSiteBaseUrl(pathname);
|
|
30
|
+
};
|
|
31
|
+
var nivelPublicRoute = "/nivel";
|
|
32
|
+
var baseAssets = `${withSiteBaseUrl(nivelPublicRoute).replace(/\/?$/, "/")}`;
|
|
33
|
+
var nivelAssetUrl = (assetPath) => `${baseAssets}${assetPath.replace(/^\/+/, "")}`;
|
|
34
|
+
|
|
35
|
+
export {
|
|
36
|
+
withSiteBaseUrl,
|
|
37
|
+
resolvePublicAssetUrl,
|
|
38
|
+
nivelPublicRoute,
|
|
39
|
+
baseAssets,
|
|
40
|
+
nivelAssetUrl
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=chunk-FLO5CJZH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/nivelAssets.ts"],"sourcesContent":["const normalizeSiteBasePath = (value: string | undefined) => {\n const normalized = value?.trim().replace(/^\\/+|\\/+$/g, '') ?? ''\n return normalized ? `/${normalized}/` : '/'\n}\n\nconst importMetaEnv = (import.meta as ImportMeta & { env?: { BASE_URL?: string } }).env\n\nconst siteBasePath = normalizeSiteBasePath(importMetaEnv?.BASE_URL ?? process.env.PAGES_BASE_PATH)\n\nconst isExternalUrl = (value: string) => value.startsWith('//') || /^[a-z][a-z\\d+.-]*:/i.test(value)\n\nexport const withSiteBaseUrl = (value: string) => {\n if (value === '' || value.startsWith('#') || isExternalUrl(value)) {\n return value\n }\n\n if (!value.startsWith('/')) {\n return value\n }\n\n if (siteBasePath !== '/' && (value === siteBasePath.slice(0, -1) || value.startsWith(siteBasePath))) {\n return value\n }\n\n return siteBasePath === '/' ? value : `${siteBasePath.slice(0, -1)}${value}`\n}\n\nexport const resolvePublicAssetUrl = (value: string | undefined) => {\n if (!value) {\n return undefined\n }\n\n if (value.startsWith('#') || isExternalUrl(value)) {\n return value\n }\n\n const pathname = value.startsWith('/') ? value : `/${value.replace(/^\\/+/, '')}`\n return withSiteBaseUrl(pathname)\n}\n\nexport const nivelPublicRoute = '/nivel'\n\nexport const baseAssets = `${withSiteBaseUrl(nivelPublicRoute).replace(/\\/?$/, '/')}`\n\nexport const nivelAssetUrl = (assetPath: string) => `${baseAssets}${assetPath.replace(/^\\/+/, '')}`\n"],"mappings":";AAAA,IAAM,wBAAwB,CAAC,UAA8B;AAC3D,QAAM,aAAa,OAAO,KAAK,EAAE,QAAQ,cAAc,EAAE,KAAK;AAC9D,SAAO,aAAa,IAAI,UAAU,MAAM;AAC1C;AAEA,IAAM,gBAAiB,YAA6D;AAEpF,IAAM,eAAe,sBAAsB,eAAe,YAAY,QAAQ,IAAI,eAAe;AAEjG,IAAM,gBAAgB,CAAC,UAAkB,MAAM,WAAW,IAAI,KAAK,sBAAsB,KAAK,KAAK;AAE5F,IAAM,kBAAkB,CAAC,UAAkB;AAChD,MAAI,UAAU,MAAM,MAAM,WAAW,GAAG,KAAK,cAAc,KAAK,GAAG;AACjE,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,MAAM,WAAW,GAAG,GAAG;AAC1B,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB,QAAQ,UAAU,aAAa,MAAM,GAAG,EAAE,KAAK,MAAM,WAAW,YAAY,IAAI;AACnG,WAAO;AAAA,EACT;AAEA,SAAO,iBAAiB,MAAM,QAAQ,GAAG,aAAa,MAAM,GAAG,EAAE,CAAC,GAAG,KAAK;AAC5E;AAEO,IAAM,wBAAwB,CAAC,UAA8B;AAClE,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,WAAW,GAAG,KAAK,cAAc,KAAK,GAAG;AACjD,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,MAAM,WAAW,GAAG,IAAI,QAAQ,IAAI,MAAM,QAAQ,QAAQ,EAAE,CAAC;AAC9E,SAAO,gBAAgB,QAAQ;AACjC;AAEO,IAAM,mBAAmB;AAEzB,IAAM,aAAa,GAAG,gBAAgB,gBAAgB,EAAE,QAAQ,QAAQ,GAAG,CAAC;AAE5E,IAAM,gBAAgB,CAAC,cAAsB,GAAG,UAAU,GAAG,UAAU,QAAQ,QAAQ,EAAE,CAAC;","names":[]}
|