@clarify-labs/renderer 0.7.2 → 0.8.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 (59) hide show
  1. package/output/{ThemeRoot-QULrwQf6.js → ClarifyShell-BxB_6Uhd.js} +292 -142
  2. package/output/ClarifyShell-BxB_6Uhd.js.map +1 -0
  3. package/output/{ThemeRoot-UWj0iK1X.cjs → ClarifyShell-DNN5erFD.cjs} +320 -146
  4. package/output/ClarifyShell-DNN5erFD.cjs.map +1 -0
  5. package/output/{OpenApiOperation-BcyW_ULy.cjs → OpenApiOperation-9SvCA_B4.cjs} +209 -7
  6. package/output/OpenApiOperation-9SvCA_B4.cjs.map +1 -0
  7. package/output/{OpenApiOperation-tUKf7lZ4.js → OpenApiOperation-J41rHO2l.js} +205 -9
  8. package/output/OpenApiOperation-J41rHO2l.js.map +1 -0
  9. package/output/{PageActions-yoDRjkq8.js → PageActions-DR0asnKH.js} +30 -69
  10. package/output/PageActions-DR0asnKH.js.map +1 -0
  11. package/output/{PageActions-1RDCHcUY.cjs → PageActions-yycPlNyL.cjs} +35 -68
  12. package/output/PageActions-yycPlNyL.cjs.map +1 -0
  13. package/output/app/AppShell.d.ts +2 -3
  14. package/output/app/PageBanner.d.ts +0 -2
  15. package/output/app/PageFooter.d.ts +1 -5
  16. package/output/client.cjs +8 -8
  17. package/output/client.js +3 -3
  18. package/output/components/Code.d.ts +5 -1
  19. package/output/components/Mermaid.d.ts +7 -0
  20. package/output/components/index.d.ts +1 -0
  21. package/output/context.d.ts +1 -1
  22. package/output/core/i18n.d.ts +1 -1
  23. package/output/core/types.d.ts +7 -14
  24. package/output/index.cjs +27 -24
  25. package/output/index.cjs.map +1 -1
  26. package/output/index.d.ts +7 -4
  27. package/output/index.js +14 -14
  28. package/output/index.js.map +1 -1
  29. package/output/mdx/components.d.ts +3 -0
  30. package/output/mdx/primitives.d.ts +1 -0
  31. package/output/preview.cjs +2 -2
  32. package/output/preview.cjs.map +1 -1
  33. package/output/preview.js +2 -2
  34. package/output/preview.js.map +1 -1
  35. package/output/{render-ByWbJbrA.cjs → render-CWvm77UW.cjs} +10 -20
  36. package/output/render-CWvm77UW.cjs.map +1 -0
  37. package/output/{render-psutGbsg.js → render-mGozubG5.js} +10 -20
  38. package/output/render-mGozubG5.js.map +1 -0
  39. package/output/renderer.css +77 -16
  40. package/output/runtime/ClarifyShell.d.ts +22 -0
  41. package/output/server.cjs +10 -19
  42. package/output/server.cjs.map +1 -1
  43. package/output/server.js +10 -19
  44. package/output/server.js.map +1 -1
  45. package/output/shell/search/pagefind.d.ts +0 -1
  46. package/output/slots/RuntimeSlot.d.ts +58 -0
  47. package/output/slots/context.d.ts +20 -0
  48. package/output/slots/index.d.ts +5 -0
  49. package/output/slots/types.d.ts +50 -0
  50. package/output/utils/localized-text.d.ts +7 -0
  51. package/package.json +8 -3
  52. package/output/OpenApiOperation-BcyW_ULy.cjs.map +0 -1
  53. package/output/OpenApiOperation-tUKf7lZ4.js.map +0 -1
  54. package/output/PageActions-1RDCHcUY.cjs.map +0 -1
  55. package/output/PageActions-yoDRjkq8.js.map +0 -1
  56. package/output/ThemeRoot-QULrwQf6.js.map +0 -1
  57. package/output/ThemeRoot-UWj0iK1X.cjs.map +0 -1
  58. package/output/render-ByWbJbrA.cjs.map +0 -1
  59. package/output/render-psutGbsg.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClarifyShell-DNN5erFD.cjs","names":[],"sources":["../source/slots/context.tsx","../source/slots/RuntimeSlot.tsx","../source/assets/clarify.svg?url","../source/app/BuiltWithClarify.tsx","../source/app/ErrorBoundary.tsx","../source/app/PageBanner.tsx","../source/app/PageFooter.tsx","../source/app/PageNavigation.tsx","../source/app/PageSkeleton.tsx","../source/app/AppShell.tsx","../source/theme/randomTheme.ts","../source/theme/variables.ts","../source/theme/ThemeEditor.tsx","../source/theme/ThemeRoot.tsx","../source/runtime/ClarifyShell.tsx"],"sourcesContent":["import { createContext, useContext, type ReactNode } from 'react'\n\nimport type { UISlotName, SlotContext } from './types'\n\n// Re-export slot types so internal modules can import from './context'.\nexport type { UISlotName, SlotContext }\n\nconst SlotContextValue = createContext<SlotContext | null>(null)\n\ntype SlotProviderProps = {\n value: SlotContext\n children: ReactNode\n}\n\n/**\n * Provides an isolated {@link SlotContext} for a single slot component.\n * `RuntimeSlot` wraps every rendered slot component with this provider.\n */\nexport function SlotProvider(arg0: SlotProviderProps): ReactNode {\n const { value, children } = arg0\n return <SlotContextValue.Provider value={value}>{children}</SlotContextValue.Provider>\n}\n\n/**\n * Reads the current slot context.\n *\n * Must be called inside a slot component (or a descendant). Calling it outside a\n * slot provider throws, which helps plugin authors notice that the component was\n * not mounted through a Clarify slot.\n */\nexport function useSlot(): SlotContext {\n const context = useContext(SlotContextValue)\n if (!context) {\n throw new Error('[clarify] useSlot must be called inside a slot component')\n }\n return context\n}\n","import { createContext, useContext, useEffect, useState, type ComponentType, type ReactNode } from 'react'\n\nimport { useLocale } from '../core/context'\nimport type { RouteItem } from '../core/types'\n\nimport { SlotProvider } from './context'\nimport type { UISlotName } from './types'\n\n/**\n * One registered slot component, as compiled by the CLI into\n * `virtual:clarify/slots`.\n *\n * `component` is a lazy import factory `() => import('path')`. On the client\n * it is passed to `React.lazy`. During SSR the factory is pre-resolved and\n * the resulting component is stored in `_resolved`, which the renderer uses\n * directly (no Suspense needed for `renderToString`).\n */\nexport type RuntimeSlotEntry = {\n /** Plugin that registered this component, used as a stable render key. */\n plugin: string\n /** Lazy import factory — `() => import('path')`. Set by CLI virtual module. */\n component: () => Promise<{ default: ComponentType }>\n /** @internal Pre-resolved component set by SSR before {@link renderToHTML}. */\n _resolved?: ComponentType\n}\n\n/** Registry keyed by slot name. */\nexport type RuntimeSlots = Partial<Record<UISlotName, RuntimeSlotEntry[]>>\n\ntype RuntimeSlotsContextValue = {\n slots: RuntimeSlots\n route?: RouteItem\n}\n\nexport const RuntimeSlotsContext = createContext<RuntimeSlotsContextValue>({ slots: {} })\n\ntype RuntimeSlotsProviderProps = {\n slots?: RuntimeSlots\n route?: RouteItem\n children: ReactNode\n}\n\n/**\n * Makes the compiled slot registry and the current route available to every\n * {@link RuntimeSlot} in the tree. Mounted once near the top of `AppShell`.\n */\nexport function RuntimeSlotsProvider(arg0: RuntimeSlotsProviderProps): ReactNode {\n const { slots, route, children } = arg0\n return (\n <RuntimeSlotsContext.Provider value={{ slots: slots ?? {}, route }}>\n {children}\n </RuntimeSlotsContext.Provider>\n )\n}\n\ntype RuntimeSlotProps = {\n name: UISlotName\n /** Built-in default component for replacement slots. */\n default?: ComponentType\n}\n\n/**\n * Renders plugin components registered for a slot, in registration order.\n *\n * For extension slots (*.before/*.after), renders all plugin components.\n * For replacement slots (*.replace), renders only the last registered plugin\n * component (if any), and passes the default component through context.\n *\n * Each component is loaded via the import factory. If `_resolved` is set\n * (SSR pre-resolution), the component is rendered synchronously for\n * compatibility with `renderToString`. Otherwise, `React.lazy` + `Suspense`\n * is used for client-side code-splitting.\n */\nexport function RuntimeSlot(arg0: RuntimeSlotProps): ReactNode {\n const { name, default: DefaultComponent } = arg0\n const { slots, route } = useContext(RuntimeSlotsContext)\n const locale = useLocale()\n\n const entries = slots[name]\n if (!entries || entries.length === 0) {\n return DefaultComponent ? <DefaultComponent /> : null\n }\n\n const isReplaceSlot = name.endsWith('.replace')\n if (isReplaceSlot) {\n const lastEntry = entries[entries.length - 1]\n return (\n <SlotProvider\n value={{ name, plugin: lastEntry.plugin, route, locale, DefaultComponent }}\n >\n <SlotEntryRenderer entry={lastEntry} />\n </SlotProvider>\n )\n }\n\n // Extension slot (*.before/*.after): render all entries\n return (\n <>\n {entries.map((entry) => (\n <SlotProvider\n key={`${name}:${entry.plugin}`}\n value={{ name, plugin: entry.plugin, route, locale }}\n >\n <SlotEntryRenderer entry={entry} />\n </SlotProvider>\n ))}\n </>\n )\n}\n\n// ---- internal helpers ----\n\ntype SlotEntryRendererProps = {\n entry: RuntimeSlotEntry\n}\n\nfunction SlotEntryRenderer(props: SlotEntryRendererProps): ReactNode {\n const { entry } = props\n // SSR pre-resolved component — render synchronously (no Suspense needed)\n if (entry._resolved) {\n return <entry._resolved />\n }\n\n // Client: lazy-load with code-splitting\n return <LazySlotComponent loader={entry.component} />\n}\n\ntype LazySlotComponentProps = {\n loader: () => Promise<{ default: ComponentType }>\n}\n\nfunction LazySlotComponent(props: LazySlotComponentProps): ReactNode {\n const { loader } = props\n const [Component, setComponent] = useState<ComponentType | null>(null)\n\n useEffect(() => {\n let cancelled = false\n loader().then(mod => {\n if (!cancelled) setComponent(() => mod.default)\n })\n return () => { cancelled = true }\n }, [loader])\n\n if (!Component) return null\n return <Component />\n}\n","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='279px'%20height='200px'%20viewBox='0%200%20279%20200'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3ctitle%3eclarify%3c/title%3e%3cg%20id='页面-1'%20stroke='none'%20stroke-width='1'%20fill='none'%20fill-rule='evenodd'%3e%3cg%20id='clarify'%20transform='translate(-0,%200.0054)'%3e%3cpath%20d='M44.867217,0.0054376148%20C130.715579,1.00591567%20200,70.9091172%20200,156.994562%20L199.986321,155.127494%20C199.384888,180.009127%20179.026368,199.994562%20154,199.994562%20L46,199.994562%20C20.5949015,199.994562%200,179.399661%200,153.994562%20L0,45.9945624%20C0,21.0975659%2019.7793434,0.820282524%2044.4815926,0.0191499894%20Z'%20fill='%2300D492'%3e%3c/path%3e%3cpath%20d='M123.867217,0.0054376148%20C209.715579,1.00591567%20279,70.9091172%20279,156.994562%20L278.986321,155.127494%20C278.384888,180.009127%20258.026368,199.994562%20233,199.994562%20L125,199.994562%20C99.5949015,199.994562%2079,179.399661%2079,153.994562%20L79,45.9945624%20C79,21.0975659%2098.7793434,0.820282524%20123.481593,0.0191499894%20Z'%20id='clarify-right'%20fill-opacity='0.6'%20fill='%2300F6C9'%20transform='translate(179,%20100)%20rotate(-90)%20translate(-179,%20-100)'%3e%3c/path%3e%3cpath%20d='M199.979267,154.416906%20L199.984438,155.157125%20L199.962366,155.872459%20C198.977251,180.406837%20178.776104,199.994562%20154,199.994562%20L124.372438,199.994125%20L124.249053,199.994081%20C99.6939678,199.603921%2079.8122712,179.973634%2079.01915,155.518407%20L79.0054376,155.132783%20C79.5830823,105.566626%20103.129768,61.5221348%20139.498462,33.1463428%20C175.69419,61.3871018%20199.186123,105.143863%20199.979267,154.416906%20Z'%20id='形状结合'%20fill='%2300F692'%3e%3c/path%3e%3c/g%3e%3c/g%3e%3c/svg%3e\"","import clarifyMarkUrl from '../assets/clarify.svg?url'\nimport { useBuiltInText } from '../core/i18n'\n\nexport function BuiltWithClarify() {\n const t = useBuiltInText()\n\n return (\n <a\n href=\"https://clarify.pub\"\n target=\"_blank\"\n rel=\"noreferrer\"\n aria-label={t('builtWith.label')}\n className=\"clarify-built-with inline-flex items-center gap-1.5 rounded-full px-2 py-1 font-medium no-underline transition\"\n >\n <span>{t('builtWith.prefix')}</span>\n <img src={clarifyMarkUrl} alt=\"\" className=\"clarify-built-with-logo h-3.5 w-auto flex-none object-contain\" />\n <span className=\"clarify-built-with-brand font-semibold\">Clarify</span>\n </a>\n )\n}\n","import { Component, useState } from 'react'\nimport type { ErrorInfo, ReactNode } from 'react'\n\nimport { copyTextToClipboard } from '../utils/clipboard'\n\ntype PageErrorBoundaryProps = {\n children: ReactNode;\n title: string;\n description: string;\n reloadLabel: string;\n detailsLabel: string;\n pathLabel: string;\n typeLabel: string;\n messageLabel: string;\n stackLabel: string;\n componentStackLabel: string;\n timestampLabel: string;\n copyLabel: string;\n copiedLabel: string;\n path: string;\n}\n\ntype PageErrorBoundaryState = {\n error?: Error;\n errorInfo?: ErrorInfo;\n occurredAt?: string;\n}\n\ntype PageErrorPanelProps = {\n title: string;\n description: string;\n reloadLabel: string;\n detailsLabel: string;\n pathLabel: string;\n typeLabel: string;\n messageLabel: string;\n stackLabel: string;\n componentStackLabel: string;\n timestampLabel: string;\n copyLabel: string;\n copiedLabel: string;\n path: string;\n error: Error;\n errorInfo?: ErrorInfo;\n occurredAt?: string;\n}\n\nfunction PageErrorPanel(props: PageErrorPanelProps) {\n const {\n title,\n description,\n reloadLabel,\n detailsLabel,\n pathLabel,\n typeLabel,\n messageLabel,\n stackLabel,\n componentStackLabel,\n timestampLabel,\n copyLabel,\n copiedLabel,\n path,\n error,\n errorInfo,\n occurredAt,\n } = props\n const [copiedStack, setCopiedStack] = useState(false)\n const stack = error.stack ?? error.message\n const componentStack = errorInfo?.componentStack?.trim()\n const stackText = componentStack ? `${stack}\\n\\n${componentStackLabel}\\n${componentStack}` : stack\n const capturedAt = occurredAt ?? new Date().toISOString()\n\n async function copyStack() {\n if (!(await copyTextToClipboard(stackText))) return\n setCopiedStack(true)\n window.setTimeout(() => setCopiedStack(false), 1600)\n }\n\n return (\n <section className=\"mx-auto flex min-h-(--clarify-error-page-min-height) w-full max-w-4xl flex-col justify-center py-16 text-(--clarify-theme-tokens-colors-foreground)\" aria-labelledby=\"clarify-render-error-title\" role=\"alert\">\n <div className=\"border-t-2 border-(--clarify-error-accent-text) pt-8\">\n <div className=\"flex flex-col gap-6 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <p className=\"font-mono text-xs/5 font-semibold uppercase tracking-wide text-(--clarify-error-accent-text)\">Render error</p>\n <h1 id=\"clarify-render-error-title\" className=\"mt-3 text-3xl/9 font-semibold tracking-tight text-(--clarify-theme-tokens-colors-foreground)\">{title}</h1>\n <p className=\"mt-4 max-w-2xl text-sm/6 text-(--clarify-theme-tokens-colors-muted)\">{description}</p>\n </div>\n <button\n type=\"button\"\n className=\"inline-flex shrink-0 items-center rounded-(--clarify-theme-tokens-radius-md) bg-(--clarify-theme-tokens-colors-primary) px-4 py-2 text-sm/5 font-semibold text-white shadow-xs transition hover:opacity-90\"\n onClick={() => window.location.reload()}\n >\n {reloadLabel}\n </button>\n </div>\n\n <dl className=\"mt-8 grid gap-px overflow-hidden rounded-(--clarify-theme-tokens-radius-lg) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-border) sm:grid-cols-3\">\n {[\n [pathLabel, path],\n [typeLabel, error.name],\n [timestampLabel, capturedAt],\n ].map(([label, value]) => (\n <div key={label} className=\"min-w-0 bg-(--clarify-theme-tokens-colors-surface) px-4 py-3\">\n <dt className=\"text-xs/5 font-semibold uppercase tracking-wide text-(--clarify-ui-text-faint)\">{label}</dt>\n <dd className=\"mt-1 truncate font-mono text-sm/6 text-(--clarify-ui-text-strong)\" title={value}>{value}</dd>\n </div>\n ))}\n </dl>\n\n <div className=\"mt-6 overflow-hidden rounded-(--clarify-theme-tokens-radius-lg) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-code-background)\">\n <div className=\"flex items-center justify-between gap-3 border-b border-(--clarify-theme-tokens-colors-border) px-4 py-3\">\n <p className=\"text-sm/6 font-semibold text-(--clarify-ui-text-strong)\">{detailsLabel}</p>\n <button\n type=\"button\"\n className=\"rounded-(--clarify-theme-tokens-radius-sm) px-2 py-1 text-xs/5 font-semibold text-(--clarify-ui-text-soft) ring-1 ring-(--clarify-theme-tokens-colors-border) transition hover:bg-(--clarify-ui-hover-background) hover:text-(--clarify-ui-text-strong)\"\n onClick={copyStack}\n >\n {copiedStack ? copiedLabel : copyLabel}\n </button>\n </div>\n <div className=\"px-4 py-4 text-xs/5 text-(--clarify-ui-text)\">\n <p className=\"font-semibold uppercase tracking-wide text-(--clarify-ui-text-faint)\">{messageLabel}</p>\n <p className=\"mt-2 wrap-break-word font-mono text-sm/6 font-semibold text-(--clarify-theme-tokens-colors-foreground)\">{error.message}</p>\n <p className=\"mt-6 font-semibold uppercase tracking-wide text-(--clarify-ui-text-faint)\">{stackLabel}</p>\n <pre className=\"mt-2 max-h-(--clarify-error-details-max-height) overflow-auto whitespace-pre-wrap wrap-break-word font-mono\">\n {stack}\n </pre>\n {componentStack ? (\n <>\n <p className=\"mt-6 font-semibold uppercase tracking-wide text-(--clarify-ui-text-faint)\">{componentStackLabel}</p>\n <pre className=\"mt-2 max-h-(--clarify-error-component-stack-max-height) overflow-auto whitespace-pre-wrap wrap-break-word font-mono\">\n {componentStack}\n </pre>\n </>\n ) : null}\n </div>\n </div>\n </div>\n </section>\n )\n}\n\nexport class PageErrorBoundary extends Component<PageErrorBoundaryProps, PageErrorBoundaryState> {\n state: PageErrorBoundaryState = {}\n\n static getDerivedStateFromError(error: Error): PageErrorBoundaryState {\n return { error, occurredAt: new Date().toISOString() }\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error('[clarify] Failed to render page:', error, errorInfo)\n this.setState({ errorInfo })\n }\n\n render() {\n const { error, errorInfo, occurredAt } = this.state\n if (!error) return this.props.children\n\n return (\n <PageErrorPanel\n title={this.props.title}\n description={this.props.description}\n reloadLabel={this.props.reloadLabel}\n detailsLabel={this.props.detailsLabel}\n pathLabel={this.props.pathLabel}\n typeLabel={this.props.typeLabel}\n messageLabel={this.props.messageLabel}\n stackLabel={this.props.stackLabel}\n componentStackLabel={this.props.componentStackLabel}\n timestampLabel={this.props.timestampLabel}\n copyLabel={this.props.copyLabel}\n copiedLabel={this.props.copiedLabel}\n path={this.props.path}\n error={error}\n errorInfo={errorInfo}\n occurredAt={occurredAt}\n />\n )\n }\n}\n","import { X } from 'lucide-react'\nimport { useEffect, useMemo, useState } from 'react'\nimport { Link } from 'react-router-dom'\n\nimport { useConfig } from '../core/context'\nimport type { Config } from '../core/types'\nimport { isExternalHref, localizeHref } from '../utils/href'\nimport { resolveLocalizedText } from '../utils/localized-text'\n\nfunction bannerStorageKey(config: Config, content: string): string {\n return `clarify:banner:dismissed:${config.title}:${content}`\n}\n\ntype PageBannerLinkProps = {\n href: string\n label: string\n external?: boolean\n config: Config\n locale?: string\n}\n\nfunction PageBannerLink(props: PageBannerLinkProps) {\n const { href, label, external: externalProp, config, locale } = props\n const external = externalProp ?? isExternalHref(href)\n const resolvedHref = external ? href : localizeHref(href, config, locale)\n const className = \"clarify-banner-link shrink-0 rounded-full bg-(--clarify-theme-tokens-colors-primary) px-3 py-1 text-xs/5 font-semibold text-white no-underline transition hover:opacity-90\"\n\n if (external) {\n return <a href={resolvedHref} target=\"_blank\" rel=\"noreferrer\" className={className}>{label}</a>\n }\n\n return <Link to={resolvedHref} className={className}>{label}</Link>\n}\n\nexport type PageBannerProps = {\n currentLocale?: string\n onDismiss?: () => void\n}\n\nexport function PageBanner(props: PageBannerProps) {\n const { currentLocale, onDismiss } = props\n const config = useConfig()\n const banner = config.banner\n\n // All hooks must be called unconditionally — before any early return.\n const content = banner ? resolveLocalizedText(banner.content, currentLocale, config.i18n?.defaultLocale) : ''\n const storageKey = useMemo(() => {\n if (!banner || !content) return ''\n return bannerStorageKey(config, content)\n }, [config, content, banner])\n const [dismissed, setDismissed] = useState(() => {\n if (!banner?.dismissible || typeof window === 'undefined') return false\n return window.localStorage.getItem(storageKey) === '1'\n })\n\n useEffect(() => {\n if (dismissed) onDismiss?.()\n }, [dismissed, onDismiss])\n\n if (!banner) return null\n if (!content) return null\n if (dismissed) return null\n\n const link = banner.link\n const linkLabel = link ? resolveLocalizedText(link.label, currentLocale, config.i18n?.defaultLocale) : ''\n\n return (\n <div className=\"clarify-banner relative flex min-h-12 items-center border-b border-(--clarify-ui-accent-border) bg-(--clarify-ui-accent-background) px-4 text-sm text-(--clarify-ui-text) dark:border-white/10\">\n <div className=\"mx-auto flex w-full max-w-(--clarify-theme-layout-max-width) items-center justify-center gap-3 pr-8 sm:pr-0\">\n <p className=\"clarify-banner-content m-0 text-center font-medium\">{content}</p>\n {link ? <PageBannerLink href={link.href} label={linkLabel} external={link.external} config={config} locale={currentLocale} /> : null}\n </div>\n {banner.dismissible ? (\n <button\n type=\"button\"\n className=\"clarify-banner-dismiss absolute right-3 inline-flex size-8 items-center justify-center rounded-full text-(--clarify-ui-text-soft) transition hover:bg-(--clarify-ui-hover-background) hover:text-(--clarify-ui-text-strong)\"\n aria-label=\"Dismiss announcement\"\n onClick={() => {\n if (storageKey) window.localStorage.setItem(storageKey, '1')\n setDismissed(true)\n }}\n >\n <X className=\"size-4\" aria-hidden=\"true\" />\n </button>\n ) : null}\n </div>\n )\n}\n","import clsx from 'clsx'\nimport { Link, useLocation } from 'react-router-dom'\n\nimport { useConfig } from '../core/context'\nimport type { Config, NavbarLink } from '../core/types'\nimport { isExternalHref, localizeHref } from '../utils/href'\nimport { resolveLocalizedText } from '../utils/localized-text'\n\nfunction localeForPath(config: Config, pathname: string): string | undefined {\n const i18n = config.i18n\n if (!i18n) return undefined\n const firstSegment = pathname.split('/').filter(Boolean)[0]\n return i18n.locales.find((locale) => locale.code === firstSegment)?.code ?? i18n.defaultLocale\n}\n\ntype FooterLinkProps = { link: NavbarLink; locale?: string; config: Config }\n\nfunction FooterLink(arg0: FooterLinkProps) {\n const { link, locale, config } = arg0\n const external = link.external ?? isExternalHref(link.href)\n const href = external ? link.href : localizeHref(link.href, config, locale)\n const className = \"clarify-footer-link no-underline transition\"\n const label = resolveLocalizedText(link.label, locale, config.i18n?.defaultLocale)\n\n if (external) {\n return (\n <a href={href} target=\"_blank\" rel=\"noreferrer\" className={className}>\n {label}\n </a>\n )\n }\n\n return (\n <Link to={href} className={className}>\n {label}\n </Link>\n )\n}\n\ntype SocialLinkProps = { name: string; href: string }\n\nfunction SocialLink(arg0: SocialLinkProps) {\n const { name, href } = arg0\n\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"clarify-footer-social capitalize no-underline transition\"\n >\n {name}\n </a>\n )\n}\n\nexport function PageFooter() {\n const config = useConfig()\n const location = useLocation()\n const locale = localeForPath(config, location.pathname)\n const footer = config.footer\n if (!footer) return null\n\n const links = footer.links ?? []\n const socials = Object.entries(footer.socials ?? {})\n const copyright = footer.copyright\n ? resolveLocalizedText(footer.copyright, locale, config.i18n?.defaultLocale)\n : undefined\n const hasContent = Boolean(copyright || links.length > 0 || socials.length > 0)\n\n if (!hasContent) return null\n\n return (\n <footer className=\"clarify-page-footer mt-16 flex w-full flex-col gap-4 border-t border-(--clarify-theme-tokens-colors-border) py-8 lg:mt-24\">\n <div\n className={clsx(\n 'clarify-footer-content flex flex-col items-end gap-3 text-right',\n 'sm:items-start sm:text-left',\n )}\n >\n {copyright ? (\n <p className=\"clarify-footer-copyright m-0\">{copyright}</p>\n ) : null}\n {links.length > 0 || socials.length > 0 ? (\n <div className=\"clarify-footer-links flex flex-wrap justify-end gap-x-4 gap-y-2 sm:justify-start\">\n {links.map((link) => (\n <FooterLink key={`${link.href}-${resolveLocalizedText(link.label, locale, config.i18n?.defaultLocale)}`} link={link} locale={locale} config={config} />\n ))}\n {socials.map(([name, href]) => (\n <SocialLink key={name} name={name} href={href} />\n ))}\n </div>\n ) : null}\n </div>\n </footer>\n )\n}\n","import clsx from 'clsx'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport { Link } from 'react-router-dom'\n\nimport { useBuiltInText } from '../core/i18n'\nimport type { NavigationNode, RouteItem } from '../core/types'\nimport { isSameRoutePath, normalizeRoutePath } from '../utils/path'\n\nfunction flattenNavigation(nodes: NavigationNode[]): NavigationNode[] {\n return nodes.flatMap((node) => node.children?.length ? flattenNavigation(node.children) : [node])\n}\n\ntype PageNavigationProps = { navigation: NavigationNode[]; currentRoute?: RouteItem }\n\nexport function PageNavigation(arg0: PageNavigationProps) {\n const { navigation, currentRoute } = arg0\n const t = useBuiltInText()\n if (!currentRoute) return null\n\n const pageRoutes = flattenNavigation(navigation)\n const currentIndex = pageRoutes.findIndex((route) => isSameRoutePath(route.path, currentRoute.path))\n if (currentIndex === -1) return null\n\n const previous = pageRoutes[currentIndex - 1]\n const next = pageRoutes[currentIndex + 1]\n if (!previous && !next) return null\n\n return (\n <nav className=\"clarify-page-navigation mt-6 grid gap-3 @3xl:grid-cols-2\" aria-label={t('navigation.previousNext')}>\n <PageNavigationLink direction=\"previous\" route={previous} />\n <PageNavigationLink direction=\"next\" route={next} />\n </nav>\n )\n}\n\ntype PageNavigationLinkProps = { direction: 'previous' | 'next'; route?: NavigationNode }\n\nfunction PageNavigationLink(arg0: PageNavigationLinkProps) {\n const { direction, route } = arg0\n const t = useBuiltInText()\n if (!route) return <div className=\"hidden @3xl:block\" />\n\n const isNext = direction === 'next'\n\n return (\n <Link\n to={normalizeRoutePath(route.path)}\n className={clsx(\n 'group flex min-w-0 items-center gap-3 rounded-lg border border-(--clarify-theme-tokens-colors-border) px-4 py-3 no-underline transition hover:border-(--clarify-theme-tokens-colors-primary) hover:bg-(--clarify-ui-hover-background)',\n isNext && '@3xl:justify-end @3xl:text-right',\n )}\n >\n {!isNext ? <ChevronLeft className=\"h-3.5 w-3.5 shrink-0 text-(--clarify-theme-tokens-colors-muted) transition group-hover:text-(--clarify-theme-tokens-colors-primary)\" /> : null}\n <span className=\"min-w-0 flex-1\">\n <span className=\"clarify-page-navigation-label block font-medium uppercase tracking-wide text-(--clarify-theme-tokens-colors-muted)\">{isNext ? t('navigation.next') : t('navigation.previous')}</span>\n <span className=\"clarify-page-navigation-title mt-0.5 block truncate font-semibold text-(--clarify-theme-tokens-colors-foreground)\">{route.title}</span>\n </span>\n {isNext ? <ChevronRight className=\"h-3.5 w-3.5 shrink-0 text-(--clarify-theme-tokens-colors-muted) transition group-hover:text-(--clarify-theme-tokens-colors-primary)\" /> : null}\n </Link>\n )\n}\n","import clsx from 'clsx'\n\ntype SkeletonBlockProps = {\n className?: string;\n}\n\nconst paragraphLines = ['w-full', 'w-11/12', 'w-4/5']\nconst codeLines = ['w-5/6', 'w-2/3', 'w-3/4', 'w-1/2']\n\nfunction SkeletonBlock(props: SkeletonBlockProps) {\n return <div aria-hidden=\"true\" className={clsx('rounded-(--clarify-skeleton-radius) bg-(--clarify-skeleton-background)', props.className)} />\n}\n\nfunction SkeletonParagraph() {\n return (\n <div className=\"space-y-3\">\n {paragraphLines.map((width) => (\n <SkeletonBlock key={width} className={clsx('h-3', width)} />\n ))}\n </div>\n )\n}\n\nexport function PageSkeleton() {\n return (\n <section className=\"clarify-page-skeleton animate-pulse space-y-10 py-8\" aria-label=\"Loading page\">\n <div className=\"space-y-5\">\n <SkeletonBlock className=\"h-3 w-24 rounded-full bg-(--clarify-skeleton-accent-background)\" />\n <SkeletonBlock className=\"h-11 w-full max-w-(--clarify-skeleton-title-width) rounded-3xl\" />\n <div className=\"max-w-3xl space-y-3\">\n <SkeletonBlock className=\"h-4 w-full\" />\n <SkeletonBlock className=\"h-4 w-5/6\" />\n </div>\n </div>\n\n <div className=\"grid gap-4 xl:grid-cols-2\">\n {[0, 1].map((item) => (\n <div key={item} className=\"rounded-(--clarify-skeleton-card-radius) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-5 shadow-sm shadow-zinc-900/5\">\n <div className=\"flex items-start gap-4\">\n <SkeletonBlock className=\"h-10 w-10 shrink-0 bg-(--clarify-skeleton-accent-background)\" />\n <div className=\"min-w-0 flex-1 space-y-4\">\n <SkeletonBlock className=\"h-5 w-2/3\" />\n <SkeletonParagraph />\n </div>\n </div>\n </div>\n ))}\n </div>\n\n <div className=\"space-y-8\">\n <article className=\"space-y-5\">\n <SkeletonBlock className=\"h-7 w-full max-w-(--clarify-skeleton-heading-width) rounded-2xl\" />\n <SkeletonParagraph />\n <div className=\"rounded-(--clarify-theme-tokens-radius-lg) border border-(--clarify-ui-accent-border) bg-(--clarify-ui-accent-background) p-4\">\n <SkeletonBlock className=\"h-4 w-full max-w-(--clarify-skeleton-line-width) bg-(--clarify-skeleton-accent-background)\" />\n </div>\n </article>\n\n <div className=\"overflow-hidden rounded-(--clarify-skeleton-block-radius) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-code-background)\">\n <div className=\"flex items-center gap-2 border-b border-(--clarify-theme-tokens-colors-border) px-4 py-3\">\n <SkeletonBlock className=\"h-3 w-3 rounded-full\" />\n <SkeletonBlock className=\"h-3 w-3 rounded-full\" />\n <SkeletonBlock className=\"h-3 w-3 rounded-full\" />\n <SkeletonBlock className=\"ml-3 h-3 w-32\" />\n </div>\n <div className=\"space-y-3 p-4\">\n {codeLines.map((width) => (\n <SkeletonBlock key={width} className={clsx('h-3', width)} />\n ))}\n </div>\n </div>\n\n <article className=\"space-y-5\">\n <SkeletonBlock className=\"h-7 w-full max-w-(--clarify-skeleton-heading-short-width) rounded-2xl\" />\n <div className=\"grid gap-3 sm:grid-cols-2\">\n {[0, 1, 2, 3].map((item) => (\n <div key={item} className=\"rounded-(--clarify-theme-tokens-radius-lg) border border-(--clarify-theme-tokens-colors-border) p-4\">\n <SkeletonBlock className=\"mb-3 h-4 w-1/2\" />\n <SkeletonBlock className=\"h-3 w-4/5\" />\n </div>\n ))}\n </div>\n </article>\n </div>\n </section>\n )\n}\n","import clsx from 'clsx'\nimport { Suspense, lazy, useEffect, useMemo, useState } from 'react'\nimport type { ComponentType, CSSProperties } from 'react'\nimport { Link, Routes, Route, useLocation, useNavigate } from 'react-router-dom'\n\nimport { LocaleContext } from '../context'\nimport { useBuiltInText } from '../core/i18n'\nimport { Header, Navigation } from '../shell'\nimport { RuntimeSlot, RuntimeSlotsProvider, type RuntimeSlots } from '../slots'\nimport { getStoredLocalePreference, storeLocalePreference } from '../theme/cookies'\nimport type { RouteItem, Config, NavigationNode, NavigationTab, NavigationTree, TabbedNavigation } from '../types'\nimport { safeDecodeURIComponent } from '../utils/hash'\nimport { isSameRoutePath, normalizeRoutePath } from '../utils/path'\n\nimport { BuiltWithClarify } from './BuiltWithClarify'\nimport { PageErrorBoundary } from './ErrorBoundary'\nimport { PageActionsProvider } from './PageActions'\nimport { PageBanner } from './PageBanner'\nimport { PageFooter } from './PageFooter'\nimport { PageNavigation } from './PageNavigation'\nimport { PageSkeleton } from './PageSkeleton'\nimport { SectionProvider, type Section } from './SectionProvider'\n\nexport type AppShellProps = {\n config: Config\n routes: RouteItem[]\n navigation: NavigationTree\n runtimeSlots?: RuntimeSlots\n}\n\ntype BannerSlotProps = {\n activeBannerKey: string | undefined\n dismissedBannerKey: string | undefined\n onDismiss: () => void\n config: Config\n locale?: string\n}\n\nfunction BannerSlot(props: BannerSlotProps) {\n const { activeBannerKey, dismissedBannerKey, onDismiss, config, locale } = props\n // 直接在插槽内部创建默认组件,这样它可以访问到上下文\n function DefaultBannerComponent() {\n const hasBanner = Boolean(config.banner) && dismissedBannerKey !== activeBannerKey\n if (!hasBanner) return null\n return <PageBanner currentLocale={locale} onDismiss={onDismiss} />\n }\n \n return <RuntimeSlot name=\"page.banner.replace\" default={DefaultBannerComponent} />\n}\n\nfunction DefaultFooterComponent() {\n return <PageFooter />\n}\n\nfunction routeForPath(routes: RouteItem[], pathname: string): RouteItem | undefined {\n return routes.find((route) => isSameRoutePath(route.path, pathname))\n}\n\nfunction notFoundRouteForPath(routes: RouteItem[], pathname: string, currentLocale?: string): RouteItem | undefined {\n const localePrefix = currentLocale ? `/${currentLocale}` : undefined\n if (localePrefix && pathname.startsWith(`${localePrefix}/`)) {\n return routeForPath(routes, `${localePrefix}/404`)\n }\n return routeForPath(routes, '/404') ?? routes.find(route => isSameRoutePath(route.basePath, '/404'))\n}\n\nfunction sectionsForRoute(route?: RouteItem): Section[] {\n return (\n route?.sections?.map((section) => ({\n id: section.id,\n title: section.title,\n level: section.level,\n badge: section.badge,\n tags: section.tags,\n })) ?? []\n )\n}\n\nfunction resolveRouteComponent(route: RouteItem): ComponentType {\n if (route.lazy) return lazy(route.component as () => Promise<{ default: ComponentType }>)\n return route.component as ComponentType\n}\n\nfunction scrollToHash(hash: string) {\n if (!hash) return\n\n const targetId = safeDecodeURIComponent(hash.slice(1))\n window.requestAnimationFrame(() => {\n document.getElementById(targetId)?.scrollIntoView()\n window.requestAnimationFrame(() => {\n window.dispatchEvent(new Event('scroll'))\n })\n })\n}\n\nfunction explicitLocaleForPath(config: Config, pathname: string): string | undefined {\n const i18n = config.i18n\n if (!i18n) return undefined\n const firstSegment = pathname.split('/').filter(Boolean)[0]\n return i18n.locales.find((locale) => locale.code === firstSegment)?.code\n}\n\nfunction fallbackLocale(config: Config): string | undefined {\n return config.i18n?.defaultLocale\n}\n\nfunction storedLocaleForConfig(config: Config): string | null {\n return getStoredLocalePreference(config.i18n?.locales.map(locale => locale.code))\n}\n\nfunction isDefaultLocale(config: Config, locale: string | undefined): boolean {\n return Boolean(locale && config.i18n?.defaultLocale === locale)\n}\n\nfunction isTabbedNavigation(navigation: NavigationTree): navigation is TabbedNavigation {\n return !Array.isArray(navigation) && 'tabs' in navigation\n}\n\nfunction hasPath(nodes: NavigationNode[], pathname: string): boolean {\n return nodes.some((node) => isSameRoutePath(node.path, pathname) || hasPath(node.children ?? [], pathname))\n}\n\ntype NavigationState = {\n items: NavigationNode[]\n tabs?: NavigationTab[]\n}\n\nfunction navigationFromTabs(navigation: TabbedNavigation, pathname: string): NavigationState {\n const currentTab = navigation.tabs.find((tab) => isSameRoutePath(tab.path, pathname) || hasPath(tab.children, pathname))\n return {\n items: currentTab?.children ?? navigation.tabs[0]?.children ?? [],\n tabs: navigation.tabs,\n }\n}\n\nfunction navigationForLocale(navigation: NavigationTree, locale: string | undefined, pathname: string): NavigationState {\n if (Array.isArray(navigation)) return { items: navigation }\n if (isTabbedNavigation(navigation)) return navigationFromTabs(navigation, pathname)\n if (!locale) return { items: [] }\n\n const localizedNavigation = navigation[locale]\n if (!localizedNavigation) return { items: [] }\n return Array.isArray(localizedNavigation) ? { items: localizedNavigation } : navigationFromTabs(localizedNavigation, pathname)\n}\n\nfunction pageTitle(config: Config, route?: RouteItem): string {\n const routeTitle = route?.title?.trim()\n if (!routeTitle || routeTitle === config.title) return config.title\n return `${routeTitle} - ${config.title}`\n}\n\nfunction setNamedMeta(name: string, content: string | undefined) {\n const existing = document.head.querySelector<HTMLMetaElement>(`meta[name=\"${name}\"]`)\n if (!content) {\n existing?.remove()\n return\n }\n\n const meta = existing ?? document.createElement('meta')\n meta.name = name\n meta.content = content\n if (!existing) document.head.appendChild(meta)\n}\n\nfunction applyDocumentMetadata(config: Config, route?: RouteItem) {\n document.title = pageTitle(config, route)\n setNamedMeta('description', route?.description ?? config.description)\n setNamedMeta('keywords', route?.keywords?.join(', '))\n}\n\nfunction BuiltInNotFoundPage() {\n const text = useBuiltInText()\n\n return (\n <section className=\"mx-auto flex min-h-(--clarify-error-page-min-height) max-w-2xl flex-col justify-center py-16 text-(--clarify-theme-tokens-colors-foreground)\" aria-labelledby=\"clarify-not-found-title\">\n <p className=\"text-sm/6 font-semibold text-(--clarify-theme-tokens-colors-primary)\">{text('notFound.label')}</p>\n <h1 id=\"clarify-not-found-title\" className=\"mt-3 text-3xl/9 font-semibold tracking-tight text-(--clarify-theme-tokens-colors-foreground)\">{text('notFound.title')}</h1>\n <p className=\"mt-4 text-sm/6 text-(--clarify-theme-tokens-colors-muted)\">{text('notFound.description')}</p>\n <div className=\"mt-8\">\n <Link className=\"inline-flex items-center rounded-(--clarify-theme-tokens-radius-md) bg-(--clarify-theme-tokens-colors-primary) px-3 py-2 text-sm/5 font-semibold text-white shadow-xs transition hover:opacity-90\" to=\"/\">\n {text('notFound.home')}\n </Link>\n </div>\n </section>\n )\n}\n\ntype NotFoundRouteElementProps = {\n component?: ComponentType;\n}\n\nfunction NotFoundRouteElement(props: NotFoundRouteElementProps) {\n const { component: RouteComponent } = props\n if (!RouteComponent) return <BuiltInNotFoundPage />\n return <RouteComponent />\n}\n\nexport function AppShell(arg0: AppShellProps) {\n const { config, routes, navigation, runtimeSlots } = arg0\n const location = useLocation()\n const navigate = useNavigate()\n const pathname = normalizeRoutePath(location.pathname)\n const currentRoute = routeForPath(routes, pathname)\n const explicitLocale = explicitLocaleForPath(config, pathname)\n const storedLocale = storedLocaleForConfig(config)\n const currentLocale = explicitLocale ?? storedLocale ?? fallbackLocale(config)\n const currentLocaleConfig = config.i18n?.locales.find((locale) => locale.code === currentLocale)\n const notFoundRoute = currentRoute ? undefined : notFoundRouteForPath(routes, pathname, currentLocale)\n const text = useBuiltInText(currentLocale)\n const currentNavigation = navigationForLocale(navigation, currentLocale, pathname)\n const sections = sectionsForRoute(currentRoute)\n const [dismissedBannerKey, setDismissedBannerKey] = useState<string>()\n const activeBannerKey = config.banner ? JSON.stringify(config.banner) : undefined\n const hasBanner = Boolean(config.banner) && dismissedBannerKey !== activeBannerKey\n const hasTabs = Boolean(currentNavigation.tabs?.length)\n const renderRoutes = useMemo(\n () => routes.map(route => ({ ...route, component: resolveRouteComponent(route) })),\n [routes],\n )\n const NotFoundRouteComponent = notFoundRoute\n ? renderRoutes.find(route => isSameRoutePath(route.path, notFoundRoute.path))?.component\n : undefined\n\n useEffect(() => {\n if (explicitLocale) storeLocalePreference(explicitLocale)\n }, [explicitLocale])\n\n useEffect(() => {\n if (explicitLocale || !storedLocale || isDefaultLocale(config, storedLocale)) return\n const localizedPath = currentRoute?.alternates?.[storedLocale]\n if (!localizedPath || isSameRoutePath(localizedPath, pathname)) return\n navigate(`${localizedPath}${location.search}${location.hash}`, { replace: true })\n }, [config, currentRoute, explicitLocale, location.hash, location.search, navigate, pathname, storedLocale])\n\n useEffect(() => {\n if (location.hash) {\n scrollToHash(location.hash)\n return\n }\n\n window.scrollTo({ top: 0, left: 0 })\n window.requestAnimationFrame(() => {\n window.dispatchEvent(new Event('scroll'))\n })\n }, [location.hash, location.pathname])\n\n useEffect(() => {\n if (!currentLocale) return\n document.documentElement.lang = currentLocale\n if (currentLocaleConfig?.dir) {\n document.documentElement.dir = currentLocaleConfig.dir\n } else {\n document.documentElement.removeAttribute('dir')\n }\n }, [currentLocale, currentLocaleConfig?.dir])\n\n useEffect(() => {\n applyDocumentMetadata(config, currentRoute ?? notFoundRoute)\n }, [config, currentRoute, notFoundRoute])\n\n return (\n <LocaleContext.Provider value={currentLocale}>\n <RuntimeSlotsProvider slots={runtimeSlots} route={currentRoute}>\n <SectionProvider sections={sections}>\n <Header\n config={config}\n navigation={currentNavigation.items}\n tabs={currentNavigation.tabs}\n routes={routes}\n currentLocale={currentLocale}\n currentRoute={currentRoute}\n banner={\n <BannerSlot \n activeBannerKey={activeBannerKey}\n dismissedBannerKey={dismissedBannerKey}\n onDismiss={() => setDismissedBannerKey(activeBannerKey)}\n config={config}\n locale={currentLocale}\n />\n }\n />\n <div\n className=\"clarify-layout mx-auto grid w-full max-w-(--clarify-theme-layout-max-width) grid-cols-1 lg:grid-cols-(--clarify-layout-sidebar-grid) xl:grid-cols-(--clarify-layout-sidebar-grid-wide)\"\n style={{\n '--clarify-header-offset':\n hasTabs && hasBanner\n ? '10rem'\n : hasTabs && !hasBanner\n ? '7rem'\n : !hasTabs && hasBanner\n ? '6.5rem'\n : '3.5rem',\n } as CSSProperties}\n >\n <aside\n data-pagefind-ignore\n className=\"clarify-sidebar hidden lg:block lg:self-stretch lg:bg-(--clarify-theme-tokens-colors-background) lg:px-5 xl:px-6\"\n >\n <div\n className={clsx(\n 'clarify-sidebar-scroll lg:sticky lg:z-30 lg:overflow-y-auto lg:pb-8',\n hasTabs && hasBanner && 'lg:top-40 lg:h-(--clarify-sidebar-height-with-tabs-and-banner) lg:pt-10',\n hasTabs && !hasBanner && 'lg:top-28 lg:h-(--clarify-sidebar-height-with-tabs) lg:pt-10',\n !hasTabs && hasBanner && 'lg:top-26 lg:h-(--clarify-sidebar-height-with-banner) lg:pt-10',\n !hasTabs && !hasBanner && 'lg:top-14 lg:h-(--clarify-sidebar-height) lg:pt-10',\n )}\n >\n <Navigation navigation={currentNavigation.items} />\n </div>\n </aside>\n <div\n className={clsx(\n 'clarify-content @container relative flex min-h-screen min-w-0 flex-col px-4 pb-12 sm:px-6 lg:px-8 xl:px-10',\n hasTabs && hasBanner && 'pt-26 lg:pt-40',\n hasTabs && !hasBanner && 'pt-14 lg:pt-28',\n !hasTabs && hasBanner && 'pt-26',\n !hasTabs && !hasBanner && 'pt-14',\n )}\n >\n <PageActionsProvider route={currentRoute} routePrefix={config.routePrefix}>\n <main className=\"clarify-main min-w-0 flex-auto\" data-pagefind-body>\n <PageErrorBoundary\n key={pathname}\n title={text('renderError.title')}\n description={text('renderError.description')}\n reloadLabel={text('renderError.reload')}\n detailsLabel={text('renderError.details')}\n pathLabel={text('renderError.path')}\n typeLabel={text('renderError.type')}\n messageLabel={text('renderError.message')}\n stackLabel={text('renderError.stack')}\n componentStackLabel={text('renderError.componentStack')}\n timestampLabel={text('renderError.timestamp')}\n copyLabel={text('actions.copy')}\n copiedLabel={text('actions.copied')}\n path={pathname}\n >\n <Suspense fallback={<PageSkeleton />}>\n <Routes>\n {renderRoutes.map((route) => (\n <Route key={route.path} path={route.path} element={<route.component />} />\n ))}\n <Route path=\"*\" element={<NotFoundRouteElement component={NotFoundRouteComponent} />} />\n </Routes>\n </Suspense>\n </PageErrorBoundary>\n </main>\n <PageNavigation navigation={currentNavigation.items} currentRoute={currentRoute} />\n <RuntimeSlot name=\"page.footer.before\" />\n <RuntimeSlot name=\"page.footer.replace\" default={DefaultFooterComponent} />\n <div className=\"flex justify-end\">\n <BuiltWithClarify />\n </div>\n </PageActionsProvider>\n </div>\n </div>\n </SectionProvider>\n </RuntimeSlotsProvider>\n </LocaleContext.Provider>\n )\n}\n","import type { ThemeConfig, ThemeRadiusTokensConfig } from '../types'\n\ntype RandomThemePalette = {\n primary: string;\n accent: string;\n background: string;\n foreground: string;\n surface: string;\n muted: string;\n borderMix: number;\n codeMix: number;\n}\n\nconst randomThemePalettes = [\n { primary: '#047857', accent: '#0D9488', background: '#ffffff', foreground: '#111827', surface: '#ffffff', muted: '#64748b', borderMix: 0.12, codeMix: 0.04 },\n { primary: '#2563eb', accent: '#7c3aed', background: '#f8fafc', foreground: '#0f172a', surface: '#ffffff', muted: '#64748b', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#9333ea', accent: '#db2777', background: '#fdf4ff', foreground: '#2e1065', surface: '#ffffff', muted: '#7e22ce', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#ea580c', accent: '#ca8a04', background: '#fff7ed', foreground: '#431407', surface: '#fffbeb', muted: '#9a3412', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#0f766e', accent: '#0891b2', background: '#f0fdfa', foreground: '#042f2e', surface: '#ffffff', muted: '#0f766e', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#be123c', accent: '#f97316', background: '#fff1f2', foreground: '#4c0519', surface: '#ffffff', muted: '#9f1239', borderMix: 0.13, codeMix: 0.06 },\n { primary: '#4f46e5', accent: '#06b6d4', background: '#eef2ff', foreground: '#1e1b4b', surface: '#ffffff', muted: '#4338ca', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#0e7490', accent: '#22c55e', background: '#ecfeff', foreground: '#083344', surface: '#ffffff', muted: '#155e75', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#7c2d12', accent: '#dc2626', background: '#fef2f2', foreground: '#450a0a', surface: '#fff7ed', muted: '#991b1b', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#365314', accent: '#84cc16', background: '#f7fee7', foreground: '#1a2e05', surface: '#ffffff', muted: '#4d7c0f', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#0369a1', accent: '#14b8a6', background: '#f0f9ff', foreground: '#082f49', surface: '#ffffff', muted: '#075985', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#a21caf', accent: '#e879f9', background: '#fdf4ff', foreground: '#4a044e', surface: '#ffffff', muted: '#86198f', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#c2410c', accent: '#fb7185', background: '#fff7ed', foreground: '#431407', surface: '#ffffff', muted: '#9a3412', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#1d4ed8', accent: '#f59e0b', background: '#eff6ff', foreground: '#172554', surface: '#ffffff', muted: '#1e40af', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#6d28d9', accent: '#10b981', background: '#faf5ff', foreground: '#2e1065', surface: '#ffffff', muted: '#6b21a8', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#0f172a', accent: '#64748b', background: '#f8fafc', foreground: '#0f172a', surface: '#ffffff', muted: '#475569', borderMix: 0.12, codeMix: 0.04 },\n { primary: '#18181b', accent: '#71717a', background: '#fafafa', foreground: '#18181b', surface: '#ffffff', muted: '#52525b', borderMix: 0.12, codeMix: 0.04 },\n { primary: '#166534', accent: '#06b6d4', background: '#f0fdf4', foreground: '#052e16', surface: '#ffffff', muted: '#15803d', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#9d174d', accent: '#8b5cf6', background: '#fdf2f8', foreground: '#500724', surface: '#ffffff', muted: '#be185d', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#4338ca', accent: '#ec4899', background: '#f5f3ff', foreground: '#312e81', surface: '#ffffff', muted: '#4f46e5', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#92400e', accent: '#65a30d', background: '#fffbeb', foreground: '#451a03', surface: '#ffffff', muted: '#a16207', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#0f766e', accent: '#f43f5e', background: '#f8fafc', foreground: '#134e4a', surface: '#ffffff', muted: '#0f766e', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#1e3a8a', accent: '#0ea5e9', background: '#f8fafc', foreground: '#0f172a', surface: '#ffffff', muted: '#475569', borderMix: 0.12, codeMix: 0.04 },\n { primary: '#581c87', accent: '#f97316', background: '#faf5ff', foreground: '#3b0764', surface: '#ffffff', muted: '#7e22ce', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#991b1b', accent: '#facc15', background: '#fef2f2', foreground: '#450a0a', surface: '#ffffff', muted: '#b91c1c', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#115e59', accent: '#a3e635', background: '#f0fdfa', foreground: '#042f2e', surface: '#ffffff', muted: '#0f766e', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#075985', accent: '#38bdf8', background: '#f0f9ff', foreground: '#082f49', surface: '#ffffff', muted: '#0369a1', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#7e22ce', accent: '#f472b6', background: '#faf5ff', foreground: '#3b0764', surface: '#ffffff', muted: '#9333ea', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#b45309', accent: '#ef4444', background: '#fffbeb', foreground: '#451a03', surface: '#ffffff', muted: '#92400e', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#065f46', accent: '#2dd4bf', background: '#ecfdf5', foreground: '#022c22', surface: '#ffffff', muted: '#047857', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#312e81', accent: '#22d3ee', background: '#eef2ff', foreground: '#1e1b4b', surface: '#ffffff', muted: '#4338ca', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#831843', accent: '#fb923c', background: '#fdf2f8', foreground: '#500724', surface: '#ffffff', muted: '#be185d', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#164e63', accent: '#818cf8', background: '#ecfeff', foreground: '#083344', surface: '#ffffff', muted: '#155e75', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#3f6212', accent: '#f97316', background: '#f7fee7', foreground: '#1a2e05', surface: '#ffffff', muted: '#4d7c0f', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#1e40af', accent: '#fb7185', background: '#eff6ff', foreground: '#172554', surface: '#ffffff', muted: '#2563eb', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#701a75', accent: '#14b8a6', background: '#fdf4ff', foreground: '#4a044e', surface: '#ffffff', muted: '#a21caf', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#713f12', accent: '#eab308', background: '#fefce8', foreground: '#422006', surface: '#ffffff', muted: '#a16207', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#1f2937', accent: '#0ea5e9', background: '#f9fafb', foreground: '#111827', surface: '#ffffff', muted: '#4b5563', borderMix: 0.12, codeMix: 0.04 },\n { primary: '#27272a', accent: '#a855f7', background: '#fafafa', foreground: '#18181b', surface: '#ffffff', muted: '#52525b', borderMix: 0.12, codeMix: 0.04 },\n { primary: '#374151', accent: '#10b981', background: '#f3f4f6', foreground: '#111827', surface: '#ffffff', muted: '#4b5563', borderMix: 0.12, codeMix: 0.04 },\n { primary: '#064e3b', accent: '#f59e0b', background: '#f8fafc', foreground: '#022c22', surface: '#ffffff', muted: '#047857', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#7f1d1d', accent: '#60a5fa', background: '#fff7ed', foreground: '#450a0a', surface: '#ffffff', muted: '#991b1b', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#3730a3', accent: '#34d399', background: '#f8fafc', foreground: '#1e1b4b', surface: '#ffffff', muted: '#4f46e5', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#9f1239', accent: '#22c55e', background: '#fff1f2', foreground: '#4c0519', surface: '#ffffff', muted: '#be123c', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#134e4a', accent: '#8b5cf6', background: '#f0fdfa', foreground: '#042f2e', surface: '#ffffff', muted: '#0f766e', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#1d4ed8', accent: '#dc2626', background: '#f8fafc', foreground: '#0f172a', surface: '#ffffff', muted: '#475569', borderMix: 0.12, codeMix: 0.05 },\n { primary: '#6b21a8', accent: '#fbbf24', background: '#faf5ff', foreground: '#2e1065', surface: '#ffffff', muted: '#7e22ce', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#155e75', accent: '#84cc16', background: '#f0f9ff', foreground: '#083344', surface: '#ffffff', muted: '#0369a1', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#854d0e', accent: '#06b6d4', background: '#fefce8', foreground: '#422006', surface: '#ffffff', muted: '#a16207', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#14532d', accent: '#f43f5e', background: '#f0fdf4', foreground: '#052e16', surface: '#ffffff', muted: '#166534', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#4c1d95', accent: '#2dd4bf', background: '#f5f3ff', foreground: '#2e1065', surface: '#ffffff', muted: '#6d28d9', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#9a3412', accent: '#c084fc', background: '#fff7ed', foreground: '#431407', surface: '#ffffff', muted: '#c2410c', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#0c4a6e', accent: '#f472b6', background: '#f0f9ff', foreground: '#082f49', surface: '#ffffff', muted: '#075985', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#166534', accent: '#facc15', background: '#f7fee7', foreground: '#052e16', surface: '#ffffff', muted: '#15803d', borderMix: 0.13, codeMix: 0.05 },\n { primary: '#be185d', accent: '#38bdf8', background: '#fdf2f8', foreground: '#500724', surface: '#ffffff', muted: '#9d174d', borderMix: 0.14, codeMix: 0.06 },\n { primary: '#5b21b6', accent: '#ef4444', background: '#f5f3ff', foreground: '#2e1065', surface: '#ffffff', muted: '#6d28d9', borderMix: 0.14, codeMix: 0.06 },\n] as const satisfies readonly RandomThemePalette[]\n\nconst randomRadiusSets = [\n { sm: '2px', md: '6px', lg: '10px', xl: '14px' },\n { sm: '4px', md: '8px', lg: '12px', xl: '16px' },\n { sm: '6px', md: '10px', lg: '14px', xl: '18px' },\n { sm: '8px', md: '12px', lg: '18px', xl: '24px' },\n { sm: '10px', md: '14px', lg: '20px', xl: '28px' },\n { sm: '12px', md: '16px', lg: '24px', xl: '32px' },\n] as const satisfies ReadonlyArray<ThemeRadiusTokensConfig>\n\nconst randomLayoutWidths = ['72rem', '76rem', '78rem', '80rem', '82rem', '86rem', '90rem', '96rem', '104rem', '112rem', '120rem', '128rem', '144rem'] as const\n\nfunction randomItem<T>(items: readonly T[]): T {\n return items[Math.floor(Math.random() * items.length)]\n}\n\nfunction randomRgbMix(color: string, alpha: number): string {\n return `color-mix(in srgb, ${color} ${Math.round(alpha * 100)}%, transparent)`\n}\n\nfunction modeColor(light: string, dark: string): { light: string; dark: string } {\n return { light, dark }\n}\n\nexport function createRandomTheme(): ThemeConfig {\n const palette = randomItem(randomThemePalettes)\n const radius = randomItem(randomRadiusSets)\n const maxWidth = randomItem(randomLayoutWidths)\n\n return {\n preset: 'default',\n tokens: {\n colors: {\n primary: modeColor(palette.primary, palette.accent),\n accent: modeColor(palette.accent, palette.primary),\n background: modeColor(palette.background, '#09090b'),\n foreground: modeColor(palette.foreground, '#f8fafc'),\n surface: modeColor(palette.surface, '#18181b'),\n muted: modeColor(palette.muted, '#a1a1aa'),\n border: modeColor(randomRgbMix(palette.foreground, palette.borderMix), 'rgb(255 255 255 / 0.1)'),\n codeBackground: modeColor(randomRgbMix(palette.primary, palette.codeMix), '#18181b'),\n },\n radius: { ...radius },\n },\n layout: { maxWidth },\n editor: false,\n }\n}\n","import type { CSSProperties } from 'react'\n\nimport type { ThemeColorTokensConfig, ThemeColorValue, ThemeConfig, ThemePreset } from '../types'\n\nimport { themeCookieName } from './cookies'\n\nexport type ThemeCssVariables = CSSProperties & Record<`--clarify-theme-${string}`, string>\n\nexport type ThemeVariableTarget = HTMLElement | string\n\nexport const themeStorageKey = themeCookieName\nexport { themeCookieName }\n\nexport const themePresets = {\n default: {\n preset: 'default',\n tokens: {\n colors: {\n primary: '#047857',\n accent: '#0D9488',\n background: { light: '#ffffff', dark: '#09090b' },\n foreground: { light: '#111827', dark: '#ffffff' },\n surface: { light: '#ffffff', dark: '#18181b' },\n muted: { light: '#64748b', dark: '#a1a1aa' },\n border: { light: 'rgb(15 23 42 / 0.12)', dark: 'rgb(255 255 255 / 0.1)' },\n codeBackground: { light: '#f6fbf8', dark: '#18181b' },\n },\n radius: {\n sm: '6px',\n md: '10px',\n lg: '14px',\n xl: '18px',\n },\n },\n layout: {\n maxWidth: '82rem',\n },\n editor: false,\n },\n base: {\n preset: 'base',\n tokens: {\n colors: {\n primary: '#18181b',\n accent: '#52525b',\n background: { light: '#ffffff', dark: '#09090b' },\n foreground: { light: '#18181b', dark: '#ffffff' },\n surface: { light: '#ffffff', dark: '#18181b' },\n muted: { light: '#71717a', dark: '#a1a1aa' },\n border: { light: 'rgb(24 24 27 / 0.12)', dark: 'rgb(255 255 255 / 0.1)' },\n codeBackground: { light: '#f4f4f5', dark: '#18181b' },\n },\n radius: {\n sm: '6px',\n md: '8px',\n lg: '12px',\n xl: '16px',\n },\n },\n layout: {\n maxWidth: '80rem',\n },\n editor: false,\n },\n} satisfies Record<ThemePreset, ThemeConfig>\n\nfunction cloneThemeColorValue(value: ThemeColorValue): ThemeColorValue {\n return typeof value === 'string' ? value : { ...value }\n}\n\nexport function cloneTheme(theme: ThemeConfig): ThemeConfig {\n return {\n preset: theme.preset,\n tokens: {\n colors: {\n primary: cloneThemeColorValue(theme.tokens.colors.primary),\n accent: cloneThemeColorValue(theme.tokens.colors.accent),\n background: cloneThemeColorValue(theme.tokens.colors.background),\n foreground: cloneThemeColorValue(theme.tokens.colors.foreground),\n surface: cloneThemeColorValue(theme.tokens.colors.surface),\n muted: cloneThemeColorValue(theme.tokens.colors.muted),\n border: cloneThemeColorValue(theme.tokens.colors.border),\n codeBackground: cloneThemeColorValue(theme.tokens.colors.codeBackground),\n },\n radius: { ...theme.tokens.radius },\n },\n layout: { ...theme.layout },\n editor: theme.editor,\n }\n}\n\nfunction isModeColorValue(value: ThemeColorValue): value is Exclude<ThemeColorValue, string> {\n return typeof value === 'object' && value !== null\n}\n\nexport function resolveThemeColorValue(value: ThemeColorValue, resolvedTheme: 'light' | 'dark' = 'light'): string {\n if (!isModeColorValue(value)) return value\n\n return value[resolvedTheme] ?? value.light ?? value.dark ?? ''\n}\n\nexport function resolveThemeColors(colors: ThemeColorTokensConfig, resolvedTheme: 'light' | 'dark' = 'light'): Record<keyof ThemeColorTokensConfig, string> {\n return {\n primary: resolveThemeColorValue(colors.primary, resolvedTheme),\n accent: resolveThemeColorValue(colors.accent, resolvedTheme),\n background: resolveThemeColorValue(colors.background, resolvedTheme),\n foreground: resolveThemeColorValue(colors.foreground, resolvedTheme),\n surface: resolveThemeColorValue(colors.surface, resolvedTheme),\n muted: resolveThemeColorValue(colors.muted, resolvedTheme),\n border: resolveThemeColorValue(colors.border, resolvedTheme),\n codeBackground: resolveThemeColorValue(colors.codeBackground, resolvedTheme),\n }\n}\n\nexport function themeToCssVariables(theme: ThemeConfig, resolvedTheme?: 'light' | 'dark'): ThemeCssVariables {\n const colors = resolveThemeColors(theme.tokens.colors, resolvedTheme)\n const { radius } = theme.tokens\n\n return {\n '--clarify-theme-tokens-colors-primary': colors.primary,\n '--clarify-theme-tokens-colors-accent': colors.accent,\n '--clarify-theme-tokens-colors-background': colors.background,\n '--clarify-theme-tokens-colors-foreground': colors.foreground,\n '--clarify-theme-tokens-colors-surface': colors.surface,\n '--clarify-theme-tokens-colors-muted': colors.muted,\n '--clarify-theme-tokens-colors-border': colors.border,\n '--clarify-theme-tokens-colors-code-background': colors.codeBackground,\n '--clarify-theme-tokens-radius-sm': radius.sm,\n '--clarify-theme-tokens-radius-md': radius.md,\n '--clarify-theme-tokens-radius-lg': radius.lg,\n '--clarify-theme-tokens-radius-xl': radius.xl,\n '--clarify-theme-layout-max-width': theme.layout.maxWidth,\n }\n}\n\nexport function themeBootstrapScript(theme: ThemeConfig = themePresets.default): string {\n const darkVariables = themeToCssVariables(theme, 'dark')\n const lightVariables = themeToCssVariables(theme, 'light')\n\n return `(function(){try{var c=${JSON.stringify(themeCookieName)};var m=document.cookie?document.cookie.split('; '):[];var e=null;for(var i=0;i<m.length;i++){var p=m[i].indexOf('=');var n=p===-1?m[i]:m[i].slice(0,p);if(decodeURIComponent(n)===c){e=p===-1?'':decodeURIComponent(m[i].slice(p+1));break}}var t=e==='dark'||e==='light'||e==='system'?e:'system';var r=t==='system'?window.matchMedia('(prefers-color-scheme: dark)').matches:t==='dark';var v=r?${JSON.stringify(darkVariables)}:${JSON.stringify(lightVariables)};var s=document.documentElement.style;for(var k in v)s.setProperty(k,v[k]);document.documentElement.classList.toggle('dark',r);document.documentElement.style.colorScheme=r?'dark':'light'}catch(e){}})();`\n}\n\nfunction uniqueElements(elements: HTMLElement[]): HTMLElement[] {\n return Array.from(new Set(elements))\n}\n\nexport function resolveThemeVariableTargets(target?: ThemeVariableTarget): HTMLElement[] {\n if (typeof document === 'undefined') return []\n\n if (target instanceof HTMLElement) return [target]\n\n if (typeof target === 'string') {\n return Array.from(document.querySelectorAll<HTMLElement>(target))\n }\n\n return uniqueElements([\n document.documentElement,\n ...Array.from(document.querySelectorAll<HTMLElement>('.clarify-app')),\n ])\n}\n\nexport function applyThemeCssVariables(variables: ThemeCssVariables, targets: HTMLElement[]): () => void {\n const previousValues = new Map<HTMLElement, Map<string, string>>()\n\n for (const element of targets) {\n const elementPreviousValues = new Map<string, string>()\n\n for (const [property, value] of Object.entries(variables)) {\n elementPreviousValues.set(property, element.style.getPropertyValue(property))\n element.style.setProperty(property, value)\n }\n\n previousValues.set(element, elementPreviousValues)\n }\n\n return () => {\n for (const [element, elementPreviousValues] of previousValues) {\n for (const [property, previousValue] of elementPreviousValues) {\n if (previousValue) {\n element.style.setProperty(property, previousValue)\n } else {\n element.style.removeProperty(property)\n }\n }\n }\n }\n}\n","import clsx from 'clsx'\nimport { ChevronDown, Settings, WandSparkles, X } from 'lucide-react'\nimport { useEffect, useMemo, useState } from 'react'\nimport type { ChangeEvent } from 'react'\n\nimport type {\n ThemeColorTokensConfig,\n ThemeColorValue,\n ThemeConfig,\n ThemeLayoutConfig,\n ThemePreset,\n ThemeRadiusTokensConfig,\n} from '../types'\n\nimport { createRandomTheme } from './randomTheme'\nimport { useTheme } from './ThemeProvider'\nimport { applyThemeCssVariables, themePresets, cloneTheme, resolveThemeColorValue, resolveThemeVariableTargets, themeToCssVariables } from './variables'\nimport type { ThemeVariableTarget } from './variables'\n\nconst colorTokenFields = [\n { key: 'primary', label: 'Primary' },\n { key: 'accent', label: 'Accent' },\n { key: 'background', label: 'Background' },\n { key: 'foreground', label: 'Foreground' },\n { key: 'surface', label: 'Surface' },\n { key: 'muted', label: 'Muted' },\n { key: 'border', label: 'Border' },\n { key: 'codeBackground', label: 'Code background' },\n] as const satisfies ReadonlyArray<{ key: keyof ThemeColorTokensConfig; label: string }>\n\nconst radiusTokenFields = [\n { key: 'sm', label: 'Small' },\n { key: 'md', label: 'Medium' },\n { key: 'lg', label: 'Large' },\n { key: 'xl', label: 'Extra large' },\n] as const satisfies ReadonlyArray<{ key: keyof ThemeRadiusTokensConfig; label: string }>\n\nconst layoutFields = [\n { key: 'maxWidth', label: 'Max width' },\n] as const satisfies ReadonlyArray<{ key: keyof ThemeLayoutConfig; label: string }>\n\nexport type ThemeEditorProps = {\n /** The resolved theme to use as the editor's initial value. */\n initialTheme?: ThemeConfig;\n /** Called every time a token changes. */\n onChange?: (theme: ThemeConfig) => void;\n /** CSS variable target. Defaults to documentElement and every .clarify-app root. */\n target?: ThemeVariableTarget;\n /** Whether the panel is open by default. */\n defaultOpen?: boolean;\n className?: string;\n}\n\nexport const themeEditorPresets = themePresets\n\nexport function applyThemeVariables(theme: ThemeConfig, target?: ThemeVariableTarget): () => void {\n return applyThemeCssVariables(themeToCssVariables(theme), resolveThemeVariableTargets(target))\n}\n\nfunction isHexColor(value: string): boolean {\n return /^#[0-9a-f]{6}$/i.test(value)\n}\n\nfunction updateThemeModeColorValue(value: ThemeColorTokensConfig[keyof ThemeColorTokensConfig], mode: 'light' | 'dark', nextValue: string): ThemeColorTokensConfig[keyof ThemeColorTokensConfig] {\n if (typeof value === 'string') {\n return mode === 'light' ? { light: nextValue, dark: value } : { light: value, dark: nextValue }\n }\n\n return {\n ...value,\n [mode]: nextValue,\n }\n}\n\ntype TextFieldProps = {\n id: string;\n label: string;\n value: string;\n onChange: (value: string) => void;\n withColorInput?: boolean;\n}\n\nfunction TextField(props: TextFieldProps) {\n const { id, label, value, onChange, withColorInput = false } = props\n const canUseColorInput = withColorInput && isHexColor(value)\n\n function handleTextChange(event: ChangeEvent<HTMLInputElement>) {\n onChange(event.target.value)\n }\n\n return (\n <label htmlFor={id} className=\"grid min-w-0 gap-1.5 text-xs/5 font-medium text-(--clarify-ui-text)\">\n <span className=\"flex min-w-0 items-center justify-between gap-3\">\n <span className=\"truncate\">{label}</span>\n {canUseColorInput ? (\n <input\n type=\"color\"\n value={value}\n aria-label={`${label} color`}\n className=\"h-5 w-8 shrink-0 cursor-pointer rounded border border-(--clarify-theme-tokens-colors-border) bg-transparent p-0\"\n onChange={handleTextChange}\n />\n ) : null}\n </span>\n <input\n id={id}\n value={value}\n spellCheck={false}\n className=\"h-9 w-full min-w-0 rounded-(--clarify-theme-tokens-radius-md) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-background) px-2.5 font-mono text-xs text-(--clarify-theme-tokens-colors-foreground) shadow-xs outline-none transition focus:border-(--clarify-theme-tokens-colors-primary) focus:ring-2 focus:ring-(--clarify-ui-accent-border)\"\n onChange={handleTextChange}\n />\n </label>\n )\n}\n\ntype ColorFieldProps = {\n id: string;\n label: string;\n value: ThemeColorValue;\n onChange: (mode: 'light' | 'dark', value: string) => void;\n}\n\nfunction ColorField(props: ColorFieldProps) {\n const { id, label, value, onChange } = props\n const lightValue = resolveThemeColorValue(value, 'light')\n const darkValue = resolveThemeColorValue(value, 'dark')\n\n return (\n <div className=\"grid min-w-0 gap-1.5\">\n <span className=\"text-xs/5 font-medium text-(--clarify-ui-text)\">{label}</span>\n <div className=\"grid grid-cols-2 gap-2\">\n <ColorModeInput id={`${id}-light`} mode=\"light\" value={lightValue} onChange={(v) => onChange('light', v)} />\n <ColorModeInput id={`${id}-dark`} mode=\"dark\" value={darkValue} onChange={(v) => onChange('dark', v)} />\n </div>\n </div>\n )\n}\n\ntype ColorModeInputProps = {\n id: string;\n mode: 'light' | 'dark';\n value: string;\n onChange: (value: string) => void;\n}\n\nfunction ColorModeInput(props: ColorModeInputProps) {\n const { id, mode, value, onChange } = props\n const canUseColorInput = isHexColor(value)\n\n function handleTextChange(event: ChangeEvent<HTMLInputElement>) {\n onChange(event.target.value)\n }\n\n return (\n <label htmlFor={id} className=\"grid min-w-0 gap-1 text-[11px]/4 font-medium text-(--clarify-ui-text-faint)\">\n <span className=\"flex min-w-0 items-center justify-between gap-2\">\n <span className=\"uppercase tracking-wide\">{mode}</span>\n {canUseColorInput ? (\n <input\n type=\"color\"\n value={value}\n aria-label={`${id} color`}\n className=\"h-4 w-6 shrink-0 cursor-pointer rounded border border-(--clarify-theme-tokens-colors-border) bg-transparent p-0\"\n onChange={handleTextChange}\n />\n ) : null}\n </span>\n <input\n id={id}\n value={value}\n spellCheck={false}\n className=\"h-8 w-full min-w-0 rounded-(--clarify-theme-tokens-radius-sm) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-background) px-2 font-mono text-xs text-(--clarify-theme-tokens-colors-foreground) shadow-xs outline-none transition focus:border-(--clarify-theme-tokens-colors-primary) focus:ring-2 focus:ring-(--clarify-ui-accent-border)\"\n onChange={handleTextChange}\n />\n </label>\n )\n}\n\nfunction themeToConfigSource(theme: ThemeConfig): string {\n return JSON.stringify(\n {\n theme: {\n preset: theme.preset,\n tokens: theme.tokens,\n layout: theme.layout,\n },\n },\n null,\n 2,\n )\n}\n\nexport function ThemeEditor(props: ThemeEditorProps) {\n const { initialTheme, onChange, target, defaultOpen = false, className } = props\n const { resolvedTheme } = useTheme()\n const [isOpen, setIsOpen] = useState(defaultOpen)\n const [theme, setTheme] = useState<ThemeConfig>(() => cloneTheme(initialTheme ?? themeEditorPresets.default))\n const [copyState, setCopyState] = useState<'idle' | 'copied' | 'failed'>('idle')\n const configSource = useMemo(() => themeToConfigSource(theme), [theme])\n\n useEffect(() => applyThemeCssVariables(themeToCssVariables(theme, resolvedTheme), resolveThemeVariableTargets(target)), [resolvedTheme, target, theme])\n\n function commit(nextTheme: ThemeConfig) {\n setTheme(nextTheme)\n onChange?.(nextTheme)\n }\n\n function updatePreset(nextPreset: ThemePreset) {\n commit(cloneTheme(themeEditorPresets[nextPreset]))\n }\n\n function updateColorToken(key: keyof ThemeColorTokensConfig, mode: 'light' | 'dark', value: string) {\n commit({\n ...theme,\n tokens: {\n ...theme.tokens,\n colors: {\n ...theme.tokens.colors,\n [key]: updateThemeModeColorValue(theme.tokens.colors[key], mode, value),\n },\n },\n })\n }\n\n function updateRadiusToken(key: keyof ThemeRadiusTokensConfig, value: string) {\n commit({\n ...theme,\n tokens: {\n ...theme.tokens,\n radius: {\n ...theme.tokens.radius,\n [key]: value,\n },\n },\n })\n }\n\n function updateLayoutToken(key: keyof ThemeLayoutConfig, value: string) {\n commit({\n ...theme,\n layout: {\n ...theme.layout,\n [key]: value,\n },\n })\n }\n\n async function copyConfig() {\n try {\n await navigator.clipboard.writeText(configSource)\n setCopyState('copied')\n window.setTimeout(() => setCopyState('idle'), 1400)\n } catch {\n setCopyState('failed')\n window.setTimeout(() => setCopyState('idle'), 1400)\n }\n }\n\n return (\n <div className={clsx('clarify-theme-editor fixed right-4 bottom-4 z-50 text-(--clarify-theme-tokens-colors-foreground)', className)}>\n {isOpen ? (\n <section\n className=\"mb-3 flex max-h-(--clarify-theme-editor-panel-max-height) w-(--clarify-theme-editor-width) flex-col overflow-hidden rounded-md border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface)/95 shadow-2xl shadow-zinc-900/15 backdrop-blur\"\n aria-label=\"Clarify theme editor\"\n >\n <header className=\"shrink-0 flex items-start justify-between gap-4 border-b border-(--clarify-theme-tokens-colors-border) px-4 py-3\">\n <div>\n <h2 className=\"text-sm/6 font-semibold text-(--clarify-theme-tokens-colors-foreground)\">Theme editor</h2>\n <p className=\"mt-0.5 text-xs/5 text-(--clarify-ui-text-soft)\">Live CSS variable preview for Clarify theme tokens.</p>\n </div>\n <button\n type=\"button\"\n className=\"-mr-1 flex size-8 items-center justify-center rounded-(--clarify-theme-tokens-radius-md) text-(--clarify-ui-text-soft) transition hover:bg-(--clarify-ui-hover-background) hover:text-(--clarify-ui-text-strong)\"\n aria-label=\"Close theme editor\"\n onClick={() => setIsOpen(false)}\n >\n <X className=\"size-4 stroke-current stroke-2\" />\n </button>\n </header>\n\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-4\">\n <div className=\"grid gap-5\">\n <label htmlFor=\"clarify-theme-editor-preset\" className=\"grid gap-1.5 text-xs/5 font-medium text-(--clarify-ui-text)\">\n Preset\n <span className=\"relative block\">\n <select\n id=\"clarify-theme-editor-preset\"\n value={theme.preset}\n className=\"h-9 w-full appearance-none rounded-(--clarify-theme-tokens-radius-md) border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-background) px-2.5 pr-9 text-sm text-(--clarify-theme-tokens-colors-foreground) shadow-xs outline-none transition focus:border-(--clarify-theme-tokens-colors-primary) focus:ring-2 focus:ring-(--clarify-ui-accent-border)\"\n onChange={(event) => updatePreset(event.target.value as ThemePreset)}\n >\n <option value=\"default\">default</option>\n <option value=\"base\">base</option>\n </select>\n <ChevronDown className=\"pointer-events-none absolute top-1/2 right-3 size-4 -translate-y-1/2 stroke-current stroke-2 text-(--clarify-ui-text-faint)\" />\n </span>\n </label>\n\n <fieldset className=\"grid gap-3\">\n <legend className=\"mb-2 text-xs/5 font-semibold uppercase tracking-wide text-(--clarify-ui-text-faint)\">Colors</legend>\n <div className=\"grid grid-cols-1 gap-3\">\n {colorTokenFields.map((field) => (\n <ColorField\n key={field.key}\n id={`clarify-theme-editor-color-${field.key}`}\n label={field.label}\n value={theme.tokens.colors[field.key]}\n onChange={(mode, value) => updateColorToken(field.key, mode, value)}\n />\n ))}\n </div>\n </fieldset>\n\n <fieldset className=\"grid gap-3\">\n <legend className=\"mb-2 text-xs/5 font-semibold uppercase tracking-wide text-(--clarify-ui-text-faint)\">Radius</legend>\n <div className=\"grid grid-cols-2 gap-3\">\n {radiusTokenFields.map((field) => (\n <TextField\n key={field.key}\n id={`clarify-theme-editor-radius-${field.key}`}\n label={field.label}\n value={theme.tokens.radius[field.key]}\n onChange={(value) => updateRadiusToken(field.key, value)}\n />\n ))}\n </div>\n </fieldset>\n\n <fieldset className=\"grid gap-3\">\n <legend className=\"mb-2 text-xs/5 font-semibold uppercase tracking-wide text-(--clarify-ui-text-faint)\">Layout</legend>\n {layoutFields.map((field) => (\n <TextField\n key={field.key}\n id={`clarify-theme-editor-layout-${field.key}`}\n label={field.label}\n value={theme.layout[field.key]}\n onChange={(value) => updateLayoutToken(field.key, value)}\n />\n ))}\n </fieldset>\n </div>\n </div>\n\n <footer className=\"shrink-0 flex items-center justify-between gap-3 border-t border-(--clarify-theme-tokens-colors-border) bg-(--clarify-ui-subtle-background) px-4 py-3\">\n <div className=\"flex items-center gap-1.5\">\n <button\n type=\"button\"\n className=\"rounded-(--clarify-theme-tokens-radius-md) px-2.5 py-1.5 text-xs/5 font-semibold text-(--clarify-ui-text) transition hover:bg-(--clarify-ui-hover-background) hover:text-(--clarify-ui-text-strong)\"\n onClick={() => updatePreset(theme.preset)}\n >\n Reset preset\n </button>\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1.5 rounded-(--clarify-theme-tokens-radius-md) px-2.5 py-1.5 text-xs/5 font-semibold text-(--clarify-ui-text) transition hover:bg-(--clarify-ui-hover-background) hover:text-(--clarify-ui-text-strong)\"\n onClick={() => commit(createRandomTheme())}\n >\n <WandSparkles className=\"size-3.5 stroke-current stroke-2\" />\n Random\n </button>\n </div>\n <button\n type=\"button\"\n className=\"rounded-(--clarify-theme-tokens-radius-md) bg-(--clarify-theme-tokens-colors-primary) px-3 py-1.5 text-xs/5 font-semibold text-white shadow-xs transition hover:opacity-90\"\n onClick={copyConfig}\n >\n {copyState === 'copied' ? 'Copied' : copyState === 'failed' ? 'Copy failed' : 'Copy config'}\n </button>\n </footer>\n </section>\n ) : null}\n\n <button\n type=\"button\"\n className=\"ml-auto flex size-12 items-center justify-center rounded-full border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface)/95 text-(--clarify-theme-tokens-colors-primary) shadow-xl shadow-zinc-900/15 backdrop-blur transition hover:scale-105 hover:bg-(--clarify-ui-accent-background) focus:outline-none focus:ring-2 focus:ring-(--clarify-ui-accent-border)\"\n aria-label={isOpen ? 'Close Clarify theme editor' : 'Open Clarify theme editor'}\n aria-expanded={isOpen}\n onClick={() => setIsOpen((value) => !value)}\n >\n <Settings className=\"size-5 stroke-current stroke-2\" />\n </button>\n </div>\n )\n}\n","import { useEffect, useMemo } from 'react'\nimport type { ReactNode } from 'react'\n\nimport type { ThemeConfig } from '../types'\n\nimport { ThemeEditor } from './ThemeEditor'\nimport { useTheme } from './ThemeProvider'\nimport { applyThemeCssVariables, resolveThemeVariableTargets, themeToCssVariables } from './variables'\n\ntype ThemeRootProps = {\n children: ReactNode\n theme: ThemeConfig\n themeEditor?: boolean\n}\n\nexport function ThemeRoot(props: ThemeRootProps) {\n const { children, theme, themeEditor = false } = props\n const { resolvedTheme } = useTheme()\n const themeVariables = useMemo(() => themeToCssVariables(theme, resolvedTheme), [resolvedTheme, theme])\n\n useEffect(() => applyThemeCssVariables(themeVariables, resolveThemeVariableTargets(':root')), [themeVariables])\n\n return (\n <div\n className=\"clarify-app h-full min-h-screen bg-(--clarify-theme-tokens-colors-background) text-(--clarify-theme-tokens-colors-foreground)\"\n data-theme-preset={theme.preset}\n >\n {children}\n {themeEditor ? <ThemeEditor initialTheme={theme} /> : null}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\n\nimport { AppShell } from '../app/AppShell'\nimport { ConfigContext, OpenApisContext } from '../core/context'\nimport type { Config, NavigationTree, RouteItem } from '../core/types'\nimport type { OpenAPISpec } from '../openapi/lib/utils'\nimport type { RuntimeSlots } from '../slots'\nimport { ThemeProvider } from '../theme/ThemeProvider'\nimport { ThemeRoot } from '../theme/ThemeRoot'\n\nexport type ClarifyShellProps = {\n config: Config\n routes: RouteItem[]\n navigation?: NavigationTree\n openApis: Record<string, OpenAPISpec>\n runtimeSlots?: RuntimeSlots\n themeEditor?: boolean\n children?: ReactNode\n}\n\n/**\n * Shared provider chain used by both client-side render and server-side\n * renderToHTML. Wraps AppShell with ConfigContext → OpenApisContext →\n * ThemeProvider → ThemeRoot.\n *\n * The outer Router (BrowserRouter / StaticRouter) is left to the caller\n * so each entry point can supply the correct router variant.\n */\nexport function ClarifyShell(props: ClarifyShellProps) {\n const {\n config,\n routes,\n navigation,\n openApis,\n runtimeSlots,\n themeEditor = false,\n } = props\n return (\n <ConfigContext.Provider value={config}>\n <OpenApisContext.Provider value={openApis}>\n <ThemeProvider>\n <ThemeRoot theme={config.theme} themeEditor={themeEditor}>\n <AppShell\n config={config}\n routes={routes}\n navigation={navigation ?? []}\n runtimeSlots={runtimeSlots}\n />\n </ThemeRoot>\n </ThemeProvider>\n </OpenApisContext.Provider>\n </ConfigContext.Provider>\n )\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-DakpK96I.cjs");
