@clarify-labs/renderer 0.1.0

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.
Files changed (50) hide show
  1. package/LICENSE +661 -0
  2. package/output/AppShell-C_bj6ZhV.js +1928 -0
  3. package/output/AppShell-C_bj6ZhV.js.map +1 -0
  4. package/output/AppShell-DBgUlirU.cjs +2127 -0
  5. package/output/AppShell-DBgUlirU.cjs.map +1 -0
  6. package/output/app/AppShell.d.ts +7 -0
  7. package/output/client.cjs +3 -0
  8. package/output/client.d.ts +1 -0
  9. package/output/client.js +2 -0
  10. package/output/components/BuiltWithClarify.d.ts +1 -0
  11. package/output/components/Code.d.ts +18 -0
  12. package/output/components/Feedback.d.ts +1 -0
  13. package/output/components/PageFooter.d.ts +1 -0
  14. package/output/components/SectionProvider.d.ts +25 -0
  15. package/output/components/SiteLogo.d.ts +6 -0
  16. package/output/components/ThemeProvider.d.ts +13 -0
  17. package/output/components/ThemeToggle.d.ts +1 -0
  18. package/output/components/index.d.ts +82 -0
  19. package/output/components/patterns.d.ts +9 -0
  20. package/output/context.d.ts +6 -0
  21. package/output/index.cjs +870 -0
  22. package/output/index.cjs.map +1 -0
  23. package/output/index.d.ts +11 -0
  24. package/output/index.js +850 -0
  25. package/output/index.js.map +1 -0
  26. package/output/mdx/components.d.ts +50 -0
  27. package/output/mdx/primitives.d.ts +42 -0
  28. package/output/openapi/index.d.ts +20 -0
  29. package/output/openapi/utils.d.ts +12 -0
  30. package/output/render-CLI-MnH_.cjs +60 -0
  31. package/output/render-CLI-MnH_.cjs.map +1 -0
  32. package/output/render-Ca4Is683.js +55 -0
  33. package/output/render-Ca4Is683.js.map +1 -0
  34. package/output/renderer.css +3986 -0
  35. package/output/runtime/render.d.ts +2 -0
  36. package/output/runtime/server.d.ts +7 -0
  37. package/output/server.cjs +34 -0
  38. package/output/server.cjs.map +1 -0
  39. package/output/server.d.ts +1 -0
  40. package/output/server.js +33 -0
  41. package/output/server.js.map +1 -0
  42. package/output/shell/ContentActions.d.ts +7 -0
  43. package/output/shell/Header.d.ts +8 -0
  44. package/output/shell/Navigation.d.ts +5 -0
  45. package/output/shell/Search.d.ts +10 -0
  46. package/output/shell/index.d.ts +5 -0
  47. package/output/shell/mobile.d.ts +15 -0
  48. package/output/types.d.ts +121 -0
  49. package/output/utils/remToPx.d.ts +1 -0
  50. package/package.json +71 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppShell-C_bj6ZhV.js","names":[],"sources":["../source/utils/remToPx.ts","../source/components/SectionProvider.tsx","../source/components/SiteLogo.tsx","../source/shell/ContentActions.tsx","../source/components/BuiltWithClarify.tsx","../source/components/Code.tsx","../source/components/Feedback.tsx","../source/components/patterns.tsx","../source/context.tsx","../source/components/PageFooter.tsx","../source/components/ThemeProvider.tsx","../source/components/ThemeToggle.tsx","../source/components/index.tsx","../source/shell/Navigation.tsx","../source/shell/mobile.tsx","../source/shell/Search.tsx","../source/shell/Header.tsx","../source/app/AppShell.tsx"],"sourcesContent":["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 createContext,\n useContext,\n useEffect,\n useLayoutEffect,\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 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 useVisibleSections(sectionStore: StoreApi<SectionState>) {\n const setVisibleSections = useStore(sectionStore, (state) => state.setVisibleSections)\n const sections = useStore(sectionStore, (state) => state.sections)\n\n useEffect(() => {\n function checkVisibleSections() {\n const { innerHeight, scrollY } = window\n const newVisibleSections: 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) {\n continue\n }\n\n const offset = remToPx(offsetRem)\n const top = headingRef.current.getBoundingClientRect().top + scrollY\n\n if (sectionIndex === 0 && top - offset > scrollY) {\n newVisibleSections.push('_top')\n }\n\n const nextSection = sections[sectionIndex + 1]\n const bottom =\n (nextSection?.headingRef?.current?.getBoundingClientRect().top ?? Infinity) +\n scrollY -\n remToPx(nextSection?.offsetRem ?? 0)\n\n if (\n (top > scrollY && top < scrollY + innerHeight) ||\n (bottom > scrollY && bottom < scrollY + innerHeight) ||\n (top <= scrollY && bottom >= scrollY + innerHeight)\n ) {\n newVisibleSections.push(id)\n }\n }\n\n setVisibleSections(newVisibleSections)\n }\n\n const raf = window.requestAnimationFrame(() => checkVisibleSections())\n window.addEventListener('scroll', checkVisibleSections, { passive: true })\n window.addEventListener('resize', checkVisibleSections)\n\n return () => {\n window.cancelAnimationFrame(raf)\n window.removeEventListener('scroll', checkVisibleSections)\n window.removeEventListener('resize', checkVisibleSections)\n }\n }, [setVisibleSections, sections])\n}\n\nconst SectionStoreContext = createContext<StoreApi<SectionState> | null>(null)\n\nconst useIsomorphicLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect\n\nexport function SectionProvider(arg0: {\n sections: Section[]\n children: ReactNode\n}) { const {\n sections,\n children,\n} = arg0\n\n const [sectionStore] = useState(() => createSectionStore(sections))\n\n useVisibleSections(sectionStore)\n\n useIsomorphicLayoutEffect(() => {\n sectionStore.setState({ sections })\n }, [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 clsx from 'clsx'\n\nimport type { ClarifyLogoConfig } from '../types'\n\nexport type SiteLogoProps = {\n logo?: ClarifyLogoConfig\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 { Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/react'\nimport { Check, ChevronDown, Copy, Link2 } from 'lucide-react'\nimport { useState } from 'react'\n\nimport type { RouteItem } from '../types'\n\ntype ContentActionsProps = {\n route?: RouteItem\n routePrefix?: string\n}\n\ntype CopyState = 'idle' | 'content' | 'link'\ntype CopyAction = {\n key: Exclude<CopyState, 'idle'>\n label: string\n icon: typeof Copy\n run: () => Promise<void>\n}\n\nfunction resolveRawContentUrl(rawContentUrl: string, routePrefix: string = '/'): string {\n if (!routePrefix || routePrefix === '/') return rawContentUrl\n return `/${routePrefix.replace(/^\\/+|\\/+$/g, '')}${rawContentUrl}`\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\nasync function copyText(text: string): Promise<void> {\n await navigator.clipboard.writeText(text)\n}\n\nexport function ContentActions(arg0: ContentActionsProps) {\n const { route, routePrefix } = arg0\n const [copied, setCopied] = useState<CopyState>('idle')\n\n if (!route?.rawContentUrl) return null\n\n const rawContentUrl = resolveRawContentUrl(route.rawContentUrl, routePrefix)\n const isOpenApi = route.kind === 'openapi'\n const contentLabel = isOpenApi ? '复制 OpenAPI 内容' : '复制 Markdown 内容'\n const linkLabel = isOpenApi ? '复制 OpenAPI 链接' : '复制 Markdown 链接'\n\n function markCopied(state: Exclude<CopyState, 'idle'>) {\n setCopied(state)\n window.setTimeout(() => setCopied('idle'), 1600)\n }\n\n async function handleCopyContent() {\n const response = await fetch(rawContentUrl)\n const text = await response.text()\n await copyText(text)\n markCopied('content')\n }\n\n async function handleCopyLink() {\n await copyText(getAbsoluteUrl(rawContentUrl))\n markCopied('link')\n }\n\n const actions: CopyAction[] = [\n { key: 'content', label: contentLabel, icon: Copy, run: handleCopyContent },\n { key: 'link', label: linkLabel, icon: Link2, run: handleCopyLink },\n ]\n const primaryAction = actions[0]\n\n return (\n <div className=\"clarify-content-actions sticky top-16 z-20 flex justify-end py-4\">\n <Menu as=\"div\" className=\"clarify-content-actions-menu relative inline-flex text-xs font-medium\">\n <div className=\"clarify-content-actions-group inline-flex overflow-hidden rounded-full border border-zinc-900/10 bg-white/85 backdrop-blur dark:border-white/10 dark:bg-white/5\">\n <button\n type=\"button\"\n onClick={primaryAction.run}\n className=\"clarify-content-actions-primary inline-flex h-8 items-center gap-1.5 px-3 text-zinc-600 transition hover:bg-zinc-100 hover:text-zinc-950 dark:text-zinc-300 dark:hover:bg-white/10 dark:hover:text-white\"\n >\n {copied === primaryAction.key ? <Check className=\"h-3.5 w-3.5\" /> : <primaryAction.icon className=\"h-3.5 w-3.5\" />}\n {copied === primaryAction.key ? '已复制' : '复制页面'}\n </button>\n <MenuButton className=\"clarify-content-actions-trigger inline-flex h-8 w-8 items-center justify-center border-l border-zinc-900/10 text-zinc-500 transition hover:bg-zinc-100 hover:text-zinc-950 dark:border-white/10 dark:text-zinc-400 dark:hover:bg-white/10 dark:hover:text-white\" aria-label=\"选择复制选项\">\n <ChevronDown className=\"h-3.5 w-3.5\" />\n </MenuButton>\n </div>\n <MenuItems\n anchor=\"bottom end\"\n className=\"clarify-content-actions-list z-30 mt-2 w-52 origin-top-right rounded-2xl border border-zinc-900/10 bg-white p-1 text-xs shadow-md 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 {actions.map((action) => {\n const Icon = copied === action.key ? Check : action.icon\n\n return (\n <MenuItem key={action.key}>\n <button\n type=\"button\"\n onClick={action.run}\n className=\"clarify-content-actions-item flex w-full items-center gap-2 rounded-xl px-3 py-2 text-left text-zinc-600 transition data-focus:bg-zinc-100 data-focus:text-zinc-950 dark:text-zinc-300 dark:data-focus:bg-white/10 dark:data-focus:text-white\"\n >\n <Icon className=\"h-3.5 w-3.5\" />\n <span>{copied === action.key ? '已复制' : action.label}</span>\n </button>\n </MenuItem>\n )\n })}\n </MenuItems>\n </Menu>\n </div>\n )\n}\n","import type { ComponentPropsWithoutRef } from 'react'\n\nfunction ClarifyMark(props: ComponentPropsWithoutRef<'svg'>) {\n return (\n <svg viewBox=\"0 0 279 200\" aria-hidden=\"true\" {...props}>\n <path d=\"M44.867217 0.00543761C130.715579 1.00591567 200 70.9091172 200 156.994562L199.986321 155.127494C199.384888 180.009127 179.026368 199.994562 154 199.994562H46C20.5949015 199.994562 0 179.399661 0 153.994562V45.9945624C0 21.0975659 19.7793434 0.820282524 44.4815926 0.0191499894Z\" fill=\"#00D492\" />\n <path d=\"M123.867217 0.00543761C209.715579 1.00591567 279 70.9091172 279 156.994562L278.986321 155.127494C278.384888 180.009127 258.026368 199.994562 233 199.994562H125C99.5949015 199.994562 79 179.399661 79 153.994562V45.9945624C79 21.0975659 98.7793434 0.820282524 123.481593 0.0191499894Z\" fill=\"#00F6C9\" fillOpacity=\"0.6\" transform=\"rotate(-90 179 100)\" />\n <path d=\"M199.979267 154.416906L199.984438 155.157125L199.962366 155.872459C198.977251 180.406837 178.776104 199.994562 154 199.994562L124.372438 199.994125L124.249053 199.994081C99.6939678 199.603921 79.8122712 179.973634 79.01915 155.518407L79.0054376 155.132783C79.5830823 105.566626 103.129768 61.5221348 139.498462 33.1463428C175.69419 61.3871018 199.186123 105.143863 199.979267 154.416906Z\" fill=\"#00F692\" />\n </svg>\n )\n}\n\nexport function BuiltWithClarify() {\n return (\n <a\n href=\"https://clarify.pub\"\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label=\"Built with Clarify\"\n className=\"clarify-built-with inline-flex items-center gap-1.5 rounded-full px-2 py-1 text-xs font-medium text-zinc-500 no-underline transition hover:bg-zinc-900/2.5 hover:text-zinc-900 dark:text-zinc-500 dark:hover:bg-white/5 dark:hover:text-white\"\n >\n <span>Built with</span>\n <ClarifyMark className=\"clarify-built-with-logo h-3.5 w-5 flex-none\" />\n <span className=\"font-semibold text-zinc-700 dark:text-zinc-300\">Clarify</span>\n </a>\n )\n}\n","import { Tab, TabGroup, TabList, TabPanel, TabPanels } from '@headlessui/react'\nimport clsx from 'clsx'\nimport {\n Children,\n createContext,\n isValidElement,\n useContext,\n useEffect,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react'\nimport { create } from 'zustand'\n\nconst languageNames: Record<string, string> = {\n js: 'JavaScript',\n ts: 'TypeScript',\n jsx: 'React JSX',\n tsx: 'React TSX',\n javascript: 'JavaScript',\n typescript: 'TypeScript',\n php: 'PHP',\n python: 'Python',\n ruby: 'Ruby',\n go: 'Go',\n bash: 'Shell',\n sh: 'Shell',\n shell: 'Shell',\n json: 'JSON',\n}\n\nfunction getPanelTitle(arg0: { title?: string; language?: string }) { const { title, language } = arg0\n\n if (title) return title\n if (language && language in languageNames) return languageNames[language]\n return 'Code'\n}\n\nfunction getNodeText(node: ReactNode): string {\n if (typeof node === 'string' || typeof node === 'number') return String(node)\n if (Array.isArray(node)) return node.map(getNodeText).join('')\n if (isValidElement(node)) return getNodeText((node.props as { children?: ReactNode }).children)\n return ''\n}\n\nfunction ClipboardIcon(props: ComponentPropsWithoutRef<'svg'>) {\n return (\n <svg viewBox=\"0 0 20 20\" aria-hidden=\"true\" {...props}>\n <path\n strokeWidth=\"0\"\n d=\"M5.5 13.5v-5a2 2 0 0 1 2-2l.447-.894A2 2 0 0 1 9.737 4.5h.527a2 2 0 0 1 1.789 1.106l.447.894a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-5a2 2 0 0 1-2-2Z\"\n />\n <path\n fill=\"none\"\n strokeLinejoin=\"round\"\n d=\"M12.5 6.5a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-5a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2m5 0-.447-.894a2 2 0 0 0-1.79-1.106h-.527a2 2 0 0 0-1.789 1.106L7.5 6.5m5 0-1 1h-3l-1-1\"\n />\n </svg>\n )\n}\n\nfunction CopyButton(arg0: { code: string }) { const { code } = arg0\n\n const [copyCount, setCopyCount] = useState(0)\n const copied = copyCount > 0\n\n useEffect(() => {\n if (copyCount === 0) return undefined\n const timeout = window.setTimeout(() => setCopyCount(0), 1000)\n return () => window.clearTimeout(timeout)\n }, [copyCount])\n\n if (!code) return null\n\n return (\n <button\n type=\"button\"\n className={clsx(\n 'clarify-code-copy group/button absolute top-3.5 right-4 overflow-hidden rounded-full py-1 pr-3 pl-2 text-2xs font-medium opacity-0 backdrop-blur-sm transition group-hover:opacity-100 focus:opacity-100',\n copied\n ? 'bg-emerald-400/10 ring-1 ring-emerald-400/20 ring-inset'\n : 'bg-white/5 hover:bg-white/7.5 dark:bg-white/2.5 dark:hover:bg-white/5',\n )}\n onClick={() => {\n void window.navigator.clipboard.writeText(code).then(() => {\n setCopyCount((count) => count + 1)\n })\n }}\n >\n <span\n aria-hidden={copied}\n className={clsx(\n 'pointer-events-none flex items-center gap-0.5 text-zinc-400 transition duration-300',\n copied && '-translate-y-1.5 opacity-0',\n )}\n >\n <ClipboardIcon className=\"h-5 w-5 fill-zinc-500/20 stroke-zinc-500 transition-colors group-hover/button:stroke-zinc-400\" />\n Copy\n </span>\n <span\n aria-hidden={!copied}\n className={clsx(\n 'pointer-events-none absolute inset-0 flex items-center justify-center text-emerald-400 transition duration-300',\n !copied && 'translate-y-1.5 opacity-0',\n )}\n >\n Copied!\n </span>\n </button>\n )\n}\n\nfunction CodePanelHeader(arg0: { tag?: string; label?: string }) { const { tag, label } = arg0\n\n if (!tag && !label) return null\n\n return (\n <div className=\"clarify-code-panel-header flex h-9 items-center gap-2 border-y border-t-transparent border-b-white/7.5 bg-zinc-900 px-4 dark:border-b-white/5 dark:bg-white/1\">\n {tag ? <span className=\"font-mono text-[0.625rem]/6 font-semibold text-emerald-400\">{tag}</span> : null}\n {tag && label ? <span className=\"h-0.5 w-0.5 rounded-full bg-zinc-500\" /> : null}\n {label ? <span className=\"font-mono text-xs text-zinc-400\">{label}</span> : null}\n </div>\n )\n}\n\nfunction CodePanel(arg0: {\n children: ReactNode\n tag?: string\n label?: string\n code?: string\n}) {\n const { children } = arg0\n let { tag, label, code } = arg0\n\n const child = Children.only(children)\n\n if (isValidElement(child)) {\n const props = child.props as { tag?: string; label?: string; code?: string; children?: ReactNode }\n tag = props.tag ?? tag\n label = props.label ?? label\n code = props.code ?? code ?? getNodeText(props.children)\n }\n\n const copyText = code ?? getNodeText(children)\n\n return (\n <div className=\"clarify-code-panel group dark:bg-white/2.5\">\n <CodePanelHeader tag={tag} label={label} />\n <div className=\"relative\">\n <pre className=\"clarify-code-pre overflow-x-auto p-4 text-xs text-white\">{children}</pre>\n <CopyButton code={copyText} />\n </div>\n </div>\n )\n}\n\nfunction CodeGroupHeader(arg0: { title?: string; children: ReactNode; selectedIndex: number }) { const { title, children, selectedIndex } = arg0\n\n const hasTabs = Children.count(children) > 1\n\n if (!title && !hasTabs) return null\n\n return (\n <div className=\"clarify-code-group-header flex min-h-[calc(--spacing(12)+1px)] flex-wrap items-start gap-x-4 border-b border-zinc-700 bg-zinc-800 px-4 dark:border-zinc-800 dark:bg-transparent\">\n {title ? <h3 className=\"mr-auto pt-3 text-xs font-semibold text-white\">{title}</h3> : null}\n {hasTabs ? (\n <TabList className=\"clarify-code-tabs -mb-px flex gap-4 text-xs font-medium\">\n {Children.map(children, (child, childIndex) => (\n <Tab\n className={clsx(\n 'clarify-code-tab border-b py-3 transition data-selected:not-data-focus:outline-hidden',\n childIndex === selectedIndex\n ? 'border-emerald-500 text-emerald-400'\n : 'border-transparent text-zinc-400 hover:text-zinc-300',\n )}\n >\n {getPanelTitle(isValidElement(child) ? (child.props as { title?: string; language?: string }) : {})}\n </Tab>\n ))}\n </TabList>\n ) : null}\n </div>\n )\n}\n\nfunction CodeGroupPanels(arg0: ComponentPropsWithoutRef<typeof CodePanel>) { const { children, ...props } = arg0\n\n const hasTabs = Children.count(children) > 1\n\n if (hasTabs) {\n return (\n <TabPanels>\n {Children.map(children, (child) => (\n <TabPanel>\n <CodePanel {...props}>{child}</CodePanel>\n </TabPanel>\n ))}\n </TabPanels>\n )\n }\n\n return <CodePanel {...props}>{children}</CodePanel>\n}\n\nfunction usePreventLayoutShift() {\n const positionRef = useRef<HTMLElement>(null)\n const rafRef = useRef<number | undefined>(undefined)\n\n useEffect(() => {\n return () => {\n if (typeof rafRef.current !== 'undefined') window.cancelAnimationFrame(rafRef.current)\n }\n }, [])\n\n return {\n positionRef,\n preventLayoutShift(callback: () => void) {\n if (!positionRef.current) return\n\n const initialTop = positionRef.current.getBoundingClientRect().top\n callback()\n\n rafRef.current = window.requestAnimationFrame(() => {\n const newTop = positionRef.current?.getBoundingClientRect().top ?? initialTop\n window.scrollBy(0, newTop - initialTop)\n })\n },\n }\n}\n\nconst usePreferredLanguageStore = create<{\n preferredLanguages: string[]\n addPreferredLanguage: (language: string) => void\n}>()((set) => ({\n preferredLanguages: [],\n addPreferredLanguage: (language) =>\n set((state) => ({\n preferredLanguages: [...state.preferredLanguages.filter((preferredLanguage) => preferredLanguage !== language), language],\n })),\n}))\n\nfunction useTabGroupProps(availableLanguages: string[]) {\n const { preferredLanguages, addPreferredLanguage } = usePreferredLanguageStore()\n const [selectedIndex, setSelectedIndex] = useState(0)\n const activeLanguage = [...availableLanguages].sort(\n (a, z) => preferredLanguages.indexOf(z) - preferredLanguages.indexOf(a),\n )[0]\n const languageIndex = availableLanguages.indexOf(activeLanguage)\n const newSelectedIndex = languageIndex === -1 ? selectedIndex : languageIndex\n\n if (newSelectedIndex !== selectedIndex) setSelectedIndex(newSelectedIndex)\n\n const { positionRef, preventLayoutShift } = usePreventLayoutShift()\n\n return {\n as: 'div' as const,\n ref: positionRef,\n selectedIndex,\n onChange: (nextSelectedIndex: number) => {\n preventLayoutShift(() => addPreferredLanguage(availableLanguages[nextSelectedIndex]))\n },\n }\n}\n\nconst CodeGroupContext = createContext(false)\n\nexport function CodeGroup(arg0: ComponentPropsWithoutRef<typeof CodeGroupPanels> & { title?: string }) { const {\n children,\n title,\n ...props\n} = arg0\n\n const languages =\n Children.map(children, (child) =>\n getPanelTitle(isValidElement(child) ? (child.props as { title?: string; language?: string }) : {}),\n ) ?? []\n const tabGroupProps = useTabGroupProps(languages)\n const hasTabs = Children.count(children) > 1\n const containerClassName = 'clarify-code-group my-6 overflow-hidden rounded-2xl bg-zinc-900 shadow-md dark:ring-1 dark:ring-white/10'\n const header = (\n <CodeGroupHeader title={title} selectedIndex={tabGroupProps.selectedIndex}>\n {children}\n </CodeGroupHeader>\n )\n const panels = <CodeGroupPanels {...props}>{children}</CodeGroupPanels>\n\n return (\n <CodeGroupContext.Provider value={true}>\n {hasTabs ? (\n <TabGroup {...tabGroupProps} className={containerClassName}>\n <div className=\"not-prose\">\n {header}\n {panels}\n </div>\n </TabGroup>\n ) : (\n <div className={containerClassName}>\n <div className=\"not-prose\">\n {header}\n {panels}\n </div>\n </div>\n )}\n </CodeGroupContext.Provider>\n )\n}\n\nexport function Code(arg0: ComponentPropsWithoutRef<'code'> & { code?: string; language?: string; title?: string }) { const { children, ...props } = arg0\n\n const isGrouped = useContext(CodeGroupContext)\n\n if (isGrouped && typeof children === 'string') {\n return <code {...props} dangerouslySetInnerHTML={{ __html: children }} />\n }\n\n return <code {...props}>{children}</code>\n}\n\nexport function Pre(arg0: ComponentPropsWithoutRef<typeof CodeGroup>) { const { children, ...props } = arg0\n\n const isGrouped = useContext(CodeGroupContext)\n\n if (isGrouped) return children\n\n return <CodeGroup {...props}>{children}</CodeGroup>\n}\n","import { Transition } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { forwardRef, useState } from 'react'\nimport type { ComponentPropsWithoutRef, ElementRef, FormEvent } from 'react'\n\nfunction CheckIcon(props: ComponentPropsWithoutRef<'svg'>) {\n return (\n <svg viewBox=\"0 0 20 20\" aria-hidden=\"true\" {...props}>\n <circle cx=\"10\" cy=\"10\" r=\"10\" strokeWidth=\"0\" />\n <path\n fill=\"none\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.5\"\n d=\"m6.75 10.813 2.438 2.437c1.218-4.469 4.062-6.5 4.062-6.5\"\n />\n </svg>\n )\n}\n\nfunction FeedbackButton(props: Omit<ComponentPropsWithoutRef<'button'>, 'type' | 'className'>) {\n return (\n <button\n type=\"submit\"\n className=\"clarify-feedback-button px-3 text-sm font-medium text-zinc-600 transition hover:bg-zinc-900/2.5 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-white/5 dark:hover:text-white\"\n {...props}\n />\n )\n}\n\nconst FeedbackForm = forwardRef<ElementRef<'form'>, ComponentPropsWithoutRef<'form'>>(function FeedbackForm(arg0, ref,) { const { onSubmit, className, ...props } = arg0\n\n return (\n <form\n {...props}\n ref={ref}\n onSubmit={onSubmit}\n className={clsx(className, 'clarify-feedback-form absolute inset-0 flex items-center justify-center gap-6 md:justify-start')}\n >\n <p className=\"text-sm text-zinc-600 dark:text-zinc-400\">Was this page helpful?</p>\n <div className=\"clarify-feedback-actions group grid h-8 grid-cols-[1fr_1px_1fr] overflow-hidden rounded-full border border-zinc-900/10 dark:border-white/10\">\n <FeedbackButton data-response=\"yes\">Yes</FeedbackButton>\n <div className=\"bg-zinc-900/10 dark:bg-white/10\" />\n <FeedbackButton data-response=\"no\">No</FeedbackButton>\n </div>\n </form>\n )\n})\n\nconst FeedbackThanks = forwardRef<ElementRef<'div'>, ComponentPropsWithoutRef<'div'>>(function FeedbackThanks(arg0, ref,) { const { className, ...props } = arg0\n\n return (\n <div {...props} ref={ref} className={clsx(className, 'clarify-feedback-thanks absolute inset-0 flex justify-center md:justify-start')}>\n <div className=\"flex items-center gap-3 rounded-full bg-emerald-50/50 py-1 pr-3 pl-1.5 text-sm text-emerald-900 ring-1 ring-emerald-500/20 ring-inset dark:bg-emerald-500/5 dark:text-emerald-200 dark:ring-emerald-500/30\">\n <CheckIcon className=\"h-5 w-5 flex-none fill-emerald-500 stroke-white dark:fill-emerald-200/20 dark:stroke-emerald-200\" />\n Thanks for your feedback!\n </div>\n </div>\n )\n})\n\nexport function Feedback() {\n const [submitted, setSubmitted] = useState(false)\n\n function onSubmit(event: FormEvent<HTMLFormElement>) {\n event.preventDefault()\n setSubmitted(true)\n }\n\n return (\n <div className=\"clarify-feedback relative h-8\">\n <Transition show={!submitted}>\n <FeedbackForm className=\"duration-300 data-closed:opacity-0 data-leave:pointer-events-none\" onSubmit={onSubmit} />\n </Transition>\n <Transition show={submitted}>\n <FeedbackThanks className=\"delay-150 duration-300 data-closed:opacity-0\" />\n </Transition>\n </div>\n )\n}\n","import { useId } from 'react'\nimport type { ComponentPropsWithoutRef } from 'react'\n\nexport function GridPattern(arg0: ComponentPropsWithoutRef<'svg'> & {\n width: number\n height: number\n x: string | number\n y: string | number\n squares?: Array<[x: number, y: number]>\n}) { const {\n width,\n height,\n x,\n y,\n squares,\n ...props\n} = arg0\n\n const patternId = useId()\n\n return (\n <svg aria-hidden=\"true\" {...props}>\n <defs>\n <pattern id={patternId} width={width} height={height} patternUnits=\"userSpaceOnUse\" x={x} y={y}>\n <path d={`M.5 ${height}V.5H${width}`} fill=\"none\" />\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" strokeWidth={0} fill={`url(#${patternId})`} />\n {squares ? (\n <svg x={x} y={y} className=\"overflow-visible\">\n {squares.map(([squareX, squareY]) => (\n <rect\n key={`${squareX}-${squareY}`}\n width={width + 1}\n height={height + 1}\n x={squareX * width}\n y={squareY * height}\n strokeWidth=\"0\"\n />\n ))}\n </svg>\n ) : null}\n </svg>\n )\n}\n\nexport function HeroPattern() {\n return (\n <div className=\"absolute inset-0 -z-10 mx-0 max-w-none overflow-hidden\">\n <div className=\"absolute top-0 left-1/2 -ml-152 h-100 w-325 dark:mask-[linear-gradient(white,transparent)]\">\n <div className=\"absolute inset-0 bg-linear-to-r from-[#36b49f] to-[#DBFF75] opacity-40 mask-[radial-gradient(farthest-side_at_top,white,transparent)] dark:from-[#36b49f]/30 dark:to-[#DBFF75]/30 dark:opacity-100\">\n <GridPattern\n width={72}\n height={56}\n x={-12}\n y={4}\n squares={[\n [4, 3],\n [2, 1],\n [7, 3],\n [10, 6],\n ]}\n className=\"absolute inset-x-0 inset-y-[-50%] h-[200%] w-full -skew-y-18 fill-black/40 stroke-black/50 mix-blend-overlay dark:fill-white/2.5 dark:stroke-white/5\"\n />\n </div>\n <svg\n viewBox=\"0 0 1113 440\"\n aria-hidden=\"true\"\n className=\"absolute top-0 left-1/2 -ml-76 w-278.25 fill-white blur-[26px] dark:hidden\"\n >\n <path d=\"M.016 439.5s-9.5-300 434-300S882.516 20 882.516 20V0h230.004v439.5H.016Z\" />\n </svg>\n </div>\n </div>\n )\n}\n","import { createContext, useContext } from 'react'\n\nimport type { OpenAPISpec } from './openapi/utils'\nimport type { ClarifyConfig } from './types'\n\nexport const ClarifyConfigContext = createContext<ClarifyConfig | null>(null)\nexport const OpenApisContext = createContext<Record<string, OpenAPISpec>>({})\n\nexport function useClarifyConfig(): ClarifyConfig {\n const config = useContext(ClarifyConfigContext)\n if (!config) {\n throw new Error(\n '[clarify] useClarifyConfig must be used within a ClarifyConfigContext.Provider'\n )\n }\n return config\n}\n\nexport function useOpenApis(): Record<string, OpenAPISpec> {\n return useContext(OpenApisContext)\n}\n","import clsx from 'clsx'\nimport { useLocation } from 'react-router-dom'\n\nimport { useClarifyConfig } from '../context'\nimport type { ClarifyConfig, ClarifyLocalizedText, ClarifyNavbarLink } from '../types'\n\nimport { BuiltWithClarify } from './BuiltWithClarify'\n\nfunction resolveLocalizedText(text: ClarifyLocalizedText, locale?: string, fallbackLocale?: string): string {\n if (typeof text === 'string') return text\n return (locale ? text[locale] : undefined) ?? (fallbackLocale ? text[fallbackLocale] : undefined) ?? Object.values(text)[0] ?? ''\n}\n\nfunction isExternalHref(href: string): boolean {\n return /^[a-z][a-z0-9+.-]*:/i.test(href) || href.startsWith('//')\n}\n\nfunction localeForPath(config: ClarifyConfig, pathname: string): string | undefined {\n const i18n = config.i18n\n if (!i18n) return undefined\n const firstSegment = pathname.split('/').filter(Boolean)[0]\n return i18n.locales.find((locale) => locale.code === firstSegment)?.code ?? i18n.defaultLocale\n}\n\nfunction localizeHref(href: string, config: ClarifyConfig, locale?: string): string {\n if (!locale || !config.i18n || isExternalHref(href) || href.startsWith('#')) return href\n if (locale === config.i18n.defaultLocale) return href\n const cleanHref = href === '/' ? '' : href.replace(/^\\/+/, '')\n return `/${locale}${cleanHref ? `/${cleanHref}` : ''}`\n}\n\nfunction FooterLink(arg0: { link: ClarifyNavbarLink; locale?: string; config: ClarifyConfig }) {\n const { link, locale, config } = arg0\n const external = link.external ?? isExternalHref(link.href)\n const href = external ? link.href : localizeHref(link.href, config, locale)\n\n return (\n <a\n href={href}\n target={external ? '_blank' : undefined}\n rel={external ? 'noreferrer' : undefined}\n className=\"clarify-footer-link text-sm text-zinc-500 no-underline transition hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white\"\n >\n {resolveLocalizedText(link.label, locale, config.i18n?.defaultLocale)}\n </a>\n )\n}\n\nfunction SocialLink(arg0: { name: string; href: string }) {\n const { name, href } = arg0\n\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"clarify-footer-social text-sm capitalize text-zinc-500 no-underline transition hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white\"\n >\n {name}\n </a>\n )\n}\n\nexport function PageFooter() {\n const config = useClarifyConfig()\n const location = useLocation()\n const locale = localeForPath(config, location.pathname)\n const footer = config.footer\n const links = footer?.links ?? []\n const socials = Object.entries(footer?.socials ?? {})\n const copyright = footer?.copyright\n ? resolveLocalizedText(footer.copyright, locale, config.i18n?.defaultLocale)\n : undefined\n const hasCustomFooter = Boolean(copyright || links.length > 0 || socials.length > 0)\n\n return (\n <footer\n className={clsx(\n 'clarify-page-footer mx-auto mt-16 flex w-full max-w-3xl flex-col items-end gap-4 border-t border-zinc-900/10 pt-8 xl:max-w-[56rem] 2xl:max-w-[64rem] dark:border-white/10',\n hasCustomFooter && 'sm:flex-row sm:items-center sm:justify-between',\n )}\n >\n {hasCustomFooter ? (\n <div className=\"clarify-footer-content flex flex-col gap-3 text-right sm:text-left\">\n {copyright ? (\n <p className=\"clarify-footer-copyright m-0 text-sm text-zinc-500 dark:text-zinc-400\">{copyright}</p>\n ) : null}\n {links.length > 0 || socials.length > 0 ? (\n <div className=\"clarify-footer-links flex flex-wrap justify-end gap-x-4 gap-y-2 sm:justify-start\">\n {links.map((link) => (\n <FooterLink key={`${link.href}-${resolveLocalizedText(link.label, locale, config.i18n?.defaultLocale)}`} link={link} locale={locale} config={config} />\n ))}\n {socials.map(([name, href]) => (\n <SocialLink key={name} name={name} href={href} />\n ))}\n </div>\n ) : null}\n </div>\n ) : null}\n <div className=\"clarify-footer-brand flex justify-end\">\n <BuiltWithClarify />\n </div>\n </footer>\n )\n}\n","import { createContext, useContext, useEffect, useMemo, useState } from 'react'\nimport type { ReactNode } from 'react'\n\nexport type Theme = 'light' | 'dark' | 'system'\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\nconst storageKey = 'clarify:theme'\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 const storedTheme = window.localStorage.getItem(storageKey)\n return storedTheme === 'light' || storedTheme === 'dark' || storedTheme === 'system' ? storedTheme : 'system'\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\nexport function ThemeProvider(arg0: { children: ReactNode }) { const { children } = arg0\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\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(storageKey, nextTheme)\n }\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 type { ComponentPropsWithoutRef } from 'react'\n\nimport { useTheme } from './ThemeProvider'\n\nfunction SunIcon(props: ComponentPropsWithoutRef<'svg'>) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\" {...props}>\n <path d=\"M12.5 10a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0Z\" />\n <path\n strokeLinecap=\"round\"\n d=\"M10 5.5v-1M13.182 6.818l.707-.707M14.5 10h1M13.182 13.182l.707.707M10 15.5v-1M6.11 13.889l.708-.707M4.5 10h1M6.11 6.111l.708.707\"\n />\n </svg>\n )\n}\n\nfunction MoonIcon(props: ComponentPropsWithoutRef<'svg'>) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\" {...props}>\n <path d=\"M15.224 11.724a5.5 5.5 0 0 1-6.949-6.949 5.5 5.5 0 1 0 6.949 6.949Z\" />\n </svg>\n )\n}\n\nexport function ThemeToggle() {\n const { resolvedTheme, setTheme } = useTheme()\n const otherTheme = resolvedTheme === 'dark' ? 'light' : 'dark'\n\n return (\n <button\n type=\"button\"\n className=\"clarify-theme-toggle flex size-6 items-center justify-center rounded-md transition hover:bg-zinc-900/5 dark:hover:bg-white/5\"\n aria-label={`Switch to ${otherTheme} theme`}\n onClick={() => setTheme(otherTheme)}\n >\n <span className=\"absolute size-12 pointer-fine:hidden\" />\n <SunIcon className=\"h-5 w-5 stroke-zinc-900 dark:hidden\" />\n <MoonIcon className=\"hidden h-5 w-5 stroke-white dark:block\" />\n </button>\n )\n}\n","import clsx from 'clsx'\nimport { useInView } from 'framer-motion'\nimport { useEffect, useRef } from 'react'\nimport type { ComponentPropsWithoutRef, ElementType, ReactNode } from 'react'\n\nimport { remToPx } from '../utils/remToPx'\n\nimport { useSectionStore } from './SectionProvider'\n\nexport { BuiltWithClarify } from './BuiltWithClarify'\nexport { Code, CodeGroup, Pre } from './Code'\nexport { Feedback } from './Feedback'\nexport { GridPattern, HeroPattern } from './patterns'\nexport { PageFooter } from './PageFooter'\nexport { SiteLogo } from './SiteLogo'\nexport { ThemeProvider, useTheme } from './ThemeProvider'\nexport { ThemeToggle } from './ThemeToggle'\n\nfunction ArrowIcon(props: ComponentPropsWithoutRef<'svg'>) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\" {...props}>\n <path\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"m11.5 6.5 3 3.5m0 0-3 3.5m3-3.5h-9\"\n />\n </svg>\n )\n}\n\nconst buttonVariantStyles = {\n primary:\n 'rounded-full bg-zinc-900 px-3 py-1 text-white hover:bg-zinc-700 dark:bg-emerald-400/10 dark:text-emerald-400 dark:ring-1 dark:ring-inset dark:ring-emerald-400/20 dark:hover:text-emerald-300 dark:hover:ring-emerald-300',\n secondary:\n 'rounded-full bg-zinc-100 px-3 py-1 text-zinc-900 hover:bg-zinc-200 dark:bg-zinc-800/40 dark:text-zinc-400 dark:ring-1 dark:ring-inset dark:ring-zinc-800 dark:hover:bg-zinc-800 dark:hover:text-zinc-300',\n filled:\n 'rounded-full bg-zinc-900 px-3 py-1 text-white hover:bg-zinc-700 dark:bg-emerald-500 dark:hover:bg-emerald-400',\n outline:\n 'rounded-full px-3 py-1 text-zinc-700 ring-1 ring-inset ring-zinc-900/10 hover:bg-zinc-900/2.5 hover:text-zinc-900 dark:text-zinc-400 dark:ring-white/10 dark:hover:bg-white/5 dark:hover:text-white',\n text: 'text-emerald-500 hover:text-emerald-600 dark:text-emerald-400 dark:hover:text-emerald-500',\n}\n\nexport type ButtonProps = {\n variant?: keyof typeof buttonVariantStyles\n arrow?: 'left' | 'right'\n} & (\n | (ComponentPropsWithoutRef<'a'> & { href: string })\n | (ComponentPropsWithoutRef<'button'> & { href?: undefined })\n)\n\nexport function Button(arg0: ButtonProps) { const { variant = 'primary', className, children, arrow, ...props } = arg0\n\n const classes = clsx(\n 'clarify-button inline-flex justify-center gap-0.5 overflow-hidden text-sm font-medium transition',\n buttonVariantStyles[variant],\n className,\n )\n\n const arrowIcon = (\n <ArrowIcon\n className={clsx(\n 'mt-0.5 h-5 w-5',\n variant === 'text' && 'relative top-px',\n arrow === 'left' && '-ml-1 rotate-180',\n arrow === 'right' && '-mr-1',\n )}\n />\n )\n\n const inner = (\n <>\n {arrow === 'left' ? arrowIcon : null}\n {children}\n {arrow === 'right' ? arrowIcon : null}\n </>\n )\n\n if (typeof props.href === 'undefined') {\n return (\n <button className={classes} {...props}>\n {inner}\n </button>\n )\n }\n\n return (\n <a className={classes} {...props}>\n {inner}\n </a>\n )\n}\n\nconst tagVariantStyles = {\n small: '',\n medium: 'rounded-lg px-1.5 ring-1 ring-inset',\n}\n\nconst tagColorStyles = {\n emerald: {\n small: 'text-emerald-500 dark:text-emerald-400',\n medium: 'bg-emerald-400/10 text-emerald-500 ring-emerald-300 dark:text-emerald-400 dark:ring-emerald-400/30',\n },\n sky: {\n small: 'text-sky-500 dark:text-sky-400',\n medium: 'bg-sky-400/10 text-sky-500 ring-sky-300 dark:text-sky-400 dark:ring-sky-400/30',\n },\n amber: {\n small: 'text-amber-500 dark:text-amber-400',\n medium: 'bg-amber-400/10 text-amber-500 ring-amber-300 dark:text-amber-400 dark:ring-amber-400/30',\n },\n rose: {\n small: 'text-red-500 dark:text-rose-500',\n medium: 'bg-rose-50 text-red-500 ring-rose-200 dark:bg-rose-400/10 dark:text-rose-400 dark:ring-rose-500/20',\n },\n zinc: {\n small: 'text-zinc-400 dark:text-zinc-500',\n medium: 'bg-zinc-50 text-zinc-500 ring-zinc-200 dark:bg-zinc-400/10 dark:text-zinc-400 dark:ring-zinc-500/20',\n },\n}\n\nconst tagValueColorMap: Record<string, keyof typeof tagColorStyles> = {\n GET: 'emerald',\n POST: 'sky',\n PUT: 'amber',\n PATCH: 'amber',\n DELETE: 'rose',\n}\n\nexport type TagProps = {\n children: ReactNode\n variant?: keyof typeof tagVariantStyles\n color?: keyof typeof tagColorStyles\n}\n\nexport function Tag(arg0: TagProps) { const { children, variant = 'medium', color } = arg0\n\n const value = typeof children === 'string' ? children.toUpperCase() : ''\n const resolvedColor = color ?? tagValueColorMap[value] ?? 'emerald'\n\n return (\n <span\n className={clsx(\n 'clarify-tag font-mono text-[0.625rem]/6 font-semibold',\n tagVariantStyles[variant],\n tagColorStyles[resolvedColor][variant],\n )}\n >\n {children}\n </span>\n )\n}\n\nexport function Logo(props: ComponentPropsWithoutRef<'svg'>) {\n return (\n <svg viewBox=\"0 0 99 24\" aria-hidden=\"true\" {...props} className={clsx('clarify-logo', props.className)}>\n <path\n className=\"fill-emerald-400\"\n d=\"M16 8a5 5 0 0 0-5-5H5a5 5 0 0 0-5 5v13.927a1 1 0 0 0 1.623.782l3.684-2.93a4 4 0 0 1 2.49-.87H11a5 5 0 0 0 5-5V8Z\"\n />\n <path\n className=\"fill-zinc-900 dark:fill-white\"\n d=\"M26.538 18h2.654v-3.999h2.576c2.672 0 4.456-1.723 4.456-4.333V9.65c0-2.61-1.784-4.333-4.456-4.333h-5.23V18Zm4.58-10.582c1.52 0 2.416.8 2.416 2.241v.018c0 1.441-.896 2.25-2.417 2.25h-1.925V7.418h1.925ZM38.051 18h2.566v-5.414c0-1.371.923-2.206 2.382-2.206.396 0 .791.061 1.178.15V8.287a3.843 3.843 0 0 0-.958-.123c-1.257 0-2.136.615-2.443 1.661h-.159V8.323h-2.566V18Zm11.55.202c2.979 0 4.772-1.88 4.772-5.036v-.018c0-3.128-1.82-5.036-4.773-5.036-2.953 0-4.772 1.916-4.772 5.036v.018c0 3.146 1.793 5.036 4.772 5.036Zm0-2.013c-1.372 0-2.145-1.116-2.145-3.023v-.018c0-1.89.782-3.023 2.144-3.023 1.354 0 2.145 1.134 2.145 3.023v.018c0 1.907-.782 3.023-2.145 3.023Zm10.52 1.846c.492 0 .967-.053 1.283-.114v-1.907a6.057 6.057 0 0 1-.755.044c-.87 0-1.24-.387-1.24-1.257v-4.544h1.995V8.323H59.41V6.012h-2.592v2.311h-1.495v1.934h1.495v5.133c0 1.88.949 2.645 3.304 2.645Zm7.287.167c2.98 0 4.772-1.88 4.772-5.036v-.018c0-3.128-1.82-5.036-4.772-5.036-2.954 0-4.773 1.916-4.773 5.036v.018c0 3.146 1.793 5.036 4.773 5.036Zm0-2.013c-1.372 0-2.145-1.116-2.145-3.023v-.018c0-1.89.782-3.023 2.145-3.023 1.353 0 2.144 1.134 2.144 3.023v.018c0 1.907-.782 3.023-2.144 3.023Zm10.767 2.013c2.522 0 4.034-1.353 4.297-3.463l.01-.053h-2.374l-.017.036c-.229.966-.853 1.467-1.908 1.467-1.37 0-2.135-1.08-2.135-3.04v-.018c0-1.934.755-3.006 2.135-3.006 1.099 0 1.74.615 1.908 1.556l.008.017h2.391v-.026c-.228-2.162-1.749-3.56-4.315-3.56-3.033 0-4.738 1.837-4.738 5.019v.017c0 3.217 1.714 5.054 4.738 5.054Zm10.257 0c2.98 0 4.772-1.88 4.772-5.036v-.018c0-3.128-1.82-5.036-4.772-5.036-2.953 0-4.773 1.916-4.773 5.036v.018c0 3.146 1.793 5.036 4.773 5.036Zm0-2.013c-1.371 0-2.145-1.116-2.145-3.023v-.018c0-1.89.782-3.023 2.145-3.023 1.353 0 2.144 1.134 2.144 3.023v.018c0 1.907-.782 3.023-2.144 3.023ZM95.025 18h2.566V4.623h-2.566V18Z\"\n />\n </svg>\n )\n}\n\nexport function Prose<T extends ElementType = 'div'>(arg0: Omit<ComponentPropsWithoutRef<T>, 'as' | 'className'> & {\n as?: T\n className?: string\n}) { const {\n as,\n className,\n ...props\n} = arg0\n\n const Component = as ?? 'div'\n\n return (\n <Component\n className={clsx(\n className,\n 'clarify-prose prose dark:prose-invert',\n '[html_:where(&>*)]:mx-auto [html_:where(&>*)]:w-full [html_:where(&>*)]:max-w-3xl xl:[html_:where(&>*)]:max-w-[56rem] 2xl:[html_:where(&>*)]:max-w-[64rem] [html_:where(&>.not-prose)]:max-w-5xl 2xl:[html_:where(&>.not-prose)]:max-w-[76rem]',\n )}\n {...props}\n />\n )\n}\n\nfunction AnchorIcon(props: ComponentPropsWithoutRef<'svg'>) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" strokeLinecap=\"round\" aria-hidden=\"true\" {...props}>\n <path d=\"m6.5 11.5-.964-.964a3.535 3.535 0 1 1 5-5l.964.964m2 2 .964.964a3.536 3.536 0 0 1-5 5L8.5 13.5m0-5 3 3\" />\n </svg>\n )\n}\n\nfunction Eyebrow(arg0: { tag?: string; label?: string }) { const { tag, label } = arg0\n\n if (!tag && !label) {\n return null\n }\n\n return (\n <div className=\"flex items-center gap-x-3\">\n {tag ? <Tag>{tag}</Tag> : null}\n {tag && label ? <span className=\"h-0.5 w-0.5 rounded-full bg-zinc-300 dark:bg-zinc-600\" /> : null}\n {label ? <span className=\"font-mono text-xs text-zinc-400\">{label}</span> : null}\n </div>\n )\n}\n\nfunction Anchor(arg0: { id: string; inView: boolean; children: ReactNode }) { const { id, inView, children } = arg0\n\n return (\n <a href={`#${id}`} className=\"clarify-anchor group text-inherit no-underline hover:text-inherit\">\n {inView ? (\n <div className=\"absolute mt-1 -ml-(--width) hidden w-(--width) opacity-0 transition [--width:calc(2.625rem+0.5px+50%-min(50%,calc(var(--container-lg)+(--spacing(8)))))] group-hover:opacity-100 group-focus:opacity-100 md:block lg:z-50 2xl:[--width:--spacing(10)]\">\n <div className=\"group/anchor block h-5 w-5 rounded-lg bg-zinc-50 ring-1 ring-inset ring-zinc-300 transition hover:ring-zinc-500 dark:bg-zinc-800 dark:ring-zinc-700 dark:hover:bg-zinc-700 dark:hover:ring-zinc-600\">\n <AnchorIcon className=\"h-5 w-5 stroke-zinc-500 transition dark:stroke-zinc-400 dark:group-hover/anchor:stroke-white\" />\n </div>\n </div>\n ) : null}\n {children}\n </a>\n )\n}\n\nexport function Heading<Level extends 2 | 3>(arg0: ComponentPropsWithoutRef<`h${Level}`> & {\n id: string\n tag?: string\n label?: string\n level?: Level\n anchor?: boolean\n}) { const {\n children,\n tag,\n label,\n level,\n anchor = true,\n ...props\n} = arg0\n\n const resolvedLevel = level ?? (2 as Level)\n const Component = `h${resolvedLevel}` as 'h2' | 'h3'\n const ref = useRef<HTMLHeadingElement>(null)\n const registerHeading = useSectionStore((state) => state.registerHeading)\n\n const inView = useInView(ref, {\n margin: `${remToPx(-3.5)}px 0px 0px 0px`,\n amount: 'all',\n })\n\n useEffect(() => {\n if (resolvedLevel === 2) {\n registerHeading({\n id: props.id,\n ref,\n offsetRem: tag || label ? 8 : 6,\n })\n }\n }, [label, props.id, registerHeading, resolvedLevel, tag])\n\n return (\n <>\n <Eyebrow tag={tag} label={label} />\n <Component ref={ref} className={clsx('clarify-heading', tag || label ? 'mt-2 scroll-mt-32' : 'scroll-mt-24')} {...props}>\n {anchor ? (\n <Anchor id={props.id} inView={inView}>\n {children}\n </Anchor>\n ) : (\n children\n )}\n </Component>\n </>\n )\n}\n\nexport type DocShellProps = {\n title: string\n subtitle?: string\n children: ReactNode\n}\n\nexport function DocShell(arg0: DocShellProps) {\n const { title, subtitle, children } = arg0\n\n return (\n <main className=\"clarify-doc-shell min-h-screen bg-white px-6 py-10 text-zinc-900 dark:bg-zinc-950 dark:text-white md:px-10\">\n <div className=\"mx-auto max-w-6xl\">\n <header className=\"mb-10\">\n <h1 className=\"text-3xl font-bold tracking-tight md:text-5xl\">{title}</h1>\n {subtitle ? <p className=\"mt-3 max-w-2xl text-zinc-600 dark:text-zinc-400\">{subtitle}</p> : null}\n </header>\n <Prose>{children}</Prose>\n </div>\n </main>\n )\n}\n\nexport type ApiEndpointCardProps = {\n id?: string\n method: string\n path: string\n description?: string\n}\n\nexport function ApiEndpointCard(arg0: ApiEndpointCardProps) {\n const { method, path, description, id } = arg0\n\n return (\n <article id={id} className=\"clarify-api-endpoint-card scroll-mt-20 rounded-2xl border border-zinc-900/10 bg-white p-5 shadow-sm dark:border-white/10 dark:bg-zinc-900\">\n <div className=\"flex items-center gap-3\">\n <Tag>{method}</Tag>\n <code className=\"text-sm font-medium text-zinc-800 dark:text-zinc-200\">{path}</code>\n </div>\n {description ? <p className=\"mt-3 text-sm text-zinc-600 dark:text-zinc-400\">{description}</p> : null}\n </article>\n )\n}\n","import { CloseButton } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { AnimatePresence, motion, useIsPresent } from 'framer-motion'\nimport * as LucideIcons from 'lucide-react'\nimport { useState } from 'react'\nimport { Link, useLocation } from 'react-router-dom'\n\nimport { Tag } from '../components'\nimport { useSectionStore } from '../components/SectionProvider'\nimport type { NavigationNode } from '../types'\nimport { remToPx } from '../utils/remToPx'\n\nimport { useIsInsideMobileNavigation } from './mobile'\n\ntype NavGroup = {\n title: string\n icon?: string\n links: Array<{\n title: string\n href: string\n icon?: string\n }>\n}\n\ntype LucideIconComponent = React.ComponentType<React.SVGProps<SVGSVGElement>>\n\nfunction NavigationIcon(arg0: { name?: string; className?: string }) { const { name, className } = arg0\n\n if (!name) return null\n const Icon = (LucideIcons as unknown as Record<string, LucideIconComponent>)[name]\n\n if (!Icon) return null\n\n return <Icon className={clsx('shrink-0 stroke-current', className)} aria-hidden=\"true\" />\n}\n\nfunction useInitialValue<T>(value: T, condition = true) {\n const [initialValue] = useState(value)\n return condition ? initialValue : value\n}\n\nfunction normalizePath(path: string) {\n return path === '' ? '/' : path\n}\n\nfunction navigationToGroups(navigation: NavigationNode[]): NavGroup[] {\n return navigation.map((node) => {\n const children = node.children?.length ? node.children : [node]\n\n return {\n title: node.children?.length ? node.title : 'Documentation',\n icon: node.icon,\n links: children.map((child) => ({\n title: child.title,\n href: normalizePath(child.path),\n icon: child.icon,\n })),\n }\n })\n}\n\nfunction TopLevelNavItem(arg0: { href: string; children: React.ReactNode }) { const { href, children } = arg0\n\n return (\n <li className=\"md:hidden\">\n <CloseButton\n as={Link}\n to={href}\n className=\"block py-1 text-sm text-zinc-600 transition hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white\"\n >\n {children}\n </CloseButton>\n </li>\n )\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}\n\nfunction SectionBadge(arg0: { children: string }) { const { children } = arg0\n\n return (\n <span\n className={clsx(\n 'inline-flex shrink-0 justify-end font-mono text-[0.625rem]/6 font-semibold uppercase tracking-wide',\n sectionBadgeColorStyles[children.toUpperCase()] ?? 'text-zinc-500 dark:text-zinc-400',\n )}\n >\n {children}\n </span>\n )\n}\n\nfunction NavLink(arg0: {\n href: string\n children: React.ReactNode\n badge?: string\n icon?: string\n tags?: string[]\n active?: boolean\n isAnchorLink?: boolean\n}) { const {\n href,\n children,\n badge,\n icon,\n tags,\n active = false,\n isAnchorLink = false,\n} = arg0\n\n function handleClick() {\n if (!isAnchorLink) return\n\n const hashIndex = href.indexOf('#')\n if (hashIndex === -1) return\n\n const targetId = decodeURIComponent(href.slice(hashIndex + 1))\n window.requestAnimationFrame(() => {\n document.getElementById(targetId)?.scrollIntoView()\n })\n }\n\n return (\n <CloseButton\n as={Link}\n to={href}\n aria-current={active ? 'page' : undefined}\n onClick={handleClick}\n className={clsx(\n 'clarify-navigation-link flex justify-between gap-2 py-1 pr-3 text-sm transition',\n isAnchorLink ? 'clarify-navigation-anchor-link pl-7' : 'pl-4',\n active\n ? 'text-zinc-900 dark:text-white'\n : 'text-zinc-600 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white',\n )}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2\">\n {icon ? <NavigationIcon name={icon} className=\"h-3.5 w-3.5\" /> : null}\n {badge ? <SectionBadge>{badge}</SectionBadge> : null}\n <span className=\"min-w-0 truncate\">{children}</span>\n </span>\n {tags?.length ? (\n <span className=\"flex shrink-0 gap-1\">\n {tags.map((tag) => (\n <Tag key={tag} variant=\"small\" color=\"zinc\">\n {tag}\n </Tag>\n ))}\n </span>\n ) : null}\n </CloseButton>\n )\n}\n\nfunction VisibleSectionHighlight(arg0: { group: NavGroup; pathname: string }) { const { group, pathname } = arg0\n\n const [sections, visibleSections] = useInitialValue(\n [useSectionStore((s) => s.sections), useSectionStore((s) => s.visibleSections)],\n useIsInsideMobileNavigation(),\n )\n\n const isPresent = useIsPresent()\n const firstVisibleSectionIndex = Math.max(\n 0,\n [{ id: '_top' }, ...sections].findIndex((section) => section.id === visibleSections[0]),\n )\n const itemHeight = remToPx(2)\n const height = isPresent ? Math.max(1, visibleSections.length) * itemHeight : itemHeight\n const top = group.links.findIndex((link) => link.href === pathname) * itemHeight + firstVisibleSectionIndex * itemHeight\n\n return (\n <motion.div\n layout\n initial={{ opacity: 0 }}\n animate={{ opacity: 1, transition: { delay: 0.2 } }}\n exit={{ opacity: 0 }}\n className=\"absolute inset-x-0 top-0 bg-zinc-800/2.5 will-change-transform dark:bg-white/2.5\"\n style={{ borderRadius: 8, height, top }}\n />\n )\n}\n\nfunction ActivePageMarker(arg0: { group: NavGroup; pathname: string }) { const { group, pathname } = arg0\n\n const itemHeight = remToPx(2)\n const offset = remToPx(0.25)\n const activePageIndex = group.links.findIndex((link) => link.href === pathname)\n const top = offset + activePageIndex * itemHeight\n\n return (\n <motion.div\n layout\n className=\"absolute left-2 h-6 w-px bg-emerald-500\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1, transition: { delay: 0.2 } }}\n exit={{ opacity: 0 }}\n style={{ top }}\n />\n )\n}\n\nfunction NavigationGroup(arg0: { group: NavGroup; className?: string }) { const { group, className } = arg0\n\n const isInsideMobileNavigation = useIsInsideMobileNavigation()\n const [pathname, sections] = useInitialValue(\n [useLocation().pathname, useSectionStore((s) => s.sections)],\n isInsideMobileNavigation,\n )\n const isActiveGroup = group.links.findIndex((link) => link.href === pathname) !== -1\n\n return (\n <li className={clsx('clarify-navigation-group relative mt-6', className)}>\n <motion.h2 layout=\"position\" className=\"clarify-navigation-group-title flex items-center gap-2 text-xs font-semibold text-zinc-900 dark:text-white\">\n <NavigationIcon name={group.icon} className=\"h-3.5 w-3.5\" />\n <span>{group.title}</span>\n </motion.h2>\n <div className=\"relative mt-3 pl-2\">\n <AnimatePresence initial={!isInsideMobileNavigation}>\n {isActiveGroup ? <VisibleSectionHighlight group={group} pathname={pathname} /> : null}\n </AnimatePresence>\n <motion.div layout className=\"absolute inset-y-0 left-2 w-px bg-zinc-900/10 dark:bg-white/5\" />\n <AnimatePresence initial={false}>\n {isActiveGroup ? <ActivePageMarker group={group} pathname={pathname} /> : null}\n </AnimatePresence>\n <ul role=\"list\" className=\"border-l border-transparent\">\n {group.links.map((link) => (\n <motion.li key={link.href} layout=\"position\" className=\"relative\">\n <NavLink href={link.href} icon={link.icon} active={link.href === pathname}>\n {link.title}\n </NavLink>\n <AnimatePresence mode=\"popLayout\" initial={false}>\n {link.href === pathname && sections.length > 0 ? (\n <motion.ul\n role=\"list\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1, transition: { delay: 0.1 } }}\n exit={{ opacity: 0, transition: { duration: 0.15 } }}\n >\n {sections.map((section) => (\n <li key={section.id}>\n <NavLink href={`${link.href}#${section.id}`} badge={section.badge} tags={section.tags} isAnchorLink>\n {section.title}\n </NavLink>\n </li>\n ))}\n </motion.ul>\n ) : null}\n </AnimatePresence>\n </motion.li>\n ))}\n </ul>\n </div>\n </li>\n )\n}\n\nexport function Navigation(arg0: { navigation: NavigationNode[]; className?: string }) { const { navigation, className } = arg0\n\n const groups = navigationToGroups(navigation)\n\n return (\n <nav className={clsx('clarify-navigation', className)}>\n <ul role=\"list\" className=\"clarify-navigation-list\">\n <TopLevelNavItem href=\"/\">Home</TopLevelNavItem>\n {groups.map((group, groupIndex) => (\n <NavigationGroup key={group.title} group={group} className={groupIndex === 0 ? 'md:mt-0' : ''} />\n ))}\n </ul>\n </nav>\n )\n}\n","import { Dialog, DialogBackdrop, DialogPanel, TransitionChild } from '@headlessui/react'\nimport { motion } from 'framer-motion'\nimport { createContext, Suspense, useContext } from 'react'\nimport { create } from 'zustand'\n\nimport type { ClarifyConfig, NavigationNode, RouteItem } from '../types'\n\nimport { Header } from './Header'\nimport { Navigation } from './Navigation'\n\nfunction MenuIcon(props: React.ComponentPropsWithoutRef<'svg'>) {\n return (\n <svg viewBox=\"0 0 10 9\" fill=\"none\" strokeLinecap=\"round\" aria-hidden=\"true\" {...props}>\n <path d=\"M.5 1h9M.5 8h9M.5 4.5h9\" />\n </svg>\n )\n}\n\nfunction XIcon(props: React.ComponentPropsWithoutRef<'svg'>) {\n return (\n <svg viewBox=\"0 0 10 9\" fill=\"none\" strokeLinecap=\"round\" aria-hidden=\"true\" {...props}>\n <path d=\"m1.5 1 7 7M8.5 1l-7 7\" />\n </svg>\n )\n}\n\nconst IsInsideMobileNavigationContext = createContext(false)\n\nfunction MobileNavigationDialog(arg0: {\n config: ClarifyConfig\n isOpen: boolean\n navigation: NavigationNode[]\n routes: RouteItem[]\n currentLocale?: string\n currentRoute?: RouteItem\n close: () => void\n}) { const {\n config,\n isOpen,\n navigation,\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 fixed inset-0 top-14 bg-zinc-400/20 backdrop-blur-xs data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in dark:bg-black/40\"\n />\n\n <DialogPanel>\n <TransitionChild>\n <Header\n config={config}\n navigation={navigation}\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 overflow-y-auto bg-white px-4 pt-6 pb-4 shadow-lg ring-1 shadow-zinc-900/10 ring-zinc-900/7.5 duration-500 ease-in-out data-closed:-translate-x-full min-[416px]:max-w-sm sm:px-6 sm:pb-10 dark:bg-zinc-950 dark:ring-zinc-800\"\n >\n <Navigation navigation={navigation} />\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 function MobileNavigation(arg0: {\n config: ClarifyConfig\n navigation: NavigationNode[]\n routes: RouteItem[]\n currentLocale?: string\n currentRoute?: RouteItem\n}) { const {\n config,\n navigation,\n routes,\n currentLocale,\n currentRoute,\n} = arg0\n\n const isInsideMobileNavigation = useIsInsideMobileNavigation()\n const { isOpen, toggle, close } = useMobileNavigationStore()\n const ToggleIcon = isOpen ? XIcon : MenuIcon\n\n return (\n <IsInsideMobileNavigationContext.Provider value={true}>\n <button\n type=\"button\"\n className=\"clarify-mobile-navigation-button relative flex size-6 items-center justify-center rounded-md transition hover:bg-zinc-900/5 dark:hover:bg-white/5\"\n aria-label=\"Toggle navigation\"\n onClick={toggle}\n >\n <span className=\"absolute size-12 pointer-fine:hidden\" />\n <ToggleIcon className=\"w-2.5 stroke-zinc-900 dark:stroke-white\" />\n </button>\n {!isInsideMobileNavigation ? (\n <Suspense fallback={null}>\n <MobileNavigationDialog\n config={config}\n navigation={navigation}\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 { Dialog, DialogBackdrop, DialogPanel } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { Fragment, Suspense, forwardRef, useEffect, useId, useMemo, useRef, useState } from 'react'\nimport { useLocation, useNavigate } from 'react-router-dom'\n\nimport type { NavigationNode, RouteItem } from '../types'\n\ntype SearchItem = {\n title: string\n pageTitle: string\n sectionTitle?: string\n url: string\n keywords: string\n}\n\nfunction SearchIcon(props: React.ComponentPropsWithoutRef<'svg'>) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12.01 12a4.25 4.25 0 1 0-6.02-6 4.25 4.25 0 0 0 6.02 6Zm0 0 3.24 3.25\"\n />\n </svg>\n )\n}\n\nfunction NoResultsIcon(props: React.ComponentPropsWithoutRef<'svg'>) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\" {...props}>\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M12.01 12a4.237 4.237 0 0 0 1.24-3c0-.62-.132-1.207-.37-1.738M12.01 12A4.237 4.237 0 0 1 9 13.25c-.635 0-1.237-.14-1.777-.388M12.01 12l3.24 3.25m-3.715-9.661a4.25 4.25 0 0 0-5.975 5.908M4.5 15.5l11-11\"\n />\n </svg>\n )\n}\n\nfunction routeGroupTitles(navigation: NavigationNode[]) {\n const titles = new Map<string, string>()\n\n for (const node of navigation) {\n if (node.children?.length) {\n for (const child of node.children) {\n titles.set(child.path, node.title)\n }\n } else {\n titles.set(node.path, node.title)\n }\n }\n\n return titles\n}\n\nfunction buildSearchItems(routes: RouteItem[], navigation: NavigationNode[]): SearchItem[] {\n const groupTitles = routeGroupTitles(navigation)\n\n return routes.flatMap((route) => {\n const groupTitle = groupTitles.get(route.path)\n const pageItem: SearchItem = {\n title: route.title,\n pageTitle: route.title,\n sectionTitle: groupTitle,\n url: route.path,\n keywords: [groupTitle, route.title, route.path, route.kind].filter(Boolean).join(' ').toLowerCase(),\n }\n\n const sectionItems =\n route.sections?.map((section) => ({\n title: section.title,\n pageTitle: route.title,\n sectionTitle: groupTitle,\n url: `${route.path}#${section.id}`,\n keywords: [groupTitle, route.title, section.title, route.path, section.id].filter(Boolean).join(' ').toLowerCase(),\n })) ?? []\n\n return [pageItem, ...sectionItems]\n })\n}\n\nfunction escapeRegExp(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\nfunction HighlightQuery(arg0: { text: string; query: string }) { const { text, query } = arg0\n\n if (!query) return text\n\n const parts = text.split(new RegExp(`(${escapeRegExp(query)})`, 'ig'))\n\n return (\n <>\n {parts.map((part, index) =>\n part.toLowerCase() === query.toLowerCase() ? (\n <mark key={index} className=\"bg-transparent text-emerald-500 underline\">\n {part}\n </mark>\n ) : (\n <Fragment key={index}>{part}</Fragment>\n ),\n )}\n </>\n )\n}\n\nfunction SearchResult(arg0: { result: SearchItem; query: string; active: boolean; onSelect: () => void }) { const { result, query, active, onSelect } = arg0\n\n const id = useId()\n const hierarchy = [result.sectionTitle, result.pageTitle].filter((value): value is string => typeof value === 'string')\n\n return (\n <li\n id={id}\n className={clsx(\n 'clarify-search-result group block cursor-default px-4 py-3 aria-selected:bg-zinc-50 dark:aria-selected:bg-zinc-800/50',\n active && 'bg-zinc-50 dark:bg-zinc-800/50',\n )}\n aria-selected={active}\n onMouseDown={(event) => {\n event.preventDefault()\n onSelect()\n }}\n >\n <div className=\"text-sm font-medium text-zinc-900 group-aria-selected:text-emerald-500 dark:text-white\">\n <HighlightQuery text={result.title} query={query} />\n </div>\n {hierarchy.length > 0 ? (\n <div className=\"mt-1 truncate text-2xs whitespace-nowrap text-zinc-500\">\n {hierarchy.map((item, itemIndex, items) => (\n <Fragment key={`${item}-${itemIndex}`}>\n <HighlightQuery text={item} query={query} />\n <span className={itemIndex === items.length - 1 ? 'sr-only' : 'mx-2 text-zinc-300 dark:text-zinc-700'}>/</span>\n </Fragment>\n ))}\n </div>\n ) : null}\n </li>\n )\n}\n\nconst SearchInput = forwardRef<\n React.ElementRef<'input'>,\n {\n query: string\n setQuery: (query: string) => void\n onClose: () => void\n onSubmit: () => void\n activeDescendantId?: string\n }\n>(function SearchInput(arg0, inputRef) { const { query, setQuery, onClose, onSubmit, activeDescendantId } = arg0\n\n return (\n <div className=\"clarify-search-input group relative flex h-12\">\n <SearchIcon className=\"pointer-events-none absolute top-0 left-3 h-full w-5 stroke-zinc-500\" />\n <input\n ref={inputRef}\n data-autofocus\n role=\"combobox\"\n aria-expanded={query !== ''}\n aria-controls=\"clarify-search-results\"\n aria-activedescendant={activeDescendantId}\n value={query}\n onChange={(event) => setQuery(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n if (query) setQuery('')\n else onClose()\n }\n if (event.key === 'Enter') {\n event.preventDefault()\n onSubmit()\n }\n }}\n placeholder=\"Find something...\"\n className=\"flex-auto appearance-none bg-transparent pr-4 pl-10 text-zinc-900 outline-hidden placeholder:text-zinc-500 focus:w-full focus:flex-none sm:text-sm dark:text-white [&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden [&::-webkit-search-results-button]:hidden [&::-webkit-search-results-decoration]:hidden\"\n />\n </div>\n )\n})\n\nfunction SearchDialog(arg0: {\n open: boolean\n setOpen: (open: boolean) => void\n routes: RouteItem[]\n navigation: NavigationNode[]\n className?: string\n onNavigate?: () => void\n}) { const {\n open,\n setOpen,\n routes,\n navigation,\n className,\n onNavigate = () => {},\n} = arg0\n\n const navigate = useNavigate()\n const location = useLocation()\n const inputRef = useRef<React.ElementRef<typeof SearchInput>>(null)\n const [query, setQuery] = useState('')\n const [activeIndex, setActiveIndex] = useState(0)\n const searchItems = useMemo(() => buildSearchItems(routes, navigation), [navigation, routes])\n const results = useMemo(() => {\n const normalizedQuery = query.trim().toLowerCase()\n if (!normalizedQuery) return []\n return searchItems.filter((item) => item.keywords.includes(normalizedQuery)).slice(0, 8)\n }, [query, searchItems])\n\n useEffect(() => {\n setOpen(false)\n }, [location.pathname, location.search, location.hash, setOpen])\n\n useEffect(() => {\n if (open) return undefined\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key === 'k' && (event.metaKey || event.ctrlKey)) {\n event.preventDefault()\n setOpen(true)\n }\n }\n\n window.addEventListener('keydown', onKeyDown)\n return () => window.removeEventListener('keydown', onKeyDown)\n }, [open, setOpen])\n\n const updateQuery = (value: string) => {\n setQuery(value)\n setActiveIndex(0)\n }\n\n function closeDialog() {\n updateQuery('')\n setOpen(false)\n }\n\n function selectResult(result = results[activeIndex]) {\n if (!result) return\n navigate(result.url)\n onNavigate()\n closeDialog()\n }\n\n return (\n <Dialog open={open} onClose={closeDialog} className={clsx('clarify-search-dialog fixed inset-0 z-50', className)}>\n <DialogBackdrop\n transition\n className=\"clarify-search-backdrop fixed inset-0 bg-zinc-400/25 backdrop-blur-xs data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in dark:bg-black/40\"\n />\n\n <div className=\"fixed inset-0 overflow-y-auto px-4 py-4 sm:px-6 sm:py-20 md:py-32 lg:px-8 lg:py-[15vh]\">\n <DialogPanel\n transition\n className=\"clarify-search-panel mx-auto transform-gpu overflow-hidden rounded-lg bg-zinc-50 shadow-xl ring-1 ring-zinc-900/7.5 data-closed:scale-95 data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in sm:max-w-xl dark:bg-zinc-900 dark:ring-zinc-800\"\n onKeyDown={(event) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n setActiveIndex((index) => (results.length ? (index + 1) % results.length : 0))\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n setActiveIndex((index) => (results.length ? (index - 1 + results.length) % results.length : 0))\n }\n }}\n >\n <SearchInput\n ref={inputRef}\n query={query}\n setQuery={updateQuery}\n onClose={closeDialog}\n onSubmit={() => selectResult()}\n />\n <div className=\"border-t border-zinc-200 bg-white empty:hidden dark:border-zinc-100/5 dark:bg-white/2.5\">\n {query && results.length === 0 ? (\n <div className=\"p-6 text-center\">\n <NoResultsIcon className=\"mx-auto h-5 w-5 stroke-zinc-900 dark:stroke-zinc-600\" />\n <p className=\"mt-2 text-xs text-zinc-700 dark:text-zinc-400\">\n Nothing found for{' '}\n <strong className=\"font-semibold wrap-break-word text-zinc-900 dark:text-white\">&lsquo;{query}&rsquo;</strong>.\n </p>\n </div>\n ) : null}\n {results.length ? (\n <ul id=\"clarify-search-results\" className=\"clarify-search-results\" role=\"listbox\">\n {results.map((result, resultIndex) => (\n <SearchResult\n key={result.url}\n result={result}\n query={query}\n active={resultIndex === activeIndex}\n onSelect={() => selectResult(result)}\n />\n ))}\n </ul>\n ) : null}\n </div>\n </DialogPanel>\n </div>\n </Dialog>\n )\n}\n\nfunction 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\nfunction getModifierKey() {\n if (typeof navigator === 'undefined') return 'Ctrl '\n return /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform) ? '⌘' : 'Ctrl '\n}\n\nexport function Search(arg0: { routes: RouteItem[]; navigation: NavigationNode[] }) { const { routes, navigation } = arg0\n\n const modifierKey = getModifierKey()\n const { buttonProps, dialogProps } = useSearchProps()\n\n return (\n <div className=\"clarify-search hidden lg:block lg:max-w-md lg:flex-auto\">\n <button\n type=\"button\"\n className=\"clarify-search-button hidden h-8 w-full items-center gap-2 rounded-full bg-white pr-3 pl-2 text-sm text-zinc-500 ring-1 ring-zinc-900/10 transition hover:ring-zinc-900/20 lg:flex dark:bg-white/5 dark:text-zinc-400 dark:ring-white/10 dark:ring-inset dark:hover:ring-white/20\"\n {...buttonProps}\n >\n <SearchIcon className=\"h-5 w-5 stroke-current\" />\n Find something...\n <kbd className=\"ml-auto text-2xs text-zinc-400 dark:text-zinc-500\">\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} {...dialogProps} />\n </Suspense>\n </div>\n )\n}\n\nexport function MobileSearch(arg0: {\n routes: RouteItem[]\n navigation: NavigationNode[]\n onNavigate?: () => void\n}) { const {\n routes,\n navigation,\n onNavigate,\n} = arg0\n\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 relative flex size-6 items-center justify-center rounded-md transition hover:bg-zinc-900/5 lg:hidden dark:hover:bg-white/5\"\n aria-label=\"Find something...\"\n {...buttonProps}\n >\n <span className=\"absolute size-12 pointer-fine:hidden\" />\n <SearchIcon className=\"h-5 w-5 stroke-zinc-900 dark:stroke-white\" />\n </button>\n <Suspense fallback={null}>\n <SearchDialog className=\"lg:hidden\" routes={routes} navigation={navigation} onNavigate={onNavigate} {...dialogProps} />\n </Suspense>\n </div>\n )\n}\n","import { CloseButton, Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { motion, useScroll, useTransform } from 'framer-motion'\nimport { forwardRef } from 'react'\nimport { Link, useLocation } from 'react-router-dom'\n\nimport { ThemeToggle } from '../components'\nimport { SiteLogo } from '../components/SiteLogo'\nimport type { ClarifyConfig, ClarifyLocalizedText, ClarifyLocaleConfig, NavigationNode, RouteItem } from '../types'\n\nimport { MobileNavigation, useIsInsideMobileNavigation, useMobileNavigationStore } from './mobile'\nimport { MobileSearch, Search } from './Search'\n\nfunction resolveLocalizedText(text: ClarifyLocalizedText, locale?: string, fallbackLocale?: string): string {\n if (typeof text === 'string') return text\n return (locale ? text[locale] : undefined) ?? (fallbackLocale ? text[fallbackLocale] : undefined) ?? Object.values(text)[0] ?? ''\n}\n\nfunction isExternalHref(href: string): boolean {\n return /^[a-z][a-z0-9+.-]*:/i.test(href) || href.startsWith('//')\n}\n\nfunction localizeHref(href: string, config: ClarifyConfig, locale?: string): string {\n if (!locale || !config.i18n || isExternalHref(href) || href.startsWith('#')) return href\n if (locale === config.i18n.defaultLocale) return href\n const cleanHref = href === '/' ? '' : href.replace(/^\\/+/, '')\n return `/${locale}${cleanHref ? `/${cleanHref}` : ''}`\n}\n\nfunction localizedRoutePath(config: ClarifyConfig, 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\nfunction LanguageIcon(props: React.ComponentPropsWithoutRef<'svg'>) {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\" {...props}>\n <path d=\"M10 17.5a7.5 7.5 0 1 0 0-15 7.5 7.5 0 0 0 0 15Z\" />\n <path d=\"M2.5 10h15M10 2.5c2 2.05 3 4.55 3 7.5s-1 5.45-3 7.5c-2-2.05-3-4.55-3-7.5s1-5.45 3-7.5Z\" />\n </svg>\n )\n}\n\nfunction LanguageSwitcher(arg0: { config: ClarifyConfig; currentLocale?: string; currentRoute?: RouteItem }) { const { config, currentLocale, currentRoute } = arg0\n\n const location = useLocation()\n const i18n = config.i18n\n if (!i18n || i18n.locales.length < 2) return null\n\n const selectedLocale = currentLocale ?? i18n.defaultLocale\n const selectedLocaleConfig = i18n.locales.find(locale => locale.code === selectedLocale) ?? i18n.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 flex h-7 items-center gap-1.5 rounded-md px-1.5 text-sm/5 font-medium text-zinc-600 transition hover:bg-zinc-900/5 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-white/5 dark:hover:text-white\"\n aria-label=\"Switch language\"\n >\n <span className=\"absolute size-12 pointer-fine:hidden\" />\n <LanguageIcon className=\"h-5 w-5 stroke-current\" />\n <span className=\"hidden sm:inline\">{selectedLocaleConfig?.label ?? selectedLocale}</span>\n </MenuButton>\n <MenuItems\n transition\n className=\"clarify-language-switcher-menu absolute right-0 z-50 mt-2 w-44 rounded-xl bg-white p-1 text-sm shadow-lg ring-1 shadow-zinc-900/5 ring-zinc-900/10 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 {i18n.locales.flatMap((locale: ClarifyLocaleConfig) => {\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 className={clsx(\n 'clarify-language-switcher-item flex items-center justify-between rounded-lg px-3 py-2 no-underline transition',\n focus && 'bg-zinc-100 dark:bg-white/5',\n selected ? 'text-zinc-900 dark:text-white' : 'text-zinc-600 dark:text-zinc-400',\n )}\n aria-current={selected ? 'true' : undefined}\n lang={locale.code}\n dir={locale.dir}\n >\n <span>{locale.label}</span>\n <span className=\"text-xs text-zinc-400 dark:text-zinc-500\">{locale.code}</span>\n </Link>\n )}\n </MenuItem>,\n ]\n })}\n </MenuItems>\n </Menu>\n )\n}\n\nfunction TopLevelNavItem(arg0: { href: string; children: React.ReactNode }) { const { href, children } = arg0\n\n const external = isExternalHref(href)\n\n if (external) {\n return (\n <li>\n <a\n href={href}\n className=\"text-sm/5 text-zinc-600 transition hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white\"\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=\"text-sm/5 text-zinc-600 transition hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white\"\n >\n {children}\n </Link>\n </li>\n )\n}\n\nexport const Header = forwardRef<\n React.ComponentRef<'div'>,\n React.ComponentPropsWithoutRef<typeof motion.div> & {\n config: ClarifyConfig\n navigation: NavigationNode[]\n routes: RouteItem[]\n currentLocale?: string\n currentRoute?: RouteItem\n }\n>(function Header(arg0, ref) { const { config, navigation, routes, currentLocale, currentRoute, className, ...props } = arg0\n\n const { isOpen: mobileNavIsOpen } = useMobileNavigationStore()\n const isInsideMobileNavigation = useIsInsideMobileNavigation()\n\n const { scrollY } = useScroll()\n const bgOpacityLight = useTransform(scrollY, [0, 72], ['50%', '90%'])\n const bgOpacityDark = useTransform(scrollY, [0, 72], ['20%', '80%'])\n\n return (\n <motion.div\n {...props}\n ref={ref}\n className={clsx(\n className,\n 'clarify-header fixed inset-x-0 top-0 z-50 flex h-14 items-center justify-between gap-12 px-4 transition sm:px-6 lg:left-72 lg:z-30 lg:px-8 xl:left-80',\n !isInsideMobileNavigation && 'backdrop-blur-xs lg:left-72 xl:left-80 dark:backdrop-blur-sm',\n isInsideMobileNavigation\n ? 'bg-white dark:bg-zinc-950'\n : 'bg-white/(--bg-opacity-light) dark:bg-zinc-950/(--bg-opacity-dark)',\n )}\n style={\n {\n '--bg-opacity-light': bgOpacityLight,\n '--bg-opacity-dark': bgOpacityDark,\n } as React.CSSProperties\n }\n >\n <div\n className={clsx(\n 'absolute inset-x-0 top-full h-px transition',\n (isInsideMobileNavigation || !mobileNavIsOpen) && 'bg-zinc-900/7.5 dark:bg-white/7.5',\n )}\n />\n <div className=\"hidden lg:block\" />\n <div className=\"clarify-mobile-brand flex items-center gap-5 lg:hidden\">\n <MobileNavigation config={config} navigation={navigation} routes={routes} currentLocale={currentLocale} currentRoute={currentRoute} />\n {config.logo ? (\n <CloseButton as={Link} to={localizeHref('/', config, currentLocale)} aria-label=\"Home\" className=\"clarify-brand flex items-center gap-2 no-underline\">\n <SiteLogo logo={config.logo} className=\"h-6 w-6\" />\n <span className=\"sr-only\">{config.title}</span>\n </CloseButton>\n ) : null}\n </div>\n <div className=\"clarify-header-actions flex items-center gap-5\">\n <Search routes={routes} navigation={navigation} />\n {config.navbar?.links?.length ? (\n <nav className=\"clarify-top-nav hidden md:block\">\n <ul role=\"list\" className=\"flex items-center gap-8\">\n {config.navbar.links.map((link) => (\n <TopLevelNavItem key={link.href} href={localizeHref(link.href, config, currentLocale)}>\n {resolveLocalizedText(link.label, currentLocale, config.i18n?.defaultLocale)}\n </TopLevelNavItem>\n ))}\n </ul>\n </nav>\n ) : null}\n {config.navbar?.links?.length ? <div className=\"hidden md:block md:h-5 md:w-px md:bg-zinc-900/10 md:dark:bg-white/15\" /> : null}\n <MobileSearch routes={routes} navigation={navigation} />\n <LanguageSwitcher config={config} currentLocale={currentLocale} currentRoute={currentRoute} />\n <ThemeToggle />\n </div>\n </motion.div>\n )\n})\n","import { motion } from 'framer-motion'\nimport { useEffect } from 'react'\nimport { Link, Routes, Route, useLocation } from 'react-router-dom'\n\nimport { SectionProvider, type Section } from '../components/SectionProvider'\nimport { SiteLogo } from '../components/SiteLogo'\nimport { ContentActions, Header, Navigation } from '../shell'\nimport type { RouteItem, ClarifyConfig, NavigationNode, NavigationTree } from '../types'\n\nexport type AppShellProps = {\n config: ClarifyConfig\n routes: RouteItem[]\n navigation: NavigationTree\n}\n\nfunction routeForPath(routes: RouteItem[], pathname: string): RouteItem | undefined {\n return routes.find((route) => route.path === pathname || `/${route.path}` === pathname)\n}\n\nfunction sectionsForRoute(route?: RouteItem): Section[] {\n return (\n route?.sections?.map((section) => ({\n id: section.id,\n title: section.title,\n badge: section.badge,\n tags: section.tags,\n })) ?? []\n )\n}\n\nfunction scrollToHash(hash: string) {\n if (!hash) return\n\n const targetId = decodeURIComponent(hash.slice(1))\n window.requestAnimationFrame(() => {\n document.getElementById(targetId)?.scrollIntoView()\n })\n}\n\nfunction localeForPath(config: ClarifyConfig, pathname: string, route?: RouteItem): string | undefined {\n if (route?.locale) return route.locale\n const i18n = config.i18n\n if (!i18n) return undefined\n const firstSegment = pathname.split('/').filter(Boolean)[0]\n return i18n.locales.find((locale) => locale.code === firstSegment)?.code ?? i18n.defaultLocale\n}\n\nfunction navigationForLocale(navigation: NavigationTree, locale?: string): NavigationNode[] {\n if (Array.isArray(navigation)) return navigation\n if (!locale) return []\n return navigation[locale] ?? []\n}\n\nfunction homePathForLocale(config: ClarifyConfig, locale?: string): string {\n if (!locale || !config.i18n || locale === config.i18n.defaultLocale) return '/'\n return `/${locale}`\n}\n\nexport function AppShell(arg0: AppShellProps) {\n const { config, routes, navigation } = arg0\n const location = useLocation()\n const currentRoute = routeForPath(routes, location.pathname)\n const currentLocale = localeForPath(config, location.pathname, currentRoute)\n const currentLocaleConfig = config.i18n?.locales.find((locale) => locale.code === currentLocale)\n const currentNavigation = navigationForLocale(navigation, currentLocale)\n const sections = sectionsForRoute(currentRoute)\n\n useEffect(() => {\n scrollToHash(location.hash)\n }, [location.hash, location.pathname])\n\n useEffect(() => {\n if (!currentLocale) return\n document.documentElement.lang = currentLocale\n if (currentLocaleConfig?.dir) {\n document.documentElement.dir = currentLocaleConfig.dir\n } else {\n document.documentElement.removeAttribute('dir')\n }\n }, [currentLocale, currentLocaleConfig?.dir])\n\n return (\n <SectionProvider sections={sections}>\n <div className=\"clarify-app h-full min-h-screen bg-white lg:ml-72 xl:ml-80 dark:bg-zinc-950\">\n <motion.header layoutScroll className=\"clarify-shell contents lg:pointer-events-none lg:fixed lg:inset-0 lg:z-40 lg:flex\">\n <div className=\"clarify-sidebar contents lg:pointer-events-auto lg:block lg:w-72 lg:overflow-y-auto lg:border-r lg:border-zinc-900/10 lg:bg-white lg:px-6 lg:pt-4 lg:pb-8 xl:w-80 lg:dark:border-white/10 lg:dark:bg-zinc-950\">\n <div className=\"clarify-sidebar-brand hidden lg:flex\">\n <Link to={homePathForLocale(config, currentLocale)} aria-label=\"Home\" className=\"clarify-brand flex items-center gap-2 no-underline\">\n <SiteLogo logo={config.logo} className=\"h-6 w-6\" />\n <span className=\"clarify-brand-title text-sm font-semibold text-zinc-900 dark:text-white\">{config.title}</span>\n </Link>\n </div>\n <Header config={config} navigation={currentNavigation} routes={routes} currentLocale={currentLocale} currentRoute={currentRoute} />\n <Navigation navigation={currentNavigation} className=\"clarify-navigation hidden lg:mt-10 lg:block\" />\n </div>\n </motion.header>\n <div className=\"clarify-content relative flex min-h-screen flex-col px-4 pt-14 sm:px-6 lg:px-8\">\n <ContentActions route={currentRoute} routePrefix={config.routePrefix} />\n <main className=\"clarify-main flex-auto\">\n <Routes>\n {routes.map((route) => (\n <Route key={route.path} path={route.path} element={<route.component />} />\n ))}\n </Routes>\n </main>\n </div>\n </div>\n </SectionProvider>\n )\n}\n"],"mappings":"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"}