@clarify-labs/renderer 0.11.4 → 0.11.6
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/output/{ClarifyShell-gzlibEm8.js → ClarifyShell-CKvXZj0f.js} +120 -41
- package/output/ClarifyShell-CKvXZj0f.js.map +1 -0
- package/output/{ClarifyShell-Cvb7Nk3A.cjs → ClarifyShell-CukbPOAd.cjs} +120 -41
- package/output/ClarifyShell-CukbPOAd.cjs.map +1 -0
- package/output/{MermaidViewer-CPuTNujY.cjs → MermaidViewer-FOg263MO.cjs} +6 -7
- package/output/MermaidViewer-FOg263MO.cjs.map +1 -0
- package/output/{MermaidViewer-EVuBmrzA.js → MermaidViewer-_tpH0JNn.js} +6 -7
- package/output/MermaidViewer-_tpH0JNn.js.map +1 -0
- package/output/{OpenApiOperation-Ddax6Pen.js → OpenApiOperation-Dv9u2GEJ.js} +63 -59
- package/output/OpenApiOperation-Dv9u2GEJ.js.map +1 -0
- package/output/{OpenApiOperation-QqYCuqve.cjs → OpenApiOperation-c-I6Nw9j.cjs} +82 -60
- package/output/OpenApiOperation-c-I6Nw9j.cjs.map +1 -0
- package/output/{PageActions-BBRz0tJ4.js → PageActions-DviEypf6.js} +41 -43
- package/output/PageActions-DviEypf6.js.map +1 -0
- package/output/{PageActions-ypH6U0Vc.cjs → PageActions-ob2OJusG.cjs} +41 -43
- package/output/PageActions-ob2OJusG.cjs.map +1 -0
- package/output/{SearchDialog-Df6jknma.js → SearchDialog-89JAjQMh.js} +3 -3
- package/output/{SearchDialog-Df6jknma.js.map → SearchDialog-89JAjQMh.js.map} +1 -1
- package/output/{SearchDialog-DCGBhNnW.cjs → SearchDialog-CTiUIKeo.cjs} +3 -3
- package/output/{SearchDialog-DCGBhNnW.cjs.map → SearchDialog-CTiUIKeo.cjs.map} +1 -1
- package/output/app/AppShell.d.ts +1 -0
- package/output/app/BuiltWithClarify.d.ts +5 -1
- package/output/app/ContentDiagnostic.d.ts +1 -1
- package/output/client.cjs +3 -3
- package/output/client.js +3 -3
- package/output/{i18n-LXAq0RIC.js → i18n-Cff810G_.js} +3 -3
- package/output/i18n-Cff810G_.js.map +1 -0
- package/output/{i18n-Ds-f-qlT.cjs → i18n-Cjfk1N7i.cjs} +3 -3
- package/output/i18n-Cjfk1N7i.cjs.map +1 -0
- package/output/index.cjs +104 -20
- package/output/index.cjs.map +1 -1
- package/output/index.d.ts +3 -3
- package/output/index.js +102 -21
- package/output/index.js.map +1 -1
- package/output/mdx/components.d.ts +2 -1
- package/output/openapi/components/EndpointMethodBadge.d.ts +1 -0
- package/output/openapi/components/OpenApiLink.d.ts +9 -0
- package/output/openapi/components/OpenApiRequest.d.ts +1 -0
- package/output/openapi/components/useOpenApiRequestState.d.ts +1 -1
- package/output/openapi/entry.d.ts +4 -3
- package/output/openapi/index.d.ts +1 -0
- package/output/openapi/lib/utils.d.ts +1 -0
- package/output/preview.cjs +4 -4
- package/output/preview.cjs.map +1 -1
- package/output/preview.js +4 -4
- package/output/preview.js.map +1 -1
- package/output/{render-C2rZuVLy.js → render-B41PHjt8.js} +2 -2
- package/output/{render-C2rZuVLy.js.map → render-B41PHjt8.js.map} +1 -1
- package/output/{render-BQkaRYoY.cjs → render-BxiVlY6q.cjs} +2 -2
- package/output/{render-BQkaRYoY.cjs.map → render-BxiVlY6q.cjs.map} +1 -1
- package/output/renderer.css +38 -16
- package/output/server.cjs +2 -2
- package/output/server.js +2 -2
- package/package.json +1 -1
- package/output/ClarifyShell-Cvb7Nk3A.cjs.map +0 -1
- package/output/ClarifyShell-gzlibEm8.js.map +0 -1
- package/output/MermaidViewer-CPuTNujY.cjs.map +0 -1
- package/output/MermaidViewer-EVuBmrzA.js.map +0 -1
- package/output/OpenApiOperation-Ddax6Pen.js.map +0 -1
- package/output/OpenApiOperation-QqYCuqve.cjs.map +0 -1
- package/output/PageActions-BBRz0tJ4.js.map +0 -1
- package/output/PageActions-ypH6U0Vc.cjs.map +0 -1
- package/output/i18n-Ds-f-qlT.cjs.map +0 -1
- package/output/i18n-LXAq0RIC.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PageActions-ypH6U0Vc.cjs","names":[],"sources":["../source/utils/clipboard.ts","../source/utils/href.ts","../source/shell/ContentActions.tsx","../source/theme/cookies.ts","../source/theme/ThemeProvider.tsx","../source/theme/ThemeToggle.tsx","../source/utils/localized-text.ts","../source/utils/path.ts","../source/utils/lucide.ts","../source/shell/icons.tsx","../source/utils/remToPx.ts","../source/app/SectionProvider.tsx","../source/shell/Navigation.tsx","../source/shell/mobile.tsx","../source/shell/search/useSearchProps.ts","../source/shell/Search.tsx","../source/shell/SiteLogo.tsx","../source/shell/Header.tsx","../source/app/PageActions.tsx"],"sourcesContent":["export async function copyTextToClipboard(text: string): Promise<boolean> {\n if (typeof navigator !== 'undefined' && navigator.clipboard?.writeText) {\n try {\n await navigator.clipboard.writeText(text)\n return true\n } catch {\n // Fall back to a temporary textarea below.\n }\n }\n\n if (typeof document === 'undefined') return false\n\n const textarea = document.createElement('textarea')\n textarea.value = text\n textarea.setAttribute('readonly', '')\n textarea.style.position = 'fixed'\n textarea.style.top = '-9999px'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n\n try {\n textarea.select()\n return document.execCommand('copy')\n } catch {\n return false\n } finally {\n textarea.remove()\n }\n}\n","import type { Config } from '../types'\n\nexport function isExternalHref(href: string): boolean {\n return /^[a-z][a-z\\d+.-]*:/i.test(href) || href.startsWith('//')\n}\n\nexport function hasLocalePrefix(href: string, config: Config): boolean {\n const firstSegment = href.replace(/^\\/+/, '').split('/')[0]\n return Boolean(firstSegment && config.locales?.locales.some((locale) => locale.code === firstSegment))\n}\n\nexport function localizeHref(href: string, config: Config, locale?: string): string {\n if (!locale || !config.locales || isExternalHref(href) || href.startsWith('#')) return href\n if (hasLocalePrefix(href, config)) return href\n if (locale === config.locales.default) return href.startsWith('/') ? href : `/${href}`\n\n const cleanHref = href === '/' ? '' : href.replace(/^\\/+/, '')\n return `/${locale}${cleanHref ? `/${cleanHref}` : ''}`\n}\n\nexport function prefixHref(href: string, routePrefix: string = '/'): string {\n if (isExternalHref(href) || href.startsWith('#')) return href\n if (!routePrefix || routePrefix === '/') return href.startsWith('/') ? href : `/${href}`\n\n const prefix = routePrefix.replace(/^\\/+|\\/+$/g, '')\n const path = href.replace(/^\\/+/, '')\n if (!path) return `/${prefix}`\n if (path === prefix || path.startsWith(`${prefix}/`)) return `/${path}`\n return `/${prefix}/${path}`\n}\n","import { Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/react'\nimport { Check, ChevronDown, Copy, ExternalLink, FileText, Link2, LoaderCircle, PencilLine, Terminal, X } from 'lucide-react'\nimport { useEffect, useState } from 'react'\n\nimport { useBuiltInText } from '../i18n'\nimport type { RouteItem } from '../types'\nimport { copyTextToClipboard } from '../utils/clipboard'\nimport { prefixHref } from '../utils/href'\n\ntype ContentActionsProps = {\n route?: RouteItem\n routePrefix?: string\n}\n\ntype CopyState = 'idle' | 'content' | 'link' | 'llms' | 'mcp'\ntype CopyPhase = 'idle' | 'copying' | 'copied' | 'failed'\ntype CopyAction = {\n key: Exclude<CopyState, 'idle'>\n label: string\n description: string\n icon: typeof Copy\n run: () => Promise<void>\n copiedLabel?: string\n}\n\nfunction resolveContentArtifactUrl(contentArtifactUrl: string, routePrefix: string = '/'): string {\n return prefixHref(contentArtifactUrl, routePrefix)\n}\n\nfunction getAbsoluteUrl(path: string): string {\n if (typeof window === 'undefined') return path\n return new URL(path, window.location.href).href\n}\n\nexport function ContentActions(arg0: ContentActionsProps) {\n const { route, routePrefix } = arg0\n const t = useBuiltInText()\n const [copied, setCopied] = useState<CopyState>('idle')\n const [copyPhase, setCopyPhase] = useState<CopyPhase>('idle')\n\n useEffect(() => {\n if (copyPhase !== 'copied' && copyPhase !== 'failed') return undefined\n const timeout = setTimeout(() => {\n setCopied('idle')\n setCopyPhase('idle')\n }, 1600)\n return () => clearTimeout(timeout)\n }, [copyPhase])\n\n if (!route?.contentArtifactUrl && !route?.sourceEditUrl) return null\n\n const contentArtifactUrl = route.contentArtifactUrl ? resolveContentArtifactUrl(route.contentArtifactUrl, routePrefix) : undefined\n const isOpenApi = route.kind === 'openapi'\n const contentTypeLabel = isOpenApi ? 'OpenAPI' : 'Markdown'\n const replacements = { contentType: contentTypeLabel }\n const viewLabel = isOpenApi ? t('contentActions.viewOpenApi') : t('contentActions.viewMarkdown')\n const viewDescription = isOpenApi ? t('contentActions.viewOpenApiDescription') : t('contentActions.viewMarkdownDescription')\n\n async function runCopy(state: Exclude<CopyState, 'idle'>, getText: () => Promise<string> | string) {\n setCopied(state)\n setCopyPhase('copying')\n try {\n const text = await getText()\n setCopyPhase((await copyTextToClipboard(text)) ? 'copied' : 'failed')\n } catch {\n setCopyPhase('failed')\n }\n }\n\n async function handleCopyContent() {\n if (!contentArtifactUrl) return\n await runCopy('content', async () => {\n const response = await fetch(contentArtifactUrl)\n if (!response.ok) throw new Error(`Failed to fetch content: ${response.status}`)\n return response.text()\n })\n }\n\n const llmsArtifactUrl = resolveContentArtifactUrl('/llms.txt', routePrefix)\n\n async function handleCopyLink() {\n if (!contentArtifactUrl) return\n await runCopy('link', () => getAbsoluteUrl(contentArtifactUrl))\n }\n\n async function handleCopyLlms() {\n await runCopy('llms', () => getAbsoluteUrl(llmsArtifactUrl))\n }\n\n async function handleCopyMcp() {\n await runCopy('mcp', () => mcpConfig)\n }\n\n const mcpConfig = JSON.stringify(\n {\n mcpServers: {\n clarify: {\n command: 'npx',\n args: ['@clarify-labs/cli', 'mcp', window.location.origin],\n },\n },\n },\n null,\n 2,\n )\n\n const actions: CopyAction[] = contentArtifactUrl\n ? [\n {\n key: 'content',\n label: t('contentActions.copyContent'),\n description: t('contentActions.copyContentDescription', replacements),\n icon: Copy,\n run: handleCopyContent,\n copiedLabel: t('contentActions.copiedContent'),\n },\n {\n key: 'link',\n label: t('contentActions.copyLink', replacements),\n description: t('contentActions.copyLinkDescription', replacements),\n icon: Link2,\n run: handleCopyLink,\n copiedLabel: t('contentActions.copiedLink'),\n },\n ]\n : []\n\n const llmsAction: CopyAction = {\n key: 'llms',\n label: t('contentActions.copyLlms'),\n description: t('contentActions.copyLlmsDescription'),\n icon: FileText,\n run: handleCopyLlms,\n copiedLabel: t('contentActions.copiedLlms'),\n }\n const mcpAction: CopyAction = {\n key: 'mcp',\n label: t('contentActions.mcpConfig'),\n description: t('contentActions.mcpConfigDescription'),\n icon: Terminal,\n run: handleCopyMcp,\n copiedLabel: t('contentActions.copiedMcpConfig'),\n }\n const primaryAction = actions[0]\n const primaryPhase = primaryAction && copied === primaryAction.key ? copyPhase : 'idle'\n const PrimaryIcon = primaryPhase === 'copying' ? LoaderCircle : primaryPhase === 'copied' ? Check : primaryPhase === 'failed' ? X : primaryAction?.icon ?? PencilLine\n const feedbackAction = copied === 'content' ? actions[0] : copied === 'link' ? actions[1] : copied === 'llms' ? llmsAction : copied === 'mcp' ? mcpAction : undefined\n const feedbackLabel = copyPhase === 'copying'\n ? t('actions.copying')\n : copyPhase === 'failed'\n ? t('actions.copyFailed')\n : feedbackAction?.copiedLabel\n\n return (\n <div className=\"clarify-content-actions not-prose flex shrink-0 justify-start sm:justify-end\">\n <Menu as=\"div\" className=\"clarify-content-actions-menu relative inline-flex min-w-0 text-sm font-medium\">\n <div className=\"clarify-content-actions-group inline-flex min-w-0 items-center gap-1\">\n {primaryAction ? (\n <button\n type=\"button\"\n onClick={primaryAction.run}\n disabled={primaryPhase === 'copying'}\n aria-live=\"polite\"\n className=\"clarify-content-actions-primary clarify-ui-control inline-flex h-9 min-w-0 items-center gap-2 rounded-md border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) px-3 shadow-xs shadow-zinc-900/5 transition\"\n >\n <PrimaryIcon className={`h-4 w-4 shrink-0 ${primaryPhase === 'copying' ? 'animate-spin' : ''}`} />\n <span className=\"truncate\">{primaryPhase === 'idle' ? primaryAction.label : feedbackLabel}</span>\n </button>\n ) : (\n <a\n href={route.sourceEditUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"clarify-content-actions-primary clarify-ui-control inline-flex h-9 min-w-0 items-center gap-2 rounded-md border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) px-3 no-underline shadow-xs shadow-zinc-900/5 transition\"\n >\n <PrimaryIcon className=\"h-4 w-4 shrink-0\" />\n <span className=\"truncate\">{t('contentActions.editPage')}</span>\n </a>\n )}\n <MenuButton className=\"clarify-content-actions-trigger clarify-ui-control inline-flex size-9 items-center justify-center rounded-md border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) shadow-xs shadow-zinc-900/5 transition\" aria-label={t('contentActions.copyOptions')}>\n <ChevronDown className=\"h-3.5 w-3.5\" />\n </MenuButton>\n </div>\n {feedbackAction && copyPhase !== 'idle' && copied !== primaryAction?.key ? (\n <div\n role=\"status\"\n className=\"absolute top-full right-0 mt-2 inline-flex items-center gap-1.5 whitespace-nowrap rounded-md border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) px-2.5 py-1.5 text-xs shadow-lg shadow-zinc-900/10\"\n >\n {copyPhase === 'copying' ? <LoaderCircle className=\"h-3.5 w-3.5 animate-spin\" /> : copyPhase === 'copied' ? <Check className=\"h-3.5 w-3.5 text-(--clarify-theme-tokens-colors-primary)\" /> : <X className=\"h-3.5 w-3.5\" />}\n <span>{feedbackLabel}</span>\n </div>\n ) : null}\n <MenuItems\n modal={false}\n anchor=\"bottom end\"\n className=\"clarify-content-actions-list clarify-ui-menu z-30 mt-2 w-(--clarify-ui-action-menu-width) origin-top-right rounded-(--clarify-theme-tokens-radius-xl) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-1.5 shadow-xl shadow-zinc-900/5 transition [--anchor-gap:--spacing(2)] focus:outline-none data-closed:scale-95 data-closed:opacity-0\"\n >\n {route.sourceEditUrl ? (\n <MenuItem>\n <a\n href={route.sourceEditUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"clarify-content-actions-item clarify-ui-menu-item group flex w-full items-center gap-2 rounded-(--clarify-theme-tokens-radius-lg) px-1.5 py-1.5 text-left no-underline transition\"\n >\n <span className=\"clarify-ui-menu-icon flex shrink-0 rounded-(--clarify-theme-tokens-radius-md) border border-(--clarify-theme-tokens-colors-border) p-1.5\">\n <PencilLine className=\"h-4 w-4\" />\n </span>\n <span className=\"flex min-w-0 flex-1 flex-col px-1\">\n <span className=\"clarify-ui-menu-title flex items-center gap-1\">\n {t('contentActions.editPage')}\n <ExternalLink className=\"clarify-ui-menu-icon h-3 w-3\" />\n </span>\n <span className=\"clarify-ui-menu-description truncate\">{t('contentActions.editPageDescription')}</span>\n </span>\n <Check className=\"h-3.5 w-3.5 shrink-0 text-(--clarify-theme-tokens-colors-primary) opacity-0\" />\n </a>\n </MenuItem>\n ) : null}\n {actions.slice(0, 1).map((action) => {\n const Icon = action.icon\n const isCopied = copied === action.key\n\n return (\n <MenuItem key={action.key}>\n <button\n type=\"button\"\n onClick={action.run}\n className=\"clarify-content-actions-item clarify-ui-menu-item group flex w-full items-center gap-2 rounded-(--clarify-theme-tokens-radius-lg) px-1.5 py-1.5 text-left transition\"\n >\n <span className=\"clarify-ui-menu-icon flex shrink-0 rounded-(--clarify-theme-tokens-radius-md) border border-(--clarify-theme-tokens-colors-border) p-1.5\">\n <Icon className=\"h-4 w-4\" />\n </span>\n <span className=\"flex min-w-0 flex-1 flex-col px-1\">\n <span className=\"clarify-ui-menu-title\">{isCopied ? t('contentActions.copiedContent') : action.label}</span>\n <span className=\"clarify-ui-menu-description truncate\">{action.description}</span>\n </span>\n <Check className={`h-3.5 w-3.5 shrink-0 text-(--clarify-theme-tokens-colors-primary) transition ${isCopied ? 'opacity-100' : 'opacity-0'}`} />\n </button>\n </MenuItem>\n )\n })}\n {contentArtifactUrl ? (\n <MenuItem>\n <a\n href={contentArtifactUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"clarify-content-actions-item clarify-ui-menu-item group flex w-full items-center gap-2 rounded-(--clarify-theme-tokens-radius-lg) px-1.5 py-1.5 text-left no-underline transition\"\n >\n <span className=\"clarify-ui-menu-icon flex shrink-0 rounded-(--clarify-theme-tokens-radius-md) border border-(--clarify-theme-tokens-colors-border) p-1.5\">\n <FileText className=\"h-4 w-4\" />\n </span>\n <span className=\"flex min-w-0 flex-1 flex-col px-1\">\n <span className=\"clarify-ui-menu-title flex items-center gap-1\">\n {viewLabel}\n <ExternalLink className=\"clarify-ui-menu-icon h-3 w-3\" />\n </span>\n <span className=\"clarify-ui-menu-description truncate\">{viewDescription}</span>\n </span>\n <Check className=\"h-3.5 w-3.5 shrink-0 text-(--clarify-theme-tokens-colors-primary) opacity-0\" />\n </a>\n </MenuItem>\n ) : null}\n {actions.slice(1).map((action) => {\n const Icon = action.icon\n const isCopied = copied === action.key\n\n return (\n <MenuItem key={action.key}>\n <button\n type=\"button\"\n onClick={action.run}\n className=\"clarify-content-actions-item clarify-ui-menu-item group flex w-full items-center gap-2 rounded-(--clarify-theme-tokens-radius-lg) px-1.5 py-1.5 text-left transition\"\n >\n <span className=\"clarify-ui-menu-icon flex shrink-0 rounded-(--clarify-theme-tokens-radius-md) border border-(--clarify-theme-tokens-colors-border) p-1.5\">\n <Icon className=\"h-4 w-4\" />\n </span>\n <span className=\"flex min-w-0 flex-1 flex-col px-1\">\n <span className=\"clarify-ui-menu-title\">{isCopied ? action.copiedLabel ?? action.label : action.label}</span>\n <span className=\"clarify-ui-menu-description truncate\">{action.description}</span>\n </span>\n <Check className={`h-3.5 w-3.5 shrink-0 text-(--clarify-theme-tokens-colors-primary) transition ${isCopied ? 'opacity-100' : 'opacity-0'}`} />\n </button>\n </MenuItem>\n )\n })}\n <MenuItem key={llmsAction.key}>\n <button\n type=\"button\"\n onClick={llmsAction.run}\n className=\"clarify-content-actions-item clarify-ui-menu-item group flex w-full items-center gap-2 rounded-(--clarify-theme-tokens-radius-lg) px-1.5 py-1.5 text-left transition\"\n >\n <span className=\"clarify-ui-menu-icon flex shrink-0 rounded-(--clarify-theme-tokens-radius-md) border border-(--clarify-theme-tokens-colors-border) p-1.5\">\n <FileText className=\"h-4 w-4\" />\n </span>\n <span className=\"flex min-w-0 flex-1 flex-col px-1\">\n <span className=\"clarify-ui-menu-title\">{copied === llmsAction.key ? llmsAction.copiedLabel ?? llmsAction.label : llmsAction.label}</span>\n <span className=\"clarify-ui-menu-description truncate\">{llmsAction.description}</span>\n </span>\n <Check className={`h-3.5 w-3.5 shrink-0 text-(--clarify-theme-tokens-colors-primary) transition ${copied === llmsAction.key ? 'opacity-100' : 'opacity-0'}`} />\n </button>\n </MenuItem>\n <MenuItem key={mcpAction.key}>\n <button\n type=\"button\"\n onClick={mcpAction.run}\n className=\"clarify-content-actions-item clarify-ui-menu-item group flex w-full items-center gap-2 rounded-(--clarify-theme-tokens-radius-lg) px-1.5 py-1.5 text-left transition\"\n >\n <span className=\"clarify-ui-menu-icon flex shrink-0 rounded-(--clarify-theme-tokens-radius-md) border border-(--clarify-theme-tokens-colors-border) p-1.5\">\n <Terminal className=\"h-4 w-4\" />\n </span>\n <span className=\"flex min-w-0 flex-1 flex-col px-1\">\n <span className=\"clarify-ui-menu-title\">{copied === mcpAction.key ? mcpAction.copiedLabel ?? mcpAction.label : mcpAction.label}</span>\n <span className=\"clarify-ui-menu-description truncate\">{mcpAction.description}</span>\n </span>\n <Check className={`h-3.5 w-3.5 shrink-0 text-(--clarify-theme-tokens-colors-primary) transition ${copied === mcpAction.key ? 'opacity-100' : 'opacity-0'}`} />\n </button>\n </MenuItem>\n </MenuItems>\n </Menu>\n </div>\n )\n}\n","export type ThemePreference = 'light' | 'dark' | 'system'\n\ntype CookieOptions = { domain?: string }\ntype WritableCookieOptions = CookieOptions & { maxAge: number }\n\nexport const themeCookieName = 'clarify-theme'\nexport const localeCookieName = 'clarify-locale'\n\nconst preferenceCookieMaxAge = 60 * 60 * 24 * 365\nconst cookiePath = '/'\n\nexport function isThemePreference(value: string | null | undefined): value is ThemePreference {\n return value === 'light' || value === 'dark' || value === 'system'\n}\n\nexport function readThemeCookie(): ThemePreference | null {\n if (typeof document === 'undefined') return null\n\n const value = readCookieValue(themeCookieName)\n return isThemePreference(value) ? value : null\n}\n\nexport function getStoredThemePreference(): ThemePreference {\n return readThemeCookie() ?? 'system'\n}\n\nexport function storeThemePreference(theme: ThemePreference): void {\n storeSharedPreferenceCookie(themeCookieName, theme)\n}\n\nexport function readLocaleCookie(): string | null {\n if (typeof document === 'undefined') return null\n return readCookieValue(localeCookieName)\n}\n\nexport function getStoredLocalePreference(locales?: readonly string[]): string | null {\n const locale = readLocaleCookie()\n if (!locale) return null\n return locales && !locales.includes(locale) ? null : locale\n}\n\nexport function storeLocalePreference(locale: string): void {\n storeSharedPreferenceCookie(localeCookieName, locale)\n}\n\nfunction storeSharedPreferenceCookie(name: string, value: string): void {\n if (typeof document === 'undefined') return\n\n const domains = resolveSharedCookieDomains()\n const domain = resolveWritableSharedCookieDomain(domains, name)\n\n deleteCookie(name)\n\n for (const candidateDomain of domains) {\n deleteCookie(name, { domain: candidateDomain })\n }\n\n writeCookie(name, value, { domain: domain ?? undefined, maxAge: preferenceCookieMaxAge })\n}\n\nexport function resolveSharedCookieDomains(hostname = typeof window !== 'undefined' ? window.location.hostname : ''): string[] {\n const normalizedHostname = hostname.toLowerCase().replace(/\\.$/, '')\n\n if (!normalizedHostname || normalizedHostname === 'localhost' || normalizedHostname.endsWith('.localhost') || isIpAddress(normalizedHostname)) {\n return []\n }\n\n const parts = normalizedHostname.split('.')\n\n if (parts.length < 2) return []\n\n const domains: string[] = []\n\n for (let index = parts.length - 2; index >= 0; index -= 1) {\n domains.push(parts.slice(index).join('.'))\n }\n\n return domains\n}\n\nfunction resolveWritableSharedCookieDomain(domains: string[], probePrefix = themeCookieName): string | null {\n for (const domain of domains) {\n const probeName = `${probePrefix}-probe-${Date.now()}-${Math.random().toString(36).slice(2)}`\n const probeValue = '1'\n\n writeCookie(probeName, probeValue, { domain, maxAge: 60 })\n\n const isWritable = readCookieValue(probeName) === probeValue\n deleteCookie(probeName, { domain })\n\n if (isWritable) return domain\n }\n\n return null\n}\n\nfunction readCookieValue(cookieName: string): string | null {\n const cookies = document.cookie ? document.cookie.split('; ') : []\n\n for (const cookie of cookies) {\n const separatorIndex = cookie.indexOf('=')\n const name = separatorIndex === -1 ? cookie : cookie.slice(0, separatorIndex)\n\n if (decodeURIComponent(name) !== cookieName) continue\n\n return separatorIndex === -1 ? '' : decodeURIComponent(cookie.slice(separatorIndex + 1))\n }\n\n return null\n}\n\nfunction deleteCookie(name: string, options: CookieOptions = {}): void {\n writeCookie(name, '', { domain: options.domain, maxAge: 0 })\n}\n\nfunction writeCookie(name: string, value: string, options: WritableCookieOptions): void {\n const attributes = [\n `${encodeURIComponent(name)}=${encodeURIComponent(value)}`,\n `Path=${cookiePath}`,\n `Max-Age=${options.maxAge}`,\n 'SameSite=Lax',\n ]\n\n if (options.domain) attributes.push(`Domain=.${options.domain}`)\n if (typeof window !== 'undefined' && window.location.protocol === 'https:') attributes.push('Secure')\n\n try {\n document.cookie = attributes.join('; ')\n } catch {\n // Ignore cookie write failures from restricted embeds.\n }\n}\n\nfunction isIpAddress(hostname: string): boolean {\n return /^\\d{1,3}(?:\\.\\d{1,3}){3}$/.test(hostname) || hostname.includes(':')\n}\n","import { createContext, useContext, useEffect, useMemo, useState } from 'react'\nimport type { ReactNode } from 'react'\n\nimport { getStoredThemePreference, storeThemePreference } from './cookies'\nimport type { ThemePreference } from './cookies'\n\nexport type Theme = ThemePreference\nexport type ResolvedTheme = 'light' | 'dark'\n\ntype ThemeContextValue = {\n theme: Theme\n resolvedTheme: ResolvedTheme\n setTheme: (theme: Theme) => void\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\n\nfunction getSystemTheme(): ResolvedTheme {\n if (typeof window === 'undefined') {\n return 'light'\n }\n\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\nfunction getStoredTheme(): Theme {\n if (typeof window === 'undefined') {\n return 'system'\n }\n\n return getStoredThemePreference()\n}\n\nfunction storeTheme(theme: Theme) {\n storeThemePreference(theme)\n}\n\nfunction applyTheme(resolvedTheme: ResolvedTheme) {\n if (typeof document === 'undefined') {\n return\n }\n\n document.documentElement.classList.toggle('dark', resolvedTheme === 'dark')\n document.documentElement.style.colorScheme = resolvedTheme\n}\n\ntype ThemeProviderProps = { children: ReactNode }\n\nexport function ThemeProvider(props: ThemeProviderProps) {\n const { children } = props\n\n const [theme, setThemeState] = useState<Theme>(() => getStoredTheme())\n const [systemTheme, setSystemTheme] = useState<ResolvedTheme>(() => getSystemTheme())\n const resolvedTheme = theme === 'system' ? systemTheme : theme\n\n useEffect(() => {\n applyTheme(resolvedTheme)\n }, [resolvedTheme])\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return undefined\n }\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n\n function updateSystemTheme() {\n setSystemTheme(mediaQuery.matches ? 'dark' : 'light')\n }\n\n updateSystemTheme()\n mediaQuery.addEventListener('change', updateSystemTheme)\n\n return () => mediaQuery.removeEventListener('change', updateSystemTheme)\n }, [])\n\n const value = useMemo<ThemeContextValue>(\n () => ({\n theme,\n resolvedTheme,\n setTheme(nextTheme) {\n setThemeState(nextTheme)\n storeTheme(nextTheme)\n },\n }),\n [resolvedTheme, theme],\n )\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n}\n\nexport function useTheme() {\n const context = useContext(ThemeContext)\n\n if (!context) {\n throw new Error('[clarify] useTheme must be used within ThemeProvider')\n }\n\n return context\n}\n","import { Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { Monitor, Moon, Sun } from 'lucide-react'\nimport type { ComponentType, SVGProps } from 'react'\n\nimport { useBuiltInText } from '../core/i18n'\n\nimport { useTheme, type Theme } from './ThemeProvider'\n\ntype ThemeOption = {\n value: Theme\n label: 'theme.light' | 'theme.dark' | 'theme.system'\n icon: ComponentType<SVGProps<SVGSVGElement>>\n}\n\nconst themeOptions: ThemeOption[] = [\n { value: 'light', label: 'theme.light', icon: Sun },\n { value: 'dark', label: 'theme.dark', icon: Moon },\n { value: 'system', label: 'theme.system', icon: Monitor },\n]\n\nexport function ThemeToggle() {\n const { theme, setTheme } = useTheme()\n const t = useBuiltInText()\n const selectedOption = themeOptions.find(option => option.value === theme) ?? themeOptions[2]\n const SelectedIcon = selectedOption.icon\n\n return (\n <Menu as=\"div\" className=\"clarify-theme-toggle relative\">\n <MenuButton\n className=\"clarify-theme-toggle-button clarify-ui-control relative flex size-9 items-center justify-center rounded-(--clarify-theme-tokens-radius-md) transition\"\n aria-label={t('theme.switch')}\n >\n <span className=\"absolute size-11 pointer-fine:hidden\" />\n <SelectedIcon className=\"h-5 w-5 stroke-current\" />\n </MenuButton>\n <MenuItems\n transition\n modal={false}\n className=\"clarify-theme-toggle-menu clarify-ui-menu absolute right-0 z-50 mt-2 w-(--clarify-ui-menu-width) rounded-(--clarify-theme-tokens-radius-xl) bg-(--clarify-theme-tokens-colors-surface) p-1 shadow-lg ring-1 shadow-zinc-900/5 ring-(--clarify-theme-tokens-colors-border) transition data-closed:scale-95 data-closed:opacity-0 data-enter:duration-100 data-enter:ease-out data-leave:duration-75 data-leave:ease-in dark:bg-zinc-900 dark:ring-white/10\"\n >\n {themeOptions.map((option) => {\n const Icon = option.icon\n const selected = option.value === theme\n\n return (\n <MenuItem key={option.value}>\n {({ focus }) => (\n <button\n type=\"button\"\n onClick={() => setTheme(option.value)}\n className={clsx(\n 'clarify-theme-toggle-item clarify-ui-menu-item flex w-full items-center gap-2 rounded-(--clarify-theme-tokens-radius-lg) px-3 py-2 text-left transition',\n focus && 'clarify-ui-menu-item-focus',\n selected && 'clarify-ui-menu-item-active',\n )}\n aria-pressed={selected}\n >\n <Icon className=\"h-4 w-4 stroke-current\" />\n <span>{t(option.label)}</span>\n </button>\n )}\n </MenuItem>\n )\n })}\n </MenuItems>\n </Menu>\n )\n}\n","import type { LocalizedText } from '../core/types'\n\n/**\n * Resolve a localized text value for the given locale.\n * Falls back to the fallback locale, then the first available value,\n * then an empty string.\n */\nexport function resolveLocalizedText(text: LocalizedText, locale?: string, fallbackLocale?: string): string {\n if (typeof text === 'string') return text\n return (locale ? text[locale] : undefined)\n ?? (fallbackLocale ? text[fallbackLocale] : undefined)\n ?? Object.values(text)[0]\n ?? ''\n}\n","export function normalizeRoutePath(path: string): string {\n const [pathname, suffix = ''] = path.split(/([?#].*)/, 2)\n const normalizedPathname = pathname.replace(/^\\/+/, '/').replace(/\\/+$/, '') || '/'\n return `${normalizedPathname}${suffix}`\n}\n\nfunction stripLocalePathPrefix(path: string, locale?: string): string {\n if (!locale) return normalizeRoutePath(path)\n const [pathname, suffix = ''] = normalizeRoutePath(path).split(/([?#].*)/, 2)\n const localePrefix = `/${locale}`\n if (pathname === localePrefix) return `/${suffix}`.replace(/^\\/$/, '/')\n if (!pathname.startsWith(`${localePrefix}/`)) return `${pathname}${suffix}`\n return `${pathname.slice(localePrefix.length) || '/'}${suffix}`\n}\n\nexport function isSameRoutePath(a: string | undefined, b: string | undefined, locale?: string): boolean {\n if (!a || !b) return false\n const normalizedA = normalizeRoutePath(a)\n const normalizedB = normalizeRoutePath(b)\n return normalizedA === normalizedB || stripLocalePathPrefix(normalizedA, locale) === normalizedB || normalizedA === stripLocalePathPrefix(normalizedB, locale)\n}\n","import * as LucideIcons from 'lucide-react'\nimport type { ComponentType, SVGProps } from 'react'\n\nexport type LucideIconComponent = ComponentType<SVGProps<SVGSVGElement>>\n\n/**\n * Registry of all Lucide icon components keyed by their PascalCase export name.\n *\n * Access icons via index lookup (e.g. `lucideIconRegistry[name]`) so React\n * tooling does not mistake the access for a component created during render.\n */\nexport const lucideIconRegistry = LucideIcons as unknown as Record<string, LucideIconComponent | undefined>\n\nfunction toPascalCase(value: string): string {\n return value\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map(part => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)\n .join('')\n}\n\n/**\n * Resolve an icon name into the matching Lucide registry key.\n *\n * Accepts both the exact PascalCase export name (e.g. `ArrowRight`) and\n * kebab/space/snake variants (e.g. `arrow-right`), returning `undefined`\n * when no matching icon exists.\n */\nexport function resolveLucideIconName(name: string | undefined): string | undefined {\n if (!name) return undefined\n if (lucideIconRegistry[name]) return name\n const pascalName = toPascalCase(name)\n return lucideIconRegistry[pascalName] ? pascalName : undefined\n}\n","import clsx from 'clsx'\n\nimport { lucideIconRegistry, resolveLucideIconName } from '../utils/lucide'\n\nexport type NavigationIconProps = { name?: string; className?: string }\n\nexport function NavigationIcon(arg0: NavigationIconProps) {\n const { name, className } = arg0\n\n if (!name) return null\n\n const iconName = resolveLucideIconName(name)\n if (!iconName) return null\n\n const Icon = lucideIconRegistry[iconName]\n if (!Icon) return null\n\n return <Icon className={clsx('shrink-0 stroke-current', className)} aria-hidden=\"true\" />\n}\n","export function remToPx(remValue: number) {\n const rootFontSize =\n typeof window === 'undefined'\n ? 16\n : Number.parseFloat(window.getComputedStyle(document.documentElement).fontSize)\n\n return remValue * rootFontSize\n}\n","import {\n useCallback,\n createContext,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type ReactNode,\n type RefObject,\n} from 'react'\nimport { createStore, useStore, type StoreApi } from 'zustand'\n\nimport { remToPx } from '../utils/remToPx'\n\nexport interface Section {\n id: string\n title: string\n level?: number\n offsetRem?: number\n badge?: string\n tags?: string[]\n headingRef?: RefObject<HTMLHeadingElement | null>\n}\n\ninterface SectionState {\n sections: Section[]\n visibleSections: string[]\n setVisibleSections: (visibleSections: string[]) => void\n registerHeading: (heading: {\n id: string\n ref: RefObject<HTMLHeadingElement | null>\n offsetRem: number\n }) => void\n}\n\nfunction createSectionStore(sections: Section[]) {\n return createStore<SectionState>()((set) => ({\n sections,\n visibleSections: [],\n setVisibleSections: (visibleSections) =>\n set((state) =>\n state.visibleSections.join() === visibleSections.join()\n ? {}\n : { visibleSections },\n ),\n registerHeading: ({ id, ref, offsetRem }) =>\n set((state) => ({\n sections: state.sections.map((section) =>\n section.id === id\n ? {\n ...section,\n headingRef: ref,\n offsetRem,\n }\n : section,\n ),\n })),\n }))\n}\n\nfunction getHeaderBlockedTop(innerHeight: number, headerTopAreaRef?: RefObject<HTMLDivElement | null>) {\n const blockedTop = headerTopAreaRef?.current?.offsetHeight ?? 0\n return Math.max(0, Math.min(innerHeight, blockedTop))\n}\n\nfunction getVisibleViewportTop(scrollY: number, innerHeight: number, headerTopAreaRef?: RefObject<HTMLDivElement | null>) {\n return scrollY + getHeaderBlockedTop(innerHeight, headerTopAreaRef)\n}\n\nfunction getVisibleViewportBottom(scrollY: number, innerHeight: number, headerTopAreaRef?: RefObject<HTMLDivElement | null>) {\n const blockedTop = getHeaderBlockedTop(innerHeight, headerTopAreaRef)\n\n return scrollY + Math.max(0, innerHeight - blockedTop)\n}\n\ntype VisibilitySnapshot = {\n scrollY: number\n innerHeight: number\n blockedTop: number\n viewportTop: number\n viewportBottom: number\n visibleSections: string[]\n}\n\nfunction computeVisibleSections(sections: Section[], scrollY: number, viewportTop: number, viewportBottom: number) {\n const visibleSections: string[] = []\n\n for (let sectionIndex = 0; sectionIndex < sections.length; sectionIndex += 1) {\n const { id, headingRef, offsetRem = 0 } = sections[sectionIndex]\n\n if (!headingRef?.current) continue\n\n const offset = remToPx(offsetRem)\n const top = headingRef.current.getBoundingClientRect().top + scrollY\n const sectionTop = top - offset\n\n if (sectionIndex === 0 && sectionTop > viewportTop) {\n visibleSections.push('_top')\n }\n\n const nextSection = sections[sectionIndex + 1]\n const nextOffset = remToPx(nextSection?.offsetRem ?? offsetRem)\n const sectionBottom =\n (nextSection?.headingRef?.current?.getBoundingClientRect().top ?? Infinity) +\n scrollY -\n nextOffset\n\n if (sectionBottom > viewportTop && sectionTop < viewportBottom) {\n visibleSections.push(id)\n }\n }\n\n return visibleSections\n}\n\nfunction useSectionVisibilityDebug(_headerTopAreaRef?: RefObject<HTMLDivElement | null>) {\n const lastDebugSignatureRef = useRef('')\n\n return (snapshot: VisibilitySnapshot) => {\n const { scrollY, innerHeight, blockedTop, visibleSections } = snapshot\n const debugSignature = [\n Math.round(scrollY),\n innerHeight,\n Math.round(blockedTop),\n visibleSections.join(','),\n ].join('|')\n\n if (lastDebugSignatureRef.current === debugSignature) return\n lastDebugSignatureRef.current = debugSignature\n }\n}\n\nfunction useSectionVisibilityObserver(checkVisibleSections: () => void, headerTopAreaRef?: RefObject<HTMLDivElement | null>) {\n useIsomorphicLayoutEffect(() => {\n if (typeof window === 'undefined') return undefined\n\n checkVisibleSections()\n window.addEventListener('scroll', checkVisibleSections, { passive: true })\n window.addEventListener('resize', checkVisibleSections)\n\n const resizeObserver =\n typeof ResizeObserver === 'undefined'\n ? undefined\n : new ResizeObserver(() => {\n checkVisibleSections()\n })\n if (resizeObserver && headerTopAreaRef?.current) {\n resizeObserver.observe(headerTopAreaRef.current)\n }\n\n return () => {\n window.removeEventListener('scroll', checkVisibleSections)\n window.removeEventListener('resize', checkVisibleSections)\n resizeObserver?.disconnect()\n }\n }, [checkVisibleSections, headerTopAreaRef])\n}\n\nfunction useVisibleSections(sectionStore: StoreApi<SectionState>, headerTopAreaRef?: RefObject<HTMLDivElement | null>) {\n const setVisibleSections = useStore(sectionStore, (state) => state.setVisibleSections)\n const sections = useStore(sectionStore, (state) => state.sections)\n const emitVisibilityDebug = useSectionVisibilityDebug(headerTopAreaRef)\n\n const checkVisibleSections = useCallback(() => {\n if (typeof window === 'undefined') return\n\n const { innerHeight, scrollY } = window\n const viewportTop = getVisibleViewportTop(scrollY, innerHeight, headerTopAreaRef)\n const viewportBottom = getVisibleViewportBottom(scrollY, innerHeight, headerTopAreaRef)\n const blockedTop = getHeaderBlockedTop(innerHeight, headerTopAreaRef)\n const newVisibleSections = computeVisibleSections(sections, scrollY, viewportTop, viewportBottom)\n\n emitVisibilityDebug({\n scrollY,\n innerHeight,\n blockedTop,\n viewportTop,\n viewportBottom,\n visibleSections: newVisibleSections,\n })\n\n setVisibleSections(newVisibleSections)\n }, [emitVisibilityDebug, headerTopAreaRef, sections, setVisibleSections])\n\n useSectionVisibilityObserver(checkVisibleSections, headerTopAreaRef)\n}\n\nfunction useSyncSections(sectionStore: StoreApi<SectionState>, sections: Section[]) {\n useIsomorphicLayoutEffect(() => {\n sectionStore.setState((state) => {\n const nextSections = sections.map((section) => {\n const registeredSection = state.sections.find((item) => item.id === section.id)\n return {\n ...section,\n headingRef: registeredSection?.headingRef,\n offsetRem: registeredSection?.offsetRem ?? section.offsetRem,\n }\n })\n const nextSectionIds = new Set(nextSections.map(section => section.id))\n\n return {\n sections: nextSections,\n visibleSections: state.visibleSections.filter(id => id === '_top' || nextSectionIds.has(id)),\n }\n })\n }, [sectionStore, sections])\n}\n\nconst SectionStoreContext = createContext<StoreApi<SectionState> | null>(null)\n\nconst useIsomorphicLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect\n\ntype SectionProviderProps = {\n sections: Section[]\n headerTopAreaRef?: RefObject<HTMLDivElement | null>\n children: ReactNode\n}\n\nexport function SectionProvider(arg0: SectionProviderProps) { const {\n sections,\n headerTopAreaRef,\n children,\n} = arg0\n\n const [sectionStore] = useState(() => createSectionStore(sections))\n\n useVisibleSections(sectionStore, headerTopAreaRef)\n useSyncSections(sectionStore, sections)\n\n return <SectionStoreContext.Provider value={sectionStore}>{children}</SectionStoreContext.Provider>\n}\n\nexport function useSectionStore<T>(selector: (state: SectionState) => T) {\n const store = useContext(SectionStoreContext)\n\n if (!store) {\n throw new Error('[clarify] useSectionStore must be used within SectionProvider')\n }\n\n return useStore(store, selector)\n}\n","import { CloseButton } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport { ChevronRight } from 'lucide-react'\nimport { useId, useState } from 'react'\nimport { Link, useLocation } from 'react-router-dom'\n\nimport { useSectionStore } from '../app/SectionProvider'\nimport { useBuiltInText } from '../i18n'\nimport type { NavigationNode } from '../types'\nimport { isSameRoutePath, normalizeRoutePath } from '../utils/path'\nimport { remToPx } from '../utils/remToPx'\n\nimport { NavigationIcon } from './icons'\n\ntype NavigationGroup = {\n title: string\n icon?: string\n nodes: NavigationNode[]\n}\n\nfunction normalizePath(path: string) {\n return path === '' ? '/' : path\n}\n\nfunction navigationToGroups(navigation: NavigationNode[], defaultTitle: string): NavigationGroup[] {\n return navigation.map((node) => ({\n title: node.children?.length ? node.title : defaultTitle,\n icon: node.icon,\n nodes: node.children?.length ? node.children : [node],\n }))\n}\n\nfunction containsActivePath(node: NavigationNode, pathname: string, currentLocale?: string): boolean {\n return isSameRoutePath(node.path, pathname, currentLocale)\n || node.children?.some(child => containsActivePath(child, pathname, currentLocale))\n || false\n}\n\nconst sectionBadgeColorStyles: Record<string, string> = {\n GET: 'text-emerald-500 dark:text-emerald-400',\n POST: 'text-sky-500 dark:text-sky-400',\n PUT: 'text-amber-500 dark:text-amber-400',\n PATCH: 'text-amber-500 dark:text-amber-400',\n DELETE: 'text-red-500 dark:text-rose-500',\n OPTIONS: 'text-violet-500 dark:text-violet-400',\n HEAD: 'text-zinc-500 dark:text-zinc-400',\n TRACE: 'text-fuchsia-500 dark:text-fuchsia-400',\n WEBHOOK: 'text-violet-500 dark:text-violet-400',\n}\n\ntype SectionBadgeProps = { children: string }\n\nfunction SectionBadge(arg0: SectionBadgeProps) {\n const { children } = arg0\n\n return (\n <span\n className={clsx(\n 'clarify-navigation-section-badge inline-flex shrink-0 justify-end font-semibold uppercase tracking-wide',\n sectionBadgeColorStyles[children.toUpperCase()] ?? 'clarify-ui-menu-description',\n )}\n >\n {children}\n </span>\n )\n}\n\ntype NavigationPageProps = {\n node: NavigationNode\n pathname: string\n currentLocale?: string\n ancestorsExpanded: boolean\n}\n\nfunction getVisibleSectionHighlightRange(sectionIds: string[], visibleSectionIds: string[]) {\n const validVisibleSectionIds = visibleSectionIds.filter(id => id === '_top' || sectionIds.includes(id))\n if (!validVisibleSectionIds.length) return undefined\n\n const firstVisibleSectionId = validVisibleSectionIds[0]!\n const lastVisibleSectionId = validVisibleSectionIds[validVisibleSectionIds.length - 1]!\n const pageHeight = remToPx(2.25)\n const sectionOffset = pageHeight + remToPx(0.25)\n const sectionHeight = remToPx(2)\n const getSectionTop = (id: string) => {\n if (id === '_top') return 0\n return sectionOffset + sectionIds.indexOf(id) * sectionHeight\n }\n const top = getSectionTop(firstVisibleSectionId)\n const bottom = lastVisibleSectionId === '_top'\n ? pageHeight\n : getSectionTop(lastVisibleSectionId) + sectionHeight\n\n return { top, height: bottom - top }\n}\n\ntype VisibleSectionHighlightProps = {\n top: number\n height: number\n}\n\nfunction VisibleSectionHighlight(arg0: VisibleSectionHighlightProps) {\n const { top, height } = arg0\n\n return (\n <motion.div\n className=\"clarify-navigation-section-highlight pointer-events-none absolute inset-x-0 top-0\"\n initial={false}\n animate={{ opacity: 1, height, top, transition: { duration: 0.2, ease: 'easeOut' } }}\n style={{ borderRadius: 'var(--clarify-theme-tokens-radius-md)' }}\n />\n )\n}\n\nfunction NavigationPage(arg0: NavigationPageProps) {\n const { node, pathname, currentLocale, ancestorsExpanded } = arg0\n const sections = useSectionStore(state => state.sections)\n const visibleSections = useSectionStore(state => state.visibleSections)\n const active = isSameRoutePath(node.path, pathname, currentLocale)\n const href = normalizePath(node.path)\n const highlightRange = active && ancestorsExpanded\n ? getVisibleSectionHighlightRange(sections.map(section => section.id), visibleSections)\n : undefined\n\n return (\n <li className=\"clarify-navigation-page relative\">\n {highlightRange ? <VisibleSectionHighlight {...highlightRange} /> : null}\n <CloseButton\n as={Link}\n to={href}\n aria-current={active ? 'page' : undefined}\n className=\"clarify-navigation-link group relative z-10 flex min-h-9 items-center gap-2 rounded-(--clarify-theme-tokens-radius-md) py-1.5 pr-3 pl-2 no-underline transition\"\n >\n <span className=\"clarify-navigation-active-marker absolute inset-y-1.5 left-0 w-0.5 rounded-full opacity-0 transition-opacity group-aria-current:opacity-100\" />\n {node.icon ? <NavigationIcon name={node.icon} className=\"clarify-navigation-item-icon h-3.5 w-3.5 shrink-0\" /> : null}\n <span className=\"min-w-0 flex-1 truncate whitespace-nowrap\">{node.title}</span>\n </CloseButton>\n\n <AnimatePresence initial={false}>\n {active && sections.length > 0 ? (\n <motion.ul\n role=\"list\"\n className=\"clarify-navigation-sections relative py-1\"\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1, transition: { duration: 0.18, ease: 'easeOut' } }}\n exit={{ height: 0, opacity: 0, transition: { duration: 0.12, ease: 'easeIn' } }}\n >\n {sections.map(section => (\n <li key={section.id}>\n <CloseButton\n as={Link}\n to={`${href}#${section.id}`}\n className=\"clarify-navigation-anchor-link relative z-10 flex min-h-8 items-center pr-3 pl-2 no-underline transition\"\n >\n <span className=\"clarify-navigation-section-indent flex shrink-0\" aria-hidden=\"true\">\n {Array.from({ length: Math.max(1, (section.level ?? 2) - 1) }, (_, index) => (\n <ChevronRight key={index} className=\"invisible h-3.5 w-3.5\" />\n ))}\n </span>\n <span className=\"flex min-w-0 flex-1 items-center gap-2\">\n {section.badge ? <SectionBadge>{section.badge}</SectionBadge> : null}\n <span className=\"min-w-0 flex-1 truncate whitespace-nowrap\">{section.title}</span>\n </span>\n </CloseButton>\n </li>\n ))}\n </motion.ul>\n ) : null}\n </AnimatePresence>\n </li>\n )\n}\n\ntype NavigationBranchProps = {\n node: NavigationNode\n pathname: string\n currentLocale?: string\n ancestorsExpanded: boolean\n}\n\nfunction NavigationBranch(arg0: NavigationBranchProps) {\n const { node, pathname, currentLocale, ancestorsExpanded } = arg0\n const controlsId = useId()\n const active = containsActivePath(node, pathname, currentLocale)\n const [expansionOverride, setExpansionOverride] = useState<boolean>()\n const expanded = expansionOverride ?? active\n\n return (\n <li className=\"clarify-navigation-branch relative\">\n <button\n type=\"button\"\n aria-expanded={expanded}\n aria-controls={controlsId}\n data-active={active || undefined}\n onClick={() => setExpansionOverride(!expanded)}\n className=\"clarify-navigation-branch-trigger group flex min-h-9 w-full items-center rounded-(--clarify-theme-tokens-radius-md) py-1.5 pr-3 pl-2 text-left transition\"\n >\n {node.icon ? <NavigationIcon name={node.icon} className=\"clarify-navigation-item-icon h-3.5 w-3.5 shrink-0\" /> : null}\n <span className=\"min-w-0 flex-1 truncate pl-2 whitespace-nowrap\">{node.title}</span>\n <ChevronRight className=\"clarify-navigation-chevron ml-2 h-3.5 w-3.5 shrink-0 transition-transform duration-150 group-aria-expanded:rotate-90\" />\n </button>\n\n <AnimatePresence initial={false}>\n {expanded ? (\n <motion.div\n id={controlsId}\n className=\"clarify-navigation-branch-content grid grid-cols-[auto_minmax(0,1fr)] overflow-hidden\"\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1, transition: { duration: 0.18, ease: 'easeOut' } }}\n exit={{ height: 0, opacity: 0, transition: { duration: 0.12, ease: 'easeIn' } }}\n >\n <div className=\"grid\">\n <ChevronRight aria-hidden=\"true\" className=\"invisible col-start-1 row-start-1 h-3.5 w-3.5\" />\n </div>\n <div className=\"col-start-2\">\n <NavigationNodes\n nodes={node.children ?? []}\n pathname={pathname}\n currentLocale={currentLocale}\n ancestorsExpanded={ancestorsExpanded && expanded}\n />\n </div>\n </motion.div>\n ) : null}\n </AnimatePresence>\n </li>\n )\n}\n\ntype NavigationNodesProps = {\n nodes: NavigationNode[]\n pathname: string\n currentLocale?: string\n ancestorsExpanded: boolean\n}\n\nfunction NavigationNodes(arg0: NavigationNodesProps) {\n const { nodes, pathname, currentLocale, ancestorsExpanded } = arg0\n\n return (\n <ul role=\"list\" className=\"clarify-navigation-tree py-0.5\">\n {nodes.map((node, index) => node.children?.length ? (\n <NavigationBranch\n key={`${node.path}-${node.title}-${index}`}\n node={node}\n pathname={pathname}\n currentLocale={currentLocale}\n ancestorsExpanded={ancestorsExpanded}\n />\n ) : (\n <NavigationPage\n key={`${node.path}-${node.title}-${index}`}\n node={node}\n pathname={pathname}\n currentLocale={currentLocale}\n ancestorsExpanded={ancestorsExpanded}\n />\n ))}\n </ul>\n )\n}\n\ntype NavigationGroupProps = {\n group: NavigationGroup\n pathname: string\n className?: string\n currentLocale?: string\n}\n\nfunction NavigationGroup(arg0: NavigationGroupProps) {\n const { group, pathname, className, currentLocale } = arg0\n\n return (\n <li className={clsx('clarify-navigation-group relative mb-7', className)}>\n <h2 className=\"clarify-navigation-group-title flex items-center gap-2 px-2\">\n <NavigationIcon name={group.icon} className=\"clarify-navigation-group-title-icon h-3.5 w-3.5 shrink-0\" />\n <span className=\"min-w-0 truncate\">{group.title}</span>\n </h2>\n <div className=\"mt-2 px-2\">\n <NavigationNodes nodes={group.nodes} pathname={pathname} currentLocale={currentLocale} ancestorsExpanded />\n </div>\n </li>\n )\n}\n\nexport type NavigationProps = { navigation: NavigationNode[]; className?: string; currentLocale?: string }\n\nexport function Navigation(arg0: NavigationProps) {\n const { navigation, className, currentLocale } = arg0\n const t = useBuiltInText()\n const pathname = normalizeRoutePath(useLocation().pathname)\n const groups = navigationToGroups(navigation, t('navigation.documentation'))\n\n return (\n <nav className={clsx('clarify-navigation', className)}>\n <ul role=\"list\" className=\"clarify-navigation-list\">\n {groups.map((group, groupIndex) => (\n <NavigationGroup\n key={`${group.title}-${groupIndex}`}\n group={group}\n pathname={pathname}\n className={groupIndex === 0 ? 'mt-0' : ''}\n currentLocale={currentLocale}\n />\n ))}\n </ul>\n </nav>\n )\n}\n","import { Dialog, DialogBackdrop, DialogPanel, Menu, MenuButton, MenuItem, MenuItems, TransitionChild } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { motion } from 'framer-motion'\nimport { Check, ChevronDown, Menu as MenuGlyph, X } from 'lucide-react'\nimport { createContext, Suspense, useContext } from 'react'\nimport { Link, useLocation } from 'react-router-dom'\nimport { create } from 'zustand'\n\nimport { useBuiltInText } from '../i18n'\nimport type { Config, NavigationNode, NavigationTab, RouteItem } from '../types'\nimport { isSameRoutePath, normalizeRoutePath } from '../utils/path'\n\nimport { Header } from './Header'\nimport { NavigationIcon } from './icons'\nimport { Navigation } from './Navigation'\n\nconst IsInsideMobileNavigationContext = createContext(false)\n\nfunction hasPath(nodes: NavigationNode[], pathname: string, currentLocale?: string): boolean {\n return nodes.some((node) => isSameRoutePath(node.path, pathname, currentLocale) || hasPath(node.children ?? [], pathname, currentLocale))\n}\n\nfunction isActiveTab(tab: NavigationTab, pathname: string, currentLocale?: string): boolean {\n return isSameRoutePath(tab.path, pathname, currentLocale) || hasPath(tab.children, pathname, currentLocale)\n}\n\ntype MobileTabsSelectProps = { tabs?: NavigationTab[]; currentLocale?: string }\n\nfunction MobileTabsSelect(arg0: MobileTabsSelectProps) {\n const { tabs, currentLocale } = arg0\n const pathname = normalizeRoutePath(useLocation().pathname)\n if (!tabs?.length) return null\n\n const activeTab = tabs.find((tab) => isActiveTab(tab, pathname, currentLocale)) ?? tabs[0]\n\n return (\n <Menu as=\"div\" className=\"clarify-mobile-tabs-select mb-6\">\n <MenuButton className=\"clarify-mobile-tabs-select-trigger clarify-ui-control group flex h-10 w-full items-center justify-between gap-2 rounded-(--clarify-theme-tokens-radius-xl) border border-(--clarify-theme-tokens-colors-border) px-4 text-left font-semibold shadow-xs shadow-zinc-900/5 transition dark:border-white/10\">\n <span className=\"flex min-w-0 items-center gap-2\">\n <NavigationIcon name={activeTab.icon} className=\"h-4 w-4 shrink-0 text-(--clarify-theme-tokens-colors-primary)\" />\n <span className=\"truncate\">{activeTab.title}</span>\n </span>\n <ChevronDown className=\"h-4 w-4 shrink-0 text-(--clarify-theme-tokens-colors-muted) transition-transform group-aria-expanded:rotate-180\" />\n </MenuButton>\n <MenuItems className=\"clarify-mobile-tabs-select-list clarify-ui-menu mt-2 flex flex-col gap-1 rounded-(--clarify-theme-tokens-radius-xl) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-1 shadow-lg shadow-zinc-900/5 focus:outline-none dark:border-white/10 dark:bg-zinc-900 dark:shadow-none\">\n {tabs.map((tab) => {\n const active = isActiveTab(tab, pathname, currentLocale)\n\n return (\n <MenuItem key={`${tab.title}-${tab.path}`}>\n <Link\n to={tab.path}\n className={clsx(\n 'clarify-mobile-tabs-select-item clarify-ui-menu-item flex items-center justify-between gap-3 rounded-(--clarify-theme-tokens-radius-lg) px-3 py-2.5 no-underline transition',\n active && 'clarify-ui-menu-item-active',\n )}\n aria-current={active ? 'page' : undefined}\n >\n <span className=\"flex min-w-0 items-start gap-2\">\n <NavigationIcon name={tab.icon} className=\"mt-0.5 h-4 w-4 shrink-0\" />\n <span className=\"min-w-0 whitespace-normal wrap-anywhere font-medium leading-5\">{tab.title}</span>\n </span>\n {active ? <Check className=\"mt-0.5 h-4 w-4 shrink-0\" /> : null}\n </Link>\n </MenuItem>\n )\n })}\n </MenuItems>\n </Menu>\n )\n}\n\ntype MobileNavigationDialogProps = {\n config: Config\n isOpen: boolean\n navigation: NavigationNode[]\n tabs?: NavigationTab[]\n routes: RouteItem[]\n currentLocale?: string\n currentRoute?: RouteItem\n close: () => void\n}\n\nfunction MobileNavigationDialog(arg0: MobileNavigationDialogProps) { const {\n config,\n isOpen,\n navigation,\n tabs,\n routes,\n currentLocale,\n currentRoute,\n close,\n} = arg0\n\n return (\n <Dialog transition open={isOpen} onClose={close} className=\"clarify-mobile-navigation-dialog fixed inset-0 z-50 lg:hidden\">\n <DialogBackdrop\n transition\n className=\"clarify-mobile-navigation-backdrop clarify-ui-backdrop fixed inset-0 top-14 backdrop-blur-xs data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in\"\n />\n\n <DialogPanel>\n <TransitionChild>\n <Header\n config={config}\n navigation={navigation}\n tabs={tabs}\n routes={routes}\n currentLocale={currentLocale}\n currentRoute={currentRoute}\n className=\"data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in\"\n />\n </TransitionChild>\n\n <TransitionChild>\n <motion.div\n layoutScroll\n className=\"clarify-mobile-navigation-panel fixed top-14 bottom-0 left-0 w-full max-w-sm overflow-y-auto bg-(--clarify-theme-tokens-colors-background) px-4 pt-6 pb-4 shadow-lg ring-1 shadow-zinc-900/10 ring-(--clarify-theme-tokens-colors-border) duration-500 ease-in-out data-closed:-translate-x-full sm:px-6 sm:pb-10 dark:bg-zinc-950 dark:ring-zinc-800\"\n >\n <MobileTabsSelect tabs={tabs} currentLocale={currentLocale} />\n <Navigation navigation={navigation} currentLocale={currentLocale} />\n </motion.div>\n </TransitionChild>\n </DialogPanel>\n </Dialog>\n )\n}\n\nexport function useIsInsideMobileNavigation() {\n return useContext(IsInsideMobileNavigationContext)\n}\n\nexport const useMobileNavigationStore = create<{\n isOpen: boolean\n open: () => void\n close: () => void\n toggle: () => void\n}>()((set) => ({\n isOpen: false,\n open: () => set({ isOpen: true }),\n close: () => set({ isOpen: false }),\n toggle: () => set((state) => ({ isOpen: !state.isOpen })),\n}))\n\nexport type MobileNavigationProps = {\n config: Config\n navigation: NavigationNode[]\n tabs?: NavigationTab[]\n routes: RouteItem[]\n currentLocale?: string\n currentRoute?: RouteItem\n}\n\nexport function MobileNavigation(arg0: MobileNavigationProps) { const {\n config,\n navigation,\n tabs,\n routes,\n currentLocale,\n currentRoute,\n} = arg0\n\n const isInsideMobileNavigation = useIsInsideMobileNavigation()\n const { isOpen, toggle, close } = useMobileNavigationStore()\n const t = useBuiltInText()\n const ToggleIcon = isOpen ? X : MenuGlyph\n\n return (\n <IsInsideMobileNavigationContext.Provider value={true}>\n <button\n type=\"button\"\n className=\"clarify-mobile-navigation-button clarify-ui-icon-button relative flex size-9 items-center justify-center rounded-(--clarify-theme-tokens-radius-md) transition\"\n aria-label={t('navigation.toggle')}\n onClick={toggle}\n >\n <span className=\"absolute size-11 pointer-fine:hidden\" />\n <ToggleIcon className=\"h-4 w-4 stroke-(--clarify-theme-tokens-colors-foreground) dark:stroke-white\" />\n </button>\n {!isInsideMobileNavigation ? (\n <Suspense fallback={null}>\n <MobileNavigationDialog\n config={config}\n navigation={navigation}\n tabs={tabs}\n routes={routes}\n currentLocale={currentLocale}\n currentRoute={currentRoute}\n isOpen={isOpen}\n close={close}\n />\n </Suspense>\n ) : null}\n </IsInsideMobileNavigationContext.Provider>\n )\n}\n","import { useRef, useState } from 'react'\n\nexport function useSearchProps() {\n const buttonRef = useRef<React.ElementRef<'button'>>(null)\n const [open, setOpen] = useState(false)\n\n return {\n buttonProps: {\n ref: buttonRef,\n onClick() {\n setOpen(true)\n },\n },\n dialogProps: {\n open,\n setOpen,\n },\n }\n}\n","import { Search as SearchIcon } from 'lucide-react'\nimport { lazy, Suspense } from 'react'\n\nimport { useBuiltInText } from '../i18n'\nimport type { NavigationNode, RouteItem } from '../types'\n\nimport { useSearchProps } from './search/useSearchProps'\n\nconst SearchDialog = lazy(() => import('./search/SearchDialog'))\n\nfunction getModifierKey() {\n if (typeof navigator === 'undefined') return 'Ctrl '\n return /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform) ? '⌘' : 'Ctrl '\n}\n\nexport type SearchProps = { routes: RouteItem[]; navigation: NavigationNode[]; routePrefix?: string; currentLocale?: string }\n\nexport function Search(arg0: SearchProps) { const { routes, navigation, routePrefix, currentLocale } = arg0\n\n const t = useBuiltInText()\n const modifierKey = getModifierKey()\n const { buttonProps, dialogProps } = useSearchProps()\n\n return (\n <div className=\"clarify-search hidden w-80 max-w-(--clarify-search-max-width) lg:block\">\n <button\n type=\"button\"\n className=\"clarify-search-button hidden h-9 w-full items-center gap-2 rounded-(--clarify-theme-tokens-radius-lg) bg-(--clarify-theme-tokens-colors-surface) pr-3 pl-2.5 font-medium ring-1 ring-(--clarify-theme-tokens-colors-border) transition hover:bg-(--clarify-theme-tokens-colors-background) lg:flex dark:bg-white/5 dark:ring-white/10 dark:ring-inset dark:hover:bg-white/10\"\n {...buttonProps}\n >\n <SearchIcon className=\"h-5 w-5 stroke-current\" />\n {t('search.button')}\n <kbd className=\"clarify-search-shortcut ml-auto rounded-(--clarify-theme-tokens-radius-sm) bg-(--clarify-theme-tokens-colors-background) px-1.5 py-0.5 ring-1 ring-(--clarify-theme-tokens-colors-border) dark:bg-white/5 dark:ring-white/10\">\n <kbd className=\"font-sans\">{modifierKey}</kbd>\n <kbd className=\"font-sans\">K</kbd>\n </kbd>\n </button>\n <Suspense fallback={null}>\n <SearchDialog className=\"hidden lg:block\" routes={routes} navigation={navigation} routePrefix={routePrefix} currentLocale={currentLocale} {...dialogProps} />\n </Suspense>\n </div>\n )\n}\n\nexport type MobileSearchProps = {\n routes: RouteItem[]\n navigation: NavigationNode[]\n routePrefix?: string\n currentLocale?: string\n onNavigate?: () => void\n}\n\nexport function MobileSearch(arg0: MobileSearchProps) { const {\n routes,\n navigation,\n routePrefix,\n currentLocale,\n onNavigate,\n} = arg0\n\n const t = useBuiltInText()\n const { buttonProps, dialogProps } = useSearchProps()\n\n return (\n <div className=\"clarify-mobile-search contents lg:hidden\">\n <button\n type=\"button\"\n className=\"clarify-mobile-search-button clarify-ui-control relative flex size-9 items-center justify-center rounded-(--clarify-theme-tokens-radius-md) transition lg:hidden\"\n aria-label={t('search.placeholder')}\n {...buttonProps}\n >\n <span className=\"absolute size-11 pointer-fine:hidden\" />\n <SearchIcon className=\"h-5 w-5 stroke-(--clarify-theme-tokens-colors-foreground) dark:stroke-white\" />\n </button>\n <Suspense fallback={null}>\n <SearchDialog className=\"lg:hidden\" routes={routes} navigation={navigation} routePrefix={routePrefix} currentLocale={currentLocale} onNavigate={onNavigate} {...dialogProps} />\n </Suspense>\n </div>\n )\n}\n","import clsx from 'clsx'\n\nimport type { LogoConfig } from '../core/types'\n\nexport type SiteLogoProps = {\n logo?: LogoConfig\n className?: string\n}\n\nexport function SiteLogo(arg0: SiteLogoProps) { const { logo, className } = arg0\n if (!logo) return null\n\n if (typeof logo === 'string') {\n return <img src={logo} alt=\"\" className={clsx('clarify-logo', className)} />\n }\n\n const lightLogo = logo.light ?? logo.dark\n const darkLogo = logo.dark ?? logo.light\n\n if (!lightLogo || !darkLogo) return null\n if (lightLogo === darkLogo) {\n return <img src={lightLogo} alt=\"\" className={clsx('clarify-logo', className)} />\n }\n\n return (\n <>\n <img src={lightLogo} alt=\"\" className={clsx('clarify-logo clarify-logo-light', className, 'dark:hidden')} />\n <img src={darkLogo} alt=\"\" className={clsx('clarify-logo clarify-logo-dark', className, 'hidden dark:block')} />\n </>\n )\n}\n","import { CloseButton, Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { LayoutGroup, motion, useReducedMotion, useScroll, useTransform } from 'framer-motion'\nimport { ChevronLeft, ChevronRight, Globe2, MoreHorizontal } from 'lucide-react'\nimport { forwardRef, useCallback, useEffect, useId, useRef, useState } from 'react'\nimport type { RefObject } from 'react'\nimport { Link, useLocation } from 'react-router-dom'\n\nimport { useBuiltInText } from '../i18n'\nimport { storeLocalePreference } from '../theme/cookies'\nimport { ThemeToggle } from '../theme/ThemeToggle'\nimport type { Config, LocaleConfig, NavbarLink, NavigationNode, NavigationTab, RouteItem } from '../types'\nimport { isExternalHref, localizeHref } from '../utils/href'\nimport { resolveLocalizedText } from '../utils/localized-text'\nimport { isSameRoutePath, normalizeRoutePath } from '../utils/path'\n\nimport { NavigationIcon } from './icons'\nimport { MobileNavigation, useIsInsideMobileNavigation, useMobileNavigationStore } from './mobile'\nimport { MobileSearch, Search } from './Search'\nimport { SiteLogo } from './SiteLogo'\n\nfunction localizedRoutePath(config: Config, locale: string, route?: RouteItem): string | undefined {\n const alternatePath = route?.alternates?.[locale]\n if (alternatePath) return alternatePath\n if (route?.alternates) return undefined\n return localizeHref(route?.basePath ?? route?.path ?? '/', config, locale)\n}\n\ntype LanguageSwitcherProps = { config: Config; currentLocale?: string; currentRoute?: RouteItem }\n\nfunction LanguageSwitcher(arg0: LanguageSwitcherProps) { const { config, currentLocale, currentRoute } = arg0\n\n const t = useBuiltInText()\n const location = useLocation()\n const locales = config.locales\n if (!locales || locales.locales.length < 2) return null\n\n const selectedLocale = currentLocale ?? locales.default\n const selectedLocaleConfig = locales.locales.find(locale => locale.code === selectedLocale) ?? locales.locales[0]\n const suffix = `${location.search}${location.hash}`\n\n return (\n <Menu as=\"div\" className=\"clarify-language-switcher relative\">\n <MenuButton\n className=\"clarify-language-switcher-button clarify-ui-control flex h-9 items-center gap-1.5 rounded-(--clarify-theme-tokens-radius-md) px-2 transition\"\n aria-label={t('language.switch')}\n >\n <span className=\"absolute size-11 pointer-fine:hidden\" />\n <Globe2 className=\"h-5 w-5 stroke-current\" />\n <span className=\"hidden sm:inline\">{selectedLocaleConfig?.label ?? selectedLocale}</span>\n </MenuButton>\n <MenuItems\n transition\n modal={false}\n className=\"clarify-language-switcher-menu clarify-ui-menu absolute right-0 z-50 mt-2 w-(--clarify-ui-menu-width) rounded-(--clarify-theme-tokens-radius-xl) bg-(--clarify-theme-tokens-colors-surface) p-1 shadow-lg ring-1 shadow-zinc-900/5 ring-(--clarify-theme-tokens-colors-border) transition data-closed:scale-95 data-closed:opacity-0 data-enter:duration-100 data-enter:ease-out data-leave:duration-75 data-leave:ease-in dark:bg-zinc-900 dark:ring-white/10\"\n >\n {locales.locales.flatMap((locale: LocaleConfig) => {\n const localizedPath = localizedRoutePath(config, locale.code, currentRoute)\n if (!localizedPath) return []\n\n const selected = locale.code === selectedLocale\n return [\n <MenuItem key={locale.code}>\n {({ focus }) => (\n <Link\n to={`${localizedPath}${suffix}`}\n onClick={() => storeLocalePreference(locale.code)}\n className={clsx(\n 'clarify-language-switcher-item clarify-ui-menu-item flex items-center justify-between rounded-(--clarify-theme-tokens-radius-lg) px-3 py-2 no-underline transition',\n focus && 'clarify-ui-menu-item-focus',\n selected && 'clarify-ui-menu-item-active',\n )}\n aria-current={selected ? 'true' : undefined}\n lang={locale.code}\n dir={locale.dir}\n >\n <span>{locale.label}</span>\n <span className=\"clarify-ui-menu-code\">{locale.code}</span>\n </Link>\n )}\n </MenuItem>,\n ]\n })}\n </MenuItems>\n </Menu>\n )\n}\n\ntype TopLevelNavItemProps = { href: string; active?: boolean; children: React.ReactNode }\n\nfunction TopLevelNavItem(arg0: TopLevelNavItemProps) { const { href, active = false, children } = arg0\n\n const external = isExternalHref(href)\n const className = clsx(\n 'clarify-ui-top-link inline-flex h-9 items-center rounded-(--clarify-theme-tokens-radius-md) px-3 no-underline transition focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--clarify-theme-tokens-colors-primary)',\n active && 'clarify-ui-top-link-active',\n )\n\n if (external) {\n return (\n <li>\n <a\n href={href}\n className={className}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {children}\n </a>\n </li>\n )\n }\n\n return (\n <li>\n <Link\n to={href}\n className={className}\n aria-current={active ? 'page' : undefined}\n >\n {children}\n </Link>\n </li>\n )\n}\n\ntype MobileNavbarMenuProps = { links?: NavbarLink[]; config: Config; currentLocale?: string }\n\nfunction resolveHomeHref(config: Config, currentLocale?: string): string {\n const homeUrl = config.homeUrl ?? '/'\n return isExternalHref(homeUrl) ? homeUrl : localizeHref(homeUrl, config, currentLocale)\n}\n\nfunction MobileNavbarMenu(arg0: MobileNavbarMenuProps) {\n const { links, config, currentLocale } = arg0\n const t = useBuiltInText()\n if (!links?.length) return null\n\n return (\n <Menu as=\"div\" className=\"clarify-mobile-navbar-menu relative md:hidden\">\n <MenuButton\n className=\"clarify-mobile-navbar-menu-button clarify-ui-control relative flex size-9 items-center justify-center rounded-(--clarify-theme-tokens-radius-md) transition\"\n aria-label={t('navbar.openLinks')}\n >\n <span className=\"absolute size-11 pointer-fine:hidden\" />\n <MoreHorizontal className=\"h-5 w-5\" />\n </MenuButton>\n <MenuItems\n transition\n anchor=\"bottom end\"\n className=\"clarify-mobile-navbar-menu-list clarify-ui-menu z-50 mt-2 w-(--clarify-ui-menu-width) rounded-(--clarify-theme-tokens-radius-xl) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-1 shadow-lg transition [--anchor-gap:--spacing(2)] focus:outline-none data-closed:scale-95 data-closed:opacity-0 dark:border-white/10 dark:bg-zinc-900\"\n >\n {links.map((link) => {\n const label = resolveLocalizedText(link.label, currentLocale, config.locales?.default)\n const href = localizeHref(link.href, config, currentLocale)\n const external = isExternalHref(href)\n\n return (\n <MenuItem key={link.href}>\n {({ focus }) => {\n const className = clsx(\n 'clarify-mobile-navbar-menu-item clarify-ui-menu-item block rounded-(--clarify-theme-tokens-radius-lg) px-3 py-2 no-underline transition',\n focus && 'clarify-ui-menu-item-focus',\n )\n\n return external ? (\n <a href={href} target=\"_blank\" rel=\"noreferrer\" className={className}>\n {label}\n </a>\n ) : (\n <Link to={href} className={className}>\n {label}\n </Link>\n )\n }}\n </MenuItem>\n )\n })}\n </MenuItems>\n </Menu>\n )\n}\n\nfunction hasPath(nodes: NavigationNode[], pathname: string, currentLocale?: string): boolean {\n return nodes.some((node) => isSameRoutePath(node.path, pathname, currentLocale) || hasPath(node.children ?? [], pathname, currentLocale))\n}\n\nfunction isActiveTab(tab: NavigationTab, pathname: string, currentLocale?: string): boolean {\n return isSameRoutePath(tab.path, pathname, currentLocale) || hasPath(tab.children, pathname, currentLocale)\n}\n\ntype ProductTabsProps = { tabs?: NavigationTab[]; currentLocale?: string }\n\nfunction ProductTabs(arg0: ProductTabsProps) { const { tabs, currentLocale } = arg0\n\n const t = useBuiltInText()\n const pathname = normalizeRoutePath(useLocation().pathname)\n const prefersReducedMotion = useReducedMotion()\n const indicatorGroupId = useId()\n const navRef = useRef<HTMLElement>(null)\n const activeTabRef = useRef<HTMLAnchorElement>(null)\n const [scrollState, setScrollState] = useState({ start: true, end: true })\n\n const updateScrollState = useCallback(() => {\n const nav = navRef.current\n if (!nav) return\n const maxScrollLeft = nav.scrollWidth - nav.clientWidth\n setScrollState({\n start: nav.scrollLeft <= 1,\n end: nav.scrollLeft >= maxScrollLeft - 1,\n })\n }, [])\n\n useEffect(() => {\n const nav = navRef.current\n if (!nav) return\n\n updateScrollState()\n const resizeObserver = new ResizeObserver(updateScrollState)\n resizeObserver.observe(nav)\n return () => resizeObserver.disconnect()\n }, [tabs, updateScrollState])\n\n useEffect(() => {\n activeTabRef.current?.scrollIntoView({\n behavior: prefersReducedMotion ? 'instant' : 'smooth',\n block: 'nearest',\n inline: 'nearest',\n })\n }, [pathname, prefersReducedMotion])\n\n const scrollTabs = (direction: -1 | 1) => {\n const nav = navRef.current\n if (!nav) return\n nav.scrollBy({\n left: direction * Math.max(nav.clientWidth * 0.6, 240),\n behavior: prefersReducedMotion ? 'instant' : 'smooth',\n })\n }\n\n if (!tabs?.length) return null\n\n return (\n <div data-clarify-header-tabs className=\"clarify-product-tabs hidden h-14 border-t border-(--clarify-theme-tokens-colors-border) lg:block dark:border-white/10\">\n <div\n className=\"clarify-product-tabs-frame relative mx-auto h-full w-full max-w-(--clarify-theme-layout-max-width)\"\n data-at-start={scrollState.start || undefined}\n data-at-end={scrollState.end || undefined}\n >\n <button\n type=\"button\"\n className=\"clarify-product-tabs-scroll clarify-product-tabs-scroll-start\"\n onClick={() => scrollTabs(-1)}\n aria-label=\"Scroll sections left\"\n tabIndex={scrollState.start ? -1 : 0}\n aria-hidden={scrollState.start}\n >\n <ChevronLeft className=\"size-4\" aria-hidden=\"true\" />\n </button>\n <LayoutGroup id={indicatorGroupId}>\n <nav\n ref={navRef}\n className=\"clarify-product-tabs-nav flex h-full w-full items-stretch gap-2 overflow-x-auto px-5\"\n aria-label={t('navbar.sections')}\n onScroll={updateScrollState}\n >\n {tabs.map((tab) => {\n const active = isActiveTab(tab, pathname, currentLocale)\n return (\n <Link\n ref={active ? activeTabRef : undefined}\n key={`${tab.title}-${tab.path}`}\n to={tab.path}\n aria-current={active ? 'page' : undefined}\n className={clsx(\n 'clarify-product-tab clarify-ui-tab relative inline-flex h-full shrink-0 items-center gap-2 px-3 no-underline transition-colors duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-(--clarify-theme-tokens-colors-primary)',\n active && 'clarify-ui-tab-active',\n )}\n >\n <NavigationIcon name={tab.icon} className=\"h-4 w-4\" />\n <span>{tab.title}</span>\n {active ? (\n <motion.span\n layoutId=\"active-indicator\"\n className=\"absolute inset-x-3 bottom-0 h-0.5 rounded-full bg-(--clarify-ui-tab-indicator)\"\n transition={prefersReducedMotion ? { duration: 0 } : { type: 'spring', stiffness: 420, damping: 38, mass: 0.7 }}\n />\n ) : null}\n </Link>\n )\n })}\n </nav>\n </LayoutGroup>\n <button\n type=\"button\"\n className=\"clarify-product-tabs-scroll clarify-product-tabs-scroll-end\"\n onClick={() => scrollTabs(1)}\n aria-label=\"Scroll sections right\"\n tabIndex={scrollState.end ? -1 : 0}\n aria-hidden={scrollState.end}\n >\n <ChevronRight className=\"size-4\" aria-hidden=\"true\" />\n </button>\n </div>\n </div>\n )\n}\n\nexport const Header = forwardRef<\n React.ComponentRef<'header'>,\n React.ComponentPropsWithoutRef<typeof motion.header> & {\n config: Config\n navigation: NavigationNode[]\n tabs?: NavigationTab[]\n routes: RouteItem[]\n currentLocale?: string\n currentRoute?: RouteItem\n banner?: React.ReactNode\n topAreaRef?: RefObject<HTMLDivElement | null>\n }\n>(function Header(arg0, ref) { const { config, navigation, tabs, routes, currentLocale, currentRoute, banner, topAreaRef, className, ...props } = arg0\n\n const t = useBuiltInText()\n const pathname = normalizeRoutePath(useLocation().pathname)\n const { isOpen: mobileNavIsOpen } = useMobileNavigationStore()\n const isInsideMobileNavigation = useIsInsideMobileNavigation()\n const homeHref = resolveHomeHref(config, currentLocale)\n const homeExternal = isExternalHref(homeHref)\n\n const { scrollY } = useScroll()\n const bgOpacityLight = useTransform(scrollY, [0, 72], ['70%', '95%'])\n const bgOpacityDark = useTransform(scrollY, [0, 72], ['60%', '92%'])\n const hasNavbarLinks = Boolean(config.navigation?.links?.length)\n\n function renderBrand() {\n if (homeExternal) {\n return (\n <CloseButton as=\"a\" href={homeHref} aria-label={t('navbar.home')} className=\"clarify-brand flex min-w-0 items-center gap-2 no-underline\">\n <SiteLogo logo={config.logo} className=\"h-6 w-auto shrink-0 object-contain\" />\n <span className=\"clarify-brand-title truncate font-semibold\">{config.title}</span>\n </CloseButton>\n )\n }\n\n return (\n <CloseButton as={Link} to={homeHref} aria-label={t('navbar.home')} className=\"clarify-brand flex min-w-0 items-center gap-2 no-underline\">\n <SiteLogo logo={config.logo} className=\"h-6 w-auto shrink-0 object-contain\" />\n <span className=\"clarify-brand-title truncate font-semibold\">{config.title}</span>\n </CloseButton>\n )\n }\n\n function renderTopLinks() {\n if (!hasNavbarLinks) return null\n\n return (\n <nav className=\"clarify-top-nav hidden md:block\" aria-label={t('navbar.sections')}>\n <ul role=\"list\" className=\"flex items-center gap-0.5\">\n {config.navigation?.links?.map((link) => {\n const href = localizeHref(link.href, config, currentLocale)\n const active = !isExternalHref(href) && isSameRoutePath(href, pathname, currentLocale)\n\n return (\n <TopLevelNavItem key={link.href} href={href} active={active}>\n {resolveLocalizedText(link.label, currentLocale, config.locales?.default)}\n </TopLevelNavItem>\n )\n })}\n </ul>\n </nav>\n )\n }\n\n function renderHeaderActions() {\n return (\n <div className=\"clarify-header-actions flex shrink-0 items-center gap-1\">\n {renderTopLinks()}\n {hasNavbarLinks ? <div className=\"mx-2 hidden h-5 w-px bg-(--clarify-theme-tokens-colors-border) md:block md:dark:bg-white/15\" /> : null}\n <MobileSearch routes={routes} navigation={navigation} routePrefix={config.routePrefix} currentLocale={currentLocale} />\n <LanguageSwitcher config={config} currentLocale={currentLocale} currentRoute={currentRoute} />\n <ThemeToggle />\n <MobileNavbarMenu links={config.navigation?.links} config={config} currentLocale={currentLocale} />\n </div>\n )\n }\n\n function renderHeaderMain() {\n return (\n <div\n data-clarify-header-main\n className={clsx(\n 'clarify-header-main relative mx-auto flex h-14 w-full max-w-(--clarify-theme-layout-max-width) items-center justify-between gap-6 px-4 sm:px-6 lg:px-5',\n (isInsideMobileNavigation || !mobileNavIsOpen) && 'shadow-none',\n )}\n >\n <div className=\"clarify-header-left flex min-w-0 items-center gap-5\">\n <div className=\"clarify-mobile-brand flex items-center gap-5 lg:hidden\">\n <MobileNavigation config={config} navigation={navigation} tabs={tabs} routes={routes} currentLocale={currentLocale} currentRoute={currentRoute} />\n </div>\n {renderBrand()}\n </div>\n <div className=\"clarify-header-center absolute left-1/2 hidden -translate-x-1/2 lg:block\">\n <Search routes={routes} navigation={navigation} routePrefix={config.routePrefix} currentLocale={currentLocale} />\n </div>\n {renderHeaderActions()}\n </div>\n )\n }\n\n function renderTopArea() {\n return (\n <div ref={topAreaRef}>\n {renderHeaderMain()}\n <div data-clarify-header-banner>{banner}</div>\n <ProductTabs tabs={tabs} currentLocale={currentLocale} />\n </div>\n )\n }\n\n return (\n <motion.header\n {...props}\n ref={ref}\n data-pagefind-ignore\n className={clsx(\n className,\n 'clarify-header fixed inset-x-0 top-0 z-50 border-b border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-background)/(--bg-opacity-light) backdrop-blur-xs transition dark:border-white/10 dark:bg-zinc-950/(--bg-opacity-dark) dark:backdrop-blur-sm',\n isInsideMobileNavigation && 'bg-(--clarify-theme-tokens-colors-background) dark:bg-zinc-950',\n )}\n style={\n {\n '--bg-opacity-light': bgOpacityLight,\n '--bg-opacity-dark': bgOpacityDark,\n } as React.CSSProperties\n }\n >\n {renderTopArea()}\n </motion.header>\n )\n})\n","import { createContext, useContext, type ReactNode } from 'react'\n\nimport { ContentActions } from '../shell/ContentActions'\nimport type { RouteItem } from '../types'\n\ntype PageActionsContextValue = {\n route?: RouteItem\n routePrefix?: string\n}\n\ntype PageActionsProviderProps = PageActionsContextValue & {\n children: ReactNode\n}\n\nconst PageActionsContext = createContext<PageActionsContextValue>({})\n\nexport function PageActionsProvider(props: PageActionsProviderProps) {\n const { children, route, routePrefix } = props\n\n return (\n <PageActionsContext.Provider value={{ route, routePrefix }}>\n {children}\n </PageActionsContext.Provider>\n )\n}\n\nexport function PageActions() {\n const { route, routePrefix } = useContext(PageActionsContext)\n\n return <ContentActions route={route} routePrefix={routePrefix} />\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"i18n-Ds-f-qlT.cjs","names":[],"sources":["../source/core/context.tsx","../source/core/locales/en.json","../source/core/locales/zh-CN.json","../source/core/i18n.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\n\nimport type { Config, OpenApiRegistry } from './types'\n\nexport const ConfigContext = createContext<Config | null>(null)\nexport const LocaleContext = createContext<string | undefined>(undefined)\nexport const OpenApiSpecsContext = createContext<OpenApiRegistry>({})\n\nexport function useConfig(): Config {\n const config = useContext(ConfigContext)\n if (!config) {\n throw new Error(\n '[clarify] useConfig must be used within a ConfigContext.Provider'\n )\n }\n return config\n}\n\nexport function useConfigOptional(): Config | null {\n return useContext(ConfigContext)\n}\n\nexport function useLocale(): string | undefined {\n return useContext(LocaleContext)\n}\n\nexport function useOpenApiSpecs(): OpenApiRegistry {\n return useContext(OpenApiSpecsContext)\n}\n","{\n \"actions.code\": \"Code\",\n \"actions.copy\": \"Copy\",\n \"actions.copying\": \"Copying...\",\n \"actions.copied\": \"Copied!\",\n \"actions.copyFailed\": \"Copy failed\",\n \"builtWith.label\": \"Built with Clarify\",\n \"builtWith.prefix\": \"Built with\",\n \"callout.danger\": \"Danger\",\n \"callout.info\": \"Info\",\n \"callout.note\": \"Note\",\n \"callout.success\": \"Success\",\n \"callout.tip\": \"Tip\",\n \"callout.warning\": \"Warning\",\n \"contentActions.copyContent\": \"Copy page\",\n \"contentActions.copyContentDescription\": \"Copy this page as {contentType} for LLMs\",\n \"contentActions.copyLink\": \"Copy {contentType} link\",\n \"contentActions.copyLinkDescription\": \"Copy the raw {contentType} content link for this page\",\n \"contentActions.copyLlms\": \"Copy llms.txt\",\n \"contentActions.copyLlmsDescription\": \"Copy the llms.txt link for this site\",\n \"contentActions.copiedLlms\": \"Copied llms.txt\",\n \"contentActions.copiedMcpConfig\": \"Copied MCP config\",\n \"contentActions.mcpConfig\": \"Copy MCP config\",\n \"contentActions.mcpConfigDescription\": \"Copy this site's MCP server configuration\",\n \"contentActions.editPage\": \"Edit this page\",\n \"contentActions.editPageDescription\": \"Open the source file for this page\",\n \"contentActions.copyOptions\": \"Choose copy option\",\n \"contentActions.copiedContent\": \"Copied page\",\n \"contentActions.copiedLink\": \"Copied link\",\n \"contentActions.viewMarkdown\": \"View as Markdown\",\n \"contentActions.viewMarkdownDescription\": \"View this page as plain text\",\n \"contentActions.viewOpenApi\": \"View raw OpenAPI\",\n \"contentActions.viewOpenApiDescription\": \"Open the API description file in a new tab\",\n \"feedback.no\": \"No\",\n \"feedback.prompt\": \"Was this page helpful?\",\n \"feedback.thanks\": \"Thanks for your feedback!\",\n \"feedback.yes\": \"Yes\",\n \"navigation.documentation\": \"Documentation\",\n \"navigation.next\": \"Next\",\n \"navigation.previous\": \"Previous\",\n \"navigation.previousNext\": \"Previous and next pages\",\n \"navigation.toggle\": \"Toggle navigation\",\n \"navbar.home\": \"Home\",\n \"navbar.openLinks\": \"Open navigation links\",\n \"navbar.sections\": \"Documentation sections\",\n \"notFound.description\": \"The page may have moved, been renamed, or never existed. Check the address or return to the homepage.\",\n \"notFound.home\": \"Back to homepage\",\n \"notFound.label\": \"404\",\n \"notFound.title\": \"Page not found\",\n \"openapi.apiDocumentation\": \"API Documentation\",\n \"openapi.authentication\": \"Authentication\",\n \"openapi.authAnd\": \"AND\",\n \"openapi.authApiKey\": \"API key\",\n \"openapi.authBearerFormat\": \"Bearer format: {format}\",\n \"openapi.authLocation\": \"{in} parameter: {name}\",\n \"openapi.authNoAuth\": \"No authentication required\",\n \"openapi.authOr\": \"OR\",\n \"openapi.authScopes\": \"Scopes: {scopes}\",\n \"openapi.bodyProperties\": \"Body properties\",\n \"openapi.collapse\": \"Collapse\",\n \"openapi.clear\": \"Clear\",\n \"openapi.codeSnippet\": \"Code snippet\",\n \"openapi.endpointNotFound\": \"Endpoint not found: {endpoint}\",\n \"openapi.example\": \"Example\",\n \"openapi.expand\": \"Expand\",\n \"openapi.headers\": \"Headers\",\n \"openapi.headerName\": \"Name\",\n \"openapi.headerValue\": \"Value\",\n \"openapi.headerParameters\": \"Header parameters\",\n \"openapi.fieldDescription\": \"Field description\",\n \"openapi.includeParameter\": \"Include parameter\",\n \"openapi.cookieParameters\": \"Cookie parameters\",\n \"openapi.cookieParametersBrowserManaged\": \"Cookies are managed by the browser. Matching cookies are sent when the server allows credentialed requests.\",\n \"openapi.cookies\": \"Cookies\",\n \"openapi.cookiesBrowserHidden\": \"Cookies are managed by the browser. Set-Cookie values are not exposed to JavaScript.\",\n \"openapi.language\": \"Language\",\n \"openapi.client\": \"Client\",\n \"openapi.closeRequest\": \"Close request tester\",\n \"openapi.credential\": \"Credential\",\n \"openapi.loading\": \"Loading OpenAPI spec...\",\n \"openapi.mediaType\": \"Media type\",\n \"openapi.none\": \"None\",\n \"openapi.noRequestConfiguration\": \"This request has no parameters, authentication, variables, or request body. It is ready to send as-is.\",\n \"openapi.openApiReference\": \"OpenAPI Reference\",\n \"openapi.operationParameter\": \"Operation parameter.\",\n \"openapi.optional\": \"Optional.\",\n \"openapi.parameter\": \"parameter\",\n \"openapi.parameterInvalidArray\": \"Enter a valid JSON array.\",\n \"openapi.parameterInvalidDate\": \"Enter a valid date.\",\n \"openapi.parameterInvalidDateTime\": \"Enter a valid date and time.\",\n \"openapi.parameterInvalidEnum\": \"Select one of the allowed values.\",\n \"openapi.parameterInvalidInteger\": \"Enter a whole number.\",\n \"openapi.parameterInvalidNumber\": \"Enter a valid number.\",\n \"openapi.parameterInvalidObject\": \"Enter a valid JSON object.\",\n \"openapi.pathParameters\": \"Path parameters\",\n \"openapi.queryParameters\": \"Query parameters\",\n \"openapi.preview\": \"Preview\",\n \"openapi.raw\": \"Raw\",\n \"openapi.resetToExample\": \"Reset to example\",\n \"openapi.body\": \"Body\",\n \"openapi.binaryPreview\": \"Binary response preview is not available.\",\n \"openapi.downloadBody\": \"Download response body\",\n \"openapi.noHeaders\": \"No response headers match the current search.\",\n \"openapi.responseViews\": \"Response views\",\n \"openapi.responseUrl\": \"Final URL\",\n \"openapi.redirected\": \"Redirected\",\n \"openapi.searchHeaders\": \"Search response headers\",\n \"openapi.searchBodyProperties\": \"Search request body properties\",\n \"openapi.searchResponseBodyProperties\": \"Search response body properties\",\n \"openapi.noBodyProperties\": \"No request body properties match the current search.\",\n \"openapi.noResponseBodyProperties\": \"No response body properties match the current search.\",\n \"openapi.unknownContentType\": \"Unknown content type\",\n \"openapi.variables\": \"Variables\",\n \"openapi.requestConfiguration\": \"Request configuration\",\n \"openapi.requestExample\": \"Request example\",\n \"openapi.requestHeaders\": \"Request headers\",\n \"openapi.request\": \"Request\",\n \"openapi.requestBody\": \"Request body\",\n \"openapi.requestBodyEmpty\": \"No request body\",\n \"openapi.requestCorsHint\": \"The API may be unavailable from this browser because of its network or CORS policy\",\n \"openapi.responseBodyProperties\": \"Response body properties\",\n \"openapi.responseHeaders\": \"Response headers\",\n \"openapi.required\": \"Required.\",\n \"openapi.requiredBadge\": \"required\",\n \"openapi.response\": \"Response\",\n \"openapi.responseBodyEmpty\": \"The response body is empty.\",\n \"openapi.responseBodyEmptyTitle\": \"No response content\",\n \"openapi.responseEmpty\": \"Send the request to inspect the response.\",\n \"openapi.responseEmptyTitle\": \"Ready for a request\",\n \"openapi.responseErrorTitle\": \"Request failed\",\n \"openapi.responses\": \"Responses\",\n \"openapi.schemaExample\": \"Schema example\",\n \"openapi.sendRequest\": \"Send\",\n \"openapi.sendingRequest\": \"Sending\",\n \"openapi.server\": \"Server\",\n \"openapi.scrollExamplesLeft\": \"Scroll examples left\",\n \"openapi.scrollExamplesRight\": \"Scroll examples right\",\n \"openapi.specNotFound\": \"OpenAPI spec not found: {specPath}\",\n \"openapi.specPathMissing\": \"spec or specPath was not provided\",\n \"openapi.status\": \"Status\",\n \"openapi.tryRequest\": \"Try request\",\n \"openapi.version\": \"Version {version}\",\n \"openapi.webhookResponse\": \"Webhook response\",\n \"openapi.webhookResponses\": \"Webhook responses\",\n \"search.button\": \"Search...\",\n \"search.noResults\": \"Nothing found for {query}.\",\n \"search.placeholder\": \"Find something...\",\n \"search.shortcutCtrl\": \"Ctrl \",\n \"renderError.componentStack\": \"React component stack\",\n \"renderError.description\": \"Clarify stopped rendering this route to keep the rest of the shell responsive. Review the diagnostics below, fix the page source, then reload the route.\",\n \"renderError.details\": \"Runtime diagnostics\",\n \"renderError.message\": \"Message\",\n \"renderError.path\": \"Route\",\n \"renderError.reload\": \"Reload route\",\n \"renderError.stack\": \"JavaScript stack trace\",\n \"renderError.title\": \"Route render failed\",\n \"renderError.type\": \"Error type\",\n \"renderError.version\": \"Clarify version\",\n \"theme.dark\": \"Dark\",\n \"theme.light\": \"Light\",\n \"theme.switch\": \"Switch theme\",\n \"theme.switchToDark\": \"Switch to dark theme\",\n \"theme.switchToLight\": \"Switch to light theme\",\n \"theme.switchToSystem\": \"Follow system theme\",\n \"theme.system\": \"System\",\n \"language.switch\": \"Switch language\",\n \"mermaid.zoomIn\": \"Zoom in\",\n \"mermaid.zoomOut\": \"Zoom out\",\n \"mermaid.resetZoom\": \"Reset zoom\",\n \"mermaid.renderError\": \"Mermaid render error\",\n \"mermaid.scrollHint\": \"Click the diagram to enable scroll-to-zoom\"\n}\n","{\n \"actions.code\": \"代码\",\n \"actions.copy\": \"复制\",\n \"actions.copying\": \"正在复制...\",\n \"actions.copied\": \"已复制!\",\n \"actions.copyFailed\": \"复制失败\",\n \"builtWith.label\": \"由 Clarify 构建\",\n \"builtWith.prefix\": \"构建来自\",\n \"callout.danger\": \"危险\",\n \"callout.info\": \"信息\",\n \"callout.note\": \"注意\",\n \"callout.success\": \"成功\",\n \"callout.tip\": \"提示\",\n \"callout.warning\": \"警告\",\n \"contentActions.copyContent\": \"复制页面\",\n \"contentActions.copyContentDescription\": \"将页面以 {contentType} 格式复制给 LLMs\",\n \"contentActions.copyLink\": \"复制 {contentType} 链接\",\n \"contentActions.copyLinkDescription\": \"复制当前页面的 {contentType} 原始内容链接\",\n \"contentActions.copyLlms\": \"复制 llms.txt\",\n \"contentActions.copyLlmsDescription\": \"复制此站点的 llms.txt 链接\",\n \"contentActions.copiedLlms\": \"已复制 llms.txt\",\n \"contentActions.copiedMcpConfig\": \"已复制 MCP 配置\",\n \"contentActions.mcpConfig\": \"复制 MCP 配置\",\n \"contentActions.mcpConfigDescription\": \"复制站点的 MCP server 配置\",\n \"contentActions.editPage\": \"编辑此页面\",\n \"contentActions.editPageDescription\": \"打开当前页面的源文件\",\n \"contentActions.copyOptions\": \"选择复制选项\",\n \"contentActions.copiedContent\": \"已复制页面\",\n \"contentActions.copiedLink\": \"已复制链接\",\n \"contentActions.viewMarkdown\": \"以 Markdown 格式查看\",\n \"contentActions.viewMarkdownDescription\": \"以纯文本查看此页面\",\n \"contentActions.viewOpenApi\": \"查看 OpenAPI 原始内容\",\n \"contentActions.viewOpenApiDescription\": \"在新标签页打开 API 描述文件\",\n \"feedback.no\": \"否\",\n \"feedback.prompt\": \"这个页面有帮助吗?\",\n \"feedback.thanks\": \"感谢你的反馈!\",\n \"feedback.yes\": \"是\",\n \"navigation.documentation\": \"文档\",\n \"navigation.next\": \"下一页\",\n \"navigation.previous\": \"上一页\",\n \"navigation.previousNext\": \"上一页和下一页\",\n \"navigation.toggle\": \"切换导航\",\n \"navbar.home\": \"首页\",\n \"navbar.openLinks\": \"打开导航链接\",\n \"navbar.sections\": \"文档栏目\",\n \"notFound.description\": \"页面可能已移动、重命名或不存在。请检查地址,或返回首页继续浏览。\",\n \"notFound.home\": \"返回首页\",\n \"notFound.label\": \"404\",\n \"notFound.title\": \"页面未找到\",\n \"openapi.apiDocumentation\": \"API 文档\",\n \"openapi.authentication\": \"认证方式\",\n \"openapi.authAnd\": \"并且\",\n \"openapi.authApiKey\": \"API 密钥\",\n \"openapi.authBearerFormat\": \"Bearer 格式:{format}\",\n \"openapi.authLocation\": \"{in} 参数:{name}\",\n \"openapi.authNoAuth\": \"无需认证\",\n \"openapi.authOr\": \"或者\",\n \"openapi.authScopes\": \"Scopes:{scopes}\",\n \"openapi.bodyProperties\": \"请求体属性\",\n \"openapi.collapse\": \"收起\",\n \"openapi.clear\": \"清除\",\n \"openapi.codeSnippet\": \"代码示例\",\n \"openapi.endpointNotFound\": \"未找到端点:{endpoint}\",\n \"openapi.example\": \"示例\",\n \"openapi.expand\": \"展开\",\n \"openapi.headers\": \"请求头\",\n \"openapi.headerName\": \"名称\",\n \"openapi.headerValue\": \"值\",\n \"openapi.headerParameters\": \"请求头参数\",\n \"openapi.fieldDescription\": \"字段说明\",\n \"openapi.includeParameter\": \"传递参数\",\n \"openapi.cookieParameters\": \"Cookie 参数\",\n \"openapi.cookieParametersBrowserManaged\": \"Cookie 由浏览器管理;当服务端允许携带凭据时,匹配的 Cookie 会随请求发送。\",\n \"openapi.cookies\": \"Cookies\",\n \"openapi.cookiesBrowserHidden\": \"Cookie 由浏览器管理,JavaScript 无法读取 Set-Cookie 的值。\",\n \"openapi.language\": \"语言\",\n \"openapi.client\": \"客户端\",\n \"openapi.closeRequest\": \"关闭请求测试器\",\n \"openapi.credential\": \"认证凭证\",\n \"openapi.loading\": \"正在加载 OpenAPI 描述文件...\",\n \"openapi.mediaType\": \"媒体类型\",\n \"openapi.none\": \"无\",\n \"openapi.noRequestConfiguration\": \"此请求没有参数、认证、变量或请求体,可以直接发送。\",\n \"openapi.openApiReference\": \"OpenAPI 参考\",\n \"openapi.operationParameter\": \"操作参数。\",\n \"openapi.optional\": \"可选。\",\n \"openapi.parameter\": \"参数\",\n \"openapi.parameterInvalidArray\": \"请输入有效的 JSON 数组。\",\n \"openapi.parameterInvalidDate\": \"请输入有效日期。\",\n \"openapi.parameterInvalidDateTime\": \"请输入有效的日期和时间。\",\n \"openapi.parameterInvalidEnum\": \"请选择允许的值。\",\n \"openapi.parameterInvalidInteger\": \"请输入整数。\",\n \"openapi.parameterInvalidNumber\": \"请输入有效数字。\",\n \"openapi.parameterInvalidObject\": \"请输入有效的 JSON 对象。\",\n \"openapi.pathParameters\": \"路径参数\",\n \"openapi.queryParameters\": \"查询参数\",\n \"openapi.preview\": \"预览\",\n \"openapi.raw\": \"原始内容\",\n \"openapi.resetToExample\": \"重置为示例\",\n \"openapi.body\": \"响应体\",\n \"openapi.binaryPreview\": \"暂不支持预览二进制响应。\",\n \"openapi.downloadBody\": \"下载响应体\",\n \"openapi.noHeaders\": \"没有匹配当前搜索的响应头。\",\n \"openapi.responseViews\": \"响应视图\",\n \"openapi.responseUrl\": \"最终 URL\",\n \"openapi.redirected\": \"已重定向\",\n \"openapi.searchHeaders\": \"搜索响应头\",\n \"openapi.searchBodyProperties\": \"搜索请求体属性\",\n \"openapi.searchResponseBodyProperties\": \"搜索响应体属性\",\n \"openapi.noBodyProperties\": \"没有匹配当前搜索的请求体属性。\",\n \"openapi.noResponseBodyProperties\": \"没有匹配当前搜索的响应体属性。\",\n \"openapi.unknownContentType\": \"未知内容类型\",\n \"openapi.variables\": \"变量\",\n \"openapi.requestConfiguration\": \"请求配置\",\n \"openapi.requestExample\": \"请求示例\",\n \"openapi.requestHeaders\": \"请求头\",\n \"openapi.request\": \"请求\",\n \"openapi.requestBody\": \"请求体\",\n \"openapi.requestBodyEmpty\": \"暂无请求体\",\n \"openapi.requestCorsHint\": \"受目标 API 的网络或 CORS 策略影响,浏览器可能无法直接访问\",\n \"openapi.responseBodyProperties\": \"响应体属性\",\n \"openapi.responseHeaders\": \"响应头\",\n \"openapi.required\": \"必填。\",\n \"openapi.requiredBadge\": \"必填\",\n \"openapi.response\": \"响应\",\n \"openapi.responseBodyEmpty\": \"响应体为空。\",\n \"openapi.responseBodyEmptyTitle\": \"无响应内容\",\n \"openapi.responseEmpty\": \"发送请求后在这里查看响应。\",\n \"openapi.responseEmptyTitle\": \"等待发送请求\",\n \"openapi.responseErrorTitle\": \"请求失败\",\n \"openapi.responses\": \"响应\",\n \"openapi.schemaExample\": \"Schema 示例\",\n \"openapi.sendRequest\": \"发送\",\n \"openapi.sendingRequest\": \"发送中\",\n \"openapi.server\": \"服务地址\",\n \"openapi.scrollExamplesLeft\": \"向左滚动示例\",\n \"openapi.scrollExamplesRight\": \"向右滚动示例\",\n \"openapi.specNotFound\": \"未找到 OpenAPI 描述文件:{specPath}\",\n \"openapi.specPathMissing\": \"未提供 spec 或 specPath\",\n \"openapi.status\": \"状态\",\n \"openapi.tryRequest\": \"发起测试请求\",\n \"openapi.version\": \"版本 {version}\",\n \"openapi.webhookResponse\": \"Webhook 响应\",\n \"openapi.webhookResponses\": \"Webhook 响应\",\n \"search.button\": \"搜索...\",\n \"search.noResults\": \"没有找到与 {query} 相关的结果。\",\n \"search.placeholder\": \"搜索内容...\",\n \"search.shortcutCtrl\": \"Ctrl \",\n \"renderError.componentStack\": \"React 组件栈\",\n \"renderError.description\": \"Clarify 已停止渲染此路由,以保证文档 Shell 仍可响应。请查看下方诊断信息,修复页面源码后重新加载路由。\",\n \"renderError.details\": \"运行时诊断\",\n \"renderError.message\": \"错误消息\",\n \"renderError.path\": \"路由\",\n \"renderError.reload\": \"重新加载路由\",\n \"renderError.stack\": \"JavaScript 堆栈\",\n \"renderError.title\": \"路由渲染失败\",\n \"renderError.type\": \"错误类型\",\n \"renderError.version\": \"Clarify 版本\",\n \"theme.dark\": \"深色\",\n \"theme.light\": \"浅色\",\n \"theme.switch\": \"切换主题\",\n \"theme.switchToDark\": \"切换到深色主题\",\n \"theme.switchToLight\": \"切换到浅色主题\",\n \"theme.switchToSystem\": \"跟随系统主题\",\n \"theme.system\": \"跟随系统\",\n \"language.switch\": \"切换语言\",\n \"mermaid.zoomIn\": \"放大\",\n \"mermaid.zoomOut\": \"缩小\",\n \"mermaid.resetZoom\": \"重置缩放\",\n \"mermaid.renderError\": \"Mermaid 渲染错误\",\n \"mermaid.scrollHint\": \"点击图表后即可滚轮缩放\"\n}\n","import { useContext } from 'react'\n\nimport { ConfigContext, LocaleContext } from './context'\nimport enText from './locales/en.json'\nimport zhCNText from './locales/zh-CN.json'\n\nexport type BuiltInLocale = 'en' | 'zh-CN'\n\nexport type BuiltInTextKey = keyof typeof enText\n\nconst checkedZhCNText: Record<BuiltInTextKey, string> & Record<Exclude<keyof typeof zhCNText, BuiltInTextKey>, never> = zhCNText\n\nconst builtInText: Record<BuiltInLocale, Record<BuiltInTextKey, string>> = {\n en: enText,\n 'zh-CN': checkedZhCNText,\n}\n\nexport function resolveBuiltInLocale(locale?: string): BuiltInLocale {\n return locale === 'zh-CN' || locale?.toLowerCase().startsWith('zh') ? 'zh-CN' : 'en'\n}\n\nexport function translateBuiltInText(locale: string | undefined, key: BuiltInTextKey, replacements: Record<string, string> = {}): string {\n let value = builtInText[resolveBuiltInLocale(locale)]?.[key] ?? builtInText.en[key]\n for (const [name, replacement] of Object.entries(replacements)) {\n value = value.replaceAll(`{${name}}`, replacement)\n }\n return value\n}\n\nexport function useBuiltInText(locale?: string) {\n const config = useContext(ConfigContext)\n const currentLocale = useContext(LocaleContext)\n const resolvedLocale = locale ?? currentLocale ?? config?.locales?.default\n return (key: BuiltInTextKey, replacements?: Record<string, string>) => translateBuiltInText(resolvedLocale, key, replacements)\n}\n"],"mappings":";;AAIA,IAAa,iBAAA,GAAA,MAAA,cAAA,CAA6C,IAAI;AAC9D,IAAa,iBAAA,GAAA,MAAA,cAAA,CAAkD,KAAA,CAAS;AACxE,IAAa,uBAAA,GAAA,MAAA,cAAA,CAAqD,CAAC,CAAC;AAEpE,SAAgB,YAAoB;CAClC,MAAM,UAAA,GAAA,MAAA,WAAA,CAAoB,aAAa;CACvC,IAAI,CAAC,QACH,MAAM,IAAI,MACR,kEACF;CAEF,OAAO;AACT;AAEA,SAAgB,oBAAmC;CACjD,QAAA,GAAA,MAAA,WAAA,CAAkB,aAAa;AACjC;AAEA,SAAgB,YAAgC;CAC9C,QAAA,GAAA,MAAA,WAAA,CAAkB,aAAa;AACjC;AAEA,SAAgB,kBAAmC;CACjD,QAAA,GAAA,MAAA,WAAA,CAAkB,mBAAmB;AACvC;;;AGhBA,IAAM,cAAqE;CACzE,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA;CACJ,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA;AACX;AAEA,SAAgB,qBAAqB,QAAgC;CACnE,OAAO,WAAW,WAAW,QAAQ,YAAY,CAAC,CAAC,WAAW,IAAI,IAAI,UAAU;AAClF;AAEA,SAAgB,qBAAqB,QAA4B,KAAqB,eAAuC,CAAC,GAAW;CACvI,IAAI,QAAQ,YAAY,qBAAqB,MAAM,EAAE,GAAG,QAAQ,YAAY,GAAG;CAC/E,KAAK,MAAM,CAAC,MAAM,gBAAgB,OAAO,QAAQ,YAAY,GAC3D,QAAQ,MAAM,WAAW,IAAI,KAAK,IAAI,WAAW;CAEnD,OAAO;AACT;AAEA,SAAgB,eAAe,QAAiB;CAC9C,MAAM,UAAA,GAAA,MAAA,WAAA,CAAoB,aAAa;CACvC,MAAM,iBAAA,GAAA,MAAA,WAAA,CAA2B,aAAa;CAC9C,MAAM,iBAAiB,UAAU,iBAAiB,QAAQ,SAAS;CACnE,QAAQ,KAAqB,iBAA0C,qBAAqB,gBAAgB,KAAK,YAAY;AAC/H"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"i18n-LXAq0RIC.js","names":[],"sources":["../source/core/context.tsx","../source/core/locales/en.json","../source/core/locales/zh-CN.json","../source/core/i18n.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\n\nimport type { Config, OpenApiRegistry } from './types'\n\nexport const ConfigContext = createContext<Config | null>(null)\nexport const LocaleContext = createContext<string | undefined>(undefined)\nexport const OpenApiSpecsContext = createContext<OpenApiRegistry>({})\n\nexport function useConfig(): Config {\n const config = useContext(ConfigContext)\n if (!config) {\n throw new Error(\n '[clarify] useConfig must be used within a ConfigContext.Provider'\n )\n }\n return config\n}\n\nexport function useConfigOptional(): Config | null {\n return useContext(ConfigContext)\n}\n\nexport function useLocale(): string | undefined {\n return useContext(LocaleContext)\n}\n\nexport function useOpenApiSpecs(): OpenApiRegistry {\n return useContext(OpenApiSpecsContext)\n}\n","{\n \"actions.code\": \"Code\",\n \"actions.copy\": \"Copy\",\n \"actions.copying\": \"Copying...\",\n \"actions.copied\": \"Copied!\",\n \"actions.copyFailed\": \"Copy failed\",\n \"builtWith.label\": \"Built with Clarify\",\n \"builtWith.prefix\": \"Built with\",\n \"callout.danger\": \"Danger\",\n \"callout.info\": \"Info\",\n \"callout.note\": \"Note\",\n \"callout.success\": \"Success\",\n \"callout.tip\": \"Tip\",\n \"callout.warning\": \"Warning\",\n \"contentActions.copyContent\": \"Copy page\",\n \"contentActions.copyContentDescription\": \"Copy this page as {contentType} for LLMs\",\n \"contentActions.copyLink\": \"Copy {contentType} link\",\n \"contentActions.copyLinkDescription\": \"Copy the raw {contentType} content link for this page\",\n \"contentActions.copyLlms\": \"Copy llms.txt\",\n \"contentActions.copyLlmsDescription\": \"Copy the llms.txt link for this site\",\n \"contentActions.copiedLlms\": \"Copied llms.txt\",\n \"contentActions.copiedMcpConfig\": \"Copied MCP config\",\n \"contentActions.mcpConfig\": \"Copy MCP config\",\n \"contentActions.mcpConfigDescription\": \"Copy this site's MCP server configuration\",\n \"contentActions.editPage\": \"Edit this page\",\n \"contentActions.editPageDescription\": \"Open the source file for this page\",\n \"contentActions.copyOptions\": \"Choose copy option\",\n \"contentActions.copiedContent\": \"Copied page\",\n \"contentActions.copiedLink\": \"Copied link\",\n \"contentActions.viewMarkdown\": \"View as Markdown\",\n \"contentActions.viewMarkdownDescription\": \"View this page as plain text\",\n \"contentActions.viewOpenApi\": \"View raw OpenAPI\",\n \"contentActions.viewOpenApiDescription\": \"Open the API description file in a new tab\",\n \"feedback.no\": \"No\",\n \"feedback.prompt\": \"Was this page helpful?\",\n \"feedback.thanks\": \"Thanks for your feedback!\",\n \"feedback.yes\": \"Yes\",\n \"navigation.documentation\": \"Documentation\",\n \"navigation.next\": \"Next\",\n \"navigation.previous\": \"Previous\",\n \"navigation.previousNext\": \"Previous and next pages\",\n \"navigation.toggle\": \"Toggle navigation\",\n \"navbar.home\": \"Home\",\n \"navbar.openLinks\": \"Open navigation links\",\n \"navbar.sections\": \"Documentation sections\",\n \"notFound.description\": \"The page may have moved, been renamed, or never existed. Check the address or return to the homepage.\",\n \"notFound.home\": \"Back to homepage\",\n \"notFound.label\": \"404\",\n \"notFound.title\": \"Page not found\",\n \"openapi.apiDocumentation\": \"API Documentation\",\n \"openapi.authentication\": \"Authentication\",\n \"openapi.authAnd\": \"AND\",\n \"openapi.authApiKey\": \"API key\",\n \"openapi.authBearerFormat\": \"Bearer format: {format}\",\n \"openapi.authLocation\": \"{in} parameter: {name}\",\n \"openapi.authNoAuth\": \"No authentication required\",\n \"openapi.authOr\": \"OR\",\n \"openapi.authScopes\": \"Scopes: {scopes}\",\n \"openapi.bodyProperties\": \"Body properties\",\n \"openapi.collapse\": \"Collapse\",\n \"openapi.clear\": \"Clear\",\n \"openapi.codeSnippet\": \"Code snippet\",\n \"openapi.endpointNotFound\": \"Endpoint not found: {endpoint}\",\n \"openapi.example\": \"Example\",\n \"openapi.expand\": \"Expand\",\n \"openapi.headers\": \"Headers\",\n \"openapi.headerName\": \"Name\",\n \"openapi.headerValue\": \"Value\",\n \"openapi.headerParameters\": \"Header parameters\",\n \"openapi.fieldDescription\": \"Field description\",\n \"openapi.includeParameter\": \"Include parameter\",\n \"openapi.cookieParameters\": \"Cookie parameters\",\n \"openapi.cookieParametersBrowserManaged\": \"Cookies are managed by the browser. Matching cookies are sent when the server allows credentialed requests.\",\n \"openapi.cookies\": \"Cookies\",\n \"openapi.cookiesBrowserHidden\": \"Cookies are managed by the browser. Set-Cookie values are not exposed to JavaScript.\",\n \"openapi.language\": \"Language\",\n \"openapi.client\": \"Client\",\n \"openapi.closeRequest\": \"Close request tester\",\n \"openapi.credential\": \"Credential\",\n \"openapi.loading\": \"Loading OpenAPI spec...\",\n \"openapi.mediaType\": \"Media type\",\n \"openapi.none\": \"None\",\n \"openapi.noRequestConfiguration\": \"This request has no parameters, authentication, variables, or request body. It is ready to send as-is.\",\n \"openapi.openApiReference\": \"OpenAPI Reference\",\n \"openapi.operationParameter\": \"Operation parameter.\",\n \"openapi.optional\": \"Optional.\",\n \"openapi.parameter\": \"parameter\",\n \"openapi.parameterInvalidArray\": \"Enter a valid JSON array.\",\n \"openapi.parameterInvalidDate\": \"Enter a valid date.\",\n \"openapi.parameterInvalidDateTime\": \"Enter a valid date and time.\",\n \"openapi.parameterInvalidEnum\": \"Select one of the allowed values.\",\n \"openapi.parameterInvalidInteger\": \"Enter a whole number.\",\n \"openapi.parameterInvalidNumber\": \"Enter a valid number.\",\n \"openapi.parameterInvalidObject\": \"Enter a valid JSON object.\",\n \"openapi.pathParameters\": \"Path parameters\",\n \"openapi.queryParameters\": \"Query parameters\",\n \"openapi.preview\": \"Preview\",\n \"openapi.raw\": \"Raw\",\n \"openapi.resetToExample\": \"Reset to example\",\n \"openapi.body\": \"Body\",\n \"openapi.binaryPreview\": \"Binary response preview is not available.\",\n \"openapi.downloadBody\": \"Download response body\",\n \"openapi.noHeaders\": \"No response headers match the current search.\",\n \"openapi.responseViews\": \"Response views\",\n \"openapi.responseUrl\": \"Final URL\",\n \"openapi.redirected\": \"Redirected\",\n \"openapi.searchHeaders\": \"Search response headers\",\n \"openapi.searchBodyProperties\": \"Search request body properties\",\n \"openapi.searchResponseBodyProperties\": \"Search response body properties\",\n \"openapi.noBodyProperties\": \"No request body properties match the current search.\",\n \"openapi.noResponseBodyProperties\": \"No response body properties match the current search.\",\n \"openapi.unknownContentType\": \"Unknown content type\",\n \"openapi.variables\": \"Variables\",\n \"openapi.requestConfiguration\": \"Request configuration\",\n \"openapi.requestExample\": \"Request example\",\n \"openapi.requestHeaders\": \"Request headers\",\n \"openapi.request\": \"Request\",\n \"openapi.requestBody\": \"Request body\",\n \"openapi.requestBodyEmpty\": \"No request body\",\n \"openapi.requestCorsHint\": \"The API may be unavailable from this browser because of its network or CORS policy\",\n \"openapi.responseBodyProperties\": \"Response body properties\",\n \"openapi.responseHeaders\": \"Response headers\",\n \"openapi.required\": \"Required.\",\n \"openapi.requiredBadge\": \"required\",\n \"openapi.response\": \"Response\",\n \"openapi.responseBodyEmpty\": \"The response body is empty.\",\n \"openapi.responseBodyEmptyTitle\": \"No response content\",\n \"openapi.responseEmpty\": \"Send the request to inspect the response.\",\n \"openapi.responseEmptyTitle\": \"Ready for a request\",\n \"openapi.responseErrorTitle\": \"Request failed\",\n \"openapi.responses\": \"Responses\",\n \"openapi.schemaExample\": \"Schema example\",\n \"openapi.sendRequest\": \"Send\",\n \"openapi.sendingRequest\": \"Sending\",\n \"openapi.server\": \"Server\",\n \"openapi.scrollExamplesLeft\": \"Scroll examples left\",\n \"openapi.scrollExamplesRight\": \"Scroll examples right\",\n \"openapi.specNotFound\": \"OpenAPI spec not found: {specPath}\",\n \"openapi.specPathMissing\": \"spec or specPath was not provided\",\n \"openapi.status\": \"Status\",\n \"openapi.tryRequest\": \"Try request\",\n \"openapi.version\": \"Version {version}\",\n \"openapi.webhookResponse\": \"Webhook response\",\n \"openapi.webhookResponses\": \"Webhook responses\",\n \"search.button\": \"Search...\",\n \"search.noResults\": \"Nothing found for {query}.\",\n \"search.placeholder\": \"Find something...\",\n \"search.shortcutCtrl\": \"Ctrl \",\n \"renderError.componentStack\": \"React component stack\",\n \"renderError.description\": \"Clarify stopped rendering this route to keep the rest of the shell responsive. Review the diagnostics below, fix the page source, then reload the route.\",\n \"renderError.details\": \"Runtime diagnostics\",\n \"renderError.message\": \"Message\",\n \"renderError.path\": \"Route\",\n \"renderError.reload\": \"Reload route\",\n \"renderError.stack\": \"JavaScript stack trace\",\n \"renderError.title\": \"Route render failed\",\n \"renderError.type\": \"Error type\",\n \"renderError.version\": \"Clarify version\",\n \"theme.dark\": \"Dark\",\n \"theme.light\": \"Light\",\n \"theme.switch\": \"Switch theme\",\n \"theme.switchToDark\": \"Switch to dark theme\",\n \"theme.switchToLight\": \"Switch to light theme\",\n \"theme.switchToSystem\": \"Follow system theme\",\n \"theme.system\": \"System\",\n \"language.switch\": \"Switch language\",\n \"mermaid.zoomIn\": \"Zoom in\",\n \"mermaid.zoomOut\": \"Zoom out\",\n \"mermaid.resetZoom\": \"Reset zoom\",\n \"mermaid.renderError\": \"Mermaid render error\",\n \"mermaid.scrollHint\": \"Click the diagram to enable scroll-to-zoom\"\n}\n","{\n \"actions.code\": \"代码\",\n \"actions.copy\": \"复制\",\n \"actions.copying\": \"正在复制...\",\n \"actions.copied\": \"已复制!\",\n \"actions.copyFailed\": \"复制失败\",\n \"builtWith.label\": \"由 Clarify 构建\",\n \"builtWith.prefix\": \"构建来自\",\n \"callout.danger\": \"危险\",\n \"callout.info\": \"信息\",\n \"callout.note\": \"注意\",\n \"callout.success\": \"成功\",\n \"callout.tip\": \"提示\",\n \"callout.warning\": \"警告\",\n \"contentActions.copyContent\": \"复制页面\",\n \"contentActions.copyContentDescription\": \"将页面以 {contentType} 格式复制给 LLMs\",\n \"contentActions.copyLink\": \"复制 {contentType} 链接\",\n \"contentActions.copyLinkDescription\": \"复制当前页面的 {contentType} 原始内容链接\",\n \"contentActions.copyLlms\": \"复制 llms.txt\",\n \"contentActions.copyLlmsDescription\": \"复制此站点的 llms.txt 链接\",\n \"contentActions.copiedLlms\": \"已复制 llms.txt\",\n \"contentActions.copiedMcpConfig\": \"已复制 MCP 配置\",\n \"contentActions.mcpConfig\": \"复制 MCP 配置\",\n \"contentActions.mcpConfigDescription\": \"复制站点的 MCP server 配置\",\n \"contentActions.editPage\": \"编辑此页面\",\n \"contentActions.editPageDescription\": \"打开当前页面的源文件\",\n \"contentActions.copyOptions\": \"选择复制选项\",\n \"contentActions.copiedContent\": \"已复制页面\",\n \"contentActions.copiedLink\": \"已复制链接\",\n \"contentActions.viewMarkdown\": \"以 Markdown 格式查看\",\n \"contentActions.viewMarkdownDescription\": \"以纯文本查看此页面\",\n \"contentActions.viewOpenApi\": \"查看 OpenAPI 原始内容\",\n \"contentActions.viewOpenApiDescription\": \"在新标签页打开 API 描述文件\",\n \"feedback.no\": \"否\",\n \"feedback.prompt\": \"这个页面有帮助吗?\",\n \"feedback.thanks\": \"感谢你的反馈!\",\n \"feedback.yes\": \"是\",\n \"navigation.documentation\": \"文档\",\n \"navigation.next\": \"下一页\",\n \"navigation.previous\": \"上一页\",\n \"navigation.previousNext\": \"上一页和下一页\",\n \"navigation.toggle\": \"切换导航\",\n \"navbar.home\": \"首页\",\n \"navbar.openLinks\": \"打开导航链接\",\n \"navbar.sections\": \"文档栏目\",\n \"notFound.description\": \"页面可能已移动、重命名或不存在。请检查地址,或返回首页继续浏览。\",\n \"notFound.home\": \"返回首页\",\n \"notFound.label\": \"404\",\n \"notFound.title\": \"页面未找到\",\n \"openapi.apiDocumentation\": \"API 文档\",\n \"openapi.authentication\": \"认证方式\",\n \"openapi.authAnd\": \"并且\",\n \"openapi.authApiKey\": \"API 密钥\",\n \"openapi.authBearerFormat\": \"Bearer 格式:{format}\",\n \"openapi.authLocation\": \"{in} 参数:{name}\",\n \"openapi.authNoAuth\": \"无需认证\",\n \"openapi.authOr\": \"或者\",\n \"openapi.authScopes\": \"Scopes:{scopes}\",\n \"openapi.bodyProperties\": \"请求体属性\",\n \"openapi.collapse\": \"收起\",\n \"openapi.clear\": \"清除\",\n \"openapi.codeSnippet\": \"代码示例\",\n \"openapi.endpointNotFound\": \"未找到端点:{endpoint}\",\n \"openapi.example\": \"示例\",\n \"openapi.expand\": \"展开\",\n \"openapi.headers\": \"请求头\",\n \"openapi.headerName\": \"名称\",\n \"openapi.headerValue\": \"值\",\n \"openapi.headerParameters\": \"请求头参数\",\n \"openapi.fieldDescription\": \"字段说明\",\n \"openapi.includeParameter\": \"传递参数\",\n \"openapi.cookieParameters\": \"Cookie 参数\",\n \"openapi.cookieParametersBrowserManaged\": \"Cookie 由浏览器管理;当服务端允许携带凭据时,匹配的 Cookie 会随请求发送。\",\n \"openapi.cookies\": \"Cookies\",\n \"openapi.cookiesBrowserHidden\": \"Cookie 由浏览器管理,JavaScript 无法读取 Set-Cookie 的值。\",\n \"openapi.language\": \"语言\",\n \"openapi.client\": \"客户端\",\n \"openapi.closeRequest\": \"关闭请求测试器\",\n \"openapi.credential\": \"认证凭证\",\n \"openapi.loading\": \"正在加载 OpenAPI 描述文件...\",\n \"openapi.mediaType\": \"媒体类型\",\n \"openapi.none\": \"无\",\n \"openapi.noRequestConfiguration\": \"此请求没有参数、认证、变量或请求体,可以直接发送。\",\n \"openapi.openApiReference\": \"OpenAPI 参考\",\n \"openapi.operationParameter\": \"操作参数。\",\n \"openapi.optional\": \"可选。\",\n \"openapi.parameter\": \"参数\",\n \"openapi.parameterInvalidArray\": \"请输入有效的 JSON 数组。\",\n \"openapi.parameterInvalidDate\": \"请输入有效日期。\",\n \"openapi.parameterInvalidDateTime\": \"请输入有效的日期和时间。\",\n \"openapi.parameterInvalidEnum\": \"请选择允许的值。\",\n \"openapi.parameterInvalidInteger\": \"请输入整数。\",\n \"openapi.parameterInvalidNumber\": \"请输入有效数字。\",\n \"openapi.parameterInvalidObject\": \"请输入有效的 JSON 对象。\",\n \"openapi.pathParameters\": \"路径参数\",\n \"openapi.queryParameters\": \"查询参数\",\n \"openapi.preview\": \"预览\",\n \"openapi.raw\": \"原始内容\",\n \"openapi.resetToExample\": \"重置为示例\",\n \"openapi.body\": \"响应体\",\n \"openapi.binaryPreview\": \"暂不支持预览二进制响应。\",\n \"openapi.downloadBody\": \"下载响应体\",\n \"openapi.noHeaders\": \"没有匹配当前搜索的响应头。\",\n \"openapi.responseViews\": \"响应视图\",\n \"openapi.responseUrl\": \"最终 URL\",\n \"openapi.redirected\": \"已重定向\",\n \"openapi.searchHeaders\": \"搜索响应头\",\n \"openapi.searchBodyProperties\": \"搜索请求体属性\",\n \"openapi.searchResponseBodyProperties\": \"搜索响应体属性\",\n \"openapi.noBodyProperties\": \"没有匹配当前搜索的请求体属性。\",\n \"openapi.noResponseBodyProperties\": \"没有匹配当前搜索的响应体属性。\",\n \"openapi.unknownContentType\": \"未知内容类型\",\n \"openapi.variables\": \"变量\",\n \"openapi.requestConfiguration\": \"请求配置\",\n \"openapi.requestExample\": \"请求示例\",\n \"openapi.requestHeaders\": \"请求头\",\n \"openapi.request\": \"请求\",\n \"openapi.requestBody\": \"请求体\",\n \"openapi.requestBodyEmpty\": \"暂无请求体\",\n \"openapi.requestCorsHint\": \"受目标 API 的网络或 CORS 策略影响,浏览器可能无法直接访问\",\n \"openapi.responseBodyProperties\": \"响应体属性\",\n \"openapi.responseHeaders\": \"响应头\",\n \"openapi.required\": \"必填。\",\n \"openapi.requiredBadge\": \"必填\",\n \"openapi.response\": \"响应\",\n \"openapi.responseBodyEmpty\": \"响应体为空。\",\n \"openapi.responseBodyEmptyTitle\": \"无响应内容\",\n \"openapi.responseEmpty\": \"发送请求后在这里查看响应。\",\n \"openapi.responseEmptyTitle\": \"等待发送请求\",\n \"openapi.responseErrorTitle\": \"请求失败\",\n \"openapi.responses\": \"响应\",\n \"openapi.schemaExample\": \"Schema 示例\",\n \"openapi.sendRequest\": \"发送\",\n \"openapi.sendingRequest\": \"发送中\",\n \"openapi.server\": \"服务地址\",\n \"openapi.scrollExamplesLeft\": \"向左滚动示例\",\n \"openapi.scrollExamplesRight\": \"向右滚动示例\",\n \"openapi.specNotFound\": \"未找到 OpenAPI 描述文件:{specPath}\",\n \"openapi.specPathMissing\": \"未提供 spec 或 specPath\",\n \"openapi.status\": \"状态\",\n \"openapi.tryRequest\": \"发起测试请求\",\n \"openapi.version\": \"版本 {version}\",\n \"openapi.webhookResponse\": \"Webhook 响应\",\n \"openapi.webhookResponses\": \"Webhook 响应\",\n \"search.button\": \"搜索...\",\n \"search.noResults\": \"没有找到与 {query} 相关的结果。\",\n \"search.placeholder\": \"搜索内容...\",\n \"search.shortcutCtrl\": \"Ctrl \",\n \"renderError.componentStack\": \"React 组件栈\",\n \"renderError.description\": \"Clarify 已停止渲染此路由,以保证文档 Shell 仍可响应。请查看下方诊断信息,修复页面源码后重新加载路由。\",\n \"renderError.details\": \"运行时诊断\",\n \"renderError.message\": \"错误消息\",\n \"renderError.path\": \"路由\",\n \"renderError.reload\": \"重新加载路由\",\n \"renderError.stack\": \"JavaScript 堆栈\",\n \"renderError.title\": \"路由渲染失败\",\n \"renderError.type\": \"错误类型\",\n \"renderError.version\": \"Clarify 版本\",\n \"theme.dark\": \"深色\",\n \"theme.light\": \"浅色\",\n \"theme.switch\": \"切换主题\",\n \"theme.switchToDark\": \"切换到深色主题\",\n \"theme.switchToLight\": \"切换到浅色主题\",\n \"theme.switchToSystem\": \"跟随系统主题\",\n \"theme.system\": \"跟随系统\",\n \"language.switch\": \"切换语言\",\n \"mermaid.zoomIn\": \"放大\",\n \"mermaid.zoomOut\": \"缩小\",\n \"mermaid.resetZoom\": \"重置缩放\",\n \"mermaid.renderError\": \"Mermaid 渲染错误\",\n \"mermaid.scrollHint\": \"点击图表后即可滚轮缩放\"\n}\n","import { useContext } from 'react'\n\nimport { ConfigContext, LocaleContext } from './context'\nimport enText from './locales/en.json'\nimport zhCNText from './locales/zh-CN.json'\n\nexport type BuiltInLocale = 'en' | 'zh-CN'\n\nexport type BuiltInTextKey = keyof typeof enText\n\nconst checkedZhCNText: Record<BuiltInTextKey, string> & Record<Exclude<keyof typeof zhCNText, BuiltInTextKey>, never> = zhCNText\n\nconst builtInText: Record<BuiltInLocale, Record<BuiltInTextKey, string>> = {\n en: enText,\n 'zh-CN': checkedZhCNText,\n}\n\nexport function resolveBuiltInLocale(locale?: string): BuiltInLocale {\n return locale === 'zh-CN' || locale?.toLowerCase().startsWith('zh') ? 'zh-CN' : 'en'\n}\n\nexport function translateBuiltInText(locale: string | undefined, key: BuiltInTextKey, replacements: Record<string, string> = {}): string {\n let value = builtInText[resolveBuiltInLocale(locale)]?.[key] ?? builtInText.en[key]\n for (const [name, replacement] of Object.entries(replacements)) {\n value = value.replaceAll(`{${name}}`, replacement)\n }\n return value\n}\n\nexport function useBuiltInText(locale?: string) {\n const config = useContext(ConfigContext)\n const currentLocale = useContext(LocaleContext)\n const resolvedLocale = locale ?? currentLocale ?? config?.locales?.default\n return (key: BuiltInTextKey, replacements?: Record<string, string>) => translateBuiltInText(resolvedLocale, key, replacements)\n}\n"],"mappings":";;AAIA,IAAa,gBAAgB,cAA6B,IAAI;AAC9D,IAAa,gBAAgB,cAAkC,KAAA,CAAS;AACxE,IAAa,sBAAsB,cAA+B,CAAC,CAAC;AAEpE,SAAgB,YAAoB;CAClC,MAAM,SAAS,WAAW,aAAa;CACvC,IAAI,CAAC,QACH,MAAM,IAAI,MACR,kEACF;CAEF,OAAO;AACT;AAEA,SAAgB,oBAAmC;CACjD,OAAO,WAAW,aAAa;AACjC;AAEA,SAAgB,YAAgC;CAC9C,OAAO,WAAW,aAAa;AACjC;AAEA,SAAgB,kBAAmC;CACjD,OAAO,WAAW,mBAAmB;AACvC;;;AGhBA,IAAM,cAAqE;CACzE,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA;CACJ,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAA;AACX;AAEA,SAAgB,qBAAqB,QAAgC;CACnE,OAAO,WAAW,WAAW,QAAQ,YAAY,CAAC,CAAC,WAAW,IAAI,IAAI,UAAU;AAClF;AAEA,SAAgB,qBAAqB,QAA4B,KAAqB,eAAuC,CAAC,GAAW;CACvI,IAAI,QAAQ,YAAY,qBAAqB,MAAM,EAAE,GAAG,QAAQ,YAAY,GAAG;CAC/E,KAAK,MAAM,CAAC,MAAM,gBAAgB,OAAO,QAAQ,YAAY,GAC3D,QAAQ,MAAM,WAAW,IAAI,KAAK,IAAI,WAAW;CAEnD,OAAO;AACT;AAEA,SAAgB,eAAe,QAAiB;CAC9C,MAAM,SAAS,WAAW,aAAa;CACvC,MAAM,gBAAgB,WAAW,aAAa;CAC9C,MAAM,iBAAiB,UAAU,iBAAiB,QAAQ,SAAS;CACnE,QAAQ,KAAqB,iBAA0C,qBAAqB,gBAAgB,KAAK,YAAY;AAC/H"}
|