2
- const require_PageActions = require("./PageActions-1RDCHcUY.cjs");
2
+ const require_PageActions = require("./PageActions-yycPlNyL.cjs");
3
3
  const require_remark = require("./remark-Dv3owbSH.cjs");
4
4
  let clsx = require("clsx");
5
5
  clsx = require_chunk.__toESM(clsx, 1);
@@ -10,6 +10,7 @@ let lucide_react = require("lucide-react");
10
10
  let react_jsx_runtime = require("react/jsx-runtime");
11
11
  let framer_motion = require("framer-motion");
12
12
  let zustand = require("zustand");
13
+ let react_zoom_pan_pinch = require("react-zoom-pan-pinch");
13
14
  let react_markdown = require("react-markdown");
14
15
  react_markdown = require_chunk.__toESM(react_markdown, 1);
15
16
  let github_slugger = require("github-slugger");
@@ -198,6 +199,166 @@ function Card(arg0) {
198
199
  });
199
200
  }
200
201
  //#endregion
202
+ //#region source/components/Mermaid.tsx
203
+ var mermaidModulePromise;
204
+ async function loadMermaid() {
205
+ mermaidModulePromise = mermaidModulePromise ?? import("mermaid").then((module) => module.default);
206
+ return mermaidModulePromise;
207
+ }
208
+ function ZoomControls() {
209
+ const { zoomIn, zoomOut, resetTransform } = (0, react_zoom_pan_pinch.useControls)();
210
+ const t = require_PageActions.useBuiltInText();
211
+ const buttonClassName = "flex h-7 w-7 items-center justify-center rounded-md bg-(--clarify-theme-tokens-colors-surface) text-(--clarify-ui-text-soft) shadow-xs ring-1 ring-(--clarify-theme-tokens-colors-border) transition hover:bg-(--clarify-ui-hover-background) hover:text-(--clarify-theme-tokens-colors-foreground)";
212
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
213
+ className: "clarify-mermaid-controls absolute top-2 right-2 z-10 flex gap-1 opacity-0 transition group-hover:opacity-100 focus-within:opacity-100",
214
+ children: [
215
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
216
+ type: "button",
217
+ "aria-label": t("mermaid.zoomIn"),
218
+ title: t("mermaid.zoomIn"),
219
+ onClick: () => zoomIn(),
220
+ className: buttonClassName,
221
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ZoomIn, {
222
+ className: "h-4 w-4",
223
+ "aria-hidden": "true"
224
+ })
225
+ }),
226
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
227
+ type: "button",
228
+ "aria-label": t("mermaid.zoomOut"),
229
+ title: t("mermaid.zoomOut"),
230
+ onClick: () => zoomOut(),
231
+ className: buttonClassName,
232
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ZoomOut, {
233
+ className: "h-4 w-4",
234
+ "aria-hidden": "true"
235
+ })
236
+ }),
237
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
238
+ type: "button",
239
+ "aria-label": t("mermaid.resetZoom"),
240
+ title: t("mermaid.resetZoom"),
241
+ onClick: () => resetTransform(),
242
+ className: buttonClassName,
243
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Maximize2, {
244
+ className: "h-4 w-4",
245
+ "aria-hidden": "true"
246
+ })
247
+ })
248
+ ]
249
+ });
250
+ }
251
+ function Mermaid(arg0) {
252
+ const { chart, className } = arg0;
253
+ const t = require_PageActions.useBuiltInText();
254
+ const { resolvedTheme } = require_PageActions.useTheme();
255
+ const renderId = `clarify-mermaid-${(0, react.useId)().replace(/[^a-zA-Z0-9]/g, "")}`;
256
+ const containerRef = (0, react.useRef)(null);
257
+ const [svg, setSvg] = (0, react.useState)("");
258
+ const [error, setError] = (0, react.useState)(void 0);
259
+ const [focused, setFocused] = (0, react.useState)(false);
260
+ (0, react.useEffect)(() => {
261
+ let cancelled = false;
262
+ async function renderChart() {
263
+ const source = chart.trim();
264
+ if (!source) {
265
+ setSvg("");
266
+ setError(void 0);
267
+ return;
268
+ }
269
+ try {
270
+ const mermaid = await loadMermaid();
271
+ mermaid.initialize({
272
+ startOnLoad: false,
273
+ securityLevel: "strict",
274
+ theme: resolvedTheme === "dark" ? "dark" : "default",
275
+ fontFamily: "inherit"
276
+ });
277
+ const { svg: renderedSvg } = await mermaid.render(renderId, source);
278
+ if (!cancelled) {
279
+ setSvg(renderedSvg);
280
+ setError(void 0);
281
+ }
282
+ } catch (renderError) {
283
+ if (!cancelled) {
284
+ setSvg("");
285
+ setError(renderError instanceof Error ? renderError.message : String(renderError));
286
+ }
287
+ }
288
+ }
289
+ renderChart();
290
+ return () => {
291
+ cancelled = true;
292
+ };
293
+ }, [
294
+ chart,
295
+ renderId,
296
+ resolvedTheme
297
+ ]);
298
+ if (error) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
299
+ className: (0, clsx.default)("clarify-mermaid clarify-mermaid-error my-6 overflow-x-auto rounded-2xl border border-(--clarify-ui-accent-border) bg-(--clarify-ui-accent-background) p-4", className),
300
+ children: [
301
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
302
+ className: "text-sm font-semibold text-(--clarify-error-accent-text)",
303
+ children: t("mermaid.renderError")
304
+ }),
305
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
306
+ className: "mt-2 text-xs whitespace-pre-wrap text-(--clarify-ui-text-soft)",
307
+ children: error
308
+ }),
309
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
310
+ className: "mt-2 text-xs whitespace-pre-wrap text-(--clarify-ui-text-faint)",
311
+ children: chart.trim()
312
+ })
313
+ ]
314
+ });
315
+ if (!svg) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
316
+ className: (0, clsx.default)("clarify-mermaid clarify-mermaid-loading not-prose my-6 overflow-x-auto rounded-2xl border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) p-4", className),
317
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
318
+ className: "text-xs text-(--clarify-ui-text-soft)",
319
+ children: chart.trim()
320
+ })
321
+ });
322
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
323
+ ref: containerRef,
324
+ tabIndex: 0,
325
+ role: "group",
326
+ onPointerDown: () => containerRef.current?.focus(),
327
+ onFocus: () => setFocused(true),
328
+ onBlur: () => setFocused(false),
329
+ className: (0, clsx.default)("clarify-mermaid group not-prose relative my-6 overflow-hidden rounded-2xl border border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-surface) outline-none focus-visible:ring-2 focus-visible:ring-(--clarify-theme-tokens-colors-primary)", className),
330
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_zoom_pan_pinch.TransformWrapper, {
331
+ minScale: .5,
332
+ maxScale: 8,
333
+ initialScale: 1,
334
+ centerOnInit: true,
335
+ smooth: true,
336
+ wheel: {
337
+ step: .05,
338
+ wheelDisabled: !focused,
339
+ touchPadDisabled: !focused
340
+ },
341
+ doubleClick: { mode: "reset" },
342
+ children: [
343
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ZoomControls, {}),
344
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_zoom_pan_pinch.TransformComponent, {
345
+ wrapperClass: "!w-full !cursor-grab active:!cursor-grabbing",
346
+ contentClass: "!w-full justify-center [&_svg]:h-auto [&_svg]:max-w-full",
347
+ wrapperStyle: { height: "min(70vh, 32rem)" },
348
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
349
+ className: "flex h-full w-full items-center justify-center p-4",
350
+ dangerouslySetInnerHTML: { __html: svg }
351
+ })
352
+ }),
353
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
354
+ className: (0, clsx.default)("clarify-mermaid-hint pointer-events-none absolute bottom-2 left-1/2 z-10 -translate-x-1/2 rounded-full bg-(--clarify-theme-tokens-colors-surface)/90 px-2.5 py-1 text-2xs text-(--clarify-ui-text-soft) shadow-xs ring-1 ring-(--clarify-theme-tokens-colors-border) backdrop-blur-sm transition", focused ? "opacity-0" : "opacity-0 group-hover:opacity-100"),
355
+ children: t("mermaid.scrollHint")
356
+ })
357
+ ]
358
+ })
359
+ });
360
+ }
361
+ //#endregion
201
362
  //#region source/components/Code.tsx
