@clarify-labs/renderer 0.6.4 → 0.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/output/{OpenApiOperation-BI41nyGy.cjs → OpenApiOperation-CsDX1s-6.cjs} +867 -80
- package/output/OpenApiOperation-CsDX1s-6.cjs.map +1 -0
- package/output/{OpenApiOperation-DcK7Ekkx.js → OpenApiOperation-WntXLbai.js} +770 -73
- package/output/OpenApiOperation-WntXLbai.js.map +1 -0
- package/output/ThemeRoot-DXoVzHSZ.cjs +1800 -0
- package/output/ThemeRoot-DXoVzHSZ.cjs.map +1 -0
- package/output/ThemeRoot-Dr8JC8Yc.js +1757 -0
- package/output/ThemeRoot-Dr8JC8Yc.js.map +1 -0
- package/output/app/ErrorBoundary.d.ts +29 -0
- package/output/client.cjs +5 -1
- package/output/client.d.ts +2 -0
- package/output/client.js +3 -2
- package/output/core/i18n.d.ts +1 -1
- package/output/core/types.d.ts +30 -9
- package/output/index.cjs +41 -31
- package/output/index.cjs.map +1 -1
- package/output/index.d.ts +3 -1
- package/output/index.js +18 -11
- package/output/index.js.map +1 -1
- package/output/openapi/entry.d.ts +1 -0
- package/output/preview.cjs +4 -3
- package/output/preview.cjs.map +1 -1
- package/output/preview.js +4 -3
- package/output/preview.js.map +1 -1
- package/output/{render-CjZt3edL.cjs → render-BfNmzJeJ.cjs} +12 -8
- package/output/render-BfNmzJeJ.cjs.map +1 -0
- package/output/{render-BpavVnAe.js → render-DS2wcTZJ.js} +12 -8
- package/output/render-DS2wcTZJ.js.map +1 -0
- package/output/renderer.css +450 -565
- package/output/server.cjs +11 -7
- package/output/server.cjs.map +1 -1
- package/output/server.js +11 -7
- package/output/server.js.map +1 -1
- package/output/{shell-_MyLsMUI.cjs → shell-D4tS8Jts.cjs} +112 -1016
- package/output/shell-D4tS8Jts.cjs.map +1 -0
- package/output/{shell-BlMMdTpZ.js → shell-DvTfFx6M.js} +107 -933
- package/output/shell-DvTfFx6M.js.map +1 -0
- package/output/theme/ThemeEditor.d.ts +67 -0
- package/output/theme/ThemeProvider.d.ts +1 -1
- package/output/theme/ThemeRoot.d.ts +9 -0
- package/output/theme/randomTheme.d.ts +2 -0
- package/output/theme/variables.d.ts +62 -0
- package/package.json +1 -1
- package/output/AppShell-D3FsVHQK.js +0 -390
- package/output/AppShell-D3FsVHQK.js.map +0 -1
- package/output/AppShell-DeaJ-rgo.cjs +0 -409
- package/output/AppShell-DeaJ-rgo.cjs.map +0 -1
- package/output/OpenApiOperation-BI41nyGy.cjs.map +0 -1
- package/output/OpenApiOperation-DcK7Ekkx.js.map +0 -1
- package/output/render-BpavVnAe.js.map +0 -1
- package/output/render-CjZt3edL.cjs.map +0 -1
- package/output/shell-BlMMdTpZ.js.map +0 -1
- package/output/shell-_MyLsMUI.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeRoot-Dr8JC8Yc.js","names":[],"sources":["../source/app/ErrorBoundary.tsx","../source/assets/clarify.svg?url","../source/app/BuiltWithClarify.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"],"sourcesContent":["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 break-words 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 break-words 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 break-words 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","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-5 flex-none\" />\n <span className=\"clarify-built-with-brand font-semibold\">Clarify</span>\n </a>\n )\n}\n","import clsx from 'clsx'\nimport { Link, useLocation } from 'react-router-dom'\n\nimport { useClarifyConfig } from '../core/context'\nimport type { ClarifyConfig, ClarifyLocalizedText, ClarifyNavbarLink } from '../core/types'\nimport { isExternalHref, localizeHref } from '../utils/href'\n\nimport { BuiltWithClarify } from './BuiltWithClarify'\n\nfunction resolveLocalizedText(text: ClarifyLocalizedText, locale?: string, fallbackLocale?: string): string {\n if (typeof text === 'string') return text\n return (locale ? text[locale] : undefined) ?? (fallbackLocale ? text[fallbackLocale] : undefined) ?? Object.values(text)[0] ?? ''\n}\n\nfunction localeForPath(config: ClarifyConfig, pathname: string): string | undefined {\n const i18n = config.i18n\n if (!i18n) return undefined\n const firstSegment = pathname.split('/').filter(Boolean)[0]\n return i18n.locales.find((locale) => locale.code === firstSegment)?.code ?? i18n.defaultLocale\n}\n\ntype FooterLinkProps = { link: ClarifyNavbarLink; locale?: string; config: ClarifyConfig }\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 = useClarifyConfig()\n const location = useLocation()\n const locale = localeForPath(config, location.pathname)\n const footer = config.footer\n const links = footer?.links ?? []\n const socials = Object.entries(footer?.socials ?? {})\n const copyright = footer?.copyright\n ? resolveLocalizedText(footer.copyright, locale, config.i18n?.defaultLocale)\n : undefined\n const hasCustomFooter = Boolean(copyright || links.length > 0 || socials.length > 0)\n\n return (\n <footer\n className={clsx(\n 'clarify-page-footer mx-auto flex w-full max-w-(--clarify-theme-layout-max-width) flex-col items-end gap-4 border-t border-(--clarify-theme-tokens-colors-border) px-4 py-8 sm:px-6 lg:mt-24 lg:px-5',\n hasCustomFooter && 'sm:flex-row sm:items-center sm:justify-between',\n )}\n >\n {hasCustomFooter ? (\n <div className=\"clarify-footer-content flex flex-col gap-3 text-right sm:text-left\">\n {copyright ? (\n <p className=\"clarify-footer-copyright m-0\">{copyright}</p>\n ) : null}\n {links.length > 0 || socials.length > 0 ? (\n <div className=\"clarify-footer-links flex flex-wrap justify-end gap-x-4 gap-y-2 sm:justify-start\">\n {links.map((link) => (\n <FooterLink key={`${link.href}-${resolveLocalizedText(link.label, locale, config.i18n?.defaultLocale)}`} link={link} locale={locale} config={config} />\n ))}\n {socials.map(([name, href]) => (\n <SocialLink key={name} name={name} href={href} />\n ))}\n </div>\n ) : null}\n </div>\n ) : null}\n <div className=\"clarify-footer-brand flex justify-end\">\n <BuiltWithClarify />\n </div>\n </footer>\n )\n}\n","import 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 } from 'react'\nimport type { ComponentType } from 'react'\nimport { Link, Routes, Route, useLocation } from 'react-router-dom'\n\nimport { ClarifyLocaleContext } from '../context'\nimport { useBuiltInText } from '../core/i18n'\nimport { ContentActions, Header, Navigation } from '../shell'\nimport type { RouteItem, ClarifyConfig, NavigationNode, NavigationTab, NavigationTree, TabbedNavigation } from '../types'\nimport { safeDecodeURIComponent } from '../utils/hash'\nimport { isSameRoutePath, normalizeRoutePath } from '../utils/path'\n\nimport { PageErrorBoundary } from './ErrorBoundary'\nimport { PageFooter } from './PageFooter'\nimport { PageNavigation } from './PageNavigation'\nimport { PageSkeleton } from './PageSkeleton'\nimport { SectionProvider, type Section } from './SectionProvider'\n\nexport type AppShellProps = {\n config: ClarifyConfig\n routes: RouteItem[]\n navigation: NavigationTree\n}\n\nfunction routeForPath(routes: RouteItem[], pathname: string): RouteItem | undefined {\n return routes.find((route) => 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 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 localeForPath(config: ClarifyConfig, pathname: string, route?: RouteItem): string | undefined {\n if (route?.locale) return route.locale\n const i18n = config.i18n\n if (!i18n) return undefined\n const firstSegment = pathname.split('/').filter(Boolean)[0]\n return i18n.locales.find((locale) => locale.code === firstSegment)?.code ?? i18n.defaultLocale\n}\n\nfunction 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: ClarifyConfig, 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: ClarifyConfig, 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 } = arg0\n const location = useLocation()\n const pathname = normalizeRoutePath(location.pathname)\n const currentRoute = routeForPath(routes, pathname)\n const currentLocale = localeForPath(config, pathname, currentRoute)\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 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 (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 <ClarifyLocaleContext.Provider value={currentLocale}>\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 />\n <div className=\"clarify-layout pb-12 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 <aside\n className={clsx(\n 'clarify-sidebar hidden lg:sticky lg:z-30 lg:block lg:h-(--clarify-sidebar-height) lg:self-start lg:overflow-y-auto lg:bg-(--clarify-theme-tokens-colors-background) lg:px-5 lg:pb-8 xl:px-6',\n hasTabs ? 'lg:top-28 lg:h-(--clarify-sidebar-height-with-tabs) lg:pt-6' : 'lg:top-14 lg:pt-6',\n )}\n >\n <Navigation navigation={currentNavigation.items} />\n </aside>\n <div className={clsx('clarify-content @container relative flex min-h-screen min-w-0 flex-col px-4 sm:px-6 lg:px-8 xl:px-10', hasTabs ? 'pt-14 lg:pt-28' : 'pt-14')}>\n <ContentActions hasTabs={hasTabs} route={currentRoute} routePrefix={config.routePrefix} />\n <main className=\"clarify-main min-w-0 flex-auto\">\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 </div>\n </div>\n <PageFooter />\n </SectionProvider>\n </ClarifyLocaleContext.Provider>\n )\n}\n","import type { ClarifyThemeConfig, ClarifyThemeRadiusTokensConfig } 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<ClarifyThemeRadiusTokensConfig>\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(): ClarifyThemeConfig {\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 { ClarifyThemeColorTokensConfig, ClarifyThemeColorValue, ClarifyThemeConfig, ClarifyThemePreset } from '../types'\n\nexport type ThemeCssVariables = CSSProperties & Record<`--clarify-theme-${string}`, string>\n\nexport type ThemeVariableTarget = HTMLElement | string\n\nexport const clarifyThemePresets = {\n default: {\n preset: 'default',\n tokens: {\n colors: {\n primary: '#047857',\n accent: '#0D9488',\n background: '#ffffff',\n foreground: '#111827',\n surface: '#ffffff',\n muted: '#64748b',\n border: 'rgb(15 23 42 / 0.12)',\n codeBackground: '#f6fbf8',\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: '#ffffff',\n foreground: '#18181b',\n surface: '#ffffff',\n muted: '#71717a',\n border: 'rgb(24 24 27 / 0.12)',\n codeBackground: '#f4f4f5',\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<ClarifyThemePreset, ClarifyThemeConfig>\n\nfunction cloneThemeColorValue(value: ClarifyThemeColorValue): ClarifyThemeColorValue {\n return typeof value === 'string' ? value : { ...value }\n}\n\nexport function cloneTheme(theme: ClarifyThemeConfig): ClarifyThemeConfig {\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: ClarifyThemeColorValue): value is Exclude<ClarifyThemeColorValue, string> {\n return typeof value === 'object' && value !== null\n}\n\nexport function resolveThemeColorValue(value: ClarifyThemeColorValue, 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: ClarifyThemeColorTokensConfig, resolvedTheme: 'light' | 'dark' = 'light'): Record<keyof ClarifyThemeColorTokensConfig, 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\nfunction matchesPresetTheme(theme: ClarifyThemeConfig): boolean {\n const preset = clarifyThemePresets[theme.preset]\n\n return JSON.stringify({ tokens: theme.tokens, layout: theme.layout }) === JSON.stringify({ tokens: preset.tokens, layout: preset.layout })\n}\n\nfunction effectiveTheme(theme: ClarifyThemeConfig, resolvedTheme?: 'light' | 'dark'): ClarifyThemeConfig {\n if (resolvedTheme !== 'dark' || !matchesPresetTheme(theme)) return theme\n\n return {\n ...theme,\n tokens: {\n ...theme.tokens,\n colors: {\n ...theme.tokens.colors,\n background: '#09090b',\n foreground: '#ffffff',\n surface: '#18181b',\n muted: '#a1a1aa',\n border: 'rgb(255 255 255 / 0.1)',\n codeBackground: '#18181b',\n },\n },\n }\n}\n\nexport function themeToCssVariables(theme: ClarifyThemeConfig, resolvedTheme?: 'light' | 'dark'): ThemeCssVariables {\n const resolved = effectiveTheme(theme, resolvedTheme)\n const colors = resolveThemeColors(resolved.tokens.colors, resolvedTheme)\n const { radius } = resolved.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': resolved.layout.maxWidth,\n }\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 ClarifyThemeColorTokensConfig,\n ClarifyThemeConfig,\n ClarifyThemeLayoutConfig,\n ClarifyThemePreset,\n ClarifyThemeRadiusTokensConfig,\n} from '../types'\n\nimport { createRandomTheme } from './randomTheme'\nimport { useTheme } from './ThemeProvider'\nimport { applyThemeCssVariables, clarifyThemePresets, 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 ClarifyThemeColorTokensConfig; 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 ClarifyThemeRadiusTokensConfig; label: string }>\n\nconst layoutFields = [\n { key: 'maxWidth', label: 'Max width' },\n] as const satisfies ReadonlyArray<{ key: keyof ClarifyThemeLayoutConfig; label: string }>\n\nexport type ThemeEditorProps = {\n /** The resolved theme to use as the editor's initial value. */\n initialTheme?: ClarifyThemeConfig;\n /** Called every time a token changes. */\n onChange?: (theme: ClarifyThemeConfig) => 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 clarifyThemeEditorPresets = clarifyThemePresets\n\nexport function applyClarifyThemeVariables(theme: ClarifyThemeConfig, 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: ClarifyThemeColorTokensConfig[keyof ClarifyThemeColorTokensConfig], resolvedTheme: 'light' | 'dark', nextValue: string): ClarifyThemeColorTokensConfig[keyof ClarifyThemeColorTokensConfig] {\n if (typeof value === 'string') return nextValue\n\n return {\n ...value,\n [resolvedTheme]: 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\nfunction themeToConfigSource(theme: ClarifyThemeConfig): 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<ClarifyThemeConfig>(() => cloneTheme(initialTheme ?? clarifyThemeEditorPresets.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: ClarifyThemeConfig) {\n setTheme(nextTheme)\n onChange?.(nextTheme)\n }\n\n function updatePreset(nextPreset: ClarifyThemePreset) {\n commit(cloneTheme(clarifyThemeEditorPresets[nextPreset]))\n }\n\n function updateColorToken(key: keyof ClarifyThemeColorTokensConfig, value: string) {\n commit({\n ...theme,\n tokens: {\n ...theme.tokens,\n colors: {\n ...theme.tokens.colors,\n [key]: updateThemeModeColorValue(theme.tokens.colors[key], resolvedTheme, value),\n },\n },\n })\n }\n\n function updateRadiusToken(key: keyof ClarifyThemeRadiusTokensConfig, 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 ClarifyThemeLayoutConfig, 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 w-(--clarify-theme-editor-width) 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=\"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=\"max-h-(--clarify-theme-editor-body-max-height) 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 ClarifyThemePreset)}\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 <TextField\n key={field.key}\n id={`clarify-theme-editor-color-${field.key}`}\n label={field.label}\n value={resolveThemeColorValue(theme.tokens.colors[field.key], resolvedTheme)}\n withColorInput\n onChange={(value) => updateColorToken(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)\">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=\"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 { ClarifyThemeConfig } 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: ClarifyThemeConfig\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 style={themeVariables}\n >\n {children}\n {themeEditor ? <ThemeEditor initialTheme={theme} /> : null}\n </div>\n )\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Component, ErrorInfo, ReactNode } from 'react';
|
|
2
|
+
type PageErrorBoundaryProps = {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
title: string;
|
|
5
|
+
description: string;
|
|
6
|
+
reloadLabel: string;
|
|
7
|
+
detailsLabel: string;
|
|
8
|
+
pathLabel: string;
|
|
9
|
+
typeLabel: string;
|
|
10
|
+
messageLabel: string;
|
|
11
|
+
stackLabel: string;
|
|
12
|
+
componentStackLabel: string;
|
|
13
|
+
timestampLabel: string;
|
|
14
|
+
copyLabel: string;
|
|
15
|
+
copiedLabel: string;
|
|
16
|
+
path: string;
|
|
17
|
+
};
|
|
18
|
+
type PageErrorBoundaryState = {
|
|
19
|
+
error?: Error;
|
|
20
|
+
errorInfo?: ErrorInfo;
|
|
21
|
+
occurredAt?: string;
|
|
22
|
+
};
|
|
23
|
+
export declare class PageErrorBoundary extends Component<PageErrorBoundaryProps, PageErrorBoundaryState> {
|
|
24
|
+
state: PageErrorBoundaryState;
|
|
25
|
+
static getDerivedStateFromError(error: Error): PageErrorBoundaryState;
|
|
26
|
+
componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
|
|
27
|
+
render(): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import('react').ReactPortal | import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react").JSX.Element | null | undefined;
|
|
28
|
+
}
|
|
29
|
+
export {};
|
package/output/client.cjs
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const
|
|
2
|
+
const require_ThemeRoot = require("./ThemeRoot-DXoVzHSZ.cjs");
|
|
3
|
+
const require_render = require("./render-BfNmzJeJ.cjs");
|
|
4
|
+
exports.ThemeEditor = require_ThemeRoot.ThemeEditor;
|
|
5
|
+
exports.applyClarifyThemeVariables = require_ThemeRoot.applyClarifyThemeVariables;
|
|
6
|
+
exports.clarifyThemeEditorPresets = require_ThemeRoot.clarifyThemeEditorPresets;
|
|
3
7
|
exports.render = require_render.render;
|
package/output/client.d.ts
CHANGED
package/output/client.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { i as clarifyThemeEditorPresets, n as ThemeEditor, r as applyClarifyThemeVariables } from "./ThemeRoot-Dr8JC8Yc.js";
|
|
2
|
+
import { t as render } from "./render-DS2wcTZJ.js";
|
|
3
|
+
export { ThemeEditor, applyClarifyThemeVariables, clarifyThemeEditorPresets, render };
|
package/output/core/i18n.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type BuiltInLocale = 'en' | 'zh-CN';
|
|
2
|
-
export type BuiltInTextKey = 'actions.code' | 'actions.copy' | 'actions.copied' | 'builtWith.label' | 'builtWith.prefix' | 'callout.danger' | 'callout.info' | 'callout.note' | 'callout.success' | 'callout.tip' | 'callout.warning' | 'contentActions.copyContent' | 'contentActions.copyContentDescription' | 'contentActions.copyLink' | 'contentActions.copyLinkDescription' | 'contentActions.copyLlms' | 'contentActions.copyLlmsDescription' | 'contentActions.copiedLlms' | 'contentActions.copyOptions' | 'contentActions.copiedContent' | 'contentActions.copiedLink' | 'contentActions.viewMarkdown' | 'contentActions.viewMarkdownDescription' | 'contentActions.viewOpenApi' | 'contentActions.viewOpenApiDescription' | 'feedback.no' | 'feedback.prompt' | 'feedback.thanks' | 'feedback.yes' | 'navigation.documentation' | 'navigation.next' | 'navigation.previous' | 'navigation.previousNext' | 'navigation.toggle' | 'navbar.home' | 'navbar.openLinks' | 'navbar.sections' | 'openapi.apiDocumentation' | 'openapi.bodyProperties' | 'openapi.collapse' | 'openapi.endpointNotFound' | 'openapi.example' | 'openapi.expand' | 'openapi.headers' | 'openapi.language' | 'openapi.client' | 'openapi.mediaType' | 'openapi.openApiReference' | 'openapi.operationParameter' | 'openapi.optional' | 'openapi.parameter' | 'openapi.pathParameters' | 'openapi.queryParameters' | 'openapi.request' | 'openapi.requestBody' | 'openapi.required' | 'openapi.requiredBadge' | 'openapi.response' | 'openapi.responses' | 'openapi.schemaExample' | 'openapi.scrollExamplesLeft' | 'openapi.scrollExamplesRight' | 'openapi.specNotFound' | 'openapi.specPathMissing' | 'openapi.status' | 'openapi.version' | 'search.button' | 'search.noResults' | 'search.placeholder' | 'search.shortcutCtrl' | 'theme.switchToDark' | 'theme.switchToLight' | 'language.switch';
|
|
2
|
+
export type BuiltInTextKey = 'actions.code' | 'actions.copy' | 'actions.copied' | 'builtWith.label' | 'builtWith.prefix' | 'callout.danger' | 'callout.info' | 'callout.note' | 'callout.success' | 'callout.tip' | 'callout.warning' | 'contentActions.copyContent' | 'contentActions.copyContentDescription' | 'contentActions.copyLink' | 'contentActions.copyLinkDescription' | 'contentActions.copyLlms' | 'contentActions.copyLlmsDescription' | 'contentActions.copiedLlms' | 'contentActions.editPage' | 'contentActions.editPageDescription' | 'contentActions.copyOptions' | 'contentActions.copiedContent' | 'contentActions.copiedLink' | 'contentActions.viewMarkdown' | 'contentActions.viewMarkdownDescription' | 'contentActions.viewOpenApi' | 'contentActions.viewOpenApiDescription' | 'feedback.no' | 'feedback.prompt' | 'feedback.thanks' | 'feedback.yes' | 'navigation.documentation' | 'navigation.next' | 'navigation.previous' | 'navigation.previousNext' | 'navigation.toggle' | 'navbar.home' | 'navbar.openLinks' | 'navbar.sections' | 'notFound.description' | 'notFound.home' | 'notFound.label' | 'notFound.title' | 'openapi.apiDocumentation' | 'openapi.bodyProperties' | 'openapi.collapse' | 'openapi.endpointNotFound' | 'openapi.example' | 'openapi.expand' | 'openapi.headers' | 'openapi.language' | 'openapi.client' | 'openapi.mediaType' | 'openapi.openApiReference' | 'openapi.operationParameter' | 'openapi.optional' | 'openapi.parameter' | 'openapi.pathParameters' | 'openapi.queryParameters' | 'openapi.request' | 'openapi.requestBody' | 'openapi.required' | 'openapi.requiredBadge' | 'openapi.response' | 'openapi.responses' | 'openapi.schemaExample' | 'openapi.scrollExamplesLeft' | 'openapi.scrollExamplesRight' | 'openapi.specNotFound' | 'openapi.specPathMissing' | 'openapi.status' | 'openapi.version' | 'search.button' | 'search.noResults' | 'search.placeholder' | 'search.shortcutCtrl' | 'renderError.componentStack' | 'renderError.description' | 'renderError.details' | 'renderError.message' | 'renderError.path' | 'renderError.reload' | 'renderError.stack' | 'renderError.timestamp' | 'renderError.title' | 'renderError.type' | 'theme.switchToDark' | 'theme.switchToLight' | 'language.switch';
|
|
3
3
|
export declare function resolveBuiltInLocale(locale?: string): BuiltInLocale;
|
|
4
4
|
export declare function translateBuiltInText(locale: string | undefined, key: BuiltInTextKey, replacements?: Record<string, string>): string;
|
|
5
5
|
export declare function useBuiltInText(locale?: string): (key: BuiltInTextKey, replacements?: Record<string, string>) => string;
|
package/output/core/types.d.ts
CHANGED
|
@@ -27,9 +27,10 @@ export type RouteItem = {
|
|
|
27
27
|
keywords?: string[];
|
|
28
28
|
component: RouteComponent;
|
|
29
29
|
lazy?: boolean;
|
|
30
|
-
kind?:
|
|
30
|
+
kind?: string;
|
|
31
31
|
sections?: RouteSection[];
|
|
32
32
|
contentArtifactUrl?: string;
|
|
33
|
+
sourceUrl?: string;
|
|
33
34
|
};
|
|
34
35
|
export type ClarifyLogoConfig = string | {
|
|
35
36
|
light?: string;
|
|
@@ -64,16 +65,26 @@ export type ClarifyFooterConfig = {
|
|
|
64
65
|
socials?: Record<string, string>;
|
|
65
66
|
copyright?: ClarifyLocalizedText;
|
|
66
67
|
};
|
|
68
|
+
export type ClarifySourceConfig = {
|
|
69
|
+
repository: string;
|
|
70
|
+
branch?: string;
|
|
71
|
+
directory?: string;
|
|
72
|
+
};
|
|
67
73
|
export type ClarifyThemePreset = 'default' | 'base';
|
|
74
|
+
export type ClarifyThemeModeColorValue = {
|
|
75
|
+
light?: string;
|
|
76
|
+
dark?: string;
|
|
77
|
+
};
|
|
78
|
+
export type ClarifyThemeColorValue = string | ClarifyThemeModeColorValue;
|
|
68
79
|
export type ClarifyThemeColorTokensConfig = {
|
|
69
|
-
primary:
|
|
70
|
-
accent:
|
|
71
|
-
background:
|
|
72
|
-
foreground:
|
|
73
|
-
surface:
|
|
74
|
-
muted:
|
|
75
|
-
border:
|
|
76
|
-
codeBackground:
|
|
80
|
+
primary: ClarifyThemeColorValue;
|
|
81
|
+
accent: ClarifyThemeColorValue;
|
|
82
|
+
background: ClarifyThemeColorValue;
|
|
83
|
+
foreground: ClarifyThemeColorValue;
|
|
84
|
+
surface: ClarifyThemeColorValue;
|
|
85
|
+
muted: ClarifyThemeColorValue;
|
|
86
|
+
border: ClarifyThemeColorValue;
|
|
87
|
+
codeBackground: ClarifyThemeColorValue;
|
|
77
88
|
};
|
|
78
89
|
export type ClarifyThemeRadiusTokensConfig = {
|
|
79
90
|
sm: string;
|
|
@@ -92,6 +103,7 @@ export type ClarifyThemeConfig = {
|
|
|
92
103
|
preset: ClarifyThemePreset;
|
|
93
104
|
tokens: ClarifyThemeTokensConfig;
|
|
94
105
|
layout: ClarifyThemeLayoutConfig;
|
|
106
|
+
editor: boolean;
|
|
95
107
|
};
|
|
96
108
|
export type ClarifyPagesItem = string | {
|
|
97
109
|
page: string;
|
|
@@ -102,6 +114,9 @@ export type ClarifyPagesItem = string | {
|
|
|
102
114
|
openapi: string;
|
|
103
115
|
icon?: string;
|
|
104
116
|
title?: ClarifyLocalizedText;
|
|
117
|
+
filter?: {
|
|
118
|
+
tags?: string[];
|
|
119
|
+
};
|
|
105
120
|
};
|
|
106
121
|
export type ClarifyPagesGroup = {
|
|
107
122
|
group: ClarifyLocalizedText;
|
|
@@ -121,6 +136,8 @@ export type ClarifyConfig = {
|
|
|
121
136
|
favicon?: ClarifyFaviconConfig;
|
|
122
137
|
theme: ClarifyThemeConfig;
|
|
123
138
|
description: string;
|
|
139
|
+
siteUrl?: string;
|
|
140
|
+
source?: ClarifySourceConfig;
|
|
124
141
|
rootDirectory: string;
|
|
125
142
|
routePrefix: string;
|
|
126
143
|
outputDirectory: string;
|
|
@@ -154,6 +171,8 @@ export type RenderOptions = {
|
|
|
154
171
|
navigation?: NavigationTree;
|
|
155
172
|
/** 从 virtual:clarify-openapi-registry 导入的 OpenAPI 规范表 */
|
|
156
173
|
openApis?: Record<string, OpenAPISpec>;
|
|
174
|
+
/** Whether to render the live theme editor inside the app tree. */
|
|
175
|
+
themeEditor?: boolean;
|
|
157
176
|
/** 挂载节点,默认 document.getElementById('root') */
|
|
158
177
|
container?: Element | null;
|
|
159
178
|
};
|
|
@@ -169,6 +188,8 @@ export type ServerRenderOptions = {
|
|
|
169
188
|
navigation?: NavigationTree;
|
|
170
189
|
/** 从 virtual:clarify-openapi-registry 导入的 OpenAPI 规范表 */
|
|
171
190
|
openApis?: Record<string, OpenAPISpec>;
|
|
191
|
+
/** Whether to render the live theme editor inside the app tree. */
|
|
192
|
+
themeEditor?: boolean;
|
|
172
193
|
/** 当前请求的 URL */
|
|
173
194
|
url: string;
|
|
174
195
|
};
|
package/output/index.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_shell = require("./shell-
|
|
3
|
-
const
|
|
4
|
-
const require_OpenApiOperation = require("./OpenApiOperation-
|
|
2
|
+
const require_shell = require("./shell-D4tS8Jts.cjs");
|
|
3
|
+
const require_ThemeRoot = require("./ThemeRoot-DXoVzHSZ.cjs");
|
|
4
|
+
const require_OpenApiOperation = require("./OpenApiOperation-CsDX1s-6.cjs");
|
|
5
5
|
const require_remark = require("./remark-DNOdJz5i.cjs");
|
|
6
|
-
const require_render = require("./render-
|
|
6
|
+
const require_render = require("./render-BfNmzJeJ.cjs");
|
|
7
7
|
let react_router_dom = require("react-router-dom");
|
|
8
8
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
9
9
|
//#region source/openapi/lib/spec-path.ts
|
|
@@ -103,11 +103,15 @@ function OpenApiHeader(arg0) {
|
|
|
103
103
|
]
|
|
104
104
|
});
|
|
105
105
|
}
|
|
106
|
+
function operationMatchesTags(operationTags, filterTags) {
|
|
107
|
+
if (!filterTags?.length) return true;
|
|
108
|
+
return operationTags?.some((tag) => filterTags.includes(tag)) ?? false;
|
|
109
|
+
}
|
|
106
110
|
function OpenApiPaths(arg0) {
|
|
107
|
-
const { spec } = arg0;
|
|
111
|
+
const { spec, tagFilter } = arg0;
|
|
108
112
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
109
113
|
className: "clarify-api-endpoints divide-y divide-zinc-200/70 dark:divide-white/10",
|
|
110
|
-
children: listOpenApiOperations(spec).map(({ path, method, operation }) => ({
|
|
114
|
+
children: listOpenApiOperations(spec).filter(({ operation }) => operationMatchesTags(operation.tags, tagFilter)).map(({ path, method, operation }) => ({
|
|
111
115
|
path,
|
|
112
116
|
method: method.toUpperCase(),
|
|
113
117
|
operation
|
|
@@ -127,15 +131,18 @@ function WarningBox(arg0) {
|
|
|
127
131
|
});
|
|
128
132
|
}
|
|
129
133
|
function OpenApiDocument(arg0) {
|
|
130
|
-
const { spec, specPath } = arg0;
|
|
134
|
+
const { spec, specPath, tagFilter } = arg0;
|
|
131
135
|
const t = require_shell.useBuiltInText();
|
|
132
136
|
const resolved = useOpenApiSpec(spec, specPath);
|
|
133
137
|
if (!resolved) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WarningBox, { children: t("openapi.specNotFound", { specPath: specPath ?? t("openapi.specPathMissing") }) });
|
|
134
138
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("article", {
|
|
135
139
|
className: "clarify-openapi-page flex h-full flex-col pt-16 pb-10",
|
|
136
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(
|
|
140
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_OpenApiOperation.Prose, {
|
|
137
141
|
className: "flex-auto",
|
|
138
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(OpenApiHeader, { spec: resolved }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(OpenApiPaths, {
|
|
142
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(OpenApiHeader, { spec: resolved }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(OpenApiPaths, {
|
|
143
|
+
spec: resolved,
|
|
144
|
+
tagFilter
|
|
145
|
+
})]
|
|
139
146
|
})
|
|
140
147
|
});
|
|
141
148
|
}
|
|
@@ -171,7 +178,7 @@ function OpenApiOperation(arg0) {
|
|
|
171
178
|
var builtInMDXComponents = {
|
|
172
179
|
...require_OpenApiOperation.primitives_exports,
|
|
173
180
|
Markdown: require_OpenApiOperation.Markdown,
|
|
174
|
-
Collapse:
|
|
181
|
+
Collapse: require_OpenApiOperation.Collapse
|
|
175
182
|
};
|
|
176
183
|
var builtInOpenAPIComponents = {
|
|
177
184
|
OpenApiDocument,
|
|
@@ -189,7 +196,7 @@ function useMDXComponents(components = {}) {
|
|
|
189
196
|
function DocShell(arg0) {
|
|
190
197
|
const { title, subtitle, children } = arg0;
|
|
191
198
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("main", {
|
|
192
|
-
className: "clarify-doc-shell min-h-screen bg-
|
|
199
|
+
className: "clarify-doc-shell min-h-screen bg-(--clarify-theme-tokens-colors-background) px-6 py-10 text-(--clarify-theme-tokens-colors-foreground) md:px-10",
|
|
193
200
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
194
201
|
className: "mx-auto max-w-6xl",
|
|
195
202
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
|
|
@@ -198,41 +205,44 @@ function DocShell(arg0) {
|
|
|
198
205
|
className: "text-3xl font-bold tracking-tight md:text-5xl",
|
|
199
206
|
children: title
|
|
200
207
|
}), subtitle ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
201
|
-
className: "mt-3 max-w-2xl text-
|
|
208
|
+
className: "mt-3 max-w-2xl text-(--clarify-ui-text-soft)",
|
|
202
209
|
children: subtitle
|
|
203
210
|
}) : null]
|
|
204
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
211
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_OpenApiOperation.Prose, { children })]
|
|
205
212
|
})
|
|
206
213
|
});
|
|
207
214
|
}
|
|
208
215
|
//#endregion
|
|
209
|
-
exports.AppShell =
|
|
210
|
-
exports.BuiltWithClarify =
|
|
211
|
-
exports.Button =
|
|
212
|
-
exports.Callout =
|
|
213
|
-
exports.Card =
|
|
214
|
-
exports.CardGroup =
|
|
216
|
+
exports.AppShell = require_ThemeRoot.AppShell;
|
|
217
|
+
exports.BuiltWithClarify = require_ThemeRoot.BuiltWithClarify;
|
|
218
|
+
exports.Button = require_OpenApiOperation.Button;
|
|
219
|
+
exports.Callout = require_OpenApiOperation.Callout;
|
|
220
|
+
exports.Card = require_OpenApiOperation.Card;
|
|
221
|
+
exports.CardGroup = require_OpenApiOperation.CardGroup;
|
|
215
222
|
exports.ClarifyConfigContext = require_shell.ClarifyConfigContext;
|
|
216
|
-
exports.Code =
|
|
217
|
-
exports.CodeGroup =
|
|
218
|
-
exports.Collapse =
|
|
223
|
+
exports.Code = require_OpenApiOperation.Code;
|
|
224
|
+
exports.CodeGroup = require_OpenApiOperation.CodeGroup;
|
|
225
|
+
exports.Collapse = require_OpenApiOperation.Collapse;
|
|
219
226
|
exports.DocShell = DocShell;
|
|
220
|
-
exports.Feedback =
|
|
221
|
-
exports.GridPattern =
|
|
222
|
-
exports.Heading =
|
|
223
|
-
exports.HeroPattern =
|
|
224
|
-
exports.Logo =
|
|
227
|
+
exports.Feedback = require_OpenApiOperation.Feedback;
|
|
228
|
+
exports.GridPattern = require_OpenApiOperation.GridPattern;
|
|
229
|
+
exports.Heading = require_OpenApiOperation.Heading;
|
|
230
|
+
exports.HeroPattern = require_OpenApiOperation.HeroPattern;
|
|
231
|
+
exports.Logo = require_OpenApiOperation.Logo;
|
|
225
232
|
exports.Markdown = require_OpenApiOperation.Markdown;
|
|
226
233
|
exports.OpenApiDocument = OpenApiDocument;
|
|
227
234
|
exports.OpenApiOperation = OpenApiOperation;
|
|
228
235
|
exports.OpenApisContext = require_shell.OpenApisContext;
|
|
229
|
-
exports.PageFooter =
|
|
230
|
-
exports.Pre =
|
|
231
|
-
exports.Prose =
|
|
236
|
+
exports.PageFooter = require_ThemeRoot.PageFooter;
|
|
237
|
+
exports.Pre = require_OpenApiOperation.Pre;
|
|
238
|
+
exports.Prose = require_OpenApiOperation.Prose;
|
|
232
239
|
exports.SectionProvider = require_shell.SectionProvider;
|
|
233
|
-
exports.Tag =
|
|
240
|
+
exports.Tag = require_OpenApiOperation.Tag;
|
|
241
|
+
exports.ThemeEditor = require_ThemeRoot.ThemeEditor;
|
|
234
242
|
exports.ThemeProvider = require_shell.ThemeProvider;
|
|
235
243
|
exports.ThemeToggle = require_shell.ThemeToggle;
|
|
244
|
+
exports.applyClarifyThemeVariables = require_ThemeRoot.applyClarifyThemeVariables;
|
|
245
|
+
exports.clarifyThemeEditorPresets = require_ThemeRoot.clarifyThemeEditorPresets;
|
|
236
246
|
exports.markdownRemarkPlugins = require_remark.markdownRemarkPlugins;
|
|
237
247
|
exports.remToPx = require_shell.remToPx;
|
|
238
248
|
exports.render = require_render.render;
|
package/output/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../source/openapi/lib/spec-path.ts","../source/openapi/lib/utils.ts","../source/openapi/entry.tsx","../source/mdx/components.ts","../source/mdx/DocShell.tsx"],"sourcesContent":["import { useLocation } from 'react-router-dom'\n\nimport { useClarifyConfig, useOpenApis } from '../../core/context'\n\nimport type { OpenAPISpec } from './utils'\n\nconst VIRTUAL_PREFIX = 'virtual:clarify-page/'\n\nfunction resolveRelativePath(fromDir: string, to: string): string {\n const parts = (fromDir + '/' + to).split('/').filter(Boolean)\n const stack: string[] = []\n for (const part of parts) {\n if (part === '..') {\n stack.pop()\n } else if (part !== '.') {\n stack.push(part)\n }\n }\n return stack.join('/')\n}\n\nfunction normalizeSpecPath(specPath: string, currentRoutePath?: string, routePrefix = ''): string {\n if (specPath.startsWith(VIRTUAL_PREFIX)) return specPath\n\n const normalizedRoutePrefix = routePrefix.replace(/^\\/+|\\/+$/g, '')\n const normalizedSpecPath = specPath.startsWith('/') && normalizedRoutePrefix && specPath.slice(1).startsWith(`${normalizedRoutePrefix}/`)\n ? '/' + specPath.slice(normalizedRoutePrefix.length + 2)\n : specPath\n\n if (normalizedSpecPath.startsWith('/')) {\n return VIRTUAL_PREFIX + normalizedSpecPath.replace(/^\\//, '')\n }\n const fromDir = currentRoutePath === '/' ? '' : currentRoutePath?.replace(/^\\//, '').replace(/\\/[^/]*$/, '') ?? ''\n const normalizedFromDir = normalizedRoutePrefix && fromDir.startsWith(`${normalizedRoutePrefix}/`)\n ? fromDir.slice(normalizedRoutePrefix.length + 1)\n : fromDir\n return VIRTUAL_PREFIX + resolveRelativePath(normalizedFromDir, normalizedSpecPath)\n}\n\nexport function useOpenApiSpec(spec?: OpenAPISpec, specPath?: string): OpenAPISpec | null {\n const specs = useOpenApis()\n const location = useLocation()\n const config = useClarifyConfig()\n\n if (spec) return spec\n if (!specPath) return null\n\n const normalized = normalizeSpecPath(specPath, location.pathname, config.routePrefix)\n return specs[normalized] ?? null\n}\n","import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types'\n\nimport type { OpenApiRecord } from '../types'\n\nexport type OpenAPISpec = OpenAPIV3.Document | OpenAPIV3_1.Document\nexport type OpenAPIOperation = OpenAPIV3.OperationObject | OpenAPIV3_1.OperationObject\n\nexport const OPENAPI_HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const\n\nexport type OpenAPIHttpMethod = typeof OPENAPI_HTTP_METHODS[number]\n\nexport function isOpenAPIHttpMethod(method: string): method is OpenAPIHttpMethod {\n return (OPENAPI_HTTP_METHODS as readonly string[]).includes(method.toLowerCase())\n}\n\nfunction isRecord(value: unknown): value is OpenApiRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction resolveOpenApiRef(spec: OpenAPISpec, ref: string): unknown {\n if (!ref.startsWith('#/')) return undefined\n\n return ref\n .slice(2)\n .split('/')\n .map((part) => part.replace(/~1/g, '/').replace(/~0/g, '~'))\n .reduce<unknown>((current, part) => (isRecord(current) ? current[part] : undefined), spec)\n}\n\nfunction getPathItem(spec: OpenAPISpec, path: string): OpenApiRecord | undefined {\n const pathItem = spec.paths?.[path]\n const resolved = isRecord(pathItem) && typeof pathItem.$ref === 'string' ? resolveOpenApiRef(spec, pathItem.$ref) : pathItem\n return isRecord(resolved) ? resolved : undefined\n}\n\nexport function getOpenApiOperation(spec: OpenAPISpec, path: string, method: string): OpenAPIOperation | undefined {\n if (!isOpenAPIHttpMethod(method)) return undefined\n return getPathItem(spec, path)?.[method.toLowerCase() as OpenAPIHttpMethod] as OpenAPIOperation | undefined\n}\n\nexport function listOpenApiOperations(spec: OpenAPISpec): Array<{ path: string; method: OpenAPIHttpMethod; operation: OpenAPIOperation }> {\n const paths = spec.paths ?? {}\n const operations: Array<{ path: string; method: OpenAPIHttpMethod; operation: OpenAPIOperation }> = []\n\n for (const path of Object.keys(paths)) {\n const pathItem = getPathItem(spec, path)\n if (!pathItem) continue\n for (const method of OPENAPI_HTTP_METHODS) {\n const operation = pathItem[method]\n if (operation) operations.push({ path, method, operation: operation as OpenAPIOperation })\n }\n }\n\n return operations\n}\n","import type { ReactNode } from 'react'\n\nimport { Prose } from '../components/Prose'\nimport { useBuiltInText } from '../core/i18n'\nimport { Markdown } from '../mdx/Markdown'\n\nimport { OpenApiOperation as OpenApiOperationComponent } from './components/OpenApiOperation'\nimport { useOpenApiSpec } from './lib/spec-path'\nimport { getOpenApiOperation, listOpenApiOperations } from './lib/utils'\nimport type { OpenAPISpec } from './lib/utils'\n\ntype OpenApiPathsProps = { spec: OpenAPISpec }\n\ntype OpenApiHeaderProps = { spec: OpenAPISpec }\n\ntype WarningBoxProps = {\n children: ReactNode\n tone?: 'amber' | 'red'\n}\n\nexport type OpenApiDocumentProps = {\n spec?: OpenAPISpec\n specPath?: string\n}\n\ntype OpenApiOperationWithSpecProps = {\n spec: OpenAPISpec\n path: string\n method: string\n}\n\nexport type OpenApiOperationProps = {\n specPath: string\n path: string\n method: string\n}\n\nfunction OpenApiHeader(arg0: OpenApiHeaderProps): ReactNode {\n const { spec } = arg0\n\n const t = useBuiltInText()\n return (\n <header className=\"mb-16\">\n <p className=\"mb-3 text-xs/6 font-medium tracking-widest text-emerald-500 uppercase dark:text-emerald-400\">\n {t('openapi.openApiReference')}\n </p>\n <h1>{spec.info?.title ?? t('openapi.apiDocumentation')}</h1>\n {spec.info?.description ? <Markdown className=\"lead *:first:mt-0 *:last:mb-0\">{spec.info.description}</Markdown> : null}\n {spec.info?.version ? <p className=\"text-sm text-zinc-500 dark:text-zinc-400\">{t('openapi.version', { version: spec.info.version })}</p> : null}\n </header>\n )\n}\n\nfunction OpenApiPaths(arg0: OpenApiPathsProps): ReactNode {\n const { spec } = arg0\n\n const entries = listOpenApiOperations(spec).map(({ path, method, operation }) => ({\n path,\n method: method.toUpperCase(),\n operation,\n }))\n\n return (\n <div className=\"clarify-api-endpoints divide-y divide-zinc-200/70 dark:divide-white/10\">\n {entries.map(({ path, method, operation }) => (\n <OpenApiOperationComponent key={`${method}-${path}`} spec={spec} path={path} method={method} operation={operation} />\n ))}\n </div>\n )\n}\n\nfunction WarningBox(arg0: WarningBoxProps): ReactNode {\n const { children, tone = 'amber' } = arg0\n\n const classes = tone === 'red'\n ? 'rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-200'\n : 'rounded-lg border border-amber-200 bg-amber-50 p-4 text-sm text-amber-700 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-200'\n\n return <div className={`clarify-warning ${classes}`}>{children}</div>\n}\n\nexport function OpenApiDocument(arg0: OpenApiDocumentProps): ReactNode {\n const { spec, specPath } = arg0\n const t = useBuiltInText()\n const resolved = useOpenApiSpec(spec, specPath)\n\n if (!resolved) {\n return <WarningBox>{t('openapi.specNotFound', { specPath: specPath ?? t('openapi.specPathMissing') })}</WarningBox>\n }\n\n return (\n <article className=\"clarify-openapi-page flex h-full flex-col pt-16 pb-10\">\n <Prose className=\"flex-auto\">\n <OpenApiHeader spec={resolved} />\n <OpenApiPaths spec={resolved} />\n </Prose>\n </article>\n )\n}\n\nfunction OpenApiOperationWithSpec(arg0: OpenApiOperationWithSpecProps): ReactNode {\n const { spec, path, method } = arg0\n const t = useBuiltInText()\n const op = getOpenApiOperation(spec, path, method)\n\n if (!op) {\n return <WarningBox tone=\"red\">{t('openapi.endpointNotFound', { endpoint: `${method.toUpperCase()} ${path}` })}</WarningBox>\n }\n\n const normalizedMethod = method.toUpperCase()\n return <OpenApiOperationComponent key={`${normalizedMethod}-${path}`} spec={spec} path={path} method={normalizedMethod} operation={op} />\n}\n\nexport function OpenApiOperation(arg0: OpenApiOperationProps): ReactNode {\n const { specPath, path, method } = arg0\n const t = useBuiltInText()\n const spec = useOpenApiSpec(undefined, specPath)\n\n if (!spec) {\n return <WarningBox>{t('openapi.specNotFound', { specPath })}</WarningBox>\n }\n\n return <OpenApiOperationWithSpec spec={spec} path={path} method={method} />\n}\n","import { Collapse } from '../components/Collapse'\nimport { OpenApiDocument, OpenApiOperation } from '../openapi'\n\nimport { Markdown } from './Markdown'\nimport * as mdxPrimitives from './primitives'\n\nconst builtInMDXComponents = {\n ...mdxPrimitives,\n Markdown,\n Collapse,\n}\n\nconst builtInOpenAPIComponents = {\n OpenApiDocument,\n OpenApiOperation,\n}\n\nexport function useMDXComponents(components: Record<string, unknown> = {}) {\n return {\n ...components,\n ...builtInMDXComponents,\n ...builtInOpenAPIComponents,\n }\n}\n","import type { ReactNode } from 'react'\n\nimport { Prose } from '../components/Prose'\n\nexport type DocShellProps = {\n title: string\n subtitle?: string\n children: ReactNode\n}\n\nexport function DocShell(arg0: DocShellProps) {\n const { title, subtitle, children } = arg0\n\n return (\n <main className=\"clarify-doc-shell min-h-screen bg-white px-6 py-10 text-zinc-900 dark:bg-zinc-950 dark:text-white md:px-10\">\n <div className=\"mx-auto max-w-6xl\">\n <header className=\"mb-10\">\n <h1 className=\"text-3xl font-bold tracking-tight md:text-5xl\">{title}</h1>\n {subtitle ? <p className=\"mt-3 max-w-2xl text-zinc-600 dark:text-zinc-400\">{subtitle}</p> : null}\n </header>\n <Prose>{children}</Prose>\n </div>\n </main>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../source/openapi/lib/spec-path.ts","../source/openapi/lib/utils.ts","../source/openapi/entry.tsx","../source/mdx/components.ts","../source/mdx/DocShell.tsx"],"sourcesContent":["import { useLocation } from 'react-router-dom'\n\nimport { useClarifyConfig, useOpenApis } from '../../core/context'\n\nimport type { OpenAPISpec } from './utils'\n\nconst VIRTUAL_PREFIX = 'virtual:clarify-page/'\n\nfunction resolveRelativePath(fromDir: string, to: string): string {\n const parts = (fromDir + '/' + to).split('/').filter(Boolean)\n const stack: string[] = []\n for (const part of parts) {\n if (part === '..') {\n stack.pop()\n } else if (part !== '.') {\n stack.push(part)\n }\n }\n return stack.join('/')\n}\n\nfunction normalizeSpecPath(specPath: string, currentRoutePath?: string, routePrefix = ''): string {\n if (specPath.startsWith(VIRTUAL_PREFIX)) return specPath\n\n const normalizedRoutePrefix = routePrefix.replace(/^\\/+|\\/+$/g, '')\n const normalizedSpecPath = specPath.startsWith('/') && normalizedRoutePrefix && specPath.slice(1).startsWith(`${normalizedRoutePrefix}/`)\n ? '/' + specPath.slice(normalizedRoutePrefix.length + 2)\n : specPath\n\n if (normalizedSpecPath.startsWith('/')) {\n return VIRTUAL_PREFIX + normalizedSpecPath.replace(/^\\//, '')\n }\n const fromDir = currentRoutePath === '/' ? '' : currentRoutePath?.replace(/^\\//, '').replace(/\\/[^/]*$/, '') ?? ''\n const normalizedFromDir = normalizedRoutePrefix && fromDir.startsWith(`${normalizedRoutePrefix}/`)\n ? fromDir.slice(normalizedRoutePrefix.length + 1)\n : fromDir\n return VIRTUAL_PREFIX + resolveRelativePath(normalizedFromDir, normalizedSpecPath)\n}\n\nexport function useOpenApiSpec(spec?: OpenAPISpec, specPath?: string): OpenAPISpec | null {\n const specs = useOpenApis()\n const location = useLocation()\n const config = useClarifyConfig()\n\n if (spec) return spec\n if (!specPath) return null\n\n const normalized = normalizeSpecPath(specPath, location.pathname, config.routePrefix)\n return specs[normalized] ?? null\n}\n","import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types'\n\nimport type { OpenApiRecord } from '../types'\n\nexport type OpenAPISpec = OpenAPIV3.Document | OpenAPIV3_1.Document\nexport type OpenAPIOperation = OpenAPIV3.OperationObject | OpenAPIV3_1.OperationObject\n\nexport const OPENAPI_HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const\n\nexport type OpenAPIHttpMethod = typeof OPENAPI_HTTP_METHODS[number]\n\nexport function isOpenAPIHttpMethod(method: string): method is OpenAPIHttpMethod {\n return (OPENAPI_HTTP_METHODS as readonly string[]).includes(method.toLowerCase())\n}\n\nfunction isRecord(value: unknown): value is OpenApiRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction resolveOpenApiRef(spec: OpenAPISpec, ref: string): unknown {\n if (!ref.startsWith('#/')) return undefined\n\n return ref\n .slice(2)\n .split('/')\n .map((part) => part.replace(/~1/g, '/').replace(/~0/g, '~'))\n .reduce<unknown>((current, part) => (isRecord(current) ? current[part] : undefined), spec)\n}\n\nfunction getPathItem(spec: OpenAPISpec, path: string): OpenApiRecord | undefined {\n const pathItem = spec.paths?.[path]\n const resolved = isRecord(pathItem) && typeof pathItem.$ref === 'string' ? resolveOpenApiRef(spec, pathItem.$ref) : pathItem\n return isRecord(resolved) ? resolved : undefined\n}\n\nexport function getOpenApiOperation(spec: OpenAPISpec, path: string, method: string): OpenAPIOperation | undefined {\n if (!isOpenAPIHttpMethod(method)) return undefined\n return getPathItem(spec, path)?.[method.toLowerCase() as OpenAPIHttpMethod] as OpenAPIOperation | undefined\n}\n\nexport function listOpenApiOperations(spec: OpenAPISpec): Array<{ path: string; method: OpenAPIHttpMethod; operation: OpenAPIOperation }> {\n const paths = spec.paths ?? {}\n const operations: Array<{ path: string; method: OpenAPIHttpMethod; operation: OpenAPIOperation }> = []\n\n for (const path of Object.keys(paths)) {\n const pathItem = getPathItem(spec, path)\n if (!pathItem) continue\n for (const method of OPENAPI_HTTP_METHODS) {\n const operation = pathItem[method]\n if (operation) operations.push({ path, method, operation: operation as OpenAPIOperation })\n }\n }\n\n return operations\n}\n","import type { ReactNode } from 'react'\n\nimport { Prose } from '../components/Prose'\nimport { useBuiltInText } from '../core/i18n'\nimport { Markdown } from '../mdx/Markdown'\n\nimport { OpenApiOperation as OpenApiOperationComponent } from './components/OpenApiOperation'\nimport { useOpenApiSpec } from './lib/spec-path'\nimport { getOpenApiOperation, listOpenApiOperations } from './lib/utils'\nimport type { OpenAPISpec } from './lib/utils'\n\ntype OpenApiPathsProps = { spec: OpenAPISpec; tagFilter?: string[] }\n\ntype OpenApiHeaderProps = { spec: OpenAPISpec }\n\ntype WarningBoxProps = {\n children: ReactNode\n tone?: 'amber' | 'red'\n}\n\nexport type OpenApiDocumentProps = {\n spec?: OpenAPISpec\n specPath?: string\n tagFilter?: string[]\n}\n\ntype OpenApiOperationWithSpecProps = {\n spec: OpenAPISpec\n path: string\n method: string\n}\n\nexport type OpenApiOperationProps = {\n specPath: string\n path: string\n method: string\n}\n\nfunction OpenApiHeader(arg0: OpenApiHeaderProps): ReactNode {\n const { spec } = arg0\n\n const t = useBuiltInText()\n return (\n <header className=\"mb-16\">\n <p className=\"mb-3 text-xs/6 font-medium tracking-widest text-emerald-500 uppercase dark:text-emerald-400\">\n {t('openapi.openApiReference')}\n </p>\n <h1>{spec.info?.title ?? t('openapi.apiDocumentation')}</h1>\n {spec.info?.description ? <Markdown className=\"lead *:first:mt-0 *:last:mb-0\">{spec.info.description}</Markdown> : null}\n {spec.info?.version ? <p className=\"text-sm text-zinc-500 dark:text-zinc-400\">{t('openapi.version', { version: spec.info.version })}</p> : null}\n </header>\n )\n}\n\nfunction operationMatchesTags(operationTags: string[] | undefined, filterTags: string[] | undefined): boolean {\n if (!filterTags?.length) return true\n return operationTags?.some(tag => filterTags.includes(tag)) ?? false\n}\n\nfunction OpenApiPaths(arg0: OpenApiPathsProps): ReactNode {\n const { spec, tagFilter } = arg0\n\n const entries = listOpenApiOperations(spec)\n .filter(({ operation }) => operationMatchesTags(operation.tags, tagFilter))\n .map(({ path, method, operation }) => ({\n path,\n method: method.toUpperCase(),\n operation,\n }))\n\n return (\n <div className=\"clarify-api-endpoints divide-y divide-zinc-200/70 dark:divide-white/10\">\n {entries.map(({ path, method, operation }) => (\n <OpenApiOperationComponent key={`${method}-${path}`} spec={spec} path={path} method={method} operation={operation} />\n ))}\n </div>\n )\n}\n\nfunction WarningBox(arg0: WarningBoxProps): ReactNode {\n const { children, tone = 'amber' } = arg0\n\n const classes = tone === 'red'\n ? 'rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-200'\n : 'rounded-lg border border-amber-200 bg-amber-50 p-4 text-sm text-amber-700 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-200'\n\n return <div className={`clarify-warning ${classes}`}>{children}</div>\n}\n\nexport function OpenApiDocument(arg0: OpenApiDocumentProps): ReactNode {\n const { spec, specPath, tagFilter } = arg0\n const t = useBuiltInText()\n const resolved = useOpenApiSpec(spec, specPath)\n\n if (!resolved) {\n return <WarningBox>{t('openapi.specNotFound', { specPath: specPath ?? t('openapi.specPathMissing') })}</WarningBox>\n }\n\n return (\n <article className=\"clarify-openapi-page flex h-full flex-col pt-16 pb-10\">\n <Prose className=\"flex-auto\">\n <OpenApiHeader spec={resolved} />\n <OpenApiPaths spec={resolved} tagFilter={tagFilter} />\n </Prose>\n </article>\n )\n}\n\nfunction OpenApiOperationWithSpec(arg0: OpenApiOperationWithSpecProps): ReactNode {\n const { spec, path, method } = arg0\n const t = useBuiltInText()\n const op = getOpenApiOperation(spec, path, method)\n\n if (!op) {\n return <WarningBox tone=\"red\">{t('openapi.endpointNotFound', { endpoint: `${method.toUpperCase()} ${path}` })}</WarningBox>\n }\n\n const normalizedMethod = method.toUpperCase()\n return <OpenApiOperationComponent key={`${normalizedMethod}-${path}`} spec={spec} path={path} method={normalizedMethod} operation={op} />\n}\n\nexport function OpenApiOperation(arg0: OpenApiOperationProps): ReactNode {\n const { specPath, path, method } = arg0\n const t = useBuiltInText()\n const spec = useOpenApiSpec(undefined, specPath)\n\n if (!spec) {\n return <WarningBox>{t('openapi.specNotFound', { specPath })}</WarningBox>\n }\n\n return <OpenApiOperationWithSpec spec={spec} path={path} method={method} />\n}\n","import { Collapse } from '../components/Collapse'\nimport { OpenApiDocument, OpenApiOperation } from '../openapi'\n\nimport { Markdown } from './Markdown'\nimport * as mdxPrimitives from './primitives'\n\nconst builtInMDXComponents = {\n ...mdxPrimitives,\n Markdown,\n Collapse,\n}\n\nconst builtInOpenAPIComponents = {\n OpenApiDocument,\n OpenApiOperation,\n}\n\nexport function useMDXComponents(components: Record<string, unknown> = {}) {\n return {\n ...components,\n ...builtInMDXComponents,\n ...builtInOpenAPIComponents,\n }\n}\n","import type { ReactNode } from 'react'\n\nimport { Prose } from '../components/Prose'\n\nexport type DocShellProps = {\n title: string\n subtitle?: string\n children: ReactNode\n}\n\nexport function DocShell(arg0: DocShellProps) {\n const { title, subtitle, children } = arg0\n\n return (\n <main className=\"clarify-doc-shell min-h-screen bg-(--clarify-theme-tokens-colors-background) px-6 py-10 text-(--clarify-theme-tokens-colors-foreground) md:px-10\">\n <div className=\"mx-auto max-w-6xl\">\n <header className=\"mb-10\">\n <h1 className=\"text-3xl font-bold tracking-tight md:text-5xl\">{title}</h1>\n {subtitle ? <p className=\"mt-3 max-w-2xl text-(--clarify-ui-text-soft)\">{subtitle}</p> : null}\n </header>\n <Prose>{children}</Prose>\n </div>\n </main>\n )\n}\n"],"mappings":"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"}
|