@clarify-labs/renderer 0.4.0 → 0.6.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 (98) hide show
  1. package/README.md +9 -0
  2. package/output/AppShell-D3FsVHQK.js +390 -0
  3. package/output/AppShell-D3FsVHQK.js.map +1 -0
  4. package/output/AppShell-DeaJ-rgo.cjs +409 -0
  5. package/output/AppShell-DeaJ-rgo.cjs.map +1 -0
  6. package/output/OpenApiOperation-DYXG-6Rw.js +1772 -0
  7. package/output/OpenApiOperation-DYXG-6Rw.js.map +1 -0
  8. package/output/OpenApiOperation-mhoi-s4N.cjs +1840 -0
  9. package/output/OpenApiOperation-mhoi-s4N.cjs.map +1 -0
  10. package/output/app/PageNavigation.d.ts +7 -0
  11. package/output/app/PageSkeleton.d.ts +1 -0
  12. package/output/{components → app}/SectionProvider.d.ts +3 -2
  13. package/output/chunk-DakpK96I.cjs +43 -0
  14. package/output/client.cjs +1 -1
  15. package/output/client.js +1 -1
  16. package/output/components/Button.d.ts +18 -0
  17. package/output/components/Code.d.ts +11 -7
  18. package/output/components/Collapse.d.ts +9 -0
  19. package/output/components/Heading.d.ts +10 -0
  20. package/output/components/Logo.d.ts +2 -0
  21. package/output/components/Prose.d.ts +7 -0
  22. package/output/components/Tag.d.ts +34 -0
  23. package/output/components/index.d.ts +9 -80
  24. package/output/components/patterns.d.ts +4 -2
  25. package/output/context.d.ts +1 -8
  26. package/output/core/context.d.ts +8 -0
  27. package/output/core/i18n.d.ts +5 -0
  28. package/output/core/index.d.ts +3 -0
  29. package/output/core/types.d.ts +174 -0
  30. package/output/i18n.d.ts +1 -5
  31. package/output/index.cjs +105 -1741
  32. package/output/index.cjs.map +1 -1
  33. package/output/index.d.ts +15 -4
  34. package/output/index.js +71 -1719
  35. package/output/index.js.map +1 -1
  36. package/output/markdown.cjs +3 -0
  37. package/output/markdown.d.ts +1 -0
  38. package/output/markdown.js +2 -0
  39. package/output/mdx/DocShell.d.ts +7 -0
  40. package/output/mdx/Markdown.d.ts +7 -0
  41. package/output/mdx/components.d.ts +7 -7
  42. package/output/mdx/primitives.d.ts +18 -12
  43. package/output/mdx/remark.d.ts +2 -0
  44. package/output/openapi/{example-panels.d.ts → components/ExamplePanels.d.ts} +14 -9
  45. package/output/openapi/components/OpenApiOperation.d.ts +33 -0
  46. package/output/openapi/components/SchemaProperties.d.ts +20 -0
  47. package/output/openapi/entry.d.ts +13 -0
  48. package/output/openapi/index.d.ts +3 -3
  49. package/output/openapi/{helpers.d.ts → lib/helpers.d.ts} +7 -6
  50. package/output/openapi/{request-code.d.ts → lib/request-code.d.ts} +7 -5
  51. package/output/openapi/types.d.ts +5 -1
  52. package/output/preview/openapi.d.ts +28 -0
  53. package/output/preview.cjs +734 -0
  54. package/output/preview.cjs.map +1 -0
  55. package/output/preview.d.ts +19 -0
  56. package/output/preview.js +731 -0
  57. package/output/preview.js.map +1 -0
  58. package/output/remark-DNOdJz5i.cjs +14 -0
  59. package/output/remark-DNOdJz5i.cjs.map +1 -0
  60. package/output/remark-o5sg9Ilv.js +7 -0
  61. package/output/remark-o5sg9Ilv.js.map +1 -0
  62. package/output/{render-BCiQn6Q1.js → render-BpavVnAe.js} +3 -2
  63. package/output/render-BpavVnAe.js.map +1 -0
  64. package/output/{render-CZsdzmme.cjs → render-CjZt3edL.cjs} +6 -5
  65. package/output/render-CjZt3edL.cjs.map +1 -0
  66. package/output/renderer.css +403 -63
  67. package/output/server.cjs +7 -5
  68. package/output/server.cjs.map +1 -1
  69. package/output/server.js +4 -2
  70. package/output/server.js.map +1 -1
  71. package/output/shell/Navigation.d.ts +3 -2
  72. package/output/shell/Search.d.ts +6 -4
  73. package/output/{components → shell}/SiteLogo.d.ts +1 -1
  74. package/output/shell/icons.d.ts +3 -2
  75. package/output/shell/mobile.d.ts +3 -2
  76. package/output/{AppShell-nQnuKyn2.js → shell-BlMMdTpZ.js} +1118 -1320
  77. package/output/shell-BlMMdTpZ.js.map +1 -0
  78. package/output/{AppShell-CZw1MrPG.cjs → shell-_MyLsMUI.cjs} +1192 -1394
  79. package/output/shell-_MyLsMUI.cjs.map +1 -0
  80. package/output/{components → theme}/ThemeProvider.d.ts +3 -2
  81. package/output/types.d.ts +1 -174
  82. package/output/utils/clipboard.d.ts +1 -0
  83. package/output/utils/hash.d.ts +1 -0
  84. package/output/utils/href.d.ts +5 -0
  85. package/output/utils/lucide.d.ts +17 -0
  86. package/package.json +15 -2
  87. package/output/AppShell-CZw1MrPG.cjs.map +0 -1
  88. package/output/AppShell-nQnuKyn2.js.map +0 -1
  89. package/output/components/PageNavigation.d.ts +0 -5
  90. package/output/openapi/openapi-page.d.ts +0 -19
  91. package/output/openapi/schema-properties.d.ts +0 -15
  92. package/output/render-BCiQn6Q1.js.map +0 -1
  93. package/output/render-CZsdzmme.cjs.map +0 -1
  94. /package/output/{components → app}/BuiltWithClarify.d.ts +0 -0
  95. /package/output/{components → app}/PageFooter.d.ts +0 -0
  96. /package/output/openapi/{spec-path.d.ts → lib/spec-path.d.ts} +0 -0
  97. /package/output/openapi/{utils.d.ts → lib/utils.d.ts} +0 -0
  98. /package/output/{components → theme}/ThemeToggle.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-BlMMdTpZ.js","names":[],"sources":["../source/core/context.tsx","../source/core/i18n.ts","../source/utils/clipboard.ts","../source/utils/href.ts","../source/shell/ContentActions.tsx","../source/theme/ThemeProvider.tsx","../source/theme/ThemeToggle.tsx","../source/utils/path.ts","../source/utils/lucide.ts","../source/shell/icons.tsx","../source/utils/remToPx.ts","../source/app/SectionProvider.tsx","../source/components/Button.tsx","../source/components/Callout.tsx","../source/components/Card.tsx","../source/components/Code.tsx","../source/components/Collapse.tsx","../source/components/Feedback.tsx","../source/components/Tag.tsx","../source/components/Heading.tsx","../source/components/Logo.tsx","../source/components/patterns.tsx","../source/components/Prose.tsx","../source/utils/hash.ts","../source/shell/Navigation.tsx","../source/shell/mobile.tsx","../source/shell/Search.tsx","../source/shell/SiteLogo.tsx","../source/shell/Header.tsx"],"sourcesContent":["import { createContext, useContext } from 'react'\n\nimport type { OpenAPISpec } from '../openapi/lib/utils'\n\nimport type { ClarifyConfig } from './types'\n\nexport const ClarifyConfigContext = createContext<ClarifyConfig | null>(null)\nexport const ClarifyLocaleContext = createContext<string | undefined>(undefined)\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 useClarifyLocale(): string | undefined {\n return useContext(ClarifyLocaleContext)\n}\n\nexport function useOpenApis(): Record<string, OpenAPISpec> {\n return useContext(OpenApisContext)\n}\n","import { useContext } from 'react'\n\nimport { ClarifyConfigContext, ClarifyLocaleContext } from './context'\n\nexport type BuiltInLocale = 'en' | 'zh-CN'\n\nexport type BuiltInTextKey =\n | 'actions.code'\n | 'actions.copy'\n | 'actions.copied'\n | 'builtWith.label'\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'\n | 'contentActions.copyLink'\n | 'contentActions.copyLinkDescription'\n | 'contentActions.copyLlms'\n | 'contentActions.copyLlmsDescription'\n | 'contentActions.copiedLlms'\n | 'contentActions.copyOptions'\n | 'contentActions.copiedContent'\n | 'contentActions.copiedLink'\n | 'contentActions.viewMarkdown'\n | 'contentActions.viewMarkdownDescription'\n | 'contentActions.viewOpenApi'\n | 'contentActions.viewOpenApiDescription'\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 | 'openapi.apiDocumentation'\n | 'openapi.bodyProperties'\n | 'openapi.collapse'\n | 'openapi.endpointNotFound'\n | 'openapi.example'\n | 'openapi.expand'\n | 'openapi.headers'\n | 'openapi.language'\n | 'openapi.client'\n | 'openapi.mediaType'\n | 'openapi.openApiReference'\n | 'openapi.operationParameter'\n | 'openapi.optional'\n | 'openapi.parameter'\n | 'openapi.pathParameters'\n | 'openapi.queryParameters'\n | 'openapi.request'\n | 'openapi.requestBody'\n | 'openapi.required'\n | 'openapi.requiredBadge'\n | 'openapi.response'\n | 'openapi.responses'\n | 'openapi.schemaExample'\n | 'openapi.scrollExamplesLeft'\n | 'openapi.scrollExamplesRight'\n | 'openapi.specNotFound'\n | 'openapi.specPathMissing'\n | 'openapi.status'\n | 'openapi.version'\n | 'search.button'\n | 'search.noResults'\n | 'search.placeholder'\n | 'search.shortcutCtrl'\n | 'theme.switchToDark'\n | 'theme.switchToLight'\n | 'language.switch'\n\nconst builtInText = {\n en: {\n 'actions.code': 'Code',\n 'actions.copy': 'Copy',\n 'actions.copied': 'Copied!',\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.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 'openapi.apiDocumentation': 'API Documentation',\n 'openapi.bodyProperties': 'Body properties',\n 'openapi.collapse': 'Collapse',\n 'openapi.endpointNotFound': 'Endpoint not found: {endpoint}',\n 'openapi.example': 'Example',\n 'openapi.expand': 'Expand',\n 'openapi.headers': 'Headers',\n 'openapi.language': 'Language',\n 'openapi.client': 'Client',\n 'openapi.mediaType': 'Media type',\n 'openapi.openApiReference': 'OpenAPI Reference',\n 'openapi.operationParameter': 'Operation parameter.',\n 'openapi.optional': 'Optional.',\n 'openapi.parameter': 'parameter',\n 'openapi.pathParameters': 'Path parameters',\n 'openapi.queryParameters': 'Query parameters',\n 'openapi.request': 'Request',\n 'openapi.requestBody': 'Request body',\n 'openapi.required': 'Required.',\n 'openapi.requiredBadge': 'required',\n 'openapi.response': 'Response',\n 'openapi.responses': 'Responses',\n 'openapi.schemaExample': 'Schema example',\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.version': 'Version {version}',\n 'search.button': 'Search...',\n 'search.noResults': 'Nothing found for {query}.',\n 'search.placeholder': 'Find something...',\n 'search.shortcutCtrl': 'Ctrl ',\n 'theme.switchToDark': 'Switch to dark theme',\n 'theme.switchToLight': 'Switch to light theme',\n 'language.switch': 'Switch language',\n },\n 'zh-CN': {\n 'actions.code': '代码',\n 'actions.copy': '复制',\n 'actions.copied': '已复制!',\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.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 'openapi.apiDocumentation': 'API 文档',\n 'openapi.bodyProperties': '请求体属性',\n 'openapi.collapse': '收起',\n 'openapi.endpointNotFound': '未找到端点:{endpoint}',\n 'openapi.example': '示例',\n 'openapi.expand': '展开',\n 'openapi.headers': '请求头',\n 'openapi.language': '语言',\n 'openapi.client': '客户端',\n 'openapi.mediaType': '媒体类型',\n 'openapi.openApiReference': 'OpenAPI 参考',\n 'openapi.operationParameter': '操作参数。',\n 'openapi.optional': '可选。',\n 'openapi.parameter': '参数',\n 'openapi.pathParameters': '路径参数',\n 'openapi.queryParameters': '查询参数',\n 'openapi.request': '请求',\n 'openapi.requestBody': '请求体',\n 'openapi.required': '必填。',\n 'openapi.requiredBadge': '必填',\n 'openapi.response': '响应',\n 'openapi.responses': '响应',\n 'openapi.schemaExample': 'Schema 示例',\n 'openapi.scrollExamplesLeft': '向左滚动示例',\n 'openapi.scrollExamplesRight': '向右滚动示例',\n 'openapi.specNotFound': '未找到 OpenAPI 描述文件:{specPath}',\n 'openapi.specPathMissing': '未提供 spec 或 specPath',\n 'openapi.status': '状态',\n 'openapi.version': '版本 {version}',\n 'search.button': '搜索...',\n 'search.noResults': '没有找到与 {query} 相关的结果。',\n 'search.placeholder': '搜索内容...',\n 'search.shortcutCtrl': 'Ctrl ',\n 'theme.switchToDark': '切换到深色主题',\n 'theme.switchToLight': '切换到浅色主题',\n 'language.switch': '切换语言',\n },\n} satisfies Record<BuiltInLocale, Record<BuiltInTextKey, string>>\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(ClarifyConfigContext)\n const currentLocale = useContext(ClarifyLocaleContext)\n const resolvedLocale = locale ?? currentLocale ?? config?.i18n?.defaultLocale\n return (key: BuiltInTextKey, replacements?: Record<string, string>) => translateBuiltInText(resolvedLocale, key, replacements)\n}\n","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 { ClarifyConfig } 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: ClarifyConfig): boolean {\n const firstSegment = href.replace(/^\\/+/, '').split('/')[0]\n return Boolean(firstSegment && config.i18n?.locales.some((locale) => locale.code === firstSegment))\n}\n\nexport function 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 || hasLocalePrefix(href, config)) return 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 } from 'lucide-react'\nimport { 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 hasTabs?: boolean\n route?: RouteItem\n routePrefix?: string\n}\n\ntype CopyState = 'idle' | 'content' | 'link' | 'llms'\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 { hasTabs = false, route, routePrefix } = arg0\n const t = useBuiltInText()\n const [copied, setCopied] = useState<CopyState>('idle')\n\n if (!route?.contentArtifactUrl) return null\n\n const contentArtifactUrl = resolveContentArtifactUrl(route.contentArtifactUrl, routePrefix)\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 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(contentArtifactUrl)\n const text = await response.text()\n if (await copyTextToClipboard(text)) markCopied('content')\n }\n\n const llmsArtifactUrl = resolveContentArtifactUrl('/llms.txt', routePrefix)\n\n async function handleCopyLink() {\n if (await copyTextToClipboard(getAbsoluteUrl(contentArtifactUrl))) markCopied('link')\n }\n\n async function handleCopyLlms() {\n if (await copyTextToClipboard(getAbsoluteUrl(llmsArtifactUrl))) markCopied('llms')\n }\n\n const actions: CopyAction[] = [\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 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 primaryAction = actions[0]\n const PrimaryIcon = copied === primaryAction.key ? Check : primaryAction.icon\n\n return (\n <div className={`clarify-content-actions sticky z-20 flex justify-end py-4 ${hasTabs ? 'top-16 lg:top-30' : 'top-16'}`}>\n <Menu as=\"div\" className=\"clarify-content-actions-menu relative inline-flex text-sm font-medium\">\n <div className=\"clarify-content-actions-group inline-flex overflow-hidden rounded-full border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface)/90 shadow-sm shadow-zinc-900/5 backdrop-blur dark:border-white/10 dark:bg-zinc-900/80 dark:shadow-none\">\n <button\n type=\"button\"\n onClick={primaryAction.run}\n className=\"clarify-content-actions-primary clarify-ui-control inline-flex h-8 items-center gap-1.5 px-3 transition\"\n >\n <PrimaryIcon className=\"h-3.5 w-3.5\" />\n {copied === primaryAction.key ? t('actions.copied') : primaryAction.label}\n </button>\n <MenuButton className=\"clarify-content-actions-trigger clarify-ui-control inline-flex h-8 w-8 items-center justify-center border-l border-(--clarify-theme-tokens-colors-border) transition dark:border-white/10\" aria-label={t('contentActions.copyOptions')}>\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 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 dark:border-white/10 dark:bg-zinc-900 dark:shadow-none\"\n >\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 dark:border-white/10\">\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 <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 dark:border-white/10\">\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 {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 dark:border-white/10\">\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 dark:border-white/10\">\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 </MenuItems>\n </Menu>\n </div>\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 try {\n const storedTheme = window.localStorage.getItem(storageKey)\n return storedTheme === 'light' || storedTheme === 'dark' || storedTheme === 'system' ? storedTheme : 'system'\n } catch {\n return 'system'\n }\n}\n\nfunction storeTheme(theme: Theme) {\n if (typeof window === 'undefined') return\n\n try {\n window.localStorage.setItem(storageKey, theme)\n } catch {\n // Ignore storage failures from private mode or restricted embeds.\n }\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(arg0: ThemeProviderProps) { 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 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 type { ComponentPropsWithoutRef } from 'react'\n\nimport { useBuiltInText } from '../core/i18n'\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 t = useBuiltInText()\n const otherTheme = resolvedTheme === 'dark' ? 'light' : 'dark'\n\n return (\n <button\n type=\"button\"\n className=\"clarify-theme-toggle relative flex size-8 items-center justify-center rounded-(--clarify-theme-tokens-radius-md) transition hover:bg-[color-mix(in_srgb,var(--clarify-theme-tokens-colors-foreground)_5%,transparent)] dark:hover:bg-white/5\"\n aria-label={otherTheme === 'dark' ? t('theme.switchToDark') : t('theme.switchToLight')}\n onClick={() => setTheme(otherTheme)}\n >\n <span className=\"absolute size-12 pointer-fine:hidden\" />\n <SunIcon className=\"h-5 w-5 stroke-(--clarify-theme-tokens-colors-foreground) dark:hidden\" />\n <MoonIcon className=\"hidden h-5 w-5 stroke-white dark:block\" />\n </button>\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\nexport function isSameRoutePath(a: string | undefined, b: string | undefined): boolean {\n if (!a || !b) return false\n return normalizeRoutePath(a) === normalizeRoutePath(b)\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 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 viewportTop = scrollY\n const viewportBottom = scrollY + innerHeight\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 > viewportTop) {\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\n if (bottom > viewportTop && top < viewportBottom) {\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\ntype SectionProviderProps = {\n sections: Section[]\n children: ReactNode\n}\n\nexport function SectionProvider(arg0: SectionProviderProps) { const {\n sections,\n children,\n} = arg0\n\n const [sectionStore] = useState(() => createSectionStore(sections))\n\n useVisibleSections(sectionStore)\n\n useIsomorphicLayoutEffect(() => {\n sectionStore.setState((state) => ({\n sections: 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 visibleSections: [],\n }))\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'\nimport type { ComponentPropsWithoutRef } from 'react'\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-(--clarify-theme-tokens-colors-foreground) px-3 py-1 text-white hover:opacity-80 dark:bg-(--clarify-theme-tokens-colors-primary)/10 dark:text-(--clarify-theme-tokens-colors-primary) dark:ring-1 dark:ring-inset dark:ring-(--clarify-theme-tokens-colors-primary)/20 dark:hover:opacity-80',\n secondary:\n 'rounded-full bg-(--clarify-theme-tokens-colors-code-background) px-3 py-1 text-(--clarify-theme-tokens-colors-foreground) hover:opacity-80 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-(--clarify-theme-tokens-colors-foreground) px-3 py-1 text-white hover:opacity-80 dark:bg-(--clarify-theme-tokens-colors-primary) dark:hover:opacity-80',\n outline:\n 'rounded-full px-3 py-1 text-(--clarify-theme-tokens-colors-muted) ring-1 ring-inset ring-(--clarify-theme-tokens-colors-border) hover:bg-[color-mix(in_srgb,var(--clarify-theme-tokens-colors-foreground)_2.5%,transparent)] hover:text-(--clarify-theme-tokens-colors-foreground) dark:text-zinc-400 dark:ring-white/10 dark:hover:bg-white/5 dark:hover:text-white',\n text: 'text-(--clarify-theme-tokens-colors-primary) hover:opacity-80 dark:text-(--clarify-theme-tokens-colors-primary) dark:hover:opacity-80',\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) {\n 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","import clsx from 'clsx'\nimport { AlertTriangle, CheckCircle2, Info, Lightbulb, XCircle } from 'lucide-react'\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react'\n\nimport { useBuiltInText } from '../core/i18n'\n\nexport type CalloutType = 'info' | 'note' | 'tip' | 'warning' | 'danger' | 'success'\n\ntype CalloutStyle = {\n container: string\n icon: string\n title: string\n Icon: typeof Info\n}\n\nconst calloutStyles: Record<CalloutType, CalloutStyle> = {\n info: {\n container: 'border-sky-500/20 bg-sky-50/50 text-sky-950 dark:border-sky-400/30 dark:bg-sky-400/5 dark:text-sky-100',\n icon: 'text-sky-600 dark:text-sky-400',\n title: 'text-sky-900 dark:text-sky-100',\n Icon: Info,\n },\n note: {\n container: 'border-zinc-500/20 bg-zinc-50 text-zinc-900 dark:border-white/10 dark:bg-white/5 dark:text-zinc-200',\n icon: 'text-zinc-500 dark:text-zinc-400',\n title: 'text-zinc-900 dark:text-white',\n Icon: Info,\n },\n tip: {\n container: 'border-emerald-500/20 bg-emerald-50/50 text-emerald-950 dark:border-emerald-400/30 dark:bg-emerald-400/5 dark:text-emerald-100',\n icon: 'text-emerald-600 dark:text-emerald-400',\n title: 'text-emerald-900 dark:text-emerald-100',\n Icon: Lightbulb,\n },\n warning: {\n container: 'border-amber-500/20 bg-amber-50/70 text-amber-950 dark:border-amber-400/30 dark:bg-amber-400/5 dark:text-amber-100',\n icon: 'text-amber-600 dark:text-amber-400',\n title: 'text-amber-900 dark:text-amber-100',\n Icon: AlertTriangle,\n },\n danger: {\n container: 'border-rose-500/20 bg-rose-50/70 text-rose-950 dark:border-rose-400/30 dark:bg-rose-400/5 dark:text-rose-100',\n icon: 'text-rose-600 dark:text-rose-400',\n title: 'text-rose-900 dark:text-rose-100',\n Icon: XCircle,\n },\n success: {\n container: 'border-emerald-500/20 bg-emerald-50/50 text-emerald-950 dark:border-emerald-400/30 dark:bg-emerald-400/5 dark:text-emerald-100',\n icon: 'text-emerald-600 dark:text-emerald-400',\n title: 'text-emerald-900 dark:text-emerald-100',\n Icon: CheckCircle2,\n },\n}\n\nconst defaultTitleKeys: Record<CalloutType, Parameters<ReturnType<typeof useBuiltInText>>[0]> = {\n info: 'callout.info',\n note: 'callout.note',\n tip: 'callout.tip',\n warning: 'callout.warning',\n danger: 'callout.danger',\n success: 'callout.success',\n}\n\nexport type CalloutProps = {\n children: ReactNode\n type?: CalloutType\n title?: ReactNode\n icon?: boolean\n className?: string\n} & Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'className' | 'title'>\n\nexport function Callout(arg0: CalloutProps) {\n const {\n children,\n type = 'info',\n title,\n icon = true,\n className,\n ...props\n } = arg0\n\n const t = useBuiltInText()\n const style = calloutStyles[type]\n const Icon = style.Icon\n const resolvedTitle = title === undefined ? t(defaultTitleKeys[type]) : title\n\n return (\n <div\n className={clsx(\n 'clarify-callout my-6 flex gap-3 rounded-(--clarify-theme-tokens-radius-xl) border p-4 text-sm/6',\n style.container,\n className,\n )}\n {...props}\n >\n {icon ? <Icon className={clsx('mt-1 size-4 flex-none', style.icon)} aria-hidden=\"true\" /> : null}\n <div className=\"min-w-0 flex-1 *:first:mt-0 *:last:mb-0\">\n {resolvedTitle ? <p className={clsx('mb-1 font-semibold', style.title)}>{resolvedTitle}</p> : null}\n <div className=\"*:first:mt-0 *:last:mb-0\">{children}</div>\n </div>\n </div>\n )\n}\n","import clsx from 'clsx'\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { lucideIconRegistry, resolveLucideIconName } from '../utils/lucide'\n\ntype CardIconProps = { name?: string }\n\nfunction CardIcon(arg0: CardIconProps) {\n const { name } = 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 (\n <span className=\"flex size-9 flex-none items-center justify-center rounded-(--clarify-theme-tokens-radius-lg) bg-(--clarify-ui-accent-background) text-(--clarify-ui-accent-text) ring-1 ring-(--clarify-ui-accent-border)\">\n <Icon className=\"size-5\" aria-hidden=\"true\" />\n </span>\n )\n}\n\nexport type CardGroupProps = {\n children: ReactNode\n cols?: 1 | 2 | 3 | 4\n className?: string\n}\n\nconst cardGroupColumnStyles: Record<NonNullable<CardGroupProps['cols']>, string> = {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 sm:grid-cols-2',\n 3: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n}\n\nexport function CardGroup(arg0: CardGroupProps) {\n const { children, cols = 2, className } = arg0\n\n return (\n <div className={clsx('not-prose my-10 grid gap-4', cardGroupColumnStyles[cols], className)}>\n {children}\n </div>\n )\n}\n\nexport type CardProps = {\n title: string\n icon?: string\n href?: string\n children?: ReactNode\n className?: string\n} & Omit<ComponentPropsWithoutRef<'a'>, 'children' | 'className' | 'href' | 'title'>\n\nexport function Card(arg0: CardProps) {\n const { title, icon, href, children, className, ...props } = arg0\n\n const content = (\n <>\n <div className=\"flex items-start gap-4\">\n <CardIcon name={icon} />\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"m-0 text-base font-semibold text-(--clarify-theme-tokens-colors-foreground) dark:text-white\">{title}</h3>\n {children ? (\n <div className=\"mt-2 text-sm/6 text-(--clarify-theme-tokens-colors-muted) dark:text-zinc-400 *:m-0\">\n {children}\n </div>\n ) : null}\n </div>\n </div>\n {href ? <span className=\"absolute inset-0 rounded-(--clarify-theme-tokens-radius-xl)\" aria-hidden=\"true\" /> : null}\n </>\n )\n\n const classes = clsx(\n 'group relative block rounded-(--clarify-theme-tokens-radius-xl) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-5 shadow-(--clarify-ui-accent-glow) transition hover:border-(--clarify-ui-accent-border) hover:shadow-md dark:bg-zinc-900/50',\n className,\n )\n\n if (!href) {\n return <div className={classes}>{content}</div>\n }\n\n if (href.startsWith('/') && !href.startsWith('//')) {\n return (\n <Link to={href} className={classes} {...props}>\n {content}\n </Link>\n )\n }\n\n return (\n <a href={href} className={classes} {...props}>\n {content}\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\nimport { useBuiltInText } from '../core/i18n'\nimport { copyTextToClipboard } from '../utils/clipboard'\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\ntype GetPanelTitleArgs = { title?: string; language?: string; fallbackTitle?: string }\n\nfunction getPanelTitle(arg0: GetPanelTitleArgs) { const { title, language, fallbackTitle = 'Code' } = arg0\n\n if (title) return title\n if (language && language in languageNames) return languageNames[language]\n return fallbackTitle\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\ntype CopyButtonProps = { code: string }\n\nfunction CopyButton(arg0: CopyButtonProps) { const { code } = arg0\n\n const t = useBuiltInText()\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-[color-mix(in_srgb,var(--clarify-theme-tokens-colors-primary)_12%,transparent)] ring-1 ring-[color-mix(in_srgb,var(--clarify-theme-tokens-colors-primary)_24%,transparent)] 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 copyTextToClipboard(code).then((ok) => {\n if (ok) 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 {t('actions.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-(--clarify-theme-tokens-colors-primary) transition duration-300',\n !copied && 'translate-y-1.5 opacity-0',\n )}\n >\n {t('actions.copied')}\n </span>\n </button>\n )\n}\n\ntype CodePanelHeaderProps = { tag?: string; label?: string }\n\nfunction CodePanelHeader(arg0: CodePanelHeaderProps) { 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=\"clarify-code-panel-tag font-semibold text-(--clarify-theme-tokens-colors-primary)\">{tag}</span> : null}\n {tag && label ? <span className=\"h-0.5 w-0.5 rounded-full bg-zinc-500\" /> : null}\n {label ? <span className=\"text-xs text-zinc-400\">{label}</span> : null}\n </div>\n )\n}\n\ntype CodePanelProps = {\n children: ReactNode\n tag?: string\n label?: string\n code?: string\n}\n\nfunction CodePanel(arg0: CodePanelProps) {\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\ntype CodeGroupHeaderProps = { title?: string; children: ReactNode; selectedIndex: number }\n\nfunction CodeGroupHeader(arg0: CodeGroupHeaderProps) { const { title, children, selectedIndex } = arg0\n\n const t = useBuiltInText()\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-(--clarify-theme-tokens-colors-primary) text-(--clarify-theme-tokens-colors-primary)'\n : 'border-transparent text-zinc-400 hover:text-zinc-300',\n )}\n >\n {getPanelTitle({ ...(isValidElement(child) ? (child.props as { title?: string; language?: string }) : {}), fallbackTitle: t('actions.code') })}\n </Tab>\n ))}\n </TabList>\n ) : null}\n </div>\n )\n}\n\ntype CodeGroupPanelsProps = ComponentPropsWithoutRef<typeof CodePanel>\n\nfunction CodeGroupPanels(arg0: CodeGroupPanelsProps) { 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\n // Only sync the selection from the globally preferred language when the\n // languages are unambiguous (each appears at most once). When languages\n // collide (e.g. two `bash` panels), index resolution by language name would\n // always return the first match and break tab switching, so we rely on the\n // local selection instead.\n const languagesAreUnique = new Set(availableLanguages).size === availableLanguages.length\n if (languagesAreUnique) {\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\n const { positionRef, preventLayoutShift } = usePreventLayoutShift()\n\n return {\n as: 'div' as const,\n ref: positionRef,\n selectedIndex,\n onChange: (nextSelectedIndex: number) => {\n setSelectedIndex(nextSelectedIndex)\n preventLayoutShift(() => addPreferredLanguage(availableLanguages[nextSelectedIndex]))\n },\n }\n}\n\nconst CodeGroupContext = createContext(false)\n\ntype CodeGroupProps = ComponentPropsWithoutRef<typeof CodeGroupPanels> & { title?: string }\n\nexport function CodeGroup(arg0: CodeGroupProps) { const {\n children,\n title,\n ...props\n} = arg0\n\n const t = useBuiltInText()\n const languages =\n Children.map(children, (child) =>\n getPanelTitle({ ...(isValidElement(child) ? (child.props as { title?: string; language?: string }) : {}), fallbackTitle: t('actions.code') }),\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\ntype CodeProps = ComponentPropsWithoutRef<'code'> & { code?: string; language?: string; title?: string }\n\nexport function Code(arg0: CodeProps) { 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 clsx from 'clsx'\nimport { ChevronDown } from 'lucide-react'\nimport { type ComponentPropsWithoutRef, type ReactNode, useId, useLayoutEffect, useRef, useState } from 'react'\n\nexport type CollapseProps = {\n children?: ReactNode\n title?: ReactNode\n summary?: ReactNode\n defaultOpen?: boolean\n className?: string\n} & Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'className'>\n\nexport function Collapse(arg0: CollapseProps) {\n const { children, title, summary, defaultOpen = false, className, ...props } = arg0\n const [open, setOpen] = useState(defaultOpen)\n const contentRef = useRef<HTMLDivElement | null>(null)\n const [maxHeight, setMaxHeight] = useState('0px')\n const summaryLabel = title ?? summary ?? 'Details'\n const contentId = useId()\n\n useLayoutEffect(() => {\n if (!contentRef.current) return\n setMaxHeight(open ? `${contentRef.current.scrollHeight}px` : '0px')\n }, [open, children])\n\n return (\n <div\n className={clsx(\n 'clarify-collapse my-6 overflow-hidden rounded-(--clarify-theme-tokens-radius-xl) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) shadow-sm dark:border-white/10 dark:bg-zinc-950',\n className,\n )}\n {...props}\n >\n <button\n type=\"button\"\n className=\"flex w-full cursor-pointer items-center justify-between gap-3 px-4 py-3 text-left text-sm font-semibold text-(--clarify-theme-tokens-colors-foreground) transition hover:bg-(--clarify-ui-hover-background) dark:text-white dark:hover:bg-white/5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-(--clarify-theme-tokens-colors-primary) focus-visible:ring-offset-2 focus-visible:ring-offset-(--clarify-theme-tokens-colors-background) dark:focus-visible:ring-offset-zinc-950\"\n aria-expanded={open}\n aria-controls={contentId}\n onClick={() => setOpen((value) => !value)}\n >\n <span>{summaryLabel}</span>\n <ChevronDown\n className={clsx(\n 'h-4 w-4 text-(--clarify-theme-tokens-colors-muted) transition-transform duration-200',\n open && 'rotate-180',\n )}\n aria-hidden=\"true\"\n />\n </button>\n <div\n id={contentId}\n className=\"overflow-hidden border-t border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-background) transition-[max-height,opacity,transform] duration-200 ease-out dark:border-white/10 dark:bg-zinc-950/95\"\n style={{ maxHeight, willChange: 'max-height, opacity, transform' }}\n >\n <div\n ref={contentRef}\n className={clsx(\n 'px-4 py-4 text-sm/6 text-(--clarify-theme-tokens-colors-foreground) transition-opacity duration-200 ease-out',\n open ? 'opacity-100 translate-y-0' : 'opacity-0 -translate-y-1',\n )}\n >\n {children}\n </div>\n </div>\n </div>\n )\n}\n","import { Transition } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { forwardRef, useState } from 'react'\nimport type { ComponentPropsWithoutRef, ElementRef, FormEvent } from 'react'\n\nimport { useBuiltInText } from '../core/i18n'\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 const t = useBuiltInText()\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\">{t('feedback.prompt')}</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\">{t('feedback.yes')}</FeedbackButton>\n <div className=\"bg-zinc-900/10 dark:bg-white/10\" />\n <FeedbackButton data-response=\"no\">{t('feedback.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 const t = useBuiltInText()\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-(--clarify-ui-accent-background) py-1 pr-3 pl-1.5 text-sm text-(--clarify-ui-accent-text) ring-1 ring-(--clarify-ui-accent-border) ring-inset\">\n <CheckIcon className=\"h-5 w-5 flex-none fill-(--clarify-ui-accent-text) stroke-white dark:fill-(--clarify-ui-accent-background) dark:stroke-(--clarify-ui-accent-text)\" />\n {t('feedback.thanks')}\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 clsx from 'clsx'\nimport type { ReactNode } from 'react'\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-(--clarify-theme-tokens-colors-muted) dark:text-zinc-500',\n medium: 'bg-(--clarify-theme-tokens-colors-code-background) text-(--clarify-theme-tokens-colors-muted) ring-(--clarify-theme-tokens-colors-border) 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) {\n 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-bold',\n tagVariantStyles[variant],\n tagColorStyles[resolvedColor][variant],\n )}\n >\n {children}\n </span>\n )\n}\n","import clsx from 'clsx'\nimport { useInView } from 'framer-motion'\nimport { useEffect, useRef } from 'react'\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react'\n\nimport { useSectionStore } from '../app/SectionProvider'\nimport { remToPx } from '../utils/remToPx'\n\nimport { Tag } from './Tag'\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\ntype EyebrowProps = { tag?: string; label?: string }\n\nfunction Eyebrow(arg0: EyebrowProps) {\n 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=\"text-xs text-zinc-400\">{label}</span> : null}\n </div>\n )\n}\n\ntype AnchorProps = { id: string; inView: boolean; children: ReactNode }\n\nfunction Anchor(arg0: AnchorProps) {\n 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\ntype HeadingProps<Level extends 2 | 3> = ComponentPropsWithoutRef<`h${Level}`> & {\n id: string\n tag?: string\n label?: string\n level?: Level\n anchor?: boolean\n}\n\nexport function Heading<Level extends 2 | 3>(arg0: HeadingProps<Level>) {\n const { children, className, tag, label, level, anchor = true, ...props } = 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', className)} {...props}>\n {anchor ? (\n <Anchor id={props.id} inView={inView}>\n {children}\n </Anchor>\n ) : (\n children\n )}\n </Component>\n </>\n )\n}\n","import clsx from 'clsx'\nimport type { ComponentPropsWithoutRef } from 'react'\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-(--clarify-theme-tokens-colors-primary)\"\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-(--clarify-theme-tokens-colors-foreground) 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","import { useId } from 'react'\nimport type { ComponentPropsWithoutRef } from 'react'\n\ntype GridPatternProps = ComponentPropsWithoutRef<'svg'> & {\n width: number\n height: number\n x: string | number\n y: string | number\n squares?: Array<[x: number, y: number]>\n}\n\nexport function GridPattern(arg0: GridPatternProps) { 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-gradient(to_right,var(--clarify-theme-tokens-colors-primary),var(--clarify-theme-tokens-colors-accent))] opacity-35 mask-[radial-gradient(farthest-side_at_top,white,transparent)] dark:opacity-55\">\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 clsx from 'clsx'\nimport type { ComponentPropsWithoutRef, ElementType } from 'react'\n\ntype ProseProps<T extends ElementType = 'div'> = Omit<ComponentPropsWithoutRef<T>, 'as' | 'className'> & {\n as?: T\n className?: string\n}\n\nexport function Prose<T extends ElementType = 'div'>(arg0: ProseProps<T>) {\n const { as, className, ...props } = arg0\n const Component = as ?? 'div'\n\n return (\n <Component\n className={clsx(\n className,\n 'clarify-prose prose max-w-none dark:prose-invert',\n '[html_:where(&>*)]:w-full [html_:where(&>*)]:min-w-0 [html_:where(&>*)]:max-w-full',\n )}\n {...props}\n />\n )\n}\n","export function safeDecodeURIComponent(value: string): string {\n try {\n return decodeURIComponent(value)\n } catch {\n return value\n }\n}\n","import { CloseButton } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { AnimatePresence, motion, useIsPresent } from 'framer-motion'\nimport { useState } from 'react'\nimport { Link, useLocation } from 'react-router-dom'\n\nimport { useSectionStore } from '../app/SectionProvider'\nimport { Tag } from '../components'\nimport { useBuiltInText } from '../i18n'\nimport type { NavigationNode } from '../types'\nimport { safeDecodeURIComponent } from '../utils/hash'\nimport { isSameRoutePath, normalizeRoutePath } from '../utils/path'\nimport { remToPx } from '../utils/remToPx'\n\nimport { NavigationIcon } from './icons'\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\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[], defaultTitle: string): 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 : defaultTitle,\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\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\ntype SectionBadgeProps = { children: string }\n\nfunction SectionBadge(arg0: SectionBadgeProps) { 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 NavLinkProps = {\n href: string\n children: React.ReactNode\n badge?: string\n icon?: string\n tags?: string[]\n active?: boolean\n isAnchorLink?: boolean\n}\n\nfunction NavLink(arg0: NavLinkProps) { 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 = safeDecodeURIComponent(href.slice(hashIndex + 1))\n window.requestAnimationFrame(() => {\n document.getElementById(targetId)?.scrollIntoView()\n window.requestAnimationFrame(() => {\n window.dispatchEvent(new Event('scroll'))\n })\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 h-8 items-center justify-between gap-2 pr-3 transition',\n isAnchorLink ? 'clarify-navigation-anchor-link pl-7' : 'pl-4',\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 whitespace-nowrap\">{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\ntype VisibleSectionHighlightProps = { group: NavGroup; pathname: string }\n\nfunction VisibleSectionHighlight(arg0: VisibleSectionHighlightProps) { 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) => isSameRoutePath(link.href, pathname)) * itemHeight + firstVisibleSectionIndex * itemHeight\n\n return (\n <motion.div\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, top, height, transition: { duration: 0.2, ease: 'easeOut' } }}\n exit={{ opacity: 0, height: 0, transition: { duration: 0.15, ease: 'easeIn' } }}\n className=\"clarify-navigation-section-highlight absolute inset-x-0 top-0 will-change-transform\"\n style={{ borderRadius: 'var(--clarify-theme-tokens-radius-sm)', height, top }}\n />\n )\n}\n\ntype ActivePageMarkerProps = { group: NavGroup; pathname: string }\n\nfunction ActivePageMarker(arg0: ActivePageMarkerProps) { const { group, pathname } = arg0\n\n const itemHeight = remToPx(2)\n const offset = remToPx(0.25)\n const activePageIndex = group.links.findIndex((link) => isSameRoutePath(link.href, pathname))\n const top = offset + activePageIndex * itemHeight\n\n return (\n <motion.div\n className=\"absolute left-2 h-6 w-px bg-(--clarify-theme-tokens-colors-primary)\"\n initial={{ opacity: 0, top }}\n animate={{ opacity: 1, top, transition: { duration: 0.2, ease: 'easeOut' } }}\n exit={{ opacity: 0, transition: { duration: 0.15, ease: 'easeIn' } }}\n style={{ top }}\n />\n )\n}\n\ntype NavigationGroupProps = { group: NavGroup; className?: string }\n\nfunction NavigationGroup(arg0: NavigationGroupProps) { const { group, className } = arg0\n\n const isInsideMobileNavigation = useIsInsideMobileNavigation()\n const [pathname, sections] = useInitialValue(\n [normalizeRoutePath(useLocation().pathname), useSectionStore((s) => s.sections)],\n isInsideMobileNavigation,\n )\n const isActiveGroup = group.links.findIndex((link) => isSameRoutePath(link.href, pathname)) !== -1\n\n return (\n <li className={clsx('clarify-navigation-group relative mt-6', className)}>\n <h2 className=\"clarify-navigation-group-title flex items-center gap-2\">\n <NavigationIcon name={group.icon} className=\"clarify-navigation-group-title-icon h-3.5 w-3.5\" />\n <span>{group.title}</span>\n </h2>\n <div className=\"relative mt-3 pl-2\">\n <AnimatePresence initial={!isInsideMobileNavigation}>\n {isActiveGroup ? <VisibleSectionHighlight group={group} pathname={pathname} /> : null}\n </AnimatePresence>\n <div className=\"absolute inset-y-0 left-2 w-px bg-(--clarify-theme-tokens-colors-border) 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 const active = isSameRoutePath(link.href, pathname)\n return (\n <li key={link.href} className=\"relative\">\n <NavLink href={link.href} icon={link.icon} active={active}>\n {link.title}\n </NavLink>\n <AnimatePresence initial={false}>\n {active && 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 </li>\n )\n })}\n </ul>\n </div>\n </li>\n )\n}\n\nexport type NavigationProps = { navigation: NavigationNode[]; className?: string }\n\nexport function Navigation(arg0: NavigationProps) { const { navigation, className } = arg0\n\n const t = useBuiltInText()\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 key={group.title} group={group} className={groupIndex === 0 ? 'mt-0' : ''} />\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 { createContext, Suspense, useContext } from 'react'\nimport { Link, useLocation } from 'react-router-dom'\nimport { create } from 'zustand'\n\nimport { useBuiltInText } from '../i18n'\nimport type { ClarifyConfig, 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\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 hasPath(nodes: NavigationNode[], pathname: string): boolean {\n return nodes.some((node) => isSameRoutePath(node.path, pathname) || hasPath(node.children ?? [], pathname))\n}\n\nfunction isActiveTab(tab: NavigationTab, pathname: string): boolean {\n return isSameRoutePath(tab.path, pathname) || hasPath(tab.children, pathname)\n}\n\ntype MobileTabsSelectProps = { tabs?: NavigationTab[] }\n\nfunction MobileTabsSelect(arg0: MobileTabsSelectProps) {\n const { tabs } = arg0\n const pathname = normalizeRoutePath(useLocation().pathname)\n const { close } = useMobileNavigationStore()\n if (!tabs?.length) return null\n\n const activeTab = tabs.find((tab) => isActiveTab(tab, pathname)) ?? 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 <svg width=\"8\" height=\"24\" viewBox=\"0 -9 3 24\" aria-hidden=\"true\" className=\"shrink-0 overflow-visible text-(--clarify-theme-tokens-colors-muted) transition-transform group-aria-expanded:rotate-180\">\n <path d=\"M0 0L3 3L0 6\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\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)\n\n return (\n <MenuItem key={`${tab.title}-${tab.path}`}>\n <Link\n to={tab.path}\n onClick={close}\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 ? (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\" className=\"mt-0.5 h-4 w-4 shrink-0\">\n <path d=\"m5 10 3 3 7-7\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n ) : null}\n </Link>\n </MenuItem>\n )\n })}\n </MenuItems>\n </Menu>\n )\n}\n\ntype MobileNavigationDialogProps = {\n config: ClarifyConfig\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 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 min-[416px]:max-w-sm sm:px-6 sm:pb-10 dark:bg-zinc-950 dark:ring-zinc-800\"\n >\n <MobileTabsSelect tabs={tabs} />\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 type MobileNavigationProps = {\n config: ClarifyConfig\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 ? XIcon : MenuIcon\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-6 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-12 pointer-fine:hidden\" />\n <ToggleIcon className=\"w-2.5 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 { 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 { useBuiltInText } from '../i18n'\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\ntype HighlightQueryProps = { text: string; query: string }\n\nfunction HighlightQuery(arg0: HighlightQueryProps) { 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-(--clarify-theme-tokens-colors-primary) underline\">\n {part}\n </mark>\n ) : (\n <Fragment key={index}>{part}</Fragment>\n ),\n )}\n </>\n )\n}\n\ntype SearchResultProps = { result: SearchItem; query: string; active: boolean; onSelect: () => void }\n\nfunction SearchResult(arg0: SearchResultProps) { 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',\n active && 'clarify-search-result-active',\n )}\n aria-selected={active}\n onMouseDown={(event) => {\n event.preventDefault()\n onSelect()\n }}\n >\n <div className=\"clarify-search-result-title\">\n <HighlightQuery text={result.title} query={query} />\n </div>\n {hierarchy.length > 0 ? (\n <div className=\"clarify-search-result-hierarchy mt-1 truncate whitespace-nowrap\">\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' : 'clarify-search-result-separator mx-2'}>/</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 const t = useBuiltInText()\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-(--clarify-theme-tokens-colors-muted)\" />\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={t('search.placeholder')}\n className=\"clarify-search-field flex-auto appearance-none bg-transparent pr-4 pl-10 outline-hidden focus:w-full focus:flex-none [&::-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\ntype SearchDialogProps = {\n open: boolean\n setOpen: (open: boolean) => void\n routes: RouteItem[]\n navigation: NavigationNode[]\n className?: string\n onNavigate?: () => void\n}\n\nfunction SearchDialog(arg0: SearchDialogProps) { const {\n open,\n setOpen,\n routes,\n navigation,\n className,\n onNavigate = () => {},\n} = arg0\n\n const t = useBuiltInText()\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 clarify-ui-backdrop fixed inset-0 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 <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-(--clarify-theme-tokens-radius-lg) bg-(--clarify-theme-tokens-colors-surface) shadow-xl ring-1 ring-(--clarify-theme-tokens-colors-border) 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-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-background) 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-(--clarify-theme-tokens-colors-foreground) dark:stroke-zinc-600\" />\n <p className=\"mt-2 text-xs text-(--clarify-theme-tokens-colors-muted) dark:text-zinc-400\">\n {t('search.noResults', { query })}\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 type SearchProps = { routes: RouteItem[]; navigation: NavigationNode[] }\n\nexport function Search(arg0: SearchProps) { const { routes, navigation } = 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-[36vw] 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} {...dialogProps} />\n </Suspense>\n </div>\n )\n}\n\nexport type MobileSearchProps = {\n routes: RouteItem[]\n navigation: NavigationNode[]\n onNavigate?: () => void\n}\n\nexport function MobileSearch(arg0: MobileSearchProps) { const {\n routes,\n navigation,\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-6 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-12 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} onNavigate={onNavigate} {...dialogProps} />\n </Suspense>\n </div>\n )\n}\n","import clsx from 'clsx'\n\nimport type { ClarifyLogoConfig } from '../core/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 { CloseButton, Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { motion, useScroll, useTransform } from 'framer-motion'\nimport { MoreHorizontal } from 'lucide-react'\nimport { forwardRef } from 'react'\nimport { Link, useLocation } from 'react-router-dom'\n\nimport { useBuiltInText } from '../i18n'\nimport { ThemeToggle } from '../theme/ThemeToggle'\nimport type { ClarifyConfig, ClarifyLocalizedText, ClarifyLocaleConfig, ClarifyNavbarLink, NavigationNode, NavigationTab, RouteItem } from '../types'\nimport { isExternalHref, localizeHref } from '../utils/href'\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 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 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\ntype LanguageSwitcherProps = { config: ClarifyConfig; 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 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 clarify-ui-control flex h-7 items-center gap-1.5 rounded-(--clarify-theme-tokens-radius-md) px-1.5 transition\"\n aria-label={t('language.switch')}\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 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 {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 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; children: React.ReactNode }\n\nfunction TopLevelNavItem(arg0: TopLevelNavItemProps) { 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=\"clarify-ui-top-link transition\"\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=\"clarify-ui-top-link transition\"\n >\n {children}\n </Link>\n </li>\n )\n}\n\ntype MobileNavbarMenuProps = { links?: ClarifyNavbarLink[]; config: ClarifyConfig; currentLocale?: string }\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-8 items-center justify-center rounded-(--clarify-theme-tokens-radius-md) transition\"\n aria-label={t('navbar.openLinks')}\n >\n <span className=\"absolute size-12 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.i18n?.defaultLocale)\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): boolean {\n return nodes.some((node) => isSameRoutePath(node.path, pathname) || hasPath(node.children ?? [], pathname))\n}\n\nfunction isActiveTab(tab: NavigationTab, pathname: string): boolean {\n return isSameRoutePath(tab.path, pathname) || hasPath(tab.children, pathname)\n}\n\ntype ProductTabsProps = { tabs?: NavigationTab[] }\n\nfunction ProductTabs(arg0: ProductTabsProps) { const { tabs } = arg0\n\n const t = useBuiltInText()\n const pathname = normalizeRoutePath(useLocation().pathname)\n if (!tabs?.length) return null\n\n return (\n <div className=\"clarify-product-tabs hidden h-14 border-t border-(--clarify-theme-tokens-colors-border) lg:block dark:border-white/10\">\n <nav className=\"clarify-product-tabs-nav mx-auto flex h-full w-full max-w-(--clarify-theme-layout-max-width) items-stretch gap-6 overflow-x-auto px-5\" aria-label={t('navbar.sections')}>\n {tabs.map((tab) => {\n const active = isActiveTab(tab, pathname)\n return (\n <Link\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-0 transition',\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=\"clarify-product-tab-indicator\"\n className=\"absolute inset-x-0 bottom-0 h-0.5 rounded-full bg-(--clarify-theme-tokens-colors-foreground) dark:bg-white\"\n transition={{ type: 'tween', duration: 0.16, ease: 'easeOut' }}\n />\n ) : null}\n </Link>\n )\n })}\n </nav>\n </div>\n )\n}\n\nexport const Header = forwardRef<\n React.ComponentRef<'header'>,\n React.ComponentPropsWithoutRef<typeof motion.header> & {\n config: ClarifyConfig\n navigation: NavigationNode[]\n tabs?: NavigationTab[]\n routes: RouteItem[]\n currentLocale?: string\n currentRoute?: RouteItem\n }\n>(function Header(arg0, ref) { const { config, navigation, tabs, routes, currentLocale, currentRoute, className, ...props } = arg0\n\n const t = useBuiltInText()\n const { isOpen: mobileNavIsOpen } = useMobileNavigationStore()\n const isInsideMobileNavigation = useIsInsideMobileNavigation()\n\n const { scrollY } = useScroll()\n const bgOpacityLight = useTransform(scrollY, [0, 72], ['70%', '95%'])\n const bgOpacityDark = useTransform(scrollY, [0, 72], ['60%', '92%'])\n\n return (\n <motion.header\n {...props}\n ref={ref}\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 <div\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 <CloseButton as={Link} to={localizeHref('/', config, currentLocale)} 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-6 shrink-0\" />\n <span className=\"clarify-brand-title truncate font-semibold\">{config.title}</span>\n </CloseButton>\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} />\n </div>\n <div className=\"clarify-header-actions flex shrink-0 items-center gap-5\">\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-(--clarify-theme-tokens-colors-border) md:dark:bg-white/15\" /> : null}\n <MobileSearch routes={routes} navigation={navigation} />\n <LanguageSwitcher config={config} currentLocale={currentLocale} currentRoute={currentRoute} />\n <ThemeToggle />\n <MobileNavbarMenu links={config.navbar?.links} config={config} currentLocale={currentLocale} />\n </div>\n </div>\n <ProductTabs tabs={tabs} />\n </motion.header>\n )\n})\n"],"mappings":"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"}