202
363
  var languageNames = {
203
364
  js: "JavaScript",
@@ -419,8 +580,10 @@ function Code(arg0) {
419
580
  });
420
581
  }
421
582
  function Pre(arg0) {
422
- const { children, ...props } = arg0;
423
- if ((0, react.useContext)(CodeGroupContext)) return children;
583
+ const { children, language, code, ...props } = arg0;
584
+ const isGrouped = (0, react.useContext)(CodeGroupContext);
585
+ if (language === "mermaid") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Mermaid, { chart: code ?? getNodeText(children) });
586
+ if (isGrouped) return children;
424
587
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CodeGroup, {
425
588
  ...props,
426
589
  children
@@ -738,7 +901,7 @@ function HeroPattern() {
738
901
  function Prose(arg0) {
739
902
  const { as, className, ...props } = arg0;
740
903
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(as ?? "div", {
741
- className: (0, clsx.default)(className, "clarify-prose prose max-w-none dark:prose-invert", "[html_:where(&>*)]:w-full [html_:where(&>*)]:min-w-0 [html_:where(&>*)]:max-w-full"),
904
+ className: (0, clsx.default)(className, "clarify-prose prose max-w-none min-w-0 dark:prose-invert wrap-break-word", "[html_:where(&>*)]:w-full [html_:where(&>*)]:min-w-0 [html_:where(&>*)]:max-w-full"),
742
905
  ...props
743
906
  });
744
907
  }
@@ -813,18 +976,29 @@ var primitives_exports = /* @__PURE__ */ require_chunk.__exportAll({
813
976
  h2: () => h2,
814
977
  h3: () => h3,
815
978
  pre: () => pre,
979
+ table: () => table,
816
980
  wrapper: () => wrapper
817
981
  });
818
982
  function wrapper(arg0) {
819
983
  const { children } = arg0;
820
984
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("article", {
821
- className: "clarify-mdx-page flex h-full flex-col pt-14 pb-10",
985
+ className: "clarify-mdx-page flex h-full min-w-0 flex-col pt-14 pb-10",
822
986
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Prose, {
823
987
  className: "flex-auto",
824
988
  children
825
989
  })
826
990
  });
827
991
  }
992
+ function table(arg0) {
993
+ const { className, ...props } = arg0;
994
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
995
+ className: "overflow-x-auto",
996
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("table", {
997
+ className,
998
+ ...props
999
+ })
1000
+ });
1001
+ }
828
1002
  function a(arg0) {
829
1003
  const { href = "", ...props } = arg0;
830
1004
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LocalizedLink, {
@@ -928,6 +1102,23 @@ function Property(arg0) {
928
1102
  }
929
1103
  //#endregion
930
1104
  //#region source/mdx/Markdown.tsx
1105
+ function getMermaidChart(children) {
1106
+ if (!(0, react.isValidElement)(children)) return void 0;
1107
+ const props = children.props;
1108
+ const className = typeof props.className === "string" ? props.className : "";
1109
+ if (!/\blanguage-mermaid\b/.test(className)) return void 0;
1110
+ return typeof props.children === "string" ? props.children : void 0;
1111
+ }
1112
+ function MarkdownTable(arg0) {
1113
+ const { className, ...props } = arg0;
1114
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1115
+ className: "overflow-x-auto",
1116
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("table", {
1117
+ className,
1118
+ ...props
1119
+ })
1120
+ });
1121
+ }
931
1122
  var markdownComponents = {
932
1123
  a(props) {
933
1124
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(a, { ...props });
@@ -937,10 +1128,15 @@ var markdownComponents = {
937
1128
  },
938
1129
  pre(arg0) {
939
1130
  const { children, ...props } = arg0;
1131
+ const chart = getMermaidChart(children);
1132
+ if (chart !== void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Mermaid, { chart });
940
1133
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(pre, {
941
1134
  ...props,
942
1135
  children
943
1136
  });
1137
+ },
1138
+ table(props) {
1139
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MarkdownTable, { ...props });
944
1140
  }
945
1141
  };
946
1142
  function Markdown(arg0) {
@@ -2503,7 +2699,7 @@ function OpenApiOperation(arg0) {
2503
2699
  header: parameters.filter((parameter) => parameter.in === "header")
2504
2700
  };
2505
2701
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
2506
- className: "clarify-api-endpoint scroll-mt-24 py-16 first:pt-0 last:pb-0",
2702
+ className: "clarify-api-endpoint scroll-mt-24 pb-16 first:pt-0 last:pb-0",
2507
2703
  "aria-labelledby": id,
2508
2704
  children: [
2509
2705
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Heading, {
@@ -2654,6 +2850,12 @@ Object.defineProperty(exports, "Markdown", {
2654
2850
  return Markdown;
2655
2851
  }
2656
2852
  });
2853
+ Object.defineProperty(exports, "Mermaid", {
2854
+ enumerable: true,
2855
+ get: function() {
2856
+ return Mermaid;
2857
+ }
2858
+ });
2657
2859
  Object.defineProperty(exports, "OpenApiOperation", {
2658
2860
  enumerable: true,
2659
2861
  get: function() {
@@ -2745,4 +2947,4 @@ Object.defineProperty(exports, "primitives_exports", {
2745
2947
  }
2746
2948
  });
2747
2949
 
2748
- //# sourceMappingURL=OpenApiOperation-BcyW_ULy.cjs.map
2950
+ //# sourceMappingURL=OpenApiOperation-9SvCA_B4.cjs.map