ardo 3.2.1 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +49 -41
  2. package/dist/{DocPage-CIBiCAxZ.js → DocPage-Dy7OrCP2.js} +160 -31
  3. package/dist/DocPage-Dy7OrCP2.js.map +1 -0
  4. package/dist/assets/src/ui/DocPage.css.ts.vanilla-CWL92vUE.css +117 -0
  5. package/dist/assets/src/ui/ErrorBoundary.css.ts.vanilla-C4usIU4z.css +112 -0
  6. package/dist/assets/src/ui/Footer.css.ts.vanilla-DGTyff5Y.css +171 -0
  7. package/dist/assets/src/ui/{Header.css.ts.vanilla-8QL0Jzgk.css → Header.css.ts.vanilla-DEcLj8r0.css} +53 -27
  8. package/dist/assets/src/ui/{Layout.css.ts.vanilla-Bpx_-gJt.css → Layout.css.ts.vanilla-ClOa1YZm.css} +6 -10
  9. package/dist/assets/src/ui/Sidebar.css.ts.vanilla-IxNEQEBv.css +199 -0
  10. package/dist/assets/src/ui/{Toc.css.ts.vanilla-CYqcWgvD.css → Toc.css.ts.vanilla-CQbpEdTg.css} +9 -21
  11. package/dist/assets/src/ui/components/{CodeBlock.css.ts.vanilla-lNKqskjQ.css → CodeBlock.css.ts.vanilla-BxDJ2gKc.css} +38 -20
  12. package/dist/assets/src/ui/components/{CopyButton.css.ts.vanilla-DZZ5jgTM.css → CopyButton.css.ts.vanilla-CO2awD6S.css} +6 -7
  13. package/dist/assets/src/ui/components/{Features.css.ts.vanilla-D-pNXM9Q.css → Features.css.ts.vanilla-ggYasCFy.css} +7 -3
  14. package/dist/assets/src/ui/components/HeaderSearch.css.ts.vanilla-KAo_Mlc-.css +68 -0
  15. package/dist/assets/src/ui/components/{Hero.css.ts.vanilla-DHJVZ6GX.css → Hero.css.ts.vanilla-DY_BH0W6.css} +9 -6
  16. package/dist/assets/src/ui/components/{Search.css.ts.vanilla-BYpWHzky.css → Search.css.ts.vanilla-NQZH1eLo.css} +19 -7
  17. package/dist/assets/src/ui/{content.css.ts.vanilla-O_RaSPXm.css → content.css.ts.vanilla-CJnrOQNh.css} +43 -17
  18. package/dist/assets/src/ui/theme/{dark.css.ts.vanilla-2iJgcpbU.css → dark.css.ts.vanilla-CQef5pk2.css} +32 -28
  19. package/dist/assets/src/ui/theme/{light.css.ts.vanilla-CwinfWSf.css → light.css.ts.vanilla-D8gxaS1c.css} +32 -28
  20. package/dist/assets/src/ui/theme/{reset.css.ts.vanilla-0Q3pLjfC.css → reset.css.ts.vanilla-e2dF1d0f.css} +4 -0
  21. package/dist/{brand-icons-DLJKqTun.js → brand-icons-Di8w0Nu9.js} +1 -1
  22. package/dist/{brand-icons-DLJKqTun.js.map → brand-icons-Di8w0Nu9.js.map} +1 -1
  23. package/dist/config/index.d.ts +2 -2
  24. package/dist/config/index.d.ts.map +1 -1
  25. package/dist/config/index.js +1 -0
  26. package/dist/config/index.js.map +1 -1
  27. package/dist/{contract.css-DYvFVCFE.d.ts → contract.css-qPyk_asd.d.ts} +5 -1
  28. package/dist/contract.css-qPyk_asd.d.ts.map +1 -0
  29. package/dist/favicon-Cx-inut3.js +7 -0
  30. package/dist/favicon-Cx-inut3.js.map +1 -0
  31. package/dist/{generator-DPtRXxM_.js → generator-CYSyo4Vz.js} +7 -6
  32. package/dist/generator-CYSyo4Vz.js.map +1 -0
  33. package/dist/icons/index.js +1 -1
  34. package/dist/{index-BTeHvysI.d.ts → index-BcekgOfA.d.ts} +82 -12
  35. package/dist/index-BcekgOfA.d.ts.map +1 -0
  36. package/dist/{index-DySzkJlC.d.ts → index-CuMTHUxX.d.ts} +8 -2
  37. package/dist/index-CuMTHUxX.d.ts.map +1 -0
  38. package/dist/index.d.ts +4 -4
  39. package/dist/index.js +3 -3
  40. package/dist/mdx/provider.js +1 -1
  41. package/dist/runtime/index.d.ts +1 -1
  42. package/dist/runtime/index.js +1 -1
  43. package/dist/{sidebar-utils-1Skqle1Q.js → sidebar-utils-C06DJsx4.js} +15 -4
  44. package/dist/sidebar-utils-C06DJsx4.js.map +1 -0
  45. package/dist/theme/index.d.ts +16 -4
  46. package/dist/theme/index.d.ts.map +1 -1
  47. package/dist/theme/index.js +84 -59
  48. package/dist/theme/index.js.map +1 -1
  49. package/dist/typedoc/components/index.d.ts +1 -1
  50. package/dist/typedoc/index.d.ts +1 -1
  51. package/dist/typedoc/index.d.ts.map +1 -1
  52. package/dist/typedoc/index.js +1 -1
  53. package/dist/{types-CTd_mkrv.d.ts → types-B75OhnGa.d.ts} +21 -3
  54. package/dist/types-B75OhnGa.d.ts.map +1 -0
  55. package/dist/{types-BCuJBsJu.d.ts → types-Ck2Vm7NB.d.ts} +2 -2
  56. package/dist/{types-BCuJBsJu.d.ts.map → types-Ck2Vm7NB.d.ts.map} +1 -1
  57. package/dist/ui/index.d.ts +2 -2
  58. package/dist/ui/index.js +3 -3
  59. package/dist/ui/styles.css +704 -382
  60. package/dist/ui/styles.js +15 -15
  61. package/dist/{ui-3grzJSsq.js → ui-AGPGBunC.js} +729 -280
  62. package/dist/ui-AGPGBunC.js.map +1 -0
  63. package/dist/vite/index.d.ts +18 -2
  64. package/dist/vite/index.d.ts.map +1 -1
  65. package/dist/vite/index.js +446 -121
  66. package/dist/vite/index.js.map +1 -1
  67. package/package.json +14 -13
  68. package/dist/DocPage-CIBiCAxZ.js.map +0 -1
  69. package/dist/assets/src/ui/DocPage.css.ts.vanilla-CXKuz4U-.css +0 -34
  70. package/dist/assets/src/ui/Footer.css.ts.vanilla-BSzPIPt4.css +0 -100
  71. package/dist/assets/src/ui/Sidebar.css.ts.vanilla-D70qXTEr.css +0 -115
  72. package/dist/contract.css-DYvFVCFE.d.ts.map +0 -1
  73. package/dist/generator-DPtRXxM_.js.map +0 -1
  74. package/dist/index-BTeHvysI.d.ts.map +0 -1
  75. package/dist/index-DySzkJlC.d.ts.map +0 -1
  76. package/dist/sidebar-utils-1Skqle1Q.js.map +0 -1
  77. package/dist/types-CTd_mkrv.d.ts.map +0 -1
  78. package/dist/ui-3grzJSsq.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"generator-DPtRXxM_.js","names":["appendExamples","appendSourceLink"],"sources":["../src/typedoc/generator-config.ts","../src/typedoc/generator-shared.ts","../src/typedoc/generator-pages-categories.ts","../src/typedoc/generator-render-component.ts","../src/typedoc/generator-pages-components.ts","../src/typedoc/generator-render.ts","../src/typedoc/generator-pages-grouped.ts","../src/typedoc/generator-pages-index.ts","../src/typedoc/generator-reflection-tags.ts","../src/typedoc/generator-reflection.ts","../src/typedoc/generator-docs.ts","../src/typedoc/generator.ts"],"sourcesContent":["import type { ProjectReflection } from \"typedoc\"\n\nimport type { TypeDocConfig } from \"./types\"\n\nexport type ResolvedTypeDocConfig = {\n out: string\n sidebar: {\n title: string\n position: number\n collapsed: boolean\n }\n markdown: {\n breadcrumbs: boolean\n hierarchy: boolean\n sourceLinks: boolean\n codeBlocks: boolean\n sourceBaseUrl?: string\n }\n} & Omit<TypeDocConfig, \"markdown\" | \"out\" | \"sidebar\">\n\nexport type TypeDocRuntimeContext = {\n basePath: string\n config: ResolvedTypeDocConfig\n packageNameCache: Map<string, string | undefined>\n project: ProjectReflection\n}\n\nexport function resolveTypeDocConfig(config: TypeDocConfig): ResolvedTypeDocConfig {\n const sidebar = resolveSidebarConfig(config.sidebar)\n const markdown = resolveMarkdownConfig(config.markdown)\n\n return {\n ...config,\n excludeExternals: withDefault(config.excludeExternals, true),\n excludeInternal: withDefault(config.excludeInternal, true),\n excludePrivate: withDefault(config.excludePrivate, true),\n excludeProtected: withDefault(config.excludeProtected, false),\n markdown,\n out: withDefault(config.out, \"api\"),\n sidebar,\n sort: withDefault(config.sort, [\"source-order\"]),\n }\n}\n\nexport function getTypedocOptions(config: ResolvedTypeDocConfig): Record<string, unknown> {\n const options: Record<string, unknown> = {\n entryPoints: config.entryPoints,\n excludeExternals: config.excludeExternals,\n excludeInternal: config.excludeInternal,\n excludePrivate: config.excludePrivate,\n excludeProtected: config.excludeProtected,\n sort: config.sort,\n tsconfig: config.tsconfig,\n }\n\n applyOptionalOption(options, \"exclude\", config.exclude)\n applyOptionalOption(options, \"categoryOrder\", config.categoryOrder)\n applyOptionalOption(options, \"groupOrder\", config.groupOrder)\n applyOptionalOption(options, \"plugin\", config.plugin)\n applyOptionalOption(options, \"readme\", config.readme)\n\n return options\n}\n\nfunction applyOptionalOption(\n options: Record<string, unknown>,\n key: string,\n value: null | string | string[] | undefined\n): void {\n if (value != null) {\n options[key] = value\n }\n}\n\nfunction withDefault<T>(value: T | undefined, fallback: T): T {\n return value ?? fallback\n}\n\nfunction resolveSidebarConfig(sidebar: TypeDocConfig[\"sidebar\"]): ResolvedTypeDocConfig[\"sidebar\"] {\n return {\n collapsed: withDefault(sidebar?.collapsed, false),\n position: withDefault(sidebar?.position, 100),\n title: withDefault(sidebar?.title, \"API Reference\"),\n }\n}\n\nfunction resolveMarkdownConfig(\n markdown: TypeDocConfig[\"markdown\"]\n): ResolvedTypeDocConfig[\"markdown\"] {\n return {\n breadcrumbs: withDefault(markdown?.breadcrumbs, true),\n codeBlocks: withDefault(markdown?.codeBlocks, true),\n hierarchy: withDefault(markdown?.hierarchy, true),\n sourceBaseUrl: markdown?.sourceBaseUrl,\n sourceLinks: withDefault(markdown?.sourceLinks, true),\n }\n}\n","import { type DeclarationReflection, type ProjectReflection, ReflectionKind } from \"typedoc\"\n\nexport type GroupedReflections = {\n componentItems: DeclarationReflection[]\n functionsByFile: Map<string, DeclarationReflection[]>\n standaloneItems: DeclarationReflection[]\n typesByFile: Map<string, DeclarationReflection[]>\n}\n\nexport type ReflectionNavigation = {\n next: DeclarationReflection | null\n prev: DeclarationReflection | null\n}\n\nexport type ComponentProp = {\n description: string\n name: string\n optional: boolean\n type: string\n}\n\nexport type CommentPart = {\n kind: string\n text: string\n}\n\nexport function groupProjectChildren(\n project: ProjectReflection,\n isComponentName: (name: string) => boolean\n): GroupedReflections {\n const grouped: GroupedReflections = {\n componentItems: [],\n functionsByFile: new Map<string, DeclarationReflection[]>(),\n standaloneItems: [],\n typesByFile: new Map<string, DeclarationReflection[]>(),\n }\n\n const children = project.children ?? []\n for (const child of children) {\n if (appendFunctionReflection(grouped, child, isComponentName)) {\n continue\n }\n if (appendTypeAliasReflection(grouped, child)) {\n continue\n }\n grouped.standaloneItems.push(child)\n }\n\n return grouped\n}\n\nfunction appendFunctionReflection(\n grouped: GroupedReflections,\n child: DeclarationReflection,\n isComponentName: (name: string) => boolean\n): boolean {\n const sourceFile = child.sources?.[0]?.fileName\n if (child.kind !== ReflectionKind.Function || sourceFile == null) {\n return false\n }\n\n if (isComponentName(child.name)) {\n grouped.componentItems.push(child)\n return true\n }\n\n appendToMapList(grouped.functionsByFile, sourceFile, child)\n return true\n}\n\nfunction appendTypeAliasReflection(\n grouped: GroupedReflections,\n child: DeclarationReflection\n): boolean {\n const sourceFile = child.sources?.[0]?.fileName\n if (child.kind !== ReflectionKind.TypeAlias || sourceFile == null) {\n return false\n }\n\n appendToMapList(grouped.typesByFile, sourceFile, child)\n return true\n}\n\nexport function appendToMapList<T>(map: Map<string, T[]>, key: string, item: T): void {\n const items = map.get(key) ?? []\n items.push(item)\n map.set(key, items)\n}\n\nexport function sortReflectionsByName<T extends { name: string }>(items: T[]): T[] {\n return [...items].sort((left, right) => left.name.localeCompare(right.name))\n}\n\nexport function getModuleNameFromPath(\n filePath: string,\n packageNameCache: Map<string, string | undefined>\n): string {\n const parts = filePath.split(\"/\")\n const filePart = parts.pop() ?? filePath\n const basename = filePart.replace(/\\.(?:ts|tsx|js|jsx)$/u, \"\")\n const parent = parts.pop()\n\n if (parent != null && parent !== \"src\") {\n return `${parent}/${basename}`\n }\n\n if (basename === \"index\") {\n for (const packageName of packageNameCache.values()) {\n if (packageName != null && packageName.length > 0) {\n return packageName\n }\n }\n }\n\n return basename\n}\n\nexport function renderComment(parts: CommentPart[]): string {\n return parts.map((part) => part.text).join(\"\")\n}\n\nexport function renderCommentShort(parts: CommentPart[]): string {\n const text = renderComment(parts)\n const firstSentence = text.split(/[!.?]\\s/u)[0]\n if (firstSentence.length < text.length) {\n return `${firstSentence}.`\n }\n return text\n}\n\nexport function getSlug(name: string): string {\n return name\n .toLowerCase()\n .replaceAll(/[^\\da-z]+/gu, \"-\")\n .replaceAll(/^-|-$/gu, \"\")\n}\n\nexport function buildLink(basePath: string, category: string, slug: string): string {\n if (slug === \"index\") {\n return `${basePath}/${category}`\n }\n return `${basePath}/${category}/${slug}`\n}\n\nexport function getSourceUrl(\n sourceBaseUrl: string | undefined,\n fileName: string,\n line: number\n): null | string {\n if (sourceBaseUrl == null || sourceBaseUrl.length === 0) {\n return null\n }\n const baseUrl = sourceBaseUrl.replace(/\\/$/u, \"\")\n return `${baseUrl}/${fileName}#L${line}`\n}\n\nexport function getKindName(kind: ReflectionKind): string {\n const kindNames: Partial<Record<ReflectionKind, string>> = {\n [ReflectionKind.Project]: \"Project\",\n [ReflectionKind.Module]: \"Module\",\n [ReflectionKind.Namespace]: \"Namespace\",\n [ReflectionKind.Enum]: \"Enum\",\n [ReflectionKind.EnumMember]: \"Enum Member\",\n [ReflectionKind.Variable]: \"Variable\",\n [ReflectionKind.Function]: \"Function\",\n [ReflectionKind.Class]: \"Class\",\n [ReflectionKind.Interface]: \"Interface\",\n [ReflectionKind.Constructor]: \"Constructor\",\n [ReflectionKind.Property]: \"Property\",\n [ReflectionKind.Method]: \"Method\",\n [ReflectionKind.TypeAlias]: \"Type\",\n }\n return kindNames[kind] ?? \"Unknown\"\n}\n\nexport function getGroupUrlPrefix(kind: ReflectionKind): string {\n const prefixes: Partial<Record<ReflectionKind, string>> = {\n [ReflectionKind.Enum]: \"enums\",\n [ReflectionKind.Variable]: \"variables\",\n [ReflectionKind.Class]: \"classes\",\n [ReflectionKind.Interface]: \"interfaces\",\n [ReflectionKind.Namespace]: \"namespaces\",\n [ReflectionKind.Module]: \"modules\",\n }\n return prefixes[kind] ?? \"other\"\n}\n\nexport function getKindGroupName(kind: ReflectionKind, name: string): string {\n if (kind === ReflectionKind.Function) {\n if (name.startsWith(\"use\")) {\n return \"React Hooks\"\n }\n if (isReactComponent(name)) {\n return \"React Components\"\n }\n return \"Functions\"\n }\n\n const groupNames: Partial<Record<ReflectionKind, string>> = {\n [ReflectionKind.Class]: \"Classes\",\n [ReflectionKind.Enum]: \"Enums\",\n [ReflectionKind.Interface]: \"Interfaces\",\n [ReflectionKind.TypeAlias]: \"Types\",\n [ReflectionKind.Variable]: \"Variables\",\n }\n\n return groupNames[kind] ?? \"Other\"\n}\n\nexport function isReactComponent(name: string): boolean {\n const first = name.slice(0, 1)\n if (first.length === 0 || first !== first.toUpperCase()) {\n return false\n }\n if (name.includes(\"_\") || name.startsWith(\"use\")) {\n return false\n }\n if (name.endsWith(\"Props\") || name.endsWith(\"Options\") || name.endsWith(\"Config\")) {\n return false\n }\n return true\n}\n\nexport function createBreadcrumbs(basePath: string, pagePath: string): string {\n const parts = pagePath.split(\"/\")\n const breadcrumbs: string[] = [`[API](${basePath})`]\n let currentPath = \"\"\n\n for (const part of parts.slice(0, -1)) {\n currentPath = currentPath.length > 0 ? `${currentPath}/${part}` : part\n breadcrumbs.push(`[${part}](${basePath}/${currentPath})`)\n }\n\n const leaf = parts.at(-1)\n if (leaf != null) {\n breadcrumbs.push(leaf)\n }\n\n return breadcrumbs.join(\" / \")\n}\n\nexport function createNavigationLine(params: {\n basePath: string\n kind: ReflectionKind\n navigation: ReflectionNavigation\n}): null | string {\n const { basePath, kind, navigation } = params\n const prefix = getGroupUrlPrefix(kind)\n const prevLink =\n navigation.prev == null\n ? \"\"\n : `[← ${navigation.prev.name}](${buildLink(basePath, prefix, getSlug(navigation.prev.name))})`\n const nextLink =\n navigation.next == null\n ? \"\"\n : `[${navigation.next.name} →](${buildLink(basePath, prefix, getSlug(navigation.next.name))})`\n\n if (prevLink.length > 0 && nextLink.length > 0) {\n return `${prevLink} | ${nextLink}`\n }\n\n if (prevLink.length > 0) {\n return prevLink\n }\n\n if (nextLink.length > 0) {\n return nextLink\n }\n\n return null\n}\n","import { type DeclarationReflection, ReflectionKind } from \"typedoc\"\n\nimport type { TypeDocRuntimeContext } from \"./generator-config\"\nimport type { GeneratedApiDoc } from \"./types\"\n\nimport {\n buildLink,\n getModuleNameFromPath,\n getSlug,\n type GroupedReflections,\n renderCommentShort,\n sortReflectionsByName,\n} from \"./generator-shared\"\n\nexport function generateCategoryIndexPages(\n context: TypeDocRuntimeContext,\n grouped: GroupedReflections\n): GeneratedApiDoc[] {\n const pages: GeneratedApiDoc[] = []\n\n pushIfNotNull(pages, createComponentsIndexPage(context, grouped.componentItems))\n pushIfNotNull(pages, createFunctionsIndexPage(context, grouped.functionsByFile))\n pushIfNotNull(pages, createInterfacesIndexPage(context, grouped.standaloneItems))\n pushIfNotNull(pages, createTypesIndexPage(context, grouped.typesByFile))\n pushIfNotNull(pages, createClassesIndexPage(context, grouped.standaloneItems))\n\n return pages\n}\n\nfunction pushIfNotNull(docs: GeneratedApiDoc[], doc: GeneratedApiDoc | null): void {\n if (doc != null) {\n docs.push(doc)\n }\n}\n\nfunction createComponentsIndexPage(\n context: TypeDocRuntimeContext,\n components: DeclarationReflection[]\n): GeneratedApiDoc | null {\n if (components.length === 0) {\n return null\n }\n\n return {\n content: renderSimpleItemIndex({\n basePath: context.basePath,\n category: \"components\",\n items: components,\n title: \"Components\",\n }),\n frontmatter: { sidebar: false, title: \"Components\" },\n path: \"components/index.md\",\n }\n}\n\nfunction createInterfacesIndexPage(\n context: TypeDocRuntimeContext,\n standaloneItems: DeclarationReflection[]\n): GeneratedApiDoc | null {\n const interfaces = standaloneItems.filter((item) => item.kind === ReflectionKind.Interface)\n if (interfaces.length === 0) {\n return null\n }\n\n return {\n content: renderSimpleItemIndex({\n basePath: context.basePath,\n category: \"interfaces\",\n items: interfaces,\n title: \"Interfaces\",\n }),\n frontmatter: { sidebar: false, title: \"Interfaces\" },\n path: \"interfaces/index.md\",\n }\n}\n\nfunction createClassesIndexPage(\n context: TypeDocRuntimeContext,\n standaloneItems: DeclarationReflection[]\n): GeneratedApiDoc | null {\n const classes = standaloneItems.filter((item) => item.kind === ReflectionKind.Class)\n if (classes.length === 0) {\n return null\n }\n\n return {\n content: renderSimpleItemIndex({\n basePath: context.basePath,\n category: \"classes\",\n items: classes,\n title: \"Classes\",\n }),\n frontmatter: { sidebar: false, title: \"Classes\" },\n path: \"classes/index.md\",\n }\n}\n\nfunction renderSimpleItemIndex(params: {\n basePath: string\n category: string\n items: DeclarationReflection[]\n title: string\n}): string {\n const lines: string[] = [`# ${params.title}`, \"\"]\n const sortedItems = sortReflectionsByName(params.items)\n\n for (const item of sortedItems) {\n const summary = item.comment?.summary\n const description = summary == null ? \"\" : ` - ${renderCommentShort(summary)}`\n const link = buildLink(params.basePath, params.category, getSlug(item.name))\n lines.push(`- [${item.name}](${link})${description}`)\n }\n\n lines.push(\"\")\n return lines.join(\"\\n\")\n}\n\nfunction createFunctionsIndexPage(\n context: TypeDocRuntimeContext,\n functionsByFile: Map<string, DeclarationReflection[]>\n): GeneratedApiDoc | null {\n if (functionsByFile.size === 0) {\n return null\n }\n\n return {\n content: renderModuleIndex({\n basePath: context.basePath,\n category: \"functions\",\n modules: functionsByFile,\n packageNameCache: context.packageNameCache,\n title: \"Functions\",\n }),\n frontmatter: { sidebar: false, title: \"Functions\" },\n path: \"functions/index.md\",\n }\n}\n\nfunction createTypesIndexPage(\n context: TypeDocRuntimeContext,\n typesByFile: Map<string, DeclarationReflection[]>\n): GeneratedApiDoc | null {\n if (typesByFile.size === 0) {\n return null\n }\n\n return {\n content: renderModuleIndex({\n basePath: context.basePath,\n category: \"types\",\n modules: typesByFile,\n packageNameCache: context.packageNameCache,\n title: \"Types\",\n }),\n frontmatter: { sidebar: false, title: \"Types\" },\n path: \"types/index.md\",\n }\n}\n\nfunction renderModuleIndex(params: {\n basePath: string\n category: string\n modules: Map<string, DeclarationReflection[]>\n packageNameCache: Map<string, string | undefined>\n title: string\n}): string {\n const lines: string[] = [`# ${params.title}`, \"\"]\n const sortedModules = [...params.modules.entries()].sort(([left], [right]) => {\n const leftName = getModuleNameFromPath(left, params.packageNameCache)\n const rightName = getModuleNameFromPath(right, params.packageNameCache)\n return leftName.localeCompare(rightName)\n })\n\n for (const [sourceFile, items] of sortedModules) {\n const moduleName = getModuleNameFromPath(sourceFile, params.packageNameCache)\n const slug = getSlug(moduleName)\n const itemNames = items\n .map((item) => item.name)\n .sort()\n .join(\", \")\n lines.push(\n `- [${moduleName}](${buildLink(params.basePath, params.category, slug)}) - ${itemNames}`\n )\n }\n\n lines.push(\"\")\n return lines.join(\"\\n\")\n}\n","import { DeclarationReflection, type SignatureReflection } from \"typedoc\"\n\nimport type { TypeDocRuntimeContext } from \"./generator-config\"\n\nimport { buildLink, type ComponentProp, getSlug, renderCommentShort } from \"./generator-shared\"\n\nexport function getTypeName(paramType: unknown): null | string {\n if (!isRecord(paramType)) {\n return null\n }\n\n if (typeof paramType.name === \"string\" && paramType.name.length > 0) {\n return paramType.name\n }\n\n if (paramType.type !== \"reference\") {\n return null\n }\n\n if (typeof paramType.qualifiedName === \"string\" && paramType.qualifiedName.length > 0) {\n return paramType.qualifiedName\n }\n\n return null\n}\n\nexport function getPropsFromType(\n context: TypeDocRuntimeContext,\n paramType: unknown\n): ComponentProp[] {\n const inlineProps = getInlineDeclarationProps(paramType)\n if (inlineProps.length > 0) {\n return inlineProps\n }\n\n const typeName = getTypeName(paramType)\n if (typeName == null) {\n return []\n }\n\n const reflection = findReflectionByName(context, typeName)\n if (reflection == null) {\n return []\n }\n\n return extractPropsFromChildren(reflection.children ?? [])\n}\n\nfunction getInlineDeclarationProps(paramType: unknown): ComponentProp[] {\n if (!isRecord(paramType)) {\n return []\n }\n\n const declaration = paramType.declaration\n if (declaration == null) {\n return []\n }\n\n return declaration instanceof DeclarationReflection\n ? extractPropsFromChildren(declaration.children ?? [])\n : []\n}\n\nfunction findReflectionByName(\n context: TypeDocRuntimeContext,\n typeName: string\n): DeclarationReflection | null {\n const direct = context.project.getChildByName(typeName)\n if (direct instanceof DeclarationReflection) {\n return direct\n }\n\n const children = context.project.children ?? []\n for (const child of children) {\n if (child.name === typeName) {\n return child\n }\n }\n\n return null\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === \"object\"\n}\n\nfunction extractPropsFromChildren(children: DeclarationReflection[]): ComponentProp[] {\n return children.map((child) => ({\n description: child.comment?.summary == null ? \"\" : renderCommentShort(child.comment.summary),\n name: child.name,\n optional: child.flags.isOptional,\n type: child.type == null ? \"unknown\" : child.type.toString(),\n }))\n}\n\nexport function renderComponentSignature(\n context: TypeDocRuntimeContext,\n signature: SignatureReflection,\n componentName: string\n): string {\n const lines: string[] = []\n const propsParam = signature.parameters?.[0]\n const props = propsParam == null ? [] : getPropsFromType(context, propsParam.type)\n const propsTypeName = propsParam == null ? null : getTypeName(propsParam.type)\n\n appendComponentUsageBlock(lines, componentName, props)\n appendComponentPropsTable({\n context,\n lines,\n props,\n propsTypeName,\n })\n\n return lines.join(\"\\n\")\n}\n\nfunction appendComponentUsageBlock(\n lines: string[],\n componentName: string,\n props: ComponentProp[]\n): void {\n const hasChildren = props.some((prop) => prop.name === \"children\")\n const displayProps = props.filter((prop) => prop.name !== \"children\")\n\n lines.push(\"```tsx\")\n lines.push(`<${componentName}`)\n\n if (displayProps.length > 0) {\n for (const prop of displayProps) {\n const optionalMark = prop.optional ? \"?\" : \"\"\n lines.push(` ${prop.name}${optionalMark}={${prop.type}}`)\n }\n } else if (!hasChildren) {\n lines.push(\" {...props}\")\n }\n\n if (hasChildren) {\n lines.push(\">\")\n lines.push(\" {children}\")\n lines.push(`</${componentName}>`)\n } else {\n lines.push(\"/>\")\n }\n\n lines.push(\"```\")\n}\n\nfunction appendComponentPropsTable(params: {\n context: TypeDocRuntimeContext\n lines: string[]\n props: ComponentProp[]\n propsTypeName: null | string\n}): void {\n const { context, lines, props, propsTypeName } = params\n if (props.length === 0) {\n return\n }\n\n lines.push(\"\")\n lines.push(getPropsHeading(context.basePath, propsTypeName))\n\n lines.push(\"\")\n lines.push(\"| Prop | Type | Required | Description |\")\n lines.push(\"|------|------|----------|-------------|\")\n\n for (const prop of props) {\n const required = prop.optional ? \"No\" : \"Yes\"\n const description = prop.description.length > 0 ? prop.description : \"-\"\n lines.push(`| ${prop.name} | \\`${prop.type}\\` | ${required} | ${description} |`)\n }\n}\n\nfunction getPropsHeading(basePath: string, propsTypeName: null | string): string {\n if (propsTypeName == null) {\n return \"## Props\"\n }\n\n const propsSlug = getSlug(propsTypeName)\n const propsLink = buildLink(basePath, \"interfaces\", propsSlug)\n return `## [Props](${propsLink})`\n}\n","import type { DeclarationReflection } from \"typedoc\"\n\nimport type { TypeDocRuntimeContext } from \"./generator-config\"\nimport type { GeneratedApiDoc } from \"./types\"\n\nimport { renderComponentSignature } from \"./generator-render-component\"\nimport {\n createNavigationLine,\n getSlug,\n getSourceUrl,\n type ReflectionNavigation,\n renderComment,\n renderCommentShort,\n} from \"./generator-shared\"\n\nexport function generateComponentPage(params: {\n component: DeclarationReflection\n context: TypeDocRuntimeContext\n navigation: ReflectionNavigation\n}): GeneratedApiDoc {\n const { component, context, navigation } = params\n const slug = getSlug(component.name)\n const content = createComponentContent(context, component, navigation)\n\n return {\n content,\n frontmatter: {\n description:\n component.comment?.summary == null\n ? `${component.name} component`\n : renderCommentShort(component.comment.summary),\n title: component.name,\n },\n path: `components/${slug}.md`,\n }\n}\n\nfunction createComponentContent(\n context: TypeDocRuntimeContext,\n component: DeclarationReflection,\n navigation: ReflectionNavigation\n): string {\n const lines: string[] = [`# ${component.name}`, \"\"]\n\n const summary = component.comment?.summary\n if (summary != null) {\n lines.push(renderComment(summary))\n lines.push(\"\")\n }\n\n appendComponentUsage(lines, context, component)\n appendExamples(lines, component)\n appendSourceLink(lines, context, component)\n appendComponentNavigation({\n component,\n context,\n lines,\n navigation,\n })\n\n return lines.join(\"\\n\")\n}\n\nfunction appendComponentUsage(\n lines: string[],\n context: TypeDocRuntimeContext,\n component: DeclarationReflection\n): void {\n const signatures = component.signatures ?? []\n if (signatures.length === 0) {\n return\n }\n\n lines.push(\"## Usage\")\n lines.push(\"\")\n\n for (const signature of signatures) {\n lines.push(renderComponentSignature(context, signature, component.name))\n lines.push(\"\")\n }\n}\n\nfunction appendExamples(lines: string[], reflection: DeclarationReflection): void {\n const tags = reflection.comment?.blockTags ?? []\n const examples = tags.filter((tag) => tag.tag === \"@example\")\n if (examples.length === 0) {\n return\n }\n\n lines.push(\"## Example\")\n lines.push(\"\")\n\n for (const example of examples) {\n lines.push(renderComment(example.content))\n lines.push(\"\")\n }\n}\n\nfunction appendSourceLink(\n lines: string[],\n context: TypeDocRuntimeContext,\n reflection: DeclarationReflection\n): void {\n if (!context.config.markdown.sourceLinks) {\n return\n }\n\n const source = reflection.sources?.[0]\n if (source == null) {\n return\n }\n\n const sourceUrl = getSourceUrl(\n context.config.markdown.sourceBaseUrl,\n source.fileName,\n source.line\n )\n if (sourceUrl == null) {\n return\n }\n\n lines.push(`[Source](${sourceUrl})`)\n lines.push(\"\")\n}\n\nfunction appendComponentNavigation(params: {\n component: DeclarationReflection\n context: TypeDocRuntimeContext\n lines: string[]\n navigation: ReflectionNavigation\n}): void {\n const { component, context, lines, navigation } = params\n const line = createNavigationLine({\n basePath: context.basePath,\n kind: component.kind,\n navigation,\n })\n\n if (line == null) {\n return\n }\n\n lines.push(\"---\")\n lines.push(\"\")\n lines.push(line)\n lines.push(\"\")\n}\n","import type {\n DeclarationReflection,\n ParameterReflection,\n SignatureReflection,\n TypeParameterReflection,\n} from \"typedoc\"\n\nimport type { TypeDocRuntimeContext } from \"./generator-config\"\n\nimport { renderComment, renderCommentShort } from \"./generator-shared\"\n\nexport function renderSignature(\n context: TypeDocRuntimeContext,\n signature: SignatureReflection\n): string {\n const lines: string[] = []\n\n appendCodeFenceStart(lines, context)\n lines.push(getSignatureLine(signature))\n appendCodeFenceEnd(lines, context)\n appendSignatureParameters(lines, signature)\n appendSignatureReturn(lines, signature)\n\n return lines.join(\"\\n\")\n}\n\nfunction appendCodeFenceStart(lines: string[], context: TypeDocRuntimeContext): void {\n if (context.config.markdown.codeBlocks) {\n lines.push(\"```typescript\")\n }\n}\n\nfunction appendCodeFenceEnd(lines: string[], context: TypeDocRuntimeContext): void {\n if (context.config.markdown.codeBlocks) {\n lines.push(\"```\")\n }\n}\n\nfunction getSignatureLine(signature: SignatureReflection): string {\n const typeParameters = renderTypeParameterNames(signature.typeParameters)\n const parameters = renderSignatureParameters(signature)\n const returnType = signature.type == null ? \"\" : `: ${signature.type.toString()}`\n return `function ${signature.name}${typeParameters}(${parameters})${returnType}`\n}\n\nfunction renderTypeParameterNames(typeParameters: SignatureReflection[\"typeParameters\"]): string {\n if (typeParameters == null || typeParameters.length === 0) {\n return \"\"\n }\n return `<${typeParameters.map((item) => item.name).join(\", \")}>`\n}\n\nfunction renderSignatureParameters(signature: SignatureReflection): string {\n const parameters = signature.parameters ?? []\n return parameters\n .map((parameter) => {\n const optional = parameter.flags.isOptional ? \"?\" : \"\"\n const type = parameter.type == null ? \"\" : `: ${parameter.type.toString()}`\n return `${parameter.name}${optional}${type}`\n })\n .join(\", \")\n}\n\nfunction appendSignatureParameters(lines: string[], signature: SignatureReflection): void {\n const parameters = signature.parameters ?? []\n if (parameters.length === 0) {\n return\n }\n\n lines.push(\"\")\n lines.push(\"### Parameters\")\n lines.push(\"\")\n lines.push(\"| Name | Type | Description |\")\n lines.push(\"|------|------|-------------|\")\n\n for (const parameter of parameters) {\n lines.push(renderSignatureParameterRow(parameter))\n }\n}\n\nfunction renderSignatureParameterRow(parameter: ParameterReflection): string {\n const optional = parameter.flags.isOptional ? \" (optional)\" : \"\"\n const type = parameter.type == null ? \"-\" : `\\`${parameter.type.toString()}\\``\n const summary = parameter.comment?.summary\n const description = summary == null ? \"-\" : renderCommentShort(summary)\n return `| ${parameter.name}${optional} | ${type} | ${description} |`\n}\n\nfunction appendSignatureReturn(lines: string[], signature: SignatureReflection): void {\n const returnType = signature.type\n if (returnType == null || returnType.toString() === \"void\") {\n return\n }\n\n lines.push(\"\")\n lines.push(\"### Returns\")\n lines.push(\"\")\n lines.push(`\\`${returnType.toString()}\\``)\n\n const returnTag = signature.comment?.blockTags.find((tag) => tag.tag === \"@returns\")\n if (returnTag == null) {\n return\n }\n\n lines.push(\"\")\n lines.push(renderComment(returnTag.content))\n}\n\nexport function renderProperty(property: DeclarationReflection): string {\n const lines: string[] = []\n const flags = getPropertyFlags(property)\n\n lines.push(`### ${property.name}`)\n if (flags.length > 0) {\n lines.push(`*${flags.join(\", \")}*`)\n }\n lines.push(\"\")\n\n appendPropertyType(lines, property)\n appendPropertySummary(lines, property)\n appendPropertyDefaultValue(lines, property)\n\n return lines.join(\"\\n\")\n}\n\nfunction getPropertyFlags(property: DeclarationReflection): string[] {\n const flags: string[] = []\n if (property.flags.isOptional) flags.push(\"optional\")\n if (property.flags.isReadonly) flags.push(\"readonly\")\n if (property.flags.isStatic) flags.push(\"static\")\n return flags\n}\n\nfunction appendPropertyType(lines: string[], property: DeclarationReflection): void {\n if (property.type == null) {\n return\n }\n lines.push(\"```typescript\")\n lines.push(`${property.name}: ${property.type.toString()}`)\n lines.push(\"```\")\n lines.push(\"\")\n}\n\nfunction appendPropertySummary(lines: string[], property: DeclarationReflection): void {\n const summary = property.comment?.summary\n if (summary != null) {\n lines.push(renderComment(summary))\n }\n}\n\nfunction appendPropertyDefaultValue(lines: string[], property: DeclarationReflection): void {\n if (property.defaultValue == null || property.defaultValue.length === 0) {\n return\n }\n lines.push(\"\")\n lines.push(`**Default:** \\`${property.defaultValue}\\``)\n}\n\nexport function renderMethod(\n context: TypeDocRuntimeContext,\n method: DeclarationReflection\n): string {\n const lines: string[] = []\n lines.push(`### ${method.name}()`)\n lines.push(\"\")\n\n const signatures = method.signatures ?? []\n for (const signature of signatures) {\n appendMethodSignature(lines, context, signature)\n }\n\n return lines.join(\"\\n\")\n}\n\nfunction appendMethodSignature(\n lines: string[],\n context: TypeDocRuntimeContext,\n signature: SignatureReflection\n): void {\n const summary = signature.comment?.summary\n if (summary != null) {\n lines.push(renderComment(summary))\n lines.push(\"\")\n }\n\n lines.push(renderSignature(context, signature))\n lines.push(\"\")\n}\n\nexport function renderTypeParameters(typeParameters: TypeParameterReflection[]): string {\n const lines: string[] = []\n lines.push(\"| Name | Constraint | Default | Description |\")\n lines.push(\"|------|------------|---------|-------------|\")\n\n for (const typeParameter of typeParameters) {\n lines.push(renderTypeParameterRow(typeParameter))\n }\n\n return lines.join(\"\\n\")\n}\n\nfunction renderTypeParameterRow(typeParameter: TypeParameterReflection): string {\n const constraint = typeParameter.type == null ? \"-\" : `\\`${typeParameter.type.toString()}\\``\n const defaultValue =\n typeParameter.default == null ? \"-\" : `\\`${typeParameter.default.toString()}\\``\n const summary = typeParameter.comment?.summary\n const description = summary == null ? \"-\" : renderCommentShort(summary)\n return `| ${typeParameter.name} | ${constraint} | ${defaultValue} | ${description} |`\n}\n\nexport function renderHierarchy(reflection: DeclarationReflection): null | string {\n const lines: string[] = []\n\n appendHierarchySection(lines, \"**Extends:**\", reflection.extendedTypes)\n appendHierarchySection(lines, \"**Implements:**\", reflection.implementedTypes)\n appendHierarchySection(lines, \"**Extended by:**\", reflection.extendedBy)\n appendHierarchySection(lines, \"**Implemented by:**\", reflection.implementedBy)\n\n return lines.length === 0 ? null : lines.join(\"\\n\")\n}\n\nfunction appendHierarchySection(\n lines: string[],\n title: string,\n types: DeclarationReflection[\"extendedTypes\"]\n): void {\n if (types == null || types.length === 0) {\n return\n }\n\n lines.push(title)\n for (const item of types) {\n lines.push(`- \\`${item.toString()}\\``)\n }\n}\n","import type { DeclarationReflection } from \"typedoc\"\n\nimport type { TypeDocRuntimeContext } from \"./generator-config\"\nimport type { GeneratedApiDoc } from \"./types\"\n\nimport { renderSignature } from \"./generator-render\"\nimport {\n getModuleNameFromPath,\n getSlug,\n getSourceUrl,\n renderComment,\n sortReflectionsByName,\n} from \"./generator-shared\"\n\nexport function generateGroupedFunctionsPage(params: {\n context: TypeDocRuntimeContext\n functions: DeclarationReflection[]\n sourceFile: string\n}): GeneratedApiDoc {\n const { context, functions, sourceFile } = params\n const moduleName = getModuleNameFromPath(sourceFile, context.packageNameCache)\n const content = createGroupedFunctionsContent({\n context,\n functions,\n moduleName,\n sourceFile,\n })\n\n return {\n content,\n frontmatter: {\n description: `Functions from ${sourceFile}`,\n title: `${moduleName} Functions`,\n },\n path: `functions/${getSlug(moduleName)}.md`,\n }\n}\n\nfunction createGroupedFunctionsContent(params: {\n context: TypeDocRuntimeContext\n functions: DeclarationReflection[]\n moduleName: string\n sourceFile: string\n}): string {\n const { context, functions, moduleName, sourceFile } = params\n const lines: string[] = [\n `# ${moduleName} Functions`,\n \"\",\n `Functions exported from \\`${sourceFile}\\``,\n \"\",\n ]\n const sortedFunctions = sortReflectionsByName(functions)\n\n for (const fn of sortedFunctions) {\n appendGroupedFunction(lines, context, fn)\n }\n\n return lines.join(\"\\n\")\n}\n\nfunction appendGroupedFunction(\n lines: string[],\n context: TypeDocRuntimeContext,\n fn: DeclarationReflection\n): void {\n lines.push(`## ${fn.name}`)\n lines.push(\"\")\n\n const summary = fn.comment?.summary\n if (summary != null) {\n lines.push(renderComment(summary))\n lines.push(\"\")\n }\n\n const signatures = fn.signatures ?? []\n for (const signature of signatures) {\n lines.push(renderSignature(context, signature))\n lines.push(\"\")\n }\n\n appendExamples(lines, fn)\n appendSourceLink(lines, context, fn)\n lines.push(\"---\")\n lines.push(\"\")\n}\n\nfunction appendExamples(lines: string[], reflection: DeclarationReflection): void {\n const tags = reflection.comment?.blockTags ?? []\n const examples = tags.filter((tag) => tag.tag === \"@example\")\n if (examples.length === 0) {\n return\n }\n\n lines.push(\"### Example\")\n lines.push(\"\")\n\n for (const example of examples) {\n lines.push(renderComment(example.content))\n lines.push(\"\")\n }\n}\n\nfunction appendSourceLink(\n lines: string[],\n context: TypeDocRuntimeContext,\n reflection: DeclarationReflection\n): void {\n if (!context.config.markdown.sourceLinks) {\n return\n }\n\n const source = reflection.sources?.[0]\n if (source == null) {\n return\n }\n\n const sourceUrl = getSourceUrl(\n context.config.markdown.sourceBaseUrl,\n source.fileName,\n source.line\n )\n if (sourceUrl == null) {\n return\n }\n\n lines.push(`[Source](${sourceUrl})`)\n lines.push(\"\")\n}\n\nexport function generateGroupedTypesPage(params: {\n context: TypeDocRuntimeContext\n sourceFile: string\n types: DeclarationReflection[]\n}): GeneratedApiDoc {\n const { context, sourceFile, types } = params\n const moduleName = getModuleNameFromPath(sourceFile, context.packageNameCache)\n const content = createGroupedTypesContent({\n context,\n moduleName,\n sourceFile,\n types,\n })\n\n return {\n content,\n frontmatter: {\n description: `Type definitions from ${sourceFile}`,\n title: `${moduleName} Types`,\n },\n path: `types/${getSlug(moduleName)}.md`,\n }\n}\n\nfunction createGroupedTypesContent(params: {\n context: TypeDocRuntimeContext\n moduleName: string\n sourceFile: string\n types: DeclarationReflection[]\n}): string {\n const { context, moduleName, sourceFile, types } = params\n const lines: string[] = [\n `# ${moduleName} Types`,\n \"\",\n `Type definitions from \\`${sourceFile}\\``,\n \"\",\n ]\n const sortedTypes = sortReflectionsByName(types)\n\n for (const typeAlias of sortedTypes) {\n appendGroupedType(lines, context, typeAlias)\n }\n\n return lines.join(\"\\n\")\n}\n\nfunction appendGroupedType(\n lines: string[],\n context: TypeDocRuntimeContext,\n typeAlias: DeclarationReflection\n): void {\n lines.push(`## ${typeAlias.name}`)\n lines.push(\"\")\n\n const summary = typeAlias.comment?.summary\n if (summary != null) {\n lines.push(renderComment(summary))\n lines.push(\"\")\n }\n\n if (typeAlias.type != null) {\n lines.push(\"```typescript\")\n lines.push(`type ${typeAlias.name} = ${typeAlias.type.toString()}`)\n lines.push(\"```\")\n lines.push(\"\")\n }\n\n appendSourceLink(lines, context, typeAlias)\n lines.push(\"---\")\n lines.push(\"\")\n}\n","import type { DeclarationReflection } from \"typedoc\"\n\nimport type { TypeDocRuntimeContext } from \"./generator-config\"\nimport type { GeneratedApiDoc } from \"./types\"\n\nimport {\n appendToMapList,\n buildLink,\n getKindGroupName,\n getModuleNameFromPath,\n getSlug,\n type GroupedReflections,\n renderComment,\n renderCommentShort,\n sortReflectionsByName,\n} from \"./generator-shared\"\n\nexport function generateIndexPage(\n context: TypeDocRuntimeContext,\n grouped: GroupedReflections\n): GeneratedApiDoc {\n const lines: string[] = [`# ${context.config.sidebar.title}`, \"\", getProjectSummary(context), \"\"]\n\n appendComponentSection(lines, context, grouped.componentItems)\n appendFunctionsSection(lines, context, grouped.functionsByFile)\n appendTypesSection(lines, context, grouped.typesByFile)\n appendStandaloneSections(lines, context, grouped.standaloneItems)\n\n return {\n content: lines.join(\"\\n\"),\n frontmatter: {\n description: \"Auto-generated API documentation\",\n sidebar_position: 0,\n title: context.config.sidebar.title,\n },\n path: \"index.md\",\n }\n}\n\nfunction getProjectSummary(context: TypeDocRuntimeContext): string {\n const summary = context.project.comment?.summary\n if (summary == null) {\n return \"Auto-generated API documentation.\"\n }\n return renderComment(summary)\n}\n\nfunction appendComponentSection(\n lines: string[],\n context: TypeDocRuntimeContext,\n components: DeclarationReflection[]\n): void {\n if (components.length === 0) {\n return\n }\n\n lines.push(\"## Components\")\n lines.push(\"\")\n\n for (const component of sortReflectionsByName(components)) {\n const description = component.comment?.summary\n const suffix = description == null ? \"\" : ` - ${renderCommentShort(description)}`\n const link = buildLink(context.basePath, \"components\", getSlug(component.name))\n lines.push(`- [${component.name}](${link})${suffix}`)\n }\n\n lines.push(\"\")\n}\n\nfunction appendFunctionsSection(\n lines: string[],\n context: TypeDocRuntimeContext,\n functionsByFile: Map<string, DeclarationReflection[]>\n): void {\n if (functionsByFile.size === 0) {\n return\n }\n\n lines.push(\"## Functions\")\n lines.push(\"\")\n lines.push(...renderModuleSectionItems(context, functionsByFile, \"functions\"))\n lines.push(\"\")\n}\n\nfunction appendTypesSection(\n lines: string[],\n context: TypeDocRuntimeContext,\n typesByFile: Map<string, DeclarationReflection[]>\n): void {\n if (typesByFile.size === 0) {\n return\n }\n\n lines.push(\"## Type Aliases\")\n lines.push(\"\")\n lines.push(...renderModuleSectionItems(context, typesByFile, \"types\"))\n lines.push(\"\")\n}\n\nfunction renderModuleSectionItems(\n context: TypeDocRuntimeContext,\n modules: Map<string, DeclarationReflection[]>,\n category: string\n): string[] {\n const sortedModules = [...modules.entries()].sort(([left], [right]) => {\n const leftName = getModuleNameFromPath(left, context.packageNameCache)\n const rightName = getModuleNameFromPath(right, context.packageNameCache)\n return leftName.localeCompare(rightName)\n })\n\n return sortedModules.map(([sourceFile, items]) => {\n const moduleName = getModuleNameFromPath(sourceFile, context.packageNameCache)\n const itemNames = items\n .map((item) => item.name)\n .sort()\n .join(\", \")\n const link = buildLink(context.basePath, category, getSlug(moduleName))\n return `- [${moduleName}](${link}) - ${itemNames}`\n })\n}\n\nfunction appendStandaloneSections(\n lines: string[],\n context: TypeDocRuntimeContext,\n standaloneItems: DeclarationReflection[]\n): void {\n const groups = new Map<string, DeclarationReflection[]>()\n for (const item of standaloneItems) {\n appendToMapList(groups, getKindGroupName(item.kind, item.name), item)\n }\n\n const orderedGroups = [\"Interfaces\", \"Classes\", \"Variables\", \"Enums\", \"Other\"]\n for (const groupName of orderedGroups) {\n const groupItems = groups.get(groupName)\n if (groupItems == null || groupItems.length === 0) {\n continue\n }\n appendStandaloneGroup({\n context,\n groupItems,\n groupName,\n lines,\n })\n }\n}\n\nfunction appendStandaloneGroup(params: {\n context: TypeDocRuntimeContext\n groupItems: DeclarationReflection[]\n groupName: string\n lines: string[]\n}): void {\n const { context, groupItems, groupName, lines } = params\n lines.push(`## ${groupName}`)\n lines.push(\"\")\n\n for (const item of sortReflectionsByName(groupItems)) {\n const description = item.comment?.summary\n const suffix = description == null ? \"\" : ` - ${renderCommentShort(description)}`\n const prefix = groupName.toLowerCase()\n const link = buildLink(context.basePath, prefix, getSlug(item.name))\n lines.push(`- [${item.name}](${link})${suffix}`)\n }\n\n lines.push(\"\")\n}\n","import type { DeclarationReflection } from \"typedoc\"\n\nimport { renderComment } from \"./generator-shared\"\n\nexport function appendReflectionCommentTags(\n lines: string[],\n reflection: DeclarationReflection\n): void {\n const blockTags = reflection.comment?.blockTags ?? []\n\n appendTagExamples(lines, blockTags)\n appendTagDeprecated(lines, blockTags)\n appendTagSeeAlso(lines, blockTags)\n}\n\nfunction appendTagExamples(\n lines: string[],\n blockTags: NonNullable<DeclarationReflection[\"comment\"]>[\"blockTags\"]\n): void {\n const examples = blockTags.filter((tag) => tag.tag === \"@example\")\n if (examples.length === 0) {\n return\n }\n\n lines.push(\"## Examples\")\n lines.push(\"\")\n\n for (const example of examples) {\n lines.push(renderComment(example.content))\n lines.push(\"\")\n }\n}\n\nfunction appendTagDeprecated(\n lines: string[],\n blockTags: NonNullable<DeclarationReflection[\"comment\"]>[\"blockTags\"]\n): void {\n const deprecatedTag = blockTags.find((tag) => tag.tag === \"@deprecated\")\n if (deprecatedTag == null) {\n return\n }\n\n lines.push('<Warning title=\"Deprecated\">')\n lines.push(renderComment(deprecatedTag.content))\n lines.push(\"</Warning>\")\n lines.push(\"\")\n}\n\nfunction appendTagSeeAlso(\n lines: string[],\n blockTags: NonNullable<DeclarationReflection[\"comment\"]>[\"blockTags\"]\n): void {\n const seeTags = blockTags.filter((tag) => tag.tag === \"@see\")\n if (seeTags.length === 0) {\n return\n }\n\n lines.push(\"## See Also\")\n lines.push(\"\")\n for (const seeTag of seeTags) {\n lines.push(`- ${renderComment(seeTag.content)}`)\n }\n lines.push(\"\")\n}\n","import { type DeclarationReflection, ReflectionKind } from \"typedoc\"\n\nimport type { TypeDocRuntimeContext } from \"./generator-config\"\nimport type { GeneratedApiDoc } from \"./types\"\n\nimport { appendReflectionCommentTags } from \"./generator-reflection-tags\"\nimport {\n renderHierarchy,\n renderMethod,\n renderProperty,\n renderSignature,\n renderTypeParameters,\n} from \"./generator-render\"\nimport {\n createBreadcrumbs,\n createNavigationLine,\n getGroupUrlPrefix,\n getKindName,\n getSlug,\n getSourceUrl,\n type ReflectionNavigation,\n renderComment,\n renderCommentShort,\n} from \"./generator-shared\"\n\nexport function generateReflectionDocs(params: {\n context: TypeDocRuntimeContext\n navigation: ReflectionNavigation\n parentPath: string\n reflection: DeclarationReflection\n}): GeneratedApiDoc[] {\n const { context, navigation, parentPath, reflection } = params\n const pagePath = getReflectionPagePath(reflection, parentPath)\n const docs: GeneratedApiDoc[] = [\n generateReflectionPage({ context, navigation, pagePath, reflection }),\n ]\n const childRefs = reflection.children ?? []\n for (const child of childRefs) {\n if (hasOwnPage(child.kind)) {\n docs.push(\n ...generateReflectionDocs({\n context,\n navigation: { next: null, prev: null },\n parentPath: pagePath,\n reflection: child,\n })\n )\n }\n }\n return docs\n}\nfunction getReflectionPagePath(reflection: DeclarationReflection, parentPath: string): string {\n const slug = getSlug(reflection.name)\n if (parentPath.length > 0) {\n return `${parentPath}/${slug}`\n }\n const prefix = getGroupUrlPrefix(reflection.kind)\n return prefix.length === 0 ? slug : `${prefix}/${slug}`\n}\nfunction hasOwnPage(kind: ReflectionKind): boolean {\n return [\n ReflectionKind.Class,\n ReflectionKind.Enum,\n ReflectionKind.Interface,\n ReflectionKind.Module,\n ReflectionKind.Namespace,\n ].includes(kind)\n}\nexport function generateReflectionPage(params: {\n context: TypeDocRuntimeContext\n navigation: ReflectionNavigation\n pagePath: string\n reflection: DeclarationReflection\n}): GeneratedApiDoc {\n const { context, navigation, pagePath, reflection } = params\n const lines: string[] = []\n appendReflectionSections({\n context,\n lines,\n navigation,\n pagePath,\n reflection,\n })\n return {\n content: lines.join(\"\\n\"),\n frontmatter: {\n description:\n reflection.comment?.summary == null\n ? `${getKindName(reflection.kind)} ${reflection.name}`\n : renderCommentShort(reflection.comment.summary),\n title: reflection.name,\n },\n path: `${pagePath}.md`,\n }\n}\nfunction appendReflectionSections(params: {\n context: TypeDocRuntimeContext\n lines: string[]\n navigation: ReflectionNavigation\n pagePath: string\n reflection: DeclarationReflection\n}): void {\n const { context, lines, navigation, pagePath, reflection } = params\n appendBreadcrumbs(lines, context, pagePath)\n appendTitle(lines, reflection)\n appendDescription(lines, reflection)\n appendTypeParameters(lines, reflection)\n appendHierarchy(lines, context, reflection)\n appendSignatures(lines, context, reflection)\n appendProperties(lines, reflection)\n appendMethods(lines, context, reflection)\n appendEnumMembers(lines, reflection)\n appendTypeAlias(lines, reflection)\n appendSourceSection(lines, context, reflection)\n appendReflectionCommentTags(lines, reflection)\n appendNavigation({ context, lines, navigation, reflection })\n}\nfunction appendBreadcrumbs(\n lines: string[],\n context: TypeDocRuntimeContext,\n pagePath: string\n): void {\n if (!context.config.markdown.breadcrumbs) {\n return\n }\n lines.push(createBreadcrumbs(context.basePath, pagePath))\n lines.push(\"\")\n}\nfunction appendTitle(lines: string[], reflection: DeclarationReflection): void {\n const kind = getKindName(reflection.kind)\n lines.push(`# ${kind}: ${reflection.name}`)\n lines.push(\"\")\n}\nfunction appendDescription(lines: string[], reflection: DeclarationReflection): void {\n const summary = reflection.comment?.summary\n if (summary == null) {\n return\n }\n lines.push(renderComment(summary))\n lines.push(\"\")\n}\nfunction appendTypeParameters(lines: string[], reflection: DeclarationReflection): void {\n const typeParameters = reflection.typeParameters ?? []\n if (typeParameters.length === 0) {\n return\n }\n lines.push(\"## Type Parameters\")\n lines.push(\"\")\n lines.push(renderTypeParameters(typeParameters))\n lines.push(\"\")\n}\nfunction appendHierarchy(\n lines: string[],\n context: TypeDocRuntimeContext,\n reflection: DeclarationReflection\n): void {\n if (!context.config.markdown.hierarchy) {\n return\n }\n const hierarchy = renderHierarchy(reflection)\n if (hierarchy == null) {\n return\n }\n lines.push(\"## Hierarchy\")\n lines.push(\"\")\n lines.push(hierarchy)\n lines.push(\"\")\n}\nfunction appendSignatures(\n lines: string[],\n context: TypeDocRuntimeContext,\n reflection: DeclarationReflection\n): void {\n const signatures = reflection.signatures ?? []\n if (signatures.length === 0) {\n return\n }\n lines.push(\"## Signature\")\n lines.push(\"\")\n for (const signature of signatures) {\n lines.push(renderSignature(context, signature))\n lines.push(\"\")\n }\n}\nfunction appendProperties(lines: string[], reflection: DeclarationReflection): void {\n const children = reflection.children ?? []\n const properties = children.filter((child) => child.kind === ReflectionKind.Property)\n if (properties.length === 0) {\n return\n }\n lines.push(\"## Properties\")\n lines.push(\"\")\n for (const property of properties) {\n lines.push(renderProperty(property))\n lines.push(\"\")\n }\n}\nfunction appendMethods(\n lines: string[],\n context: TypeDocRuntimeContext,\n reflection: DeclarationReflection\n): void {\n const children = reflection.children ?? []\n const methods = children.filter((child) => child.kind === ReflectionKind.Method)\n if (methods.length === 0) {\n return\n }\n lines.push(\"## Methods\")\n lines.push(\"\")\n for (const method of methods) {\n lines.push(renderMethod(context, method))\n lines.push(\"\")\n }\n}\nfunction appendEnumMembers(lines: string[], reflection: DeclarationReflection): void {\n const children = reflection.children ?? []\n const enumMembers = children.filter((child) => child.kind === ReflectionKind.EnumMember)\n if (enumMembers.length === 0) {\n return\n }\n lines.push(\"## Members\")\n lines.push(\"\")\n lines.push(\"| Member | Value | Description |\")\n lines.push(\"|--------|-------|-------------|\")\n for (const member of enumMembers) {\n const value = member.defaultValue ?? \"\"\n const summary = member.comment?.summary\n const description = summary == null ? \"\" : renderCommentShort(summary)\n lines.push(`| \\`${member.name}\\` | \\`${value}\\` | ${description} |`)\n }\n lines.push(\"\")\n}\nfunction appendTypeAlias(lines: string[], reflection: DeclarationReflection): void {\n if (reflection.kind !== ReflectionKind.TypeAlias || reflection.type == null) {\n return\n }\n lines.push(\"## Type\")\n lines.push(\"\")\n lines.push(\"```typescript\")\n lines.push(`type ${reflection.name} = ${reflection.type.toString()}`)\n lines.push(\"```\")\n lines.push(\"\")\n}\nfunction appendSourceSection(\n lines: string[],\n context: TypeDocRuntimeContext,\n reflection: DeclarationReflection\n): void {\n if (!context.config.markdown.sourceLinks) {\n return\n }\n const source = reflection.sources?.[0]\n if (source == null) {\n return\n }\n lines.push(\"## Source\")\n lines.push(\"\")\n const sourceUrl = getSourceUrl(\n context.config.markdown.sourceBaseUrl,\n source.fileName,\n source.line\n )\n if (sourceUrl == null) {\n lines.push(`${source.fileName}:${source.line}`)\n } else {\n lines.push(`[${source.fileName}:${source.line}](${sourceUrl})`)\n }\n lines.push(\"\")\n}\nfunction appendNavigation(params: {\n context: TypeDocRuntimeContext\n lines: string[]\n navigation: ReflectionNavigation\n reflection: DeclarationReflection\n}): void {\n const { context, lines, navigation, reflection } = params\n const line = createNavigationLine({\n basePath: context.basePath,\n kind: reflection.kind,\n navigation,\n })\n if (line == null) {\n return\n }\n lines.push(\"---\")\n lines.push(\"\")\n lines.push(line)\n lines.push(\"\")\n}\n","import type { DeclarationReflection, ReflectionKind } from \"typedoc\"\n\nimport type { TypeDocRuntimeContext } from \"./generator-config\"\nimport type { GeneratedApiDoc } from \"./types\"\n\nimport { generateCategoryIndexPages } from \"./generator-pages-categories\"\nimport { generateComponentPage } from \"./generator-pages-components\"\nimport { generateGroupedFunctionsPage, generateGroupedTypesPage } from \"./generator-pages-grouped\"\nimport { generateIndexPage } from \"./generator-pages-index\"\nimport { generateReflectionDocs } from \"./generator-reflection\"\nimport {\n groupProjectChildren,\n isReactComponent,\n type ReflectionNavigation,\n sortReflectionsByName,\n} from \"./generator-shared\"\n\nexport function generateMarkdownDocs(context: TypeDocRuntimeContext): GeneratedApiDoc[] {\n const grouped = groupProjectChildren(context.project, isReactComponent)\n const docs: GeneratedApiDoc[] = [generateIndexPage(context, grouped)]\n\n addGroupedFunctionPages(context, docs, grouped.functionsByFile)\n addGroupedTypePages(context, docs, grouped.typesByFile)\n addComponentPages(context, docs, grouped.componentItems)\n addStandalonePages(context, docs, grouped.standaloneItems)\n\n docs.push(...generateCategoryIndexPages(context, grouped))\n return docs\n}\n\nfunction addGroupedFunctionPages(\n context: TypeDocRuntimeContext,\n docs: GeneratedApiDoc[],\n functionsByFile: Map<string, DeclarationReflection[]>\n): void {\n for (const [sourceFile, functions] of functionsByFile) {\n docs.push(generateGroupedFunctionsPage({ context, functions, sourceFile }))\n }\n}\n\nfunction addGroupedTypePages(\n context: TypeDocRuntimeContext,\n docs: GeneratedApiDoc[],\n typesByFile: Map<string, DeclarationReflection[]>\n): void {\n for (const [sourceFile, types] of typesByFile) {\n docs.push(generateGroupedTypesPage({ context, sourceFile, types }))\n }\n}\n\nfunction addComponentPages(\n context: TypeDocRuntimeContext,\n docs: GeneratedApiDoc[],\n componentItems: DeclarationReflection[]\n): void {\n const sorted = sortReflectionsByName(componentItems)\n for (const [index, component] of sorted.entries()) {\n docs.push(\n generateComponentPage({ component, context, navigation: getNavigation(sorted, index) })\n )\n }\n}\n\nfunction addStandalonePages(\n context: TypeDocRuntimeContext,\n docs: GeneratedApiDoc[],\n standaloneItems: DeclarationReflection[]\n): void {\n const itemsByKind = groupStandaloneByKind(standaloneItems)\n\n for (const items of itemsByKind.values()) {\n const sorted = sortReflectionsByName(items)\n for (const [index, reflection] of sorted.entries()) {\n docs.push(\n ...generateReflectionDocs({\n context,\n navigation: getNavigation(sorted, index),\n parentPath: \"\",\n reflection,\n })\n )\n }\n }\n}\n\nfunction groupStandaloneByKind(\n standaloneItems: DeclarationReflection[]\n): Map<ReflectionKind, DeclarationReflection[]> {\n const itemsByKind = new Map<ReflectionKind, DeclarationReflection[]>()\n\n for (const item of standaloneItems) {\n const existing = itemsByKind.get(item.kind) ?? []\n existing.push(item)\n itemsByKind.set(item.kind, existing)\n }\n\n return itemsByKind\n}\n\nfunction getNavigation(sortedItems: DeclarationReflection[], index: number): ReflectionNavigation {\n return {\n next: index < sortedItems.length - 1 ? sortedItems[index + 1] : null,\n prev: index > 0 ? sortedItems[index - 1] : null,\n }\n}\n","import fs from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { readPackageUp } from \"read-package-up\"\nimport { Application, TSConfigReader, TypeDocReader } from \"typedoc\"\n\nimport type { GeneratedApiDoc, TypeDocConfig } from \"./types\"\n\nimport {\n getTypedocOptions,\n type ResolvedTypeDocConfig,\n resolveTypeDocConfig,\n type TypeDocRuntimeContext,\n} from \"./generator-config\"\nimport { generateMarkdownDocs } from \"./generator-docs\"\n\nexport class TypeDocGenerator {\n private readonly basePath: string\n private readonly config: ResolvedTypeDocConfig\n private readonly packageNameCache = new Map<string, string | undefined>()\n\n constructor(config: TypeDocConfig) {\n this.config = resolveTypeDocConfig(config)\n this.basePath = `/${this.config.out}`\n }\n\n async generate(outputDir: string): Promise<GeneratedApiDoc[]> {\n await this.populatePackageNameCache()\n\n const app = await Application.bootstrapWithPlugins(getTypedocOptions(this.config), [\n new TSConfigReader(),\n new TypeDocReader(),\n ])\n\n const project = await app.convert()\n if (project == null) {\n throw new Error(\"TypeDoc conversion failed\")\n }\n\n const context: TypeDocRuntimeContext = {\n basePath: this.basePath,\n config: this.config,\n packageNameCache: this.packageNameCache,\n project,\n }\n\n const docs = generateMarkdownDocs(context)\n await this.writeDocs(outputDir, docs)\n return docs\n }\n\n private async populatePackageNameCache(): Promise<void> {\n for (const entryPoint of this.config.entryPoints) {\n await this.resolvePackageName(entryPoint)\n }\n }\n\n private async resolvePackageName(filePath: string): Promise<string | undefined> {\n const directory = path.dirname(path.resolve(filePath))\n\n if (this.packageNameCache.has(directory)) {\n return this.packageNameCache.get(directory)\n }\n\n const packageResult = await readPackageUp({ cwd: directory })\n const packageName = packageResult?.packageJson.name\n const resolvedName =\n packageName == null || packageName.length === 0\n ? undefined\n : packageName.replace(/^@[^/]+\\//u, \"\")\n\n this.packageNameCache.set(directory, resolvedName)\n return resolvedName\n }\n\n private async writeDocs(outputDir: string, docs: GeneratedApiDoc[]): Promise<void> {\n const apiDirectory = path.join(outputDir, this.config.out)\n await fs.rm(apiDirectory, { force: true, recursive: true })\n await fs.mkdir(apiDirectory, { recursive: true })\n\n for (const doc of docs) {\n await this.writeSingleDoc(apiDirectory, doc)\n }\n }\n\n private async writeSingleDoc(apiDirectory: string, doc: GeneratedApiDoc): Promise<void> {\n const filePath = path.join(apiDirectory, doc.path)\n await fs.mkdir(path.dirname(filePath), { recursive: true })\n\n const frontmatter = createFrontmatter(doc)\n await fs.writeFile(filePath, `${frontmatter}${doc.content}`)\n }\n}\n\nfunction createFrontmatter(doc: GeneratedApiDoc): string {\n const lines: string[] = [\"---\", `title: ${doc.frontmatter.title}`]\n\n if (doc.frontmatter.description != null && doc.frontmatter.description.length > 0) {\n lines.push(`description: ${doc.frontmatter.description}`)\n }\n\n if (doc.frontmatter.sidebar_position != null) {\n lines.push(`sidebar_position: ${doc.frontmatter.sidebar_position}`)\n }\n\n if (doc.frontmatter.sidebar === false) {\n lines.push(\"sidebar: false\")\n }\n\n lines.push(\"---\", \"\")\n return `${lines.join(\"\\n\")}\\n`\n}\n\nexport async function generateApiDocs(\n config: TypeDocConfig,\n outputDir: string\n): Promise<GeneratedApiDoc[]> {\n const generator = new TypeDocGenerator(config)\n return generator.generate(outputDir)\n}\n"],"mappings":";;;;;AA2BA,SAAgB,qBAAqB,QAA8C;CACjF,MAAM,UAAU,qBAAqB,OAAO,QAAQ;CACpD,MAAM,WAAW,sBAAsB,OAAO,SAAS;CAEvD,OAAO;EACL,GAAG;EACH,kBAAkB,YAAY,OAAO,kBAAkB,KAAK;EAC5D,iBAAiB,YAAY,OAAO,iBAAiB,KAAK;EAC1D,gBAAgB,YAAY,OAAO,gBAAgB,KAAK;EACxD,kBAAkB,YAAY,OAAO,kBAAkB,MAAM;EAC7D;EACA,KAAK,YAAY,OAAO,KAAK,MAAM;EACnC;EACA,MAAM,YAAY,OAAO,MAAM,CAAC,eAAe,CAAC;EACjD;;AAGH,SAAgB,kBAAkB,QAAwD;CACxF,MAAM,UAAmC;EACvC,aAAa,OAAO;EACpB,kBAAkB,OAAO;EACzB,iBAAiB,OAAO;EACxB,gBAAgB,OAAO;EACvB,kBAAkB,OAAO;EACzB,MAAM,OAAO;EACb,UAAU,OAAO;EAClB;CAED,oBAAoB,SAAS,WAAW,OAAO,QAAQ;CACvD,oBAAoB,SAAS,iBAAiB,OAAO,cAAc;CACnE,oBAAoB,SAAS,cAAc,OAAO,WAAW;CAC7D,oBAAoB,SAAS,UAAU,OAAO,OAAO;CACrD,oBAAoB,SAAS,UAAU,OAAO,OAAO;CAErD,OAAO;;AAGT,SAAS,oBACP,SACA,KACA,OACM;CACN,IAAI,SAAS,MACX,QAAQ,OAAO;;AAInB,SAAS,YAAe,OAAsB,UAAgB;CAC5D,OAAO,SAAS;;AAGlB,SAAS,qBAAqB,SAAqE;CACjG,OAAO;EACL,WAAW,YAAY,SAAS,WAAW,MAAM;EACjD,UAAU,YAAY,SAAS,UAAU,IAAI;EAC7C,OAAO,YAAY,SAAS,OAAO,gBAAgB;EACpD;;AAGH,SAAS,sBACP,UACmC;CACnC,OAAO;EACL,aAAa,YAAY,UAAU,aAAa,KAAK;EACrD,YAAY,YAAY,UAAU,YAAY,KAAK;EACnD,WAAW,YAAY,UAAU,WAAW,KAAK;EACjD,eAAe,UAAU;EACzB,aAAa,YAAY,UAAU,aAAa,KAAK;EACtD;;;;ACrEH,SAAgB,qBACd,SACA,iBACoB;CACpB,MAAM,UAA8B;EAClC,gBAAgB,EAAE;EAClB,iCAAiB,IAAI,KAAsC;EAC3D,iBAAiB,EAAE;EACnB,6BAAa,IAAI,KAAsC;EACxD;CAED,MAAM,WAAW,QAAQ,YAAY,EAAE;CACvC,KAAK,MAAM,SAAS,UAAU;EAC5B,IAAI,yBAAyB,SAAS,OAAO,gBAAgB,EAC3D;EAEF,IAAI,0BAA0B,SAAS,MAAM,EAC3C;EAEF,QAAQ,gBAAgB,KAAK,MAAM;;CAGrC,OAAO;;AAGT,SAAS,yBACP,SACA,OACA,iBACS;CACT,MAAM,aAAa,MAAM,UAAU,IAAI;CACvC,IAAI,MAAM,SAAS,eAAe,YAAY,cAAc,MAC1D,OAAO;CAGT,IAAI,gBAAgB,MAAM,KAAK,EAAE;EAC/B,QAAQ,eAAe,KAAK,MAAM;EAClC,OAAO;;CAGT,gBAAgB,QAAQ,iBAAiB,YAAY,MAAM;CAC3D,OAAO;;AAGT,SAAS,0BACP,SACA,OACS;CACT,MAAM,aAAa,MAAM,UAAU,IAAI;CACvC,IAAI,MAAM,SAAS,eAAe,aAAa,cAAc,MAC3D,OAAO;CAGT,gBAAgB,QAAQ,aAAa,YAAY,MAAM;CACvD,OAAO;;AAGT,SAAgB,gBAAmB,KAAuB,KAAa,MAAe;CACpF,MAAM,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE;CAChC,MAAM,KAAK,KAAK;CAChB,IAAI,IAAI,KAAK,MAAM;;AAGrB,SAAgB,sBAAkD,OAAiB;CACjF,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,MAAM,UAAU,KAAK,KAAK,cAAc,MAAM,KAAK,CAAC;;AAG9E,SAAgB,sBACd,UACA,kBACQ;CACR,MAAM,QAAQ,SAAS,MAAM,IAAI;CAEjC,MAAM,YADW,MAAM,KAAK,IAAI,UACN,QAAQ,yBAAyB,GAAG;CAC9D,MAAM,SAAS,MAAM,KAAK;CAE1B,IAAI,UAAU,QAAQ,WAAW,OAC/B,OAAO,GAAG,OAAO,GAAG;CAGtB,IAAI,aAAa;OACV,MAAM,eAAe,iBAAiB,QAAQ,EACjD,IAAI,eAAe,QAAQ,YAAY,SAAS,GAC9C,OAAO;;CAKb,OAAO;;AAGT,SAAgB,cAAc,OAA8B;CAC1D,OAAO,MAAM,KAAK,SAAS,KAAK,KAAK,CAAC,KAAK,GAAG;;AAGhD,SAAgB,mBAAmB,OAA8B;CAC/D,MAAM,OAAO,cAAc,MAAM;CACjC,MAAM,gBAAgB,KAAK,MAAM,WAAW,CAAC;CAC7C,IAAI,cAAc,SAAS,KAAK,QAC9B,OAAO,GAAG,cAAc;CAE1B,OAAO;;AAGT,SAAgB,QAAQ,MAAsB;CAC5C,OAAO,KACJ,aAAa,CACb,WAAW,eAAe,IAAI,CAC9B,WAAW,WAAW,GAAG;;AAG9B,SAAgB,UAAU,UAAkB,UAAkB,MAAsB;CAClF,IAAI,SAAS,SACX,OAAO,GAAG,SAAS,GAAG;CAExB,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG;;AAGpC,SAAgB,aACd,eACA,UACA,MACe;CACf,IAAI,iBAAiB,QAAQ,cAAc,WAAW,GACpD,OAAO;CAGT,OAAO,GADS,cAAc,QAAQ,QAAQ,GAC7B,CAAC,GAAG,SAAS,IAAI;;AAGpC,SAAgB,YAAY,MAA8B;CAgBxD,OAAO;GAdJ,eAAe,UAAU;GACzB,eAAe,SAAS;GACxB,eAAe,YAAY;GAC3B,eAAe,OAAO;GACtB,eAAe,aAAa;GAC5B,eAAe,WAAW;GAC1B,eAAe,WAAW;GAC1B,eAAe,QAAQ;GACvB,eAAe,YAAY;GAC3B,eAAe,cAAc;GAC7B,eAAe,WAAW;GAC1B,eAAe,SAAS;GACxB,eAAe,YAAY;EAEd,CAAC,SAAS;;AAG5B,SAAgB,kBAAkB,MAA8B;CAS9D,OAAO;GAPJ,eAAe,OAAO;GACtB,eAAe,WAAW;GAC1B,eAAe,QAAQ;GACvB,eAAe,YAAY;GAC3B,eAAe,YAAY;GAC3B,eAAe,SAAS;EAEZ,CAAC,SAAS;;AAG3B,SAAgB,iBAAiB,MAAsB,MAAsB;CAC3E,IAAI,SAAS,eAAe,UAAU;EACpC,IAAI,KAAK,WAAW,MAAM,EACxB,OAAO;EAET,IAAI,iBAAiB,KAAK,EACxB,OAAO;EAET,OAAO;;CAWT,OAAO;GAPJ,eAAe,QAAQ;GACvB,eAAe,OAAO;GACtB,eAAe,YAAY;GAC3B,eAAe,YAAY;GAC3B,eAAe,WAAW;EAGZ,CAAC,SAAS;;AAG7B,SAAgB,iBAAiB,MAAuB;CACtD,MAAM,QAAQ,KAAK,MAAM,GAAG,EAAE;CAC9B,IAAI,MAAM,WAAW,KAAK,UAAU,MAAM,aAAa,EACrD,OAAO;CAET,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,WAAW,MAAM,EAC9C,OAAO;CAET,IAAI,KAAK,SAAS,QAAQ,IAAI,KAAK,SAAS,UAAU,IAAI,KAAK,SAAS,SAAS,EAC/E,OAAO;CAET,OAAO;;AAGT,SAAgB,kBAAkB,UAAkB,UAA0B;CAC5E,MAAM,QAAQ,SAAS,MAAM,IAAI;CACjC,MAAM,cAAwB,CAAC,SAAS,SAAS,GAAG;CACpD,IAAI,cAAc;CAElB,KAAK,MAAM,QAAQ,MAAM,MAAM,GAAG,GAAG,EAAE;EACrC,cAAc,YAAY,SAAS,IAAI,GAAG,YAAY,GAAG,SAAS;EAClE,YAAY,KAAK,IAAI,KAAK,IAAI,SAAS,GAAG,YAAY,GAAG;;CAG3D,MAAM,OAAO,MAAM,GAAG,GAAG;CACzB,IAAI,QAAQ,MACV,YAAY,KAAK,KAAK;CAGxB,OAAO,YAAY,KAAK,MAAM;;AAGhC,SAAgB,qBAAqB,QAInB;CAChB,MAAM,EAAE,UAAU,MAAM,eAAe;CACvC,MAAM,SAAS,kBAAkB,KAAK;CACtC,MAAM,WACJ,WAAW,QAAQ,OACf,KACA,MAAM,WAAW,KAAK,KAAK,IAAI,UAAU,UAAU,QAAQ,QAAQ,WAAW,KAAK,KAAK,CAAC,CAAC;CAChG,MAAM,WACJ,WAAW,QAAQ,OACf,KACA,IAAI,WAAW,KAAK,KAAK,MAAM,UAAU,UAAU,QAAQ,QAAQ,WAAW,KAAK,KAAK,CAAC,CAAC;CAEhG,IAAI,SAAS,SAAS,KAAK,SAAS,SAAS,GAC3C,OAAO,GAAG,SAAS,KAAK;CAG1B,IAAI,SAAS,SAAS,GACpB,OAAO;CAGT,IAAI,SAAS,SAAS,GACpB,OAAO;CAGT,OAAO;;;;AC/PT,SAAgB,2BACd,SACA,SACmB;CACnB,MAAM,QAA2B,EAAE;CAEnC,cAAc,OAAO,0BAA0B,SAAS,QAAQ,eAAe,CAAC;CAChF,cAAc,OAAO,yBAAyB,SAAS,QAAQ,gBAAgB,CAAC;CAChF,cAAc,OAAO,0BAA0B,SAAS,QAAQ,gBAAgB,CAAC;CACjF,cAAc,OAAO,qBAAqB,SAAS,QAAQ,YAAY,CAAC;CACxE,cAAc,OAAO,uBAAuB,SAAS,QAAQ,gBAAgB,CAAC;CAE9E,OAAO;;AAGT,SAAS,cAAc,MAAyB,KAAmC;CACjF,IAAI,OAAO,MACT,KAAK,KAAK,IAAI;;AAIlB,SAAS,0BACP,SACA,YACwB;CACxB,IAAI,WAAW,WAAW,GACxB,OAAO;CAGT,OAAO;EACL,SAAS,sBAAsB;GAC7B,UAAU,QAAQ;GAClB,UAAU;GACV,OAAO;GACP,OAAO;GACR,CAAC;EACF,aAAa;GAAE,SAAS;GAAO,OAAO;GAAc;EACpD,MAAM;EACP;;AAGH,SAAS,0BACP,SACA,iBACwB;CACxB,MAAM,aAAa,gBAAgB,QAAQ,SAAS,KAAK,SAAS,eAAe,UAAU;CAC3F,IAAI,WAAW,WAAW,GACxB,OAAO;CAGT,OAAO;EACL,SAAS,sBAAsB;GAC7B,UAAU,QAAQ;GAClB,UAAU;GACV,OAAO;GACP,OAAO;GACR,CAAC;EACF,aAAa;GAAE,SAAS;GAAO,OAAO;GAAc;EACpD,MAAM;EACP;;AAGH,SAAS,uBACP,SACA,iBACwB;CACxB,MAAM,UAAU,gBAAgB,QAAQ,SAAS,KAAK,SAAS,eAAe,MAAM;CACpF,IAAI,QAAQ,WAAW,GACrB,OAAO;CAGT,OAAO;EACL,SAAS,sBAAsB;GAC7B,UAAU,QAAQ;GAClB,UAAU;GACV,OAAO;GACP,OAAO;GACR,CAAC;EACF,aAAa;GAAE,SAAS;GAAO,OAAO;GAAW;EACjD,MAAM;EACP;;AAGH,SAAS,sBAAsB,QAKpB;CACT,MAAM,QAAkB,CAAC,KAAK,OAAO,SAAS,GAAG;CACjD,MAAM,cAAc,sBAAsB,OAAO,MAAM;CAEvD,KAAK,MAAM,QAAQ,aAAa;EAC9B,MAAM,UAAU,KAAK,SAAS;EAC9B,MAAM,cAAc,WAAW,OAAO,KAAK,MAAM,mBAAmB,QAAQ;EAC5E,MAAM,OAAO,UAAU,OAAO,UAAU,OAAO,UAAU,QAAQ,KAAK,KAAK,CAAC;EAC5E,MAAM,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,GAAG,cAAc;;CAGvD,MAAM,KAAK,GAAG;CACd,OAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,yBACP,SACA,iBACwB;CACxB,IAAI,gBAAgB,SAAS,GAC3B,OAAO;CAGT,OAAO;EACL,SAAS,kBAAkB;GACzB,UAAU,QAAQ;GAClB,UAAU;GACV,SAAS;GACT,kBAAkB,QAAQ;GAC1B,OAAO;GACR,CAAC;EACF,aAAa;GAAE,SAAS;GAAO,OAAO;GAAa;EACnD,MAAM;EACP;;AAGH,SAAS,qBACP,SACA,aACwB;CACxB,IAAI,YAAY,SAAS,GACvB,OAAO;CAGT,OAAO;EACL,SAAS,kBAAkB;GACzB,UAAU,QAAQ;GAClB,UAAU;GACV,SAAS;GACT,kBAAkB,QAAQ;GAC1B,OAAO;GACR,CAAC;EACF,aAAa;GAAE,SAAS;GAAO,OAAO;GAAS;EAC/C,MAAM;EACP;;AAGH,SAAS,kBAAkB,QAMhB;CACT,MAAM,QAAkB,CAAC,KAAK,OAAO,SAAS,GAAG;CACjD,MAAM,gBAAgB,CAAC,GAAG,OAAO,QAAQ,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW;EAC5E,MAAM,WAAW,sBAAsB,MAAM,OAAO,iBAAiB;EACrE,MAAM,YAAY,sBAAsB,OAAO,OAAO,iBAAiB;EACvE,OAAO,SAAS,cAAc,UAAU;GACxC;CAEF,KAAK,MAAM,CAAC,YAAY,UAAU,eAAe;EAC/C,MAAM,aAAa,sBAAsB,YAAY,OAAO,iBAAiB;EAC7E,MAAM,OAAO,QAAQ,WAAW;EAChC,MAAM,YAAY,MACf,KAAK,SAAS,KAAK,KAAK,CACxB,MAAM,CACN,KAAK,KAAK;EACb,MAAM,KACJ,MAAM,WAAW,IAAI,UAAU,OAAO,UAAU,OAAO,UAAU,KAAK,CAAC,MAAM,YAC9E;;CAGH,MAAM,KAAK,GAAG;CACd,OAAO,MAAM,KAAK,KAAK;;;;ACpLzB,SAAgB,YAAY,WAAmC;CAC7D,IAAI,CAAC,SAAS,UAAU,EACtB,OAAO;CAGT,IAAI,OAAO,UAAU,SAAS,YAAY,UAAU,KAAK,SAAS,GAChE,OAAO,UAAU;CAGnB,IAAI,UAAU,SAAS,aACrB,OAAO;CAGT,IAAI,OAAO,UAAU,kBAAkB,YAAY,UAAU,cAAc,SAAS,GAClF,OAAO,UAAU;CAGnB,OAAO;;AAGT,SAAgB,iBACd,SACA,WACiB;CACjB,MAAM,cAAc,0BAA0B,UAAU;CACxD,IAAI,YAAY,SAAS,GACvB,OAAO;CAGT,MAAM,WAAW,YAAY,UAAU;CACvC,IAAI,YAAY,MACd,OAAO,EAAE;CAGX,MAAM,aAAa,qBAAqB,SAAS,SAAS;CAC1D,IAAI,cAAc,MAChB,OAAO,EAAE;CAGX,OAAO,yBAAyB,WAAW,YAAY,EAAE,CAAC;;AAG5D,SAAS,0BAA0B,WAAqC;CACtE,IAAI,CAAC,SAAS,UAAU,EACtB,OAAO,EAAE;CAGX,MAAM,cAAc,UAAU;CAC9B,IAAI,eAAe,MACjB,OAAO,EAAE;CAGX,OAAO,uBAAuB,wBAC1B,yBAAyB,YAAY,YAAY,EAAE,CAAC,GACpD,EAAE;;AAGR,SAAS,qBACP,SACA,UAC8B;CAC9B,MAAM,SAAS,QAAQ,QAAQ,eAAe,SAAS;CACvD,IAAI,kBAAkB,uBACpB,OAAO;CAGT,MAAM,WAAW,QAAQ,QAAQ,YAAY,EAAE;CAC/C,KAAK,MAAM,SAAS,UAClB,IAAI,MAAM,SAAS,UACjB,OAAO;CAIX,OAAO;;AAGT,SAAS,SAAS,OAAkD;CAClE,OAAO,SAAS,QAAQ,OAAO,UAAU;;AAG3C,SAAS,yBAAyB,UAAoD;CACpF,OAAO,SAAS,KAAK,WAAW;EAC9B,aAAa,MAAM,SAAS,WAAW,OAAO,KAAK,mBAAmB,MAAM,QAAQ,QAAQ;EAC5F,MAAM,MAAM;EACZ,UAAU,MAAM,MAAM;EACtB,MAAM,MAAM,QAAQ,OAAO,YAAY,MAAM,KAAK,UAAU;EAC7D,EAAE;;AAGL,SAAgB,yBACd,SACA,WACA,eACQ;CACR,MAAM,QAAkB,EAAE;CAC1B,MAAM,aAAa,UAAU,aAAa;CAC1C,MAAM,QAAQ,cAAc,OAAO,EAAE,GAAG,iBAAiB,SAAS,WAAW,KAAK;CAClF,MAAM,gBAAgB,cAAc,OAAO,OAAO,YAAY,WAAW,KAAK;CAE9E,0BAA0B,OAAO,eAAe,MAAM;CACtD,0BAA0B;EACxB;EACA;EACA;EACA;EACD,CAAC;CAEF,OAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,0BACP,OACA,eACA,OACM;CACN,MAAM,cAAc,MAAM,MAAM,SAAS,KAAK,SAAS,WAAW;CAClE,MAAM,eAAe,MAAM,QAAQ,SAAS,KAAK,SAAS,WAAW;CAErE,MAAM,KAAK,SAAS;CACpB,MAAM,KAAK,IAAI,gBAAgB;CAE/B,IAAI,aAAa,SAAS,GACxB,KAAK,MAAM,QAAQ,cAAc;EAC/B,MAAM,eAAe,KAAK,WAAW,MAAM;EAC3C,MAAM,KAAK,KAAK,KAAK,OAAO,aAAa,IAAI,KAAK,KAAK,GAAG;;MAEvD,IAAI,CAAC,aACV,MAAM,KAAK,eAAe;CAG5B,IAAI,aAAa;EACf,MAAM,KAAK,IAAI;EACf,MAAM,KAAK,eAAe;EAC1B,MAAM,KAAK,KAAK,cAAc,GAAG;QAEjC,MAAM,KAAK,KAAK;CAGlB,MAAM,KAAK,MAAM;;AAGnB,SAAS,0BAA0B,QAK1B;CACP,MAAM,EAAE,SAAS,OAAO,OAAO,kBAAkB;CACjD,IAAI,MAAM,WAAW,GACnB;CAGF,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,gBAAgB,QAAQ,UAAU,cAAc,CAAC;CAE5D,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,2CAA2C;CACtD,MAAM,KAAK,2CAA2C;CAEtD,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,WAAW,KAAK,WAAW,OAAO;EACxC,MAAM,cAAc,KAAK,YAAY,SAAS,IAAI,KAAK,cAAc;EACrE,MAAM,KAAK,KAAK,KAAK,KAAK,OAAO,KAAK,KAAK,OAAO,SAAS,KAAK,YAAY,IAAI;;;AAIpF,SAAS,gBAAgB,UAAkB,eAAsC;CAC/E,IAAI,iBAAiB,MACnB,OAAO;CAKT,OAAO,cADW,UAAU,UAAU,cADpB,QAAQ,cACmC,CAC/B,CAAC;;;;ACpKjC,SAAgB,sBAAsB,QAIlB;CAClB,MAAM,EAAE,WAAW,SAAS,eAAe;CAC3C,MAAM,OAAO,QAAQ,UAAU,KAAK;CAGpC,OAAO;EACL,SAHc,uBAAuB,SAAS,WAAW,WAGlD;EACP,aAAa;GACX,aACE,UAAU,SAAS,WAAW,OAC1B,GAAG,UAAU,KAAK,cAClB,mBAAmB,UAAU,QAAQ,QAAQ;GACnD,OAAO,UAAU;GAClB;EACD,MAAM,cAAc,KAAK;EAC1B;;AAGH,SAAS,uBACP,SACA,WACA,YACQ;CACR,MAAM,QAAkB,CAAC,KAAK,UAAU,QAAQ,GAAG;CAEnD,MAAM,UAAU,UAAU,SAAS;CACnC,IAAI,WAAW,MAAM;EACnB,MAAM,KAAK,cAAc,QAAQ,CAAC;EAClC,MAAM,KAAK,GAAG;;CAGhB,qBAAqB,OAAO,SAAS,UAAU;CAC/C,iBAAe,OAAO,UAAU;CAChC,mBAAiB,OAAO,SAAS,UAAU;CAC3C,0BAA0B;EACxB;EACA;EACA;EACA;EACD,CAAC;CAEF,OAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,qBACP,OACA,SACA,WACM;CACN,MAAM,aAAa,UAAU,cAAc,EAAE;CAC7C,IAAI,WAAW,WAAW,GACxB;CAGF,MAAM,KAAK,WAAW;CACtB,MAAM,KAAK,GAAG;CAEd,KAAK,MAAM,aAAa,YAAY;EAClC,MAAM,KAAK,yBAAyB,SAAS,WAAW,UAAU,KAAK,CAAC;EACxE,MAAM,KAAK,GAAG;;;AAIlB,SAASA,iBAAe,OAAiB,YAAyC;CAEhF,MAAM,YADO,WAAW,SAAS,aAAa,EAAE,EAC1B,QAAQ,QAAQ,IAAI,QAAQ,WAAW;CAC7D,IAAI,SAAS,WAAW,GACtB;CAGF,MAAM,KAAK,aAAa;CACxB,MAAM,KAAK,GAAG;CAEd,KAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,KAAK,cAAc,QAAQ,QAAQ,CAAC;EAC1C,MAAM,KAAK,GAAG;;;AAIlB,SAASC,mBACP,OACA,SACA,YACM;CACN,IAAI,CAAC,QAAQ,OAAO,SAAS,aAC3B;CAGF,MAAM,SAAS,WAAW,UAAU;CACpC,IAAI,UAAU,MACZ;CAGF,MAAM,YAAY,aAChB,QAAQ,OAAO,SAAS,eACxB,OAAO,UACP,OAAO,KACR;CACD,IAAI,aAAa,MACf;CAGF,MAAM,KAAK,YAAY,UAAU,GAAG;CACpC,MAAM,KAAK,GAAG;;AAGhB,SAAS,0BAA0B,QAK1B;CACP,MAAM,EAAE,WAAW,SAAS,OAAO,eAAe;CAClD,MAAM,OAAO,qBAAqB;EAChC,UAAU,QAAQ;EAClB,MAAM,UAAU;EAChB;EACD,CAAC;CAEF,IAAI,QAAQ,MACV;CAGF,MAAM,KAAK,MAAM;CACjB,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,KAAK;CAChB,MAAM,KAAK,GAAG;;;;ACtIhB,SAAgB,gBACd,SACA,WACQ;CACR,MAAM,QAAkB,EAAE;CAE1B,qBAAqB,OAAO,QAAQ;CACpC,MAAM,KAAK,iBAAiB,UAAU,CAAC;CACvC,mBAAmB,OAAO,QAAQ;CAClC,0BAA0B,OAAO,UAAU;CAC3C,sBAAsB,OAAO,UAAU;CAEvC,OAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,qBAAqB,OAAiB,SAAsC;CACnF,IAAI,QAAQ,OAAO,SAAS,YAC1B,MAAM,KAAK,gBAAgB;;AAI/B,SAAS,mBAAmB,OAAiB,SAAsC;CACjF,IAAI,QAAQ,OAAO,SAAS,YAC1B,MAAM,KAAK,MAAM;;AAIrB,SAAS,iBAAiB,WAAwC;CAChE,MAAM,iBAAiB,yBAAyB,UAAU,eAAe;CACzE,MAAM,aAAa,0BAA0B,UAAU;CACvD,MAAM,aAAa,UAAU,QAAQ,OAAO,KAAK,KAAK,UAAU,KAAK,UAAU;CAC/E,OAAO,YAAY,UAAU,OAAO,eAAe,GAAG,WAAW,GAAG;;AAGtE,SAAS,yBAAyB,gBAA+D;CAC/F,IAAI,kBAAkB,QAAQ,eAAe,WAAW,GACtD,OAAO;CAET,OAAO,IAAI,eAAe,KAAK,SAAS,KAAK,KAAK,CAAC,KAAK,KAAK,CAAC;;AAGhE,SAAS,0BAA0B,WAAwC;CAEzE,QADmB,UAAU,cAAc,EAAE,EAE1C,KAAK,cAAc;EAClB,MAAM,WAAW,UAAU,MAAM,aAAa,MAAM;EACpD,MAAM,OAAO,UAAU,QAAQ,OAAO,KAAK,KAAK,UAAU,KAAK,UAAU;EACzE,OAAO,GAAG,UAAU,OAAO,WAAW;GACtC,CACD,KAAK,KAAK;;AAGf,SAAS,0BAA0B,OAAiB,WAAsC;CACxF,MAAM,aAAa,UAAU,cAAc,EAAE;CAC7C,IAAI,WAAW,WAAW,GACxB;CAGF,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,iBAAiB;CAC5B,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,gCAAgC;CAC3C,MAAM,KAAK,gCAAgC;CAE3C,KAAK,MAAM,aAAa,YACtB,MAAM,KAAK,4BAA4B,UAAU,CAAC;;AAItD,SAAS,4BAA4B,WAAwC;CAC3E,MAAM,WAAW,UAAU,MAAM,aAAa,gBAAgB;CAC9D,MAAM,OAAO,UAAU,QAAQ,OAAO,MAAM,KAAK,UAAU,KAAK,UAAU,CAAC;CAC3E,MAAM,UAAU,UAAU,SAAS;CACnC,MAAM,cAAc,WAAW,OAAO,MAAM,mBAAmB,QAAQ;CACvE,OAAO,KAAK,UAAU,OAAO,SAAS,KAAK,KAAK,KAAK,YAAY;;AAGnE,SAAS,sBAAsB,OAAiB,WAAsC;CACpF,MAAM,aAAa,UAAU;CAC7B,IAAI,cAAc,QAAQ,WAAW,UAAU,KAAK,QAClD;CAGF,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,cAAc;CACzB,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,KAAK,WAAW,UAAU,CAAC,IAAI;CAE1C,MAAM,YAAY,UAAU,SAAS,UAAU,MAAM,QAAQ,IAAI,QAAQ,WAAW;CACpF,IAAI,aAAa,MACf;CAGF,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,cAAc,UAAU,QAAQ,CAAC;;AAG9C,SAAgB,eAAe,UAAyC;CACtE,MAAM,QAAkB,EAAE;CAC1B,MAAM,QAAQ,iBAAiB,SAAS;CAExC,MAAM,KAAK,OAAO,SAAS,OAAO;CAClC,IAAI,MAAM,SAAS,GACjB,MAAM,KAAK,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG;CAErC,MAAM,KAAK,GAAG;CAEd,mBAAmB,OAAO,SAAS;CACnC,sBAAsB,OAAO,SAAS;CACtC,2BAA2B,OAAO,SAAS;CAE3C,OAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,iBAAiB,UAA2C;CACnE,MAAM,QAAkB,EAAE;CAC1B,IAAI,SAAS,MAAM,YAAY,MAAM,KAAK,WAAW;CACrD,IAAI,SAAS,MAAM,YAAY,MAAM,KAAK,WAAW;CACrD,IAAI,SAAS,MAAM,UAAU,MAAM,KAAK,SAAS;CACjD,OAAO;;AAGT,SAAS,mBAAmB,OAAiB,UAAuC;CAClF,IAAI,SAAS,QAAQ,MACnB;CAEF,MAAM,KAAK,gBAAgB;CAC3B,MAAM,KAAK,GAAG,SAAS,KAAK,IAAI,SAAS,KAAK,UAAU,GAAG;CAC3D,MAAM,KAAK,MAAM;CACjB,MAAM,KAAK,GAAG;;AAGhB,SAAS,sBAAsB,OAAiB,UAAuC;CACrF,MAAM,UAAU,SAAS,SAAS;CAClC,IAAI,WAAW,MACb,MAAM,KAAK,cAAc,QAAQ,CAAC;;AAItC,SAAS,2BAA2B,OAAiB,UAAuC;CAC1F,IAAI,SAAS,gBAAgB,QAAQ,SAAS,aAAa,WAAW,GACpE;CAEF,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,kBAAkB,SAAS,aAAa,IAAI;;AAGzD,SAAgB,aACd,SACA,QACQ;CACR,MAAM,QAAkB,EAAE;CAC1B,MAAM,KAAK,OAAO,OAAO,KAAK,IAAI;CAClC,MAAM,KAAK,GAAG;CAEd,MAAM,aAAa,OAAO,cAAc,EAAE;CAC1C,KAAK,MAAM,aAAa,YACtB,sBAAsB,OAAO,SAAS,UAAU;CAGlD,OAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,sBACP,OACA,SACA,WACM;CACN,MAAM,UAAU,UAAU,SAAS;CACnC,IAAI,WAAW,MAAM;EACnB,MAAM,KAAK,cAAc,QAAQ,CAAC;EAClC,MAAM,KAAK,GAAG;;CAGhB,MAAM,KAAK,gBAAgB,SAAS,UAAU,CAAC;CAC/C,MAAM,KAAK,GAAG;;AAGhB,SAAgB,qBAAqB,gBAAmD;CACtF,MAAM,QAAkB,EAAE;CAC1B,MAAM,KAAK,gDAAgD;CAC3D,MAAM,KAAK,gDAAgD;CAE3D,KAAK,MAAM,iBAAiB,gBAC1B,MAAM,KAAK,uBAAuB,cAAc,CAAC;CAGnD,OAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,uBAAuB,eAAgD;CAC9E,MAAM,aAAa,cAAc,QAAQ,OAAO,MAAM,KAAK,cAAc,KAAK,UAAU,CAAC;CACzF,MAAM,eACJ,cAAc,WAAW,OAAO,MAAM,KAAK,cAAc,QAAQ,UAAU,CAAC;CAC9E,MAAM,UAAU,cAAc,SAAS;CACvC,MAAM,cAAc,WAAW,OAAO,MAAM,mBAAmB,QAAQ;CACvE,OAAO,KAAK,cAAc,KAAK,KAAK,WAAW,KAAK,aAAa,KAAK,YAAY;;AAGpF,SAAgB,gBAAgB,YAAkD;CAChF,MAAM,QAAkB,EAAE;CAE1B,uBAAuB,OAAO,gBAAgB,WAAW,cAAc;CACvE,uBAAuB,OAAO,mBAAmB,WAAW,iBAAiB;CAC7E,uBAAuB,OAAO,oBAAoB,WAAW,WAAW;CACxE,uBAAuB,OAAO,uBAAuB,WAAW,cAAc;CAE9E,OAAO,MAAM,WAAW,IAAI,OAAO,MAAM,KAAK,KAAK;;AAGrD,SAAS,uBACP,OACA,OACA,OACM;CACN,IAAI,SAAS,QAAQ,MAAM,WAAW,GACpC;CAGF,MAAM,KAAK,MAAM;CACjB,KAAK,MAAM,QAAQ,OACjB,MAAM,KAAK,OAAO,KAAK,UAAU,CAAC,IAAI;;;;AC1N1C,SAAgB,6BAA6B,QAIzB;CAClB,MAAM,EAAE,SAAS,WAAW,eAAe;CAC3C,MAAM,aAAa,sBAAsB,YAAY,QAAQ,iBAAiB;CAQ9E,OAAO;EACL,SARc,8BAA8B;GAC5C;GACA;GACA;GACA;GACD,CAGQ;EACP,aAAa;GACX,aAAa,kBAAkB;GAC/B,OAAO,GAAG,WAAW;GACtB;EACD,MAAM,aAAa,QAAQ,WAAW,CAAC;EACxC;;AAGH,SAAS,8BAA8B,QAK5B;CACT,MAAM,EAAE,SAAS,WAAW,YAAY,eAAe;CACvD,MAAM,QAAkB;EACtB,KAAK,WAAW;EAChB;EACA,6BAA6B,WAAW;EACxC;EACD;CACD,MAAM,kBAAkB,sBAAsB,UAAU;CAExD,KAAK,MAAM,MAAM,iBACf,sBAAsB,OAAO,SAAS,GAAG;CAG3C,OAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,sBACP,OACA,SACA,IACM;CACN,MAAM,KAAK,MAAM,GAAG,OAAO;CAC3B,MAAM,KAAK,GAAG;CAEd,MAAM,UAAU,GAAG,SAAS;CAC5B,IAAI,WAAW,MAAM;EACnB,MAAM,KAAK,cAAc,QAAQ,CAAC;EAClC,MAAM,KAAK,GAAG;;CAGhB,MAAM,aAAa,GAAG,cAAc,EAAE;CACtC,KAAK,MAAM,aAAa,YAAY;EAClC,MAAM,KAAK,gBAAgB,SAAS,UAAU,CAAC;EAC/C,MAAM,KAAK,GAAG;;CAGhB,eAAe,OAAO,GAAG;CACzB,iBAAiB,OAAO,SAAS,GAAG;CACpC,MAAM,KAAK,MAAM;CACjB,MAAM,KAAK,GAAG;;AAGhB,SAAS,eAAe,OAAiB,YAAyC;CAEhF,MAAM,YADO,WAAW,SAAS,aAAa,EAAE,EAC1B,QAAQ,QAAQ,IAAI,QAAQ,WAAW;CAC7D,IAAI,SAAS,WAAW,GACtB;CAGF,MAAM,KAAK,cAAc;CACzB,MAAM,KAAK,GAAG;CAEd,KAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,KAAK,cAAc,QAAQ,QAAQ,CAAC;EAC1C,MAAM,KAAK,GAAG;;;AAIlB,SAAS,iBACP,OACA,SACA,YACM;CACN,IAAI,CAAC,QAAQ,OAAO,SAAS,aAC3B;CAGF,MAAM,SAAS,WAAW,UAAU;CACpC,IAAI,UAAU,MACZ;CAGF,MAAM,YAAY,aAChB,QAAQ,OAAO,SAAS,eACxB,OAAO,UACP,OAAO,KACR;CACD,IAAI,aAAa,MACf;CAGF,MAAM,KAAK,YAAY,UAAU,GAAG;CACpC,MAAM,KAAK,GAAG;;AAGhB,SAAgB,yBAAyB,QAIrB;CAClB,MAAM,EAAE,SAAS,YAAY,UAAU;CACvC,MAAM,aAAa,sBAAsB,YAAY,QAAQ,iBAAiB;CAQ9E,OAAO;EACL,SARc,0BAA0B;GACxC;GACA;GACA;GACA;GACD,CAGQ;EACP,aAAa;GACX,aAAa,yBAAyB;GACtC,OAAO,GAAG,WAAW;GACtB;EACD,MAAM,SAAS,QAAQ,WAAW,CAAC;EACpC;;AAGH,SAAS,0BAA0B,QAKxB;CACT,MAAM,EAAE,SAAS,YAAY,YAAY,UAAU;CACnD,MAAM,QAAkB;EACtB,KAAK,WAAW;EAChB;EACA,2BAA2B,WAAW;EACtC;EACD;CACD,MAAM,cAAc,sBAAsB,MAAM;CAEhD,KAAK,MAAM,aAAa,aACtB,kBAAkB,OAAO,SAAS,UAAU;CAG9C,OAAO,MAAM,KAAK,KAAK;;AAGzB,SAAS,kBACP,OACA,SACA,WACM;CACN,MAAM,KAAK,MAAM,UAAU,OAAO;CAClC,MAAM,KAAK,GAAG;CAEd,MAAM,UAAU,UAAU,SAAS;CACnC,IAAI,WAAW,MAAM;EACnB,MAAM,KAAK,cAAc,QAAQ,CAAC;EAClC,MAAM,KAAK,GAAG;;CAGhB,IAAI,UAAU,QAAQ,MAAM;EAC1B,MAAM,KAAK,gBAAgB;EAC3B,MAAM,KAAK,QAAQ,UAAU,KAAK,KAAK,UAAU,KAAK,UAAU,GAAG;EACnE,MAAM,KAAK,MAAM;EACjB,MAAM,KAAK,GAAG;;CAGhB,iBAAiB,OAAO,SAAS,UAAU;CAC3C,MAAM,KAAK,MAAM;CACjB,MAAM,KAAK,GAAG;;;;ACrLhB,SAAgB,kBACd,SACA,SACiB;CACjB,MAAM,QAAkB;EAAC,KAAK,QAAQ,OAAO,QAAQ;EAAS;EAAI,kBAAkB,QAAQ;EAAE;EAAG;CAEjG,uBAAuB,OAAO,SAAS,QAAQ,eAAe;CAC9D,uBAAuB,OAAO,SAAS,QAAQ,gBAAgB;CAC/D,mBAAmB,OAAO,SAAS,QAAQ,YAAY;CACvD,yBAAyB,OAAO,SAAS,QAAQ,gBAAgB;CAEjE,OAAO;EACL,SAAS,MAAM,KAAK,KAAK;EACzB,aAAa;GACX,aAAa;GACb,kBAAkB;GAClB,OAAO,QAAQ,OAAO,QAAQ;GAC/B;EACD,MAAM;EACP;;AAGH,SAAS,kBAAkB,SAAwC;CACjE,MAAM,UAAU,QAAQ,QAAQ,SAAS;CACzC,IAAI,WAAW,MACb,OAAO;CAET,OAAO,cAAc,QAAQ;;AAG/B,SAAS,uBACP,OACA,SACA,YACM;CACN,IAAI,WAAW,WAAW,GACxB;CAGF,MAAM,KAAK,gBAAgB;CAC3B,MAAM,KAAK,GAAG;CAEd,KAAK,MAAM,aAAa,sBAAsB,WAAW,EAAE;EACzD,MAAM,cAAc,UAAU,SAAS;EACvC,MAAM,SAAS,eAAe,OAAO,KAAK,MAAM,mBAAmB,YAAY;EAC/E,MAAM,OAAO,UAAU,QAAQ,UAAU,cAAc,QAAQ,UAAU,KAAK,CAAC;EAC/E,MAAM,KAAK,MAAM,UAAU,KAAK,IAAI,KAAK,GAAG,SAAS;;CAGvD,MAAM,KAAK,GAAG;;AAGhB,SAAS,uBACP,OACA,SACA,iBACM;CACN,IAAI,gBAAgB,SAAS,GAC3B;CAGF,MAAM,KAAK,eAAe;CAC1B,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,GAAG,yBAAyB,SAAS,iBAAiB,YAAY,CAAC;CAC9E,MAAM,KAAK,GAAG;;AAGhB,SAAS,mBACP,OACA,SACA,aACM;CACN,IAAI,YAAY,SAAS,GACvB;CAGF,MAAM,KAAK,kBAAkB;CAC7B,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,GAAG,yBAAyB,SAAS,aAAa,QAAQ,CAAC;CACtE,MAAM,KAAK,GAAG;;AAGhB,SAAS,yBACP,SACA,SACA,UACU;CAOV,OANsB,CAAC,GAAG,QAAQ,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW;EACrE,MAAM,WAAW,sBAAsB,MAAM,QAAQ,iBAAiB;EACtE,MAAM,YAAY,sBAAsB,OAAO,QAAQ,iBAAiB;EACxE,OAAO,SAAS,cAAc,UAAU;GAGtB,CAAC,KAAK,CAAC,YAAY,WAAW;EAChD,MAAM,aAAa,sBAAsB,YAAY,QAAQ,iBAAiB;EAC9E,MAAM,YAAY,MACf,KAAK,SAAS,KAAK,KAAK,CACxB,MAAM,CACN,KAAK,KAAK;EAEb,OAAO,MAAM,WAAW,IADX,UAAU,QAAQ,UAAU,UAAU,QAAQ,WAAW,CACtC,CAAC,MAAM;GACvC;;AAGJ,SAAS,yBACP,OACA,SACA,iBACM;CACN,MAAM,yBAAS,IAAI,KAAsC;CACzD,KAAK,MAAM,QAAQ,iBACjB,gBAAgB,QAAQ,iBAAiB,KAAK,MAAM,KAAK,KAAK,EAAE,KAAK;CAIvE,KAAK,MAAM,aAAa;EADD;EAAc;EAAW;EAAa;EAAS;EACjC,EAAE;EACrC,MAAM,aAAa,OAAO,IAAI,UAAU;EACxC,IAAI,cAAc,QAAQ,WAAW,WAAW,GAC9C;EAEF,sBAAsB;GACpB;GACA;GACA;GACA;GACD,CAAC;;;AAIN,SAAS,sBAAsB,QAKtB;CACP,MAAM,EAAE,SAAS,YAAY,WAAW,UAAU;CAClD,MAAM,KAAK,MAAM,YAAY;CAC7B,MAAM,KAAK,GAAG;CAEd,KAAK,MAAM,QAAQ,sBAAsB,WAAW,EAAE;EACpD,MAAM,cAAc,KAAK,SAAS;EAClC,MAAM,SAAS,eAAe,OAAO,KAAK,MAAM,mBAAmB,YAAY;EAC/E,MAAM,SAAS,UAAU,aAAa;EACtC,MAAM,OAAO,UAAU,QAAQ,UAAU,QAAQ,QAAQ,KAAK,KAAK,CAAC;EACpE,MAAM,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,GAAG,SAAS;;CAGlD,MAAM,KAAK,GAAG;;;;AChKhB,SAAgB,4BACd,OACA,YACM;CACN,MAAM,YAAY,WAAW,SAAS,aAAa,EAAE;CAErD,kBAAkB,OAAO,UAAU;CACnC,oBAAoB,OAAO,UAAU;CACrC,iBAAiB,OAAO,UAAU;;AAGpC,SAAS,kBACP,OACA,WACM;CACN,MAAM,WAAW,UAAU,QAAQ,QAAQ,IAAI,QAAQ,WAAW;CAClE,IAAI,SAAS,WAAW,GACtB;CAGF,MAAM,KAAK,cAAc;CACzB,MAAM,KAAK,GAAG;CAEd,KAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,KAAK,cAAc,QAAQ,QAAQ,CAAC;EAC1C,MAAM,KAAK,GAAG;;;AAIlB,SAAS,oBACP,OACA,WACM;CACN,MAAM,gBAAgB,UAAU,MAAM,QAAQ,IAAI,QAAQ,cAAc;CACxE,IAAI,iBAAiB,MACnB;CAGF,MAAM,KAAK,iCAA+B;CAC1C,MAAM,KAAK,cAAc,cAAc,QAAQ,CAAC;CAChD,MAAM,KAAK,aAAa;CACxB,MAAM,KAAK,GAAG;;AAGhB,SAAS,iBACP,OACA,WACM;CACN,MAAM,UAAU,UAAU,QAAQ,QAAQ,IAAI,QAAQ,OAAO;CAC7D,IAAI,QAAQ,WAAW,GACrB;CAGF,MAAM,KAAK,cAAc;CACzB,MAAM,KAAK,GAAG;CACd,KAAK,MAAM,UAAU,SACnB,MAAM,KAAK,KAAK,cAAc,OAAO,QAAQ,GAAG;CAElD,MAAM,KAAK,GAAG;;;;ACrChB,SAAgB,uBAAuB,QAKjB;CACpB,MAAM,EAAE,SAAS,YAAY,YAAY,eAAe;CACxD,MAAM,WAAW,sBAAsB,YAAY,WAAW;CAC9D,MAAM,OAA0B,CAC9B,uBAAuB;EAAE;EAAS;EAAY;EAAU;EAAY,CAAC,CACtE;CACD,MAAM,YAAY,WAAW,YAAY,EAAE;CAC3C,KAAK,MAAM,SAAS,WAClB,IAAI,WAAW,MAAM,KAAK,EACxB,KAAK,KACH,GAAG,uBAAuB;EACxB;EACA,YAAY;GAAE,MAAM;GAAM,MAAM;GAAM;EACtC,YAAY;EACZ,YAAY;EACb,CAAC,CACH;CAGL,OAAO;;AAET,SAAS,sBAAsB,YAAmC,YAA4B;CAC5F,MAAM,OAAO,QAAQ,WAAW,KAAK;CACrC,IAAI,WAAW,SAAS,GACtB,OAAO,GAAG,WAAW,GAAG;CAE1B,MAAM,SAAS,kBAAkB,WAAW,KAAK;CACjD,OAAO,OAAO,WAAW,IAAI,OAAO,GAAG,OAAO,GAAG;;AAEnD,SAAS,WAAW,MAA+B;CACjD,OAAO;EACL,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EACf,eAAe;EAChB,CAAC,SAAS,KAAK;;AAElB,SAAgB,uBAAuB,QAKnB;CAClB,MAAM,EAAE,SAAS,YAAY,UAAU,eAAe;CACtD,MAAM,QAAkB,EAAE;CAC1B,yBAAyB;EACvB;EACA;EACA;EACA;EACA;EACD,CAAC;CACF,OAAO;EACL,SAAS,MAAM,KAAK,KAAK;EACzB,aAAa;GACX,aACE,WAAW,SAAS,WAAW,OAC3B,GAAG,YAAY,WAAW,KAAK,CAAC,GAAG,WAAW,SAC9C,mBAAmB,WAAW,QAAQ,QAAQ;GACpD,OAAO,WAAW;GACnB;EACD,MAAM,GAAG,SAAS;EACnB;;AAEH,SAAS,yBAAyB,QAMzB;CACP,MAAM,EAAE,SAAS,OAAO,YAAY,UAAU,eAAe;CAC7D,kBAAkB,OAAO,SAAS,SAAS;CAC3C,YAAY,OAAO,WAAW;CAC9B,kBAAkB,OAAO,WAAW;CACpC,qBAAqB,OAAO,WAAW;CACvC,gBAAgB,OAAO,SAAS,WAAW;CAC3C,iBAAiB,OAAO,SAAS,WAAW;CAC5C,iBAAiB,OAAO,WAAW;CACnC,cAAc,OAAO,SAAS,WAAW;CACzC,kBAAkB,OAAO,WAAW;CACpC,gBAAgB,OAAO,WAAW;CAClC,oBAAoB,OAAO,SAAS,WAAW;CAC/C,4BAA4B,OAAO,WAAW;CAC9C,iBAAiB;EAAE;EAAS;EAAO;EAAY;EAAY,CAAC;;AAE9D,SAAS,kBACP,OACA,SACA,UACM;CACN,IAAI,CAAC,QAAQ,OAAO,SAAS,aAC3B;CAEF,MAAM,KAAK,kBAAkB,QAAQ,UAAU,SAAS,CAAC;CACzD,MAAM,KAAK,GAAG;;AAEhB,SAAS,YAAY,OAAiB,YAAyC;CAC7E,MAAM,OAAO,YAAY,WAAW,KAAK;CACzC,MAAM,KAAK,KAAK,KAAK,IAAI,WAAW,OAAO;CAC3C,MAAM,KAAK,GAAG;;AAEhB,SAAS,kBAAkB,OAAiB,YAAyC;CACnF,MAAM,UAAU,WAAW,SAAS;CACpC,IAAI,WAAW,MACb;CAEF,MAAM,KAAK,cAAc,QAAQ,CAAC;CAClC,MAAM,KAAK,GAAG;;AAEhB,SAAS,qBAAqB,OAAiB,YAAyC;CACtF,MAAM,iBAAiB,WAAW,kBAAkB,EAAE;CACtD,IAAI,eAAe,WAAW,GAC5B;CAEF,MAAM,KAAK,qBAAqB;CAChC,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,qBAAqB,eAAe,CAAC;CAChD,MAAM,KAAK,GAAG;;AAEhB,SAAS,gBACP,OACA,SACA,YACM;CACN,IAAI,CAAC,QAAQ,OAAO,SAAS,WAC3B;CAEF,MAAM,YAAY,gBAAgB,WAAW;CAC7C,IAAI,aAAa,MACf;CAEF,MAAM,KAAK,eAAe;CAC1B,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,UAAU;CACrB,MAAM,KAAK,GAAG;;AAEhB,SAAS,iBACP,OACA,SACA,YACM;CACN,MAAM,aAAa,WAAW,cAAc,EAAE;CAC9C,IAAI,WAAW,WAAW,GACxB;CAEF,MAAM,KAAK,eAAe;CAC1B,MAAM,KAAK,GAAG;CACd,KAAK,MAAM,aAAa,YAAY;EAClC,MAAM,KAAK,gBAAgB,SAAS,UAAU,CAAC;EAC/C,MAAM,KAAK,GAAG;;;AAGlB,SAAS,iBAAiB,OAAiB,YAAyC;CAElF,MAAM,cADW,WAAW,YAAY,EAAE,EACd,QAAQ,UAAU,MAAM,SAAS,eAAe,SAAS;CACrF,IAAI,WAAW,WAAW,GACxB;CAEF,MAAM,KAAK,gBAAgB;CAC3B,MAAM,KAAK,GAAG;CACd,KAAK,MAAM,YAAY,YAAY;EACjC,MAAM,KAAK,eAAe,SAAS,CAAC;EACpC,MAAM,KAAK,GAAG;;;AAGlB,SAAS,cACP,OACA,SACA,YACM;CAEN,MAAM,WADW,WAAW,YAAY,EAAE,EACjB,QAAQ,UAAU,MAAM,SAAS,eAAe,OAAO;CAChF,IAAI,QAAQ,WAAW,GACrB;CAEF,MAAM,KAAK,aAAa;CACxB,MAAM,KAAK,GAAG;CACd,KAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,KAAK,aAAa,SAAS,OAAO,CAAC;EACzC,MAAM,KAAK,GAAG;;;AAGlB,SAAS,kBAAkB,OAAiB,YAAyC;CAEnF,MAAM,eADW,WAAW,YAAY,EAAE,EACb,QAAQ,UAAU,MAAM,SAAS,eAAe,WAAW;CACxF,IAAI,YAAY,WAAW,GACzB;CAEF,MAAM,KAAK,aAAa;CACxB,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,mCAAmC;CAC9C,MAAM,KAAK,mCAAmC;CAC9C,KAAK,MAAM,UAAU,aAAa;EAChC,MAAM,QAAQ,OAAO,gBAAgB;EACrC,MAAM,UAAU,OAAO,SAAS;EAChC,MAAM,cAAc,WAAW,OAAO,KAAK,mBAAmB,QAAQ;EACtE,MAAM,KAAK,OAAO,OAAO,KAAK,SAAS,MAAM,OAAO,YAAY,IAAI;;CAEtE,MAAM,KAAK,GAAG;;AAEhB,SAAS,gBAAgB,OAAiB,YAAyC;CACjF,IAAI,WAAW,SAAS,eAAe,aAAa,WAAW,QAAQ,MACrE;CAEF,MAAM,KAAK,UAAU;CACrB,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,gBAAgB;CAC3B,MAAM,KAAK,QAAQ,WAAW,KAAK,KAAK,WAAW,KAAK,UAAU,GAAG;CACrE,MAAM,KAAK,MAAM;CACjB,MAAM,KAAK,GAAG;;AAEhB,SAAS,oBACP,OACA,SACA,YACM;CACN,IAAI,CAAC,QAAQ,OAAO,SAAS,aAC3B;CAEF,MAAM,SAAS,WAAW,UAAU;CACpC,IAAI,UAAU,MACZ;CAEF,MAAM,KAAK,YAAY;CACvB,MAAM,KAAK,GAAG;CACd,MAAM,YAAY,aAChB,QAAQ,OAAO,SAAS,eACxB,OAAO,UACP,OAAO,KACR;CACD,IAAI,aAAa,MACf,MAAM,KAAK,GAAG,OAAO,SAAS,GAAG,OAAO,OAAO;MAE/C,MAAM,KAAK,IAAI,OAAO,SAAS,GAAG,OAAO,KAAK,IAAI,UAAU,GAAG;CAEjE,MAAM,KAAK,GAAG;;AAEhB,SAAS,iBAAiB,QAKjB;CACP,MAAM,EAAE,SAAS,OAAO,YAAY,eAAe;CACnD,MAAM,OAAO,qBAAqB;EAChC,UAAU,QAAQ;EAClB,MAAM,WAAW;EACjB;EACD,CAAC;CACF,IAAI,QAAQ,MACV;CAEF,MAAM,KAAK,MAAM;CACjB,MAAM,KAAK,GAAG;CACd,MAAM,KAAK,KAAK;CAChB,MAAM,KAAK,GAAG;;;;AC9QhB,SAAgB,qBAAqB,SAAmD;CACtF,MAAM,UAAU,qBAAqB,QAAQ,SAAS,iBAAiB;CACvE,MAAM,OAA0B,CAAC,kBAAkB,SAAS,QAAQ,CAAC;CAErE,wBAAwB,SAAS,MAAM,QAAQ,gBAAgB;CAC/D,oBAAoB,SAAS,MAAM,QAAQ,YAAY;CACvD,kBAAkB,SAAS,MAAM,QAAQ,eAAe;CACxD,mBAAmB,SAAS,MAAM,QAAQ,gBAAgB;CAE1D,KAAK,KAAK,GAAG,2BAA2B,SAAS,QAAQ,CAAC;CAC1D,OAAO;;AAGT,SAAS,wBACP,SACA,MACA,iBACM;CACN,KAAK,MAAM,CAAC,YAAY,cAAc,iBACpC,KAAK,KAAK,6BAA6B;EAAE;EAAS;EAAW;EAAY,CAAC,CAAC;;AAI/E,SAAS,oBACP,SACA,MACA,aACM;CACN,KAAK,MAAM,CAAC,YAAY,UAAU,aAChC,KAAK,KAAK,yBAAyB;EAAE;EAAS;EAAY;EAAO,CAAC,CAAC;;AAIvE,SAAS,kBACP,SACA,MACA,gBACM;CACN,MAAM,SAAS,sBAAsB,eAAe;CACpD,KAAK,MAAM,CAAC,OAAO,cAAc,OAAO,SAAS,EAC/C,KAAK,KACH,sBAAsB;EAAE;EAAW;EAAS,YAAY,cAAc,QAAQ,MAAM;EAAE,CAAC,CACxF;;AAIL,SAAS,mBACP,SACA,MACA,iBACM;CACN,MAAM,cAAc,sBAAsB,gBAAgB;CAE1D,KAAK,MAAM,SAAS,YAAY,QAAQ,EAAE;EACxC,MAAM,SAAS,sBAAsB,MAAM;EAC3C,KAAK,MAAM,CAAC,OAAO,eAAe,OAAO,SAAS,EAChD,KAAK,KACH,GAAG,uBAAuB;GACxB;GACA,YAAY,cAAc,QAAQ,MAAM;GACxC,YAAY;GACZ;GACD,CAAC,CACH;;;AAKP,SAAS,sBACP,iBAC8C;CAC9C,MAAM,8BAAc,IAAI,KAA8C;CAEtE,KAAK,MAAM,QAAQ,iBAAiB;EAClC,MAAM,WAAW,YAAY,IAAI,KAAK,KAAK,IAAI,EAAE;EACjD,SAAS,KAAK,KAAK;EACnB,YAAY,IAAI,KAAK,MAAM,SAAS;;CAGtC,OAAO;;AAGT,SAAS,cAAc,aAAsC,OAAqC;CAChG,OAAO;EACL,MAAM,QAAQ,YAAY,SAAS,IAAI,YAAY,QAAQ,KAAK;EAChE,MAAM,QAAQ,IAAI,YAAY,QAAQ,KAAK;EAC5C;;;;ACxFH,IAAa,mBAAb,MAA8B;CAC5B;CACA;CACA,mCAAoC,IAAI,KAAiC;CAEzE,YAAY,QAAuB;EACjC,KAAK,SAAS,qBAAqB,OAAO;EAC1C,KAAK,WAAW,IAAI,KAAK,OAAO;;CAGlC,MAAM,SAAS,WAA+C;EAC5D,MAAM,KAAK,0BAA0B;EAOrC,MAAM,UAAU,OAAM,MALJ,YAAY,qBAAqB,kBAAkB,KAAK,OAAO,EAAE,CACjF,IAAI,gBAAgB,EACpB,IAAI,eAAe,CACpB,CAAC,EAEwB,SAAS;EACnC,IAAI,WAAW,MACb,MAAM,IAAI,MAAM,4BAA4B;EAU9C,MAAM,OAAO,qBAAqB;GANhC,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,kBAAkB,KAAK;GACvB;GAGuC,CAAC;EAC1C,MAAM,KAAK,UAAU,WAAW,KAAK;EACrC,OAAO;;CAGT,MAAc,2BAA0C;EACtD,KAAK,MAAM,cAAc,KAAK,OAAO,aACnC,MAAM,KAAK,mBAAmB,WAAW;;CAI7C,MAAc,mBAAmB,UAA+C;EAC9E,MAAM,YAAY,KAAK,QAAQ,KAAK,QAAQ,SAAS,CAAC;EAEtD,IAAI,KAAK,iBAAiB,IAAI,UAAU,EACtC,OAAO,KAAK,iBAAiB,IAAI,UAAU;EAI7C,MAAM,eAAc,MADQ,cAAc,EAAE,KAAK,WAAW,CAAC,GAC1B,YAAY;EAC/C,MAAM,eACJ,eAAe,QAAQ,YAAY,WAAW,IAC1C,KAAA,IACA,YAAY,QAAQ,cAAc,GAAG;EAE3C,KAAK,iBAAiB,IAAI,WAAW,aAAa;EAClD,OAAO;;CAGT,MAAc,UAAU,WAAmB,MAAwC;EACjF,MAAM,eAAe,KAAK,KAAK,WAAW,KAAK,OAAO,IAAI;EAC1D,MAAM,GAAG,GAAG,cAAc;GAAE,OAAO;GAAM,WAAW;GAAM,CAAC;EAC3D,MAAM,GAAG,MAAM,cAAc,EAAE,WAAW,MAAM,CAAC;EAEjD,KAAK,MAAM,OAAO,MAChB,MAAM,KAAK,eAAe,cAAc,IAAI;;CAIhD,MAAc,eAAe,cAAsB,KAAqC;EACtF,MAAM,WAAW,KAAK,KAAK,cAAc,IAAI,KAAK;EAClD,MAAM,GAAG,MAAM,KAAK,QAAQ,SAAS,EAAE,EAAE,WAAW,MAAM,CAAC;EAE3D,MAAM,cAAc,kBAAkB,IAAI;EAC1C,MAAM,GAAG,UAAU,UAAU,GAAG,cAAc,IAAI,UAAU;;;AAIhE,SAAS,kBAAkB,KAA8B;CACvD,MAAM,QAAkB,CAAC,OAAO,UAAU,IAAI,YAAY,QAAQ;CAElE,IAAI,IAAI,YAAY,eAAe,QAAQ,IAAI,YAAY,YAAY,SAAS,GAC9E,MAAM,KAAK,gBAAgB,IAAI,YAAY,cAAc;CAG3D,IAAI,IAAI,YAAY,oBAAoB,MACtC,MAAM,KAAK,qBAAqB,IAAI,YAAY,mBAAmB;CAGrE,IAAI,IAAI,YAAY,YAAY,OAC9B,MAAM,KAAK,iBAAiB;CAG9B,MAAM,KAAK,OAAO,GAAG;CACrB,OAAO,GAAG,MAAM,KAAK,KAAK,CAAC;;AAG7B,eAAsB,gBACpB,QACA,WAC4B;CAE5B,OAAO,IADe,iBAAiB,OACvB,CAAC,SAAS,UAAU"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BTeHvysI.d.ts","names":[],"sources":["../src/ui/Footer.tsx","../src/ui/Header.tsx","../src/ui/Sidebar.tsx","../src/ui/ArdoRoot.tsx","../src/ui/BareContent.tsx","../src/ui/components/CodeBlock.tsx","../src/ui/components/Container.tsx","../src/ui/components/CopyButton.tsx","../src/ui/components/Features.tsx","../src/ui/components/Hero.tsx","../src/ui/components/Icon.tsx","../src/ui/components/Search.tsx","../src/ui/components/Steps.tsx","../src/ui/components/Tabs.tsx","../src/ui/components/ThemeToggle.tsx","../src/ui/Content.tsx","../src/ui/DocPage.tsx","../src/ui/HomePage.tsx","../src/ui/Layout.tsx","../src/ui/Nav.tsx","../src/ui/Toc.tsx"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-DySzkJlC.d.ts","names":[],"sources":["../src/runtime/hooks.tsx","../src/runtime/sidebar-utils.ts"],"mappings":";;;;;;KAIK,gBAAA;EACH,MAAA,EAAQ,UAAA;EACR,OAAA,EAAS,WAAA;EACT,WAAA,GAAc,QAAA;AAAA;AAAA,cAGV,WAAA,EAAW,OAAA,CAAA,OAAA,CAAA,gBAAA;AAAA,iBAED,cAAA,CAAA,GAAkB,gBAAA;AAAA,iBAQlB,aAAA,CAAA,GAAiB,UAAA;AAAA,iBAKjB,cAAA,CAAA,GAAkB,WAAA;AAAA,iBAKlB,eAAA,CAAA,GAAmB,QAAA;AAAA,iBAKnB,UAAA,CAAA,GAAc,OAAA;AAAA,KAKzB,iBAAA;EACH,MAAA,EAAQ,UAAA;EACR,OAAA,EAAS,WAAA;EACT,WAAA,GAAc,QAAA;EACd,QAAA,EAAU,SAAA;AAAA;AAAA,iBAGI,YAAA,CAAA;EAAe,MAAA;EAAQ,OAAA;EAAS,WAAA;EAAa;AAAA,GAAY,iBAAA,GAAiB,oBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,KAerF,yBAAA;EACH,WAAA,EAAa,QAAA;EACb,GAAA,EAAK,OAAA;EACL,QAAA,EAAU,SAAA;AAAA;AAAA,iBAGI,oBAAA,CAAA;EAAuB,WAAA;EAAa,GAAA;EAAK;AAAA,GAAY,yBAAA,GAAyB,oBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,KA0BlF,cAAA;EACV,QAAA;IAAa,OAAA;IAAiB,IAAA;EAAA;EAC9B,WAAA;IAAgB,OAAA;IAAmB,IAAA;IAAe,aAAA,GAAgB,IAAA,CAAK,qBAAA;EAAA;EACvE,QAAA;AAAA;AAAA,iBAKc,iBAAA,CAAA,GAAqB,cAAA;AAAA,KAIhC,2BAAA;EACH,KAAA,EAAO,cAAA;EACP,QAAA,EAAU,SAAA;AAAA;AAAA,iBAGI,sBAAA,CAAA;EAAyB,KAAA;EAAO;AAAA,GAAY,2BAAA,GAA2B,oBAAA,CAAA,GAAA,CAAA,OAAA;;;;;;;iBCzGvE,sBAAA,CACd,OAAA,EAAS,WAAA,IACT,WAAA,WACC,WAAA;ADP8E;;;;AAAA,iBC4BjE,gBAAA,CACd,OAAA,EAAS,WAAA,IACT,WAAA;EACG,IAAA,GAAO,WAAA;EAAa,IAAA,GAAO,WAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidebar-utils-1Skqle1Q.js","names":[],"sources":["../src/runtime/hooks.tsx","../src/runtime/sidebar-utils.ts"],"sourcesContent":["import { createContext, type ReactNode, use, useMemo } from \"react\"\n\nimport type { ArdoConfig, PageData, SidebarItem, TOCItem } from \"../config/types\"\n\ntype ArdoContextValue = {\n config: ArdoConfig\n sidebar: SidebarItem[]\n currentPage?: PageData\n}\n\nconst ArdoContext = createContext<ArdoContextValue | null>(null)\n\nexport function useArdoContext(): ArdoContextValue {\n const context = use(ArdoContext)\n if (!context) {\n throw new Error(\"useArdoContext must be used within an ArdoProvider\")\n }\n return context\n}\n\nexport function useArdoConfig(): ArdoConfig {\n const { config } = useArdoContext()\n return config\n}\n\nexport function useArdoSidebar(): SidebarItem[] {\n const { sidebar } = useArdoContext()\n return sidebar\n}\n\nexport function useArdoPageData(): PageData | undefined {\n const { currentPage } = useArdoContext()\n return currentPage\n}\n\nexport function useArdoTOC(): TOCItem[] {\n const { currentPage } = useArdoContext()\n return currentPage?.toc ?? []\n}\n\ntype ArdoProviderProps = {\n config: ArdoConfig\n sidebar: SidebarItem[]\n currentPage?: PageData\n children: ReactNode\n}\n\nexport function ArdoProvider({ config, sidebar, currentPage, children }: ArdoProviderProps) {\n const contextValue = useMemo(\n () => ({ config, sidebar, currentPage }),\n [config, currentPage, sidebar]\n )\n return <ArdoContext value={contextValue}>{children}</ArdoContext>\n}\n\nexport { ArdoContext }\n\n// =============================================================================\n// ArdoPageDataProvider — injects page-level data (frontmatter, toc) into context\n// Used by the Vite transform to wrap MDX default exports.\n// =============================================================================\n\ntype ArdoPageDataProviderProps = {\n frontmatter: PageData[\"frontmatter\"]\n toc: TOCItem[]\n children: ReactNode\n}\n\nexport function ArdoPageDataProvider({ frontmatter, toc, children }: ArdoPageDataProviderProps) {\n const parent = use(ArdoContext)\n const pageData: PageData = useMemo(\n () => ({\n title: typeof frontmatter.title === \"string\" ? frontmatter.title : \"\",\n frontmatter,\n toc,\n content: \"\",\n filePath: \"\",\n relativePath: \"\",\n }),\n [frontmatter, toc]\n )\n const value = useMemo(\n () => (parent ? { ...parent, currentPage: pageData } : null),\n [parent, pageData]\n )\n\n if (!value) return <>{children}</>\n return <ArdoContext value={value}>{children}</ArdoContext>\n}\n\n// =============================================================================\n// ArdoSiteConfig — cross-cutting content settings (editLink, lastUpdated, TOC)\n// =============================================================================\n\nexport type ArdoSiteConfig = {\n editLink?: { pattern: string; text?: string }\n lastUpdated?: { enabled?: boolean; text?: string; formatOptions?: Intl.DateTimeFormatOptions }\n tocLabel?: string\n}\n\nconst ArdoSiteConfigContext = createContext<ArdoSiteConfig>({})\n\nexport function useArdoSiteConfig(): ArdoSiteConfig {\n return use(ArdoSiteConfigContext)\n}\n\ntype ArdoSiteConfigProviderProps = {\n value: ArdoSiteConfig\n children: ReactNode\n}\n\nexport function ArdoSiteConfigProvider({ value, children }: ArdoSiteConfigProviderProps) {\n return <ArdoSiteConfigContext value={value}>{children}</ArdoSiteConfigContext>\n}\n","import type { SidebarItem } from \"../config/types\"\n\n/**\n * Find the current sidebar item based on the current path.\n * This is client-safe and does not use any Node.js modules.\n */\nexport function findCurrentSidebarItem(\n sidebar: SidebarItem[],\n currentPath: string\n): SidebarItem | undefined {\n for (const item of sidebar) {\n if (item.link === currentPath) {\n return item\n }\n\n if (item.items) {\n const found = findCurrentSidebarItem(item.items, currentPath)\n if (found) {\n return found\n }\n }\n }\n\n return undefined\n}\n\n/**\n * Get the previous and next sidebar items for navigation.\n * This is client-safe and does not use any Node.js modules.\n */\nexport function getPrevNextLinks(\n sidebar: SidebarItem[],\n currentPath: string\n): { prev?: SidebarItem; next?: SidebarItem } {\n const flatItems = flattenSidebar(sidebar)\n const currentIndex = flatItems.findIndex((item) => item.link === currentPath)\n\n if (currentIndex === -1) {\n return {}\n }\n\n const prev = currentIndex > 0 ? flatItems[currentIndex - 1] : undefined\n const next = currentIndex < flatItems.length - 1 ? flatItems[currentIndex + 1] : undefined\n\n return { prev, next }\n}\n\nfunction flattenSidebar(sidebar: SidebarItem[]): SidebarItem[] {\n const result: SidebarItem[] = []\n\n for (const item of sidebar) {\n if ((item.link ?? \"\") !== \"\") {\n result.push(item)\n }\n\n if (item.items) {\n result.push(...flattenSidebar(item.items))\n }\n }\n\n return result\n}\n"],"mappings":";;;AAUA,MAAM,cAAc,cAAuC,KAAK;AAEhE,SAAgB,iBAAmC;CACjD,MAAM,UAAU,IAAI,YAAY;CAChC,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,qDAAqD;CAEvE,OAAO;;AAGT,SAAgB,gBAA4B;CAC1C,MAAM,EAAE,WAAW,gBAAgB;CACnC,OAAO;;AAGT,SAAgB,iBAAgC;CAC9C,MAAM,EAAE,YAAY,gBAAgB;CACpC,OAAO;;AAGT,SAAgB,kBAAwC;CACtD,MAAM,EAAE,gBAAgB,gBAAgB;CACxC,OAAO;;AAGT,SAAgB,aAAwB;CACtC,MAAM,EAAE,gBAAgB,gBAAgB;CACxC,OAAO,aAAa,OAAO,EAAE;;AAU/B,SAAgB,aAAa,EAAE,QAAQ,SAAS,aAAa,YAA+B;CAK1F,OAAO,oBAAC,aAAD;EAAa,OAJC,eACZ;GAAE;GAAQ;GAAS;GAAa,GACvC;GAAC;GAAQ;GAAa;GAAQ,CAEO;EAAG;EAAuB,CAAA;;AAgBnE,SAAgB,qBAAqB,EAAE,aAAa,KAAK,YAAuC;CAC9F,MAAM,SAAS,IAAI,YAAY;CAC/B,MAAM,WAAqB,eAClB;EACL,OAAO,OAAO,YAAY,UAAU,WAAW,YAAY,QAAQ;EACnE;EACA;EACA,SAAS;EACT,UAAU;EACV,cAAc;EACf,GACD,CAAC,aAAa,IAAI,CACnB;CACD,MAAM,QAAQ,cACL,SAAS;EAAE,GAAG;EAAQ,aAAa;EAAU,GAAG,MACvD,CAAC,QAAQ,SAAS,CACnB;CAED,IAAI,CAAC,OAAO,OAAO,oBAAA,UAAA,EAAG,UAAY,CAAA;CAClC,OAAO,oBAAC,aAAD;EAAoB;EAAQ;EAAuB,CAAA;;AAa5D,MAAM,wBAAwB,cAA8B,EAAE,CAAC;AAE/D,SAAgB,oBAAoC;CAClD,OAAO,IAAI,sBAAsB;;AAQnC,SAAgB,uBAAuB,EAAE,OAAO,YAAyC;CACvF,OAAO,oBAAC,uBAAD;EAA8B;EAAQ;EAAiC,CAAA;;;;;;;;AC1GhF,SAAgB,uBACd,SACA,aACyB;CACzB,KAAK,MAAM,QAAQ,SAAS;EAC1B,IAAI,KAAK,SAAS,aAChB,OAAO;EAGT,IAAI,KAAK,OAAO;GACd,MAAM,QAAQ,uBAAuB,KAAK,OAAO,YAAY;GAC7D,IAAI,OACF,OAAO;;;;;;;;AAYf,SAAgB,iBACd,SACA,aAC4C;CAC5C,MAAM,YAAY,eAAe,QAAQ;CACzC,MAAM,eAAe,UAAU,WAAW,SAAS,KAAK,SAAS,YAAY;CAE7E,IAAI,iBAAiB,IACnB,OAAO,EAAE;CAMX,OAAO;EAAE,MAHI,eAAe,IAAI,UAAU,eAAe,KAAK,KAAA;EAG/C,MAFF,eAAe,UAAU,SAAS,IAAI,UAAU,eAAe,KAAK,KAAA;EAE5D;;AAGvB,SAAS,eAAe,SAAuC;CAC7D,MAAM,SAAwB,EAAE;CAEhC,KAAK,MAAM,QAAQ,SAAS;EAC1B,KAAK,KAAK,QAAQ,QAAQ,IACxB,OAAO,KAAK,KAAK;EAGnB,IAAI,KAAK,OACP,OAAO,KAAK,GAAG,eAAe,KAAK,MAAM,CAAC;;CAI9C,OAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types-CTd_mkrv.d.ts","names":[],"sources":["../src/config/types.ts"],"mappings":";;;;KAOY,WAAA;EACV,IAAA;EACA,IAAA;EACA,SAAA;EACA,KAAA,GAAQ,WAAA;AAAA;AAAA,KAOE,OAAA;EACV,IAAA;EACA,IAAA;EACA,KAAA,GAAQ,OAAA;EACR,WAAA;AAAA;AAAA,KAOU,aAAA;EACV,IAAA;EACA,IAAA;AAAA;AAAA,KAOU,UAAA;EACV,IAAA;EACA,IAAA;EACA,SAAA;AAAA;AAAA,KAOU,cAAA;EA1BC,gCA4BX,KAAA;IAAU,KAAA,EAAO,YAAA;IAAc,IAAA,EAAM,YAAA;EAAA,IAAiB,YAAA,EApBtD;EAsBA,WAAA,YAdU;EAgBV,MAAA;EAEA,GAAA;IACE,KAAA;EAAA,GAhBF;EAmBA,aAAA,GAAgB,aAAA,EAnBP;EAqBT,aAAA,GAAgB,aAAA;AAAA;AAAA,KAON,UAAA;EACV,GAAA;EACA,KAAA,GAAQ,MAAA;EACR,QAAA;AAAA;AAAA,KAOU,aAAA;EACV,OAAA;EACA,WAAA;EACA,QAAA;EACA,GAAA;EACA,MAAA;EACA,MAAA;EACA,OAAA;EACA,gBAAA;EACA,cAAA;EACA,gBAAA;EACA,eAAA;EACA,IAAA,GAAO,KAAA;EAQP,aAAA;EACA,UAAA;EACA,KAAA;EACA,OAAA;IACE,KAAA;IACA,QAAA;IACA,SAAA;EAAA;EAEF,QAAA;IACE,WAAA;IACA,SAAA;IACA,WAAA;IACA,aAAA;IACA,UAAA;EAAA;AAAA;AAAA,KAQQ,WAAA;EAzCa,qCA2CvB,IAAA,WA/BY;EAiCZ,QAAA,WA3CA;EA6CA,UAAA,WA3CA;EA6CA,OAAA,WA3CA;EA6CA,MAAA,WA3CA;EA6CA,OAAA;AAAA;;;;;;;KAaU,UAAA;EA1CR,8CA4CF,KAAA,UA1CE;EA4CF,WAAA,WAzCE;EA2CF,cAAA,WAzCE;EA2CF,IAAA,WAzCE;EA2CF,MAAA,WA3CY;EA6CZ,MAAA,WArCqB;EAuCrB,IAAA,WAvCqB;EAyCrB,IAAA,GAAO,UAAA,IArCP;EAuCA,QAAA,GAAW,cAAA;EAnCX;;;;;EAyCA,OAAA,UAAiB,aAAA,EAxBG;EA0BpB,IAAA,GAAO,MAAA;EAVA;;;;EAeP,OAAA,GAAU,WAAA,EAAW;EAErB,SAAA,WA/BA;EAiCA,SAAA;AAAA;AAAA,KAOU,eAAA;EACV,KAAA;EACA,WAAA;EACA,MAAA;EACA,OAAA;EACA,OAAA;EACA,QAAA;EACA,WAAA;EACA,IAAA;IAAS,IAAA;IAAc,IAAA;EAAA;EACvB,IAAA;IAAS,IAAA;IAAc,IAAA;EAAA;EACvB,IAAA;IACE,IAAA;IACA,IAAA;IACA,OAAA;IACA,KAAA;MAAU,KAAA;MAAe,IAAA;IAAA;IACzB,OAAA,GAAU,KAAA;MACR,IAAA;MACA,IAAA;MACA,KAAA;IAAA;EAAA;EAGJ,QAAA,GAAW,KAAA;IACT,IAAA;IACA,KAAA;IACA,OAAA;IACA,IAAA;IACA,QAAA;EAAA;AAAA,IAEA,MAAA;AAAA,KAEQ,OAAA;EACV,EAAA;EACA,IAAA;EACA,KAAA;EACA,QAAA,GAAW,OAAA;AAAA;AAAA,KAGD,QAAA;EACV,KAAA;EACA,WAAA;EACA,WAAA,EAAa,eAAA;EACb,OAAA;EACA,GAAA,EAAK,OAAA;EACL,WAAA;EACA,QAAA;EACA,YAAA;AAAA;AAAA,KAOU,cAAA;EACV,OAAA,EAAS,WAAA;EACT,IAAA,GAAO,MAAA;EACP,OAAA,GAAU,aAAA;EACV,IAAA;EACA,UAAA;AAAA,IACE,QAAA,CAAS,IAAA,CAAK,UAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-3grzJSsq.js","names":["styles.searchPopover","styles.searchResults","styles.searchResult","styles.searchResultTitle","styles.searchNoResults","styles.searchFooter","styles.searchField","styles.searchInput","styles.searchKbd","styles.searchPopover","styles.search","styles.footerLink","styles.footerPrimary","styles.footerContainer","styles.themeToggle","styles.themeIcon","logo","styles.headerContainer","styles.headerLeft","styles.logoLink","styles.headerRight","styles.mobileBackdrop","styles.mobilePanel","styles.mobilePanelHeader","styles.mobilePanelClose","styles.mobilePanelSidebar","styles.sidebarNav","styles.sidebarList","styles.sidebarList0","styles.sidebarText","styles.sidebarTextButton","styles.sidebarItemHeader","styles.sidebarItem","styles.sidebarList1","styles.sidebarLink","layoutStyles.layout","layoutStyles.home","styles.featureTitle","styles.featureDetails","styles.featuresContainer","styles.heroAction","styles.heroActionAlt","styles.heroActionBrand","styles.heroContainer","styles.heroAnimate","hero","heroActions","heroName","heroStyles.hero","heroStyles.heroContainer","layoutStyles.home","layoutStyles.homeMain","RouterNavLink"],"sources":["../src/ui/components/Search.css.ts","../src/ui/components/SearchPopover.tsx","../src/ui/components/Search.tsx","../src/ui/Footer.tsx","../src/ui/components/ThemeToggle.css.ts","../src/ui/components/ThemeToggle.tsx","../src/ui/Header.css.ts","../src/ui/Nav.css.ts","../src/ui/Header.tsx","../src/ui/Sidebar.css.ts","../src/ui/Sidebar.tsx","../src/ui/ArdoRoot.tsx","../src/ui/components/Features.css.ts","../src/ui/components/Features.tsx","../src/ui/components/Hero.css.ts","../src/ui/components/Hero.tsx","../src/ui/HomePage.tsx","../src/ui/Nav.tsx"],"sourcesContent":["import { globalStyle, style } from \"@vanilla-extract/css\"\n\nimport { vars } from \"../theme/contract.css\"\n\nexport const search = style({\n position: \"relative\",\n width: \"100%\",\n maxWidth: \"100%\",\n})\n\nexport const searchField = style({\n display: \"flex\",\n alignItems: \"center\",\n gap: vars.space.sm,\n minHeight: \"2.5rem\",\n padding: `${vars.space.sm} 0.75rem`,\n background: vars.color.bgSoft,\n border: `1px solid ${vars.color.border}`,\n borderRadius: vars.radius.base,\n color: vars.color.textLighter,\n cursor: \"text\",\n transition: `border-color ${vars.transition.fast}, box-shadow ${vars.transition.fast}, color ${vars.transition.fast}`,\n outline: \"none\",\n})\n\nglobalStyle(`${search}:focus-within ${searchField}`, {\n borderColor: vars.color.brand,\n color: vars.color.textLight,\n})\n\nglobalStyle(`${searchField}:focus-within`, {\n outline: \"none\",\n})\n\nexport const searchInput = style({\n flex: 1,\n minWidth: 0,\n border: \"none\",\n outline: \"none\",\n fontSize: vars.fontSize.sm,\n background: \"none\",\n color: vars.color.text,\n \"::placeholder\": {\n color: vars.color.textLighter,\n },\n selectors: {\n \"&:focus-visible\": {\n outline: \"none\",\n },\n },\n})\n\nexport const searchPopover = style({\n position: \"fixed\",\n width: \"min(28rem, calc(100vw - 2rem))\",\n background: vars.color.bg,\n borderRadius: vars.radius.lg,\n border: `1px solid ${vars.color.border}`,\n boxShadow: vars.color.shadowLg,\n overflow: \"hidden\",\n zIndex: 210,\n})\n\nexport const searchResults = style({\n listStyle: \"none\",\n maxHeight: \"25rem\",\n overflowY: \"auto\",\n})\n\nexport const searchResult = style({\n display: \"block\",\n padding: `0.75rem ${vars.space.md}`,\n textDecoration: \"none\",\n color: vars.color.text,\n borderBottom: `1px solid ${vars.color.borderLight}`,\n transition: `background ${vars.transition.fast}`,\n selectors: {\n \"&:last-child\": {\n borderBottom: \"none\",\n },\n \"&:hover, &.selected\": {\n background: vars.color.brandSubtle,\n },\n },\n})\n\nexport const searchResultTitle = style({\n display: \"block\",\n fontWeight: 500,\n marginBottom: \"2px\",\n})\n\nexport const searchResultSection = style({\n display: \"block\",\n fontSize: vars.fontSize.xs,\n color: vars.color.textLighter,\n})\n\nexport const searchNoResults = style({\n padding: `${vars.space.xl} ${vars.space.md}`,\n textAlign: \"center\",\n color: vars.color.textLighter,\n})\n\nexport const searchFooter = style({\n display: \"flex\",\n justifyContent: \"center\",\n gap: vars.space.lg,\n padding: `0.75rem ${vars.space.md}`,\n background: vars.color.bgSoft,\n borderTop: `1px solid ${vars.color.border}`,\n fontSize: vars.fontSize.xs,\n color: vars.color.textLighter,\n})\n\nglobalStyle(`${searchFooter} kbd`, {\n padding: \"2px 6px\",\n background: vars.color.bg,\n border: `1px solid ${vars.color.border}`,\n borderRadius: vars.radius.sm,\n marginRight: \"4px\",\n})\n\nexport const searchClear = style({\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"1.5rem\",\n height: \"1.5rem\",\n flexShrink: 0,\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: vars.fontSize.lg,\n color: vars.color.textLighter,\n padding: vars.space.xs,\n borderRadius: vars.radius.sm,\n transition: `all ${vars.transition.fast}`,\n selectors: {\n \"&:hover\": {\n background: vars.color.bgSoft,\n color: vars.color.text,\n },\n },\n})\n\nexport const searchKbd = style({\n display: \"flex\",\n gap: \"3px\",\n marginLeft: vars.space.xs,\n})\n\nglobalStyle(`${searchKbd} kbd`, {\n padding: \"2px 6px\",\n background: vars.color.bg,\n border: `1px solid ${vars.color.border}`,\n borderRadius: vars.radius.sm,\n fontSize: vars.fontSize.xs,\n fontFamily: vars.font.family,\n})\n","import { useLayoutEffect, useState } from \"react\"\nimport { createPortal } from \"react-dom\"\n\nimport * as styles from \"./Search.css\"\n\n/**\n * Renders the search popover as a portal attached to document.body.\n * Uses getBoundingClientRect to position it below the anchor element.\n */\nexport function SearchPopover({\n anchorRef,\n children,\n}: {\n anchorRef: React.RefObject<HTMLElement | null>\n children: React.ReactNode\n}) {\n const [pos, setPos] = useState({ top: 0, left: 0, width: 0 })\n\n useLayoutEffect(() => {\n const el = anchorRef.current\n if (!el) return\n const rect = el.getBoundingClientRect()\n setPos({\n top: rect.bottom + 8,\n left: rect.left,\n width: Math.max(rect.width, 400),\n })\n }, [anchorRef])\n\n if (typeof document === \"undefined\") return null\n\n return createPortal(\n <div\n className={styles.searchPopover}\n style={{\n top: pos.top,\n left: pos.left,\n width: Math.min(pos.width, globalThis.innerWidth - 32),\n }}\n >\n {children}\n </div>,\n document.body\n )\n}\n","import MiniSearch from \"minisearch\"\nimport { useEffect, useMemo, useRef, useState } from \"react\"\nimport { Link, useNavigate } from \"react-router\"\nimport searchDocs from \"virtual:ardo/search-index\"\n\nimport { SearchIcon } from \"../icons\"\nimport * as styles from \"./Search.css\"\nimport { SearchPopover } from \"./SearchPopover\"\n\ntype SearchDoc = {\n id: string\n title: string\n content: string\n path: string\n section?: string\n}\n\ntype SearchMatch = {\n id: string\n title: string\n path: string\n section?: string\n}\n\nexport type ArdoSearchProps = {\n /** Placeholder text for the search input (default: \"Search...\") */\n placeholder?: string\n}\n\nfunction useGlobalSearchShortcut(\n inputRef: React.RefObject<HTMLInputElement | null>,\n setIsOpen: (open: boolean) => void\n) {\n useEffect(() => {\n const handleGlobalKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === \"k\") {\n e.preventDefault()\n inputRef.current?.focus()\n setIsOpen(true)\n }\n if (e.key === \"Escape\") {\n setIsOpen(false)\n }\n }\n document.addEventListener(\"keydown\", handleGlobalKeyDown)\n return () => {\n document.removeEventListener(\"keydown\", handleGlobalKeyDown)\n }\n }, [inputRef, setIsOpen])\n}\n\ntype OutsideClickOptions = {\n containerRef: React.RefObject<HTMLDivElement | null>\n popoverClass: string\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n}\n\nfunction useOutsideClick({ containerRef, popoverClass, isOpen, setIsOpen }: OutsideClickOptions) {\n useEffect(() => {\n if (!isOpen) return\n const handleOutsideClick = (e: MouseEvent | TouchEvent) => {\n if (!(e.target instanceof Element)) {\n return\n }\n\n const target = e.target\n const inContainer = containerRef.current?.contains(target) === true\n const inPopover = target.closest(`.${popoverClass}`) != null\n if (!inContainer && !inPopover) {\n setIsOpen(false)\n }\n }\n document.addEventListener(\"mousedown\", handleOutsideClick)\n document.addEventListener(\"touchstart\", handleOutsideClick)\n return () => {\n document.removeEventListener(\"mousedown\", handleOutsideClick)\n document.removeEventListener(\"touchstart\", handleOutsideClick)\n }\n }, [containerRef, popoverClass, isOpen, setIsOpen])\n}\n\nfunction useSearchIndex() {\n return useMemo(() => {\n const index = new MiniSearch<SearchDoc>({\n fields: [\"title\", \"content\", \"section\"],\n storeFields: [\"title\", \"path\", \"section\"],\n searchOptions: { boost: { title: 2 }, fuzzy: 0.2, prefix: true },\n })\n index.addAll(searchDocs)\n return index\n }, [])\n}\n\nfunction normalizeResults(rawResults: Array<Record<string, unknown>>): SearchMatch[] {\n return rawResults.flatMap((result): SearchMatch[] => {\n const resultPath = typeof result.path === \"string\" ? result.path : undefined\n const title = typeof result.title === \"string\" ? result.title : undefined\n if (resultPath === undefined || title === undefined) return []\n return [\n {\n id: String(result.id),\n title,\n path: resultPath,\n section: typeof result.section === \"string\" ? result.section : undefined,\n },\n ]\n })\n}\n\nfunction SearchResults({\n results,\n selectedIndex,\n query,\n onClose,\n}: {\n results: SearchMatch[]\n selectedIndex: number\n query: string\n onClose: () => void\n}) {\n return (\n <>\n {results.length > 0 ? (\n <ul className={styles.searchResults}>\n {results.map((result, index) => (\n <li key={result.id}>\n <Link\n to={result.path}\n className={[styles.searchResult, index === selectedIndex && \"selected\"]\n .filter(Boolean)\n .join(\" \")}\n onClick={onClose}\n >\n <span className={styles.searchResultTitle}>{result.title}</span>\n {result.section !== undefined && (\n <span className={styles.searchResultSection}>{result.section}</span>\n )}\n </Link>\n </li>\n ))}\n </ul>\n ) : (\n <div className={styles.searchNoResults}>No results found for &quot;{query}&quot;</div>\n )}\n <div className={styles.searchFooter}>\n <span>\n <kbd>↑</kbd> <kbd>↓</kbd> to navigate\n </span>\n <span>\n <kbd>↵</kbd> to select\n </span>\n <span>\n <kbd>esc</kbd> to close\n </span>\n </div>\n </>\n )\n}\n\nfunction useSearch(searchIndex: ReturnType<typeof useSearchIndex>) {\n const [isOpen, setIsOpen] = useState(false)\n const [query, setQuery] = useState(\"\")\n const [results, setResults] = useState<SearchMatch[]>([])\n const [selectedIndex, setSelectedIndex] = useState(0)\n\n const search = (searchQuery: string) => {\n setQuery(searchQuery)\n if (!searchQuery.trim()) {\n setResults([])\n setIsOpen(false)\n setSelectedIndex(0)\n return\n }\n const rawResults = searchIndex.search(searchQuery).slice(0, 10)\n setResults(normalizeResults(rawResults))\n setSelectedIndex(0)\n setIsOpen(true)\n }\n\n return { isOpen, setIsOpen, query, results, selectedIndex, setSelectedIndex, search }\n}\n\nfunction SearchInput({\n inputRef,\n placeholder,\n query,\n hasQuery,\n onSearch,\n onKeyDown,\n onFocus,\n}: {\n inputRef: React.RefObject<HTMLInputElement | null>\n placeholder: string\n query: string\n hasQuery: boolean\n onSearch: (q: string) => void\n onKeyDown: (e: React.KeyboardEvent) => void\n onFocus: () => void\n}) {\n return (\n <div className={styles.searchField}>\n <SearchIcon size={18} />\n <input\n ref={inputRef}\n type=\"text\"\n className={styles.searchInput}\n placeholder={placeholder}\n value={query}\n onChange={(e) => {\n onSearch(e.target.value)\n }}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n aria-label=\"Search\"\n />\n {hasQuery && (\n <button\n type=\"button\"\n className={styles.searchClear}\n onClick={(e) => {\n e.stopPropagation()\n onSearch(\"\")\n inputRef.current?.focus()\n }}\n aria-label=\"Clear search\"\n >\n ×\n </button>\n )}\n <span className={styles.searchKbd}>\n <kbd>⌘</kbd>\n <kbd>K</kbd>\n </span>\n </div>\n )\n}\n\nexport function ArdoSearch({ placeholder = \"Search...\" }: ArdoSearchProps) {\n const navigate = useNavigate()\n const containerRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const searchIndex = useSearchIndex()\n const state = useSearch(searchIndex)\n const hasQuery = state.query.trim().length > 0\n\n useGlobalSearchShortcut(inputRef, state.setIsOpen)\n useOutsideClick({\n containerRef,\n popoverClass: styles.searchPopover,\n isOpen: state.isOpen,\n setIsOpen: state.setIsOpen,\n })\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowDown\":\n if (state.results.length > 0) {\n e.preventDefault()\n state.setSelectedIndex((p) => Math.min(p + 1, state.results.length - 1))\n }\n break\n case \"ArrowUp\":\n if (state.results.length > 0) {\n e.preventDefault()\n state.setSelectedIndex((p) => Math.max(p - 1, 0))\n }\n break\n case \"Enter\": {\n const p = state.results[state.selectedIndex]?.path\n if (typeof p === \"string\") {\n e.preventDefault()\n void navigate(p)\n state.setIsOpen(false)\n }\n break\n }\n case \"Escape\":\n state.setIsOpen(false)\n inputRef.current?.blur()\n break\n default:\n break\n }\n }\n\n return (\n <div\n className={styles.search}\n ref={containerRef}\n data-expanded={state.isOpen || hasQuery ? \"true\" : \"false\"}\n onMouseDown={() => inputRef.current?.focus()}\n >\n <SearchInput\n inputRef={inputRef}\n placeholder={placeholder}\n query={state.query}\n hasQuery={hasQuery}\n onSearch={state.search}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n if (hasQuery) state.setIsOpen(true)\n }}\n />\n {state.isOpen && hasQuery && (\n <SearchPopover anchorRef={containerRef}>\n <SearchResults\n results={state.results}\n selectedIndex={state.selectedIndex}\n query={state.query}\n onClose={() => {\n state.setIsOpen(false)\n }}\n />\n </SearchPopover>\n )}\n </div>\n )\n}\n","import React, { type ReactNode } from \"react\"\n\nimport type { ProjectMeta, SponsorConfig } from \"../config/types\"\n\nimport { useArdoConfig } from \"../runtime/hooks\"\nimport * as styles from \"./Footer.css\"\n\n// =============================================================================\n// Footer Component\n// =============================================================================\n\nexport type ArdoFooterProps = {\n /** Footer message (supports HTML string) */\n message?: string\n /** Copyright text (supports HTML string) */\n copyright?: string\n /** Custom content (overrides all automatic rendering) */\n children?: ReactNode\n /** Additional CSS classes */\n className?: string\n /** Project metadata — renders linked \"name vX.Y.Z\" */\n project?: ProjectMeta\n /** Sponsor link — renders \"Sponsored by X\" */\n sponsor?: SponsorConfig\n /** Build timestamp (ISO string) — renders formatted date */\n buildTime?: string\n /** Git commit hash — rendered next to the build date */\n buildHash?: string\n /** Show \"Built with Ardo\" link (default: true) */\n ardoLink?: boolean\n}\n\nfunction formatBuildTime(iso: string): string {\n try {\n const date = new Date(iso)\n return date.toLocaleDateString(\"en-US\", {\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n })\n } catch {\n return iso\n }\n}\n\n/**\n * Footer component with structured layout for project info, sponsor, and build metadata.\n *\n * Automatically pulls data from Ardo context (`config.project`, `config.buildTime`,\n * `config.buildHash`). Props serve as overrides.\n *\n * When `children` is provided, all automatic rendering is skipped.\n *\n * @example Automatic (zero-config)\n * ```tsx\n * <Footer />\n * ```\n *\n * @example With overrides\n * ```tsx\n * <Footer\n * sponsor={{ text: \"Sebastian Software\", link: \"https://sebastian-software.com/oss\" }}\n * message=\"Released under the MIT License.\"\n * copyright=\"Copyright 2026 Sebastian Software GmbH\"\n * />\n * ```\n *\n * @example Custom content\n * ```tsx\n * <Footer>\n * <CustomFooterContent />\n * </Footer>\n * ```\n */\nfunction FooterProjectLink({\n project,\n config,\n}: {\n project: ArdoFooterProps[\"project\"]\n config: ReturnType<typeof useArdoConfig>\n}) {\n const resolved = project ?? config.project\n const name = resolved?.name ?? \"\"\n const version = resolved?.version ?? \"\"\n const homepage = resolved?.homepage ?? \"\"\n if (name === \"\") return null\n const label = version !== \"\" ? `${name} v${version}` : name\n return homepage !== \"\" ? (\n <a href={homepage} className={styles.footerLink}>\n {label}\n </a>\n ) : (\n <span>{label}</span>\n )\n}\n\nfunction FooterSponsorLink({ sponsor }: { sponsor: ArdoFooterProps[\"sponsor\"] }) {\n const text = sponsor?.text ?? \"\"\n const link = sponsor?.link ?? \"\"\n if (text === \"\" || link === \"\") return null\n return (\n <a href={link} className={styles.footerLink}>\n Sponsored by {text}\n </a>\n )\n}\n\nfunction FooterPrimaryLine({\n project,\n sponsor,\n ardoLink,\n config,\n}: {\n project: ArdoFooterProps[\"project\"]\n sponsor: ArdoFooterProps[\"sponsor\"]\n ardoLink: boolean\n config: ReturnType<typeof useArdoConfig>\n}) {\n const items: React.ReactNode[] = []\n const projectNode = <FooterProjectLink project={project} config={config} />\n const sponsorNode = <FooterSponsorLink sponsor={sponsor} />\n const hasProject =\n (project ?? config.project)?.name !== undefined && (project ?? config.project)?.name !== \"\"\n const hasSponsor = (sponsor?.text ?? \"\") !== \"\" && (sponsor?.link ?? \"\") !== \"\"\n\n if (hasProject) items.push(projectNode)\n if (ardoLink)\n items.push(\n <a href=\"https://ardo-docs.dev\" className={styles.footerLink}>\n Built with Ardo\n </a>\n )\n if (hasSponsor) items.push(sponsorNode)\n if (items.length === 0) return null\n\n return (\n <p className={styles.footerPrimary}>\n {items.map((item, i) => (\n // eslint-disable-next-line react/no-array-index-key\n <React.Fragment key={i}>\n {i > 0 && <span className={styles.footerSeparator} aria-hidden=\"true\" />}\n {item}\n </React.Fragment>\n ))}\n </p>\n )\n}\n\nexport function ArdoFooter({\n children,\n className,\n ardoLink = true,\n message,\n copyright,\n project,\n sponsor,\n buildTime,\n buildHash,\n}: ArdoFooterProps) {\n const config = useArdoConfig()\n const resolvedBuildTime = buildTime ?? config.buildTime\n const resolvedBuildHash = buildHash ?? config.buildHash\n\n if (children != null) {\n return (\n <footer className={className ?? styles.footer}>\n <div className={styles.footerContainer}>{children}</div>\n </footer>\n )\n }\n\n return (\n <footer className={className ?? styles.footer}>\n <div className={styles.footerContainer}>\n <FooterPrimaryLine\n project={project}\n sponsor={sponsor}\n ardoLink={ardoLink}\n config={config}\n />\n {(message ?? \"\") !== \"\" && (\n <p className={styles.footerMessage} dangerouslySetInnerHTML={{ __html: message ?? \"\" }} />\n )}\n {(copyright ?? \"\") !== \"\" && (\n <p\n className={styles.footerCopyright}\n dangerouslySetInnerHTML={{ __html: copyright ?? \"\" }}\n />\n )}\n {(resolvedBuildTime ?? \"\") !== \"\" && (\n <p className={styles.footerBuildTime}>\n Built on {formatBuildTime(resolvedBuildTime ?? \"\")}\n {(resolvedBuildHash ?? \"\") !== \"\" && <> ({resolvedBuildHash})</>}\n </p>\n )}\n </div>\n </footer>\n )\n}\n\n// Type exports for compound pattern (kept for backwards compatibility)\nexport type ArdoFooterMessageProps = {\n children: ReactNode\n className?: string\n}\n\nexport type ArdoFooterCopyrightProps = {\n children: ReactNode\n className?: string\n}\n","import { style } from \"@vanilla-extract/css\"\n\nimport { vars } from \"../theme/contract.css\"\n\nexport const themeIcon = style({\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n})\n\nexport const themeToggle = style({\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"40px\",\n height: \"40px\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n color: vars.color.textLight,\n borderRadius: vars.radius.base,\n transition: `all ${vars.transition.fast}`,\n selectors: {\n \"&:hover\": {\n background: vars.color.bgSoft,\n color: vars.color.text,\n },\n },\n})\n","import { useEffect, useState } from \"react\"\n\nimport { MonitorIcon, MoonIcon, SunIcon } from \"../icons\"\nimport * as styles from \"./ThemeToggle.css\"\n\ntype Theme = \"dark\" | \"light\" | \"system\"\n\nconst isBrowser = typeof document !== \"undefined\"\n\nfunction getInitialTheme(): Theme {\n if (!isBrowser) return \"system\"\n const stored = localStorage.getItem(\"ardo-theme\")\n return isTheme(stored) ? stored : \"system\"\n}\n\nexport function ArdoThemeToggle() {\n const [theme, setTheme] = useState<Theme>(getInitialTheme)\n const [mounted] = useState(isBrowser)\n\n useEffect(() => {\n applyTheme(theme)\n }, [theme])\n\n const toggleTheme = () => {\n const nextTheme: Theme = theme === \"light\" ? \"dark\" : theme === \"dark\" ? \"system\" : \"light\"\n setTheme(nextTheme)\n localStorage.setItem(\"ardo-theme\", nextTheme)\n applyTheme(nextTheme)\n }\n\n if (!mounted) {\n return (\n <button type=\"button\" className={styles.themeToggle} aria-label=\"Toggle theme\">\n <span className={styles.themeIcon}>\n <SunIcon size={20} />\n </span>\n </button>\n )\n }\n\n return (\n <button\n type=\"button\"\n className={styles.themeToggle}\n onClick={toggleTheme}\n aria-label={`Switch to ${theme === \"light\" ? \"dark\" : theme === \"dark\" ? \"system\" : \"light\"} theme`}\n >\n <span className={styles.themeIcon}>\n {theme === \"light\" && <SunIcon size={20} />}\n {theme === \"dark\" && <MoonIcon size={20} />}\n {theme === \"system\" && <MonitorIcon size={20} />}\n </span>\n </button>\n )\n}\n\nfunction applyTheme(theme: Theme) {\n const root = document.documentElement\n\n if (theme === \"system\") {\n const isDark = globalThis.matchMedia(\"(prefers-color-scheme: dark)\").matches\n root.classList.toggle(\"dark\", isDark)\n root.classList.toggle(\"light\", !isDark)\n } else {\n root.classList.toggle(\"dark\", theme === \"dark\")\n root.classList.toggle(\"light\", theme === \"light\")\n }\n}\n\nfunction isTheme(value: null | string): value is Theme {\n return value === \"dark\" || value === \"light\" || value === \"system\"\n}\n","import { globalStyle, style } from \"@vanilla-extract/css\"\n\nimport { vars } from \"./theme/contract.css\"\n\nexport const header = style({\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n height: `calc(${vars.layout.headerHeight} + env(safe-area-inset-top))`,\n paddingTop: \"env(safe-area-inset-top)\",\n background: vars.color.sidebarBg,\n zIndex: 100,\n})\n\nexport const headerContainer = style({\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n height: \"100%\",\n padding: `0 ${vars.space.lg}`,\n})\n\nexport const headerLeft = style({\n display: \"flex\",\n alignItems: \"center\",\n gap: vars.space.lg,\n})\n\nexport const headerRight = style({\n display: \"flex\",\n alignItems: \"center\",\n gap: \"0.75rem\",\n})\n\nexport const logoLink = style({\n display: \"flex\",\n alignItems: \"center\",\n gap: vars.space.sm,\n textDecoration: \"none\",\n color: vars.color.text,\n transition: `opacity ${vars.transition.fast}`,\n selectors: {\n \"&:hover\": {\n opacity: 0.8,\n },\n },\n})\n\nexport const logo = style({\n height: \"2.25rem\",\n})\n\nexport const siteTitle = style({\n fontSize: vars.fontSize.lg,\n fontWeight: 700,\n letterSpacing: \"-0.025em\",\n})\n\nexport const mobileMenuButton = style({\n display: \"none\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: vars.space.sm,\n borderRadius: vars.radius.sm,\n color: vars.color.text,\n selectors: {\n \"&:hover\": {\n background: vars.color.bgSoft,\n },\n },\n \"@media\": {\n \"(max-width: 1024px)\": {\n display: \"flex\",\n alignItems: \"center\",\n },\n },\n})\n\nexport const hamburger = style({\n display: \"flex\",\n flexDirection: \"column\",\n gap: vars.space.xs,\n})\n\nglobalStyle(`${hamburger} span`, {\n display: \"block\",\n width: \"1.25rem\",\n height: \"2px\",\n background: vars.color.text,\n borderRadius: \"1px\",\n transition: `all ${vars.transition.fast}`,\n})\n\nexport const desktopNav = style({\n display: \"flex\",\n alignItems: \"center\",\n \"@media\": {\n \"(max-width: 1024px)\": {\n display: \"none\",\n },\n },\n})\n\n// =============================================================================\n// Mobile slide-in panel\n// =============================================================================\n\nexport const mobileBackdrop = style({\n position: \"fixed\",\n inset: 0,\n zIndex: 150,\n background: \"oklch(0 0 0 / 0.3)\",\n transition: `opacity ${vars.transition.base}`,\n selectors: {\n '&[data-open=\"false\"]': {\n opacity: 0,\n pointerEvents: \"none\",\n },\n },\n})\n\nexport const mobilePanel = style({\n position: \"fixed\",\n top: 0,\n left: 0,\n bottom: 0,\n width: \"min(20rem, 85vw)\",\n zIndex: 151,\n background: vars.color.bg,\n overflowY: \"auto\",\n padding: `${vars.space.lg} ${vars.space.lg} ${vars.space.xl}`,\n transform: \"translateX(0)\",\n transition: `transform ${vars.transition.slow}`,\n selectors: {\n '&[data-open=\"false\"]': {\n transform: \"translateX(-100%)\",\n },\n },\n})\n\nexport const mobilePanelHeader = style({\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: vars.space.lg,\n})\n\nexport const mobilePanelClose = style({\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: vars.space.sm,\n borderRadius: vars.radius.base,\n color: vars.color.textLight,\n transition: `all ${vars.transition.fast}`,\n selectors: {\n \"&:hover\": {\n color: vars.color.text,\n background: vars.color.bgMute,\n },\n },\n})\n\nexport const mobilePanelNav = style({\n marginBottom: vars.space.lg,\n paddingBottom: vars.space.md,\n borderBottom: `1px solid ${vars.color.border}`,\n})\n\nglobalStyle(`${mobilePanelNav} a`, {\n display: \"block\",\n padding: `${vars.space.sm} 0`,\n color: vars.color.textLight,\n textDecoration: \"none\",\n fontSize: vars.fontSize.sm,\n})\n\n// Force sidebar visible inside the mobile panel (overrides sidebar's display:none at 1024px)\nexport const mobilePanelSidebar = style({})\n\nglobalStyle(`${mobilePanelSidebar} > aside`, {\n display: \"block\",\n width: \"100%\",\n padding: 0,\n})\n\n// Legacy - keep for backwards compat but unused\nexport const mobileMenu = style({ display: \"none\" })\nexport const mobileTopNav = style({ display: \"none\" })\nexport const mobileMenuContent = style({})\nexport const mobileMenuSection = style({})\nexport const mobileNav = style({})\n","import { style } from \"@vanilla-extract/css\"\n\nimport { vars } from \"./theme/contract.css\"\n\nexport const nav = style({\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n})\n\nexport const navLink = style({\n position: \"relative\",\n color: vars.color.textLight,\n textDecoration: \"none\",\n fontSize: \"14px\",\n fontWeight: 500,\n padding: \"8px 14px\",\n borderRadius: vars.radius.sm,\n transition: `all ${vars.transition.fast}`,\n selectors: {\n \"&::after\": {\n content: '\"\"',\n position: \"absolute\",\n bottom: 0,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n width: 0,\n height: \"2px\",\n background: vars.color.brand,\n borderRadius: \"1px\",\n transition: `width ${vars.transition.base}`,\n },\n \"&:hover\": {\n color: vars.color.text,\n background: vars.color.bgSoft,\n },\n \"&.active\": {\n color: vars.color.brand,\n },\n \"&.active::after\": {\n width: \"calc(100% - 28px)\",\n },\n },\n})\n\nexport const socialLink = style({\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"40px\",\n height: \"40px\",\n color: vars.color.textLight,\n borderRadius: vars.radius.base,\n transition: `all ${vars.transition.fast}`,\n selectors: {\n \"&:hover\": {\n color: vars.color.text,\n background: vars.color.bgSoft,\n },\n },\n})\n","import { type ReactNode, useEffect, useState } from \"react\"\nimport { Link, useLocation } from \"react-router\"\n\nimport { useArdoConfig } from \"../runtime/hooks\"\nimport { ArdoSearch } from \"./components/Search\"\nimport { ArdoThemeToggle } from \"./components/ThemeToggle\"\nimport * as styles from \"./Header.css\"\nimport {\n GithubIcon,\n LinkedinIcon,\n MessageCircleIcon,\n NpmIcon,\n TwitterIcon,\n XIcon,\n YoutubeIcon,\n} from \"./icons\"\nimport * as navStyles from \"./Nav.css\"\n\n// =============================================================================\n// Header Component\n// =============================================================================\n\nexport type ArdoHeaderProps = {\n /** Logo image URL or light/dark variants */\n logo?: { light: string; dark: string } | string\n /** Site title displayed next to logo */\n title?: string\n /** Navigation content (Nav component or custom) */\n nav?: ReactNode\n /** Actions/right side content (social links, custom buttons) */\n actions?: ReactNode\n /** Show search (default: true) */\n search?: boolean\n /** Placeholder text for the search input */\n searchPlaceholder?: string\n /** Show theme toggle (default: true) */\n themeToggle?: boolean\n /** Additional content rendered in the mobile menu (e.g. sidebar) */\n mobileMenuContent?: ReactNode\n /** Additional CSS classes */\n className?: string\n}\n\nexport function ArdoHeader({\n logo,\n title,\n nav,\n actions,\n search = false,\n searchPlaceholder,\n themeToggle = true,\n mobileMenuContent,\n className,\n}: ArdoHeaderProps) {\n const location = useLocation()\n const config = useArdoConfig()\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false)\n\n const resolvedLogo = logo\n const resolvedTitle = title ?? config.title\n const hasLogo = resolvedLogo !== undefined\n const hasTitle = resolvedTitle !== \"\"\n const hasMobileMenu = mobileMenuContent != null\n\n useEffect(() => {\n setMobileMenuOpen(false)\n }, [location.pathname])\n\n // Prevent body scroll when mobile menu is open\n useEffect(() => {\n if (mobileMenuOpen) {\n document.body.style.overflow = \"hidden\"\n } else {\n document.body.style.overflow = \"\"\n }\n return () => {\n document.body.style.overflow = \"\"\n }\n }, [mobileMenuOpen])\n\n return (\n <>\n <header className={className ?? styles.header}>\n <div className={styles.headerContainer}>\n <div className={styles.headerLeft}>\n {hasMobileMenu && (\n <button\n type=\"button\"\n className={styles.mobileMenuButton}\n onClick={() => {\n setMobileMenuOpen(!mobileMenuOpen)\n }}\n aria-label=\"Toggle menu\"\n aria-expanded={mobileMenuOpen}\n >\n <span className={styles.hamburger}>\n <span />\n <span />\n <span />\n </span>\n </button>\n )}\n <Link to=\"/\" className={styles.logoLink}>\n {hasLogo && (\n <img\n src={typeof resolvedLogo === \"string\" ? resolvedLogo : resolvedLogo.light}\n alt={resolvedTitle}\n className={styles.logo}\n />\n )}\n {hasTitle && <span className={styles.siteTitle}>{resolvedTitle}</span>}\n </Link>\n </div>\n\n {nav != null && <div className={styles.desktopNav}>{nav}</div>}\n\n <div className={styles.headerRight}>\n {search && <ArdoSearch placeholder={searchPlaceholder} />}\n {themeToggle && <ArdoThemeToggle />}\n {actions}\n </div>\n </div>\n </header>\n\n {hasMobileMenu && (\n <MobileSlidePanel\n isOpen={mobileMenuOpen}\n logo={resolvedLogo}\n title={resolvedTitle}\n nav={nav}\n themeToggle={themeToggle}\n onClose={() => {\n setMobileMenuOpen(false)\n }}\n >\n {mobileMenuContent}\n </MobileSlidePanel>\n )}\n </>\n )\n}\n\n// =============================================================================\n// Mobile Slide-in Panel\n// =============================================================================\n\nfunction MobileSlidePanel({\n isOpen,\n logo,\n title,\n nav,\n themeToggle,\n children,\n onClose,\n}: {\n isOpen: boolean\n logo?: { light: string; dark: string } | string\n title: string\n nav?: ReactNode\n themeToggle?: boolean\n children: ReactNode\n onClose: () => void\n}) {\n return (\n <>\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n <div className={styles.mobileBackdrop} data-open={isOpen} onClick={onClose} />\n\n {/* Panel */}\n <div className={styles.mobilePanel} data-open={isOpen} aria-hidden={!isOpen}>\n <div className={styles.mobilePanelHeader}>\n <Link to=\"/\" className={styles.logoLink} onClick={onClose}>\n {logo != null && (\n <img\n src={typeof logo === \"string\" ? logo : logo.light}\n alt={title}\n className={styles.logo}\n />\n )}\n </Link>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"0.5rem\" }}>\n {themeToggle && <ArdoThemeToggle />}\n <button\n type=\"button\"\n className={styles.mobilePanelClose}\n onClick={onClose}\n aria-label=\"Close menu\"\n >\n <XIcon size={20} />\n </button>\n </div>\n </div>\n\n {/* Nav links */}\n {nav != null && (\n <div className={styles.mobilePanelNav} onClickCapture={handleLinkClick(onClose)}>\n {nav}\n </div>\n )}\n\n {/* Sidebar content - wrapper overrides display:none from sidebar CSS */}\n <div className={styles.mobilePanelSidebar} onClickCapture={handleLinkClick(onClose)}>\n {children}\n </div>\n </div>\n </>\n )\n}\n\nfunction handleLinkClick(onClose: () => void) {\n return (event: React.MouseEvent<HTMLElement>) => {\n if (event.target instanceof HTMLElement && event.target.closest(\"a\") !== null) {\n onClose()\n }\n }\n}\n\n// =============================================================================\n// SocialLink Component\n// =============================================================================\n\nexport type ArdoSocialLinkProps = {\n /** URL to link to */\n href: string\n /** Social icon type */\n icon: \"discord\" | \"github\" | \"linkedin\" | \"npm\" | \"twitter\" | \"youtube\"\n /** Accessible label */\n ariaLabel?: string\n /** Additional CSS classes */\n className?: string\n}\n\nexport function ArdoSocialLink({ href, icon, ariaLabel, className }: ArdoSocialLinkProps) {\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={className ?? navStyles.socialLink}\n aria-label={ariaLabel ?? icon}\n >\n <SocialIcon icon={icon} />\n </a>\n )\n}\n\nconst socialIcons = {\n github: GithubIcon,\n twitter: TwitterIcon,\n discord: MessageCircleIcon,\n linkedin: LinkedinIcon,\n youtube: YoutubeIcon,\n npm: NpmIcon,\n} as const\n\nfunction SocialIcon({ icon }: { icon: keyof typeof socialIcons }) {\n const IconComponent = socialIcons[icon]\n return <IconComponent size={20} />\n}\n","import { style } from \"@vanilla-extract/css\"\n\nimport { vars } from \"./theme/contract.css\"\n\nexport const sidebar = style({\n width: vars.layout.sidebarWidth,\n flexShrink: 0,\n display: \"flex\",\n flexDirection: \"column\",\n padding: `${vars.space.md} ${vars.space.md} ${vars.space.md} 1.25rem`,\n background: \"transparent\",\n \"@media\": {\n \"(max-width: 1024px)\": {\n display: \"none\",\n },\n },\n})\n\nexport const sidebarHeader = style({\n flexShrink: 0,\n marginBottom: vars.space.md,\n position: \"relative\",\n})\n\nexport const sidebarNav = style({\n flex: 1,\n overflowY: \"auto\",\n minHeight: 0,\n})\n\nexport const sidebarList = style({\n listStyle: \"none\",\n})\n\nexport const sidebarList0 = style({})\n\nexport const sidebarList1 = style({\n marginLeft: \"0.75rem\",\n marginTop: \"2px\",\n})\n\nexport const sidebarItem = style({})\n\nexport const sidebarItemHeader = style({\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n})\n\nexport const sidebarLink = style({\n display: \"block\",\n padding: `0.25rem 0.75rem`,\n color: vars.color.textLight,\n textDecoration: \"none\",\n fontSize: vars.fontSize.sm,\n fontWeight: 400,\n borderRadius: vars.radius.base,\n transition: `all ${vars.transition.fast}`,\n selectors: {\n \"&:hover\": {\n color: vars.color.text,\n },\n \"&.active\": {\n color: vars.color.brand,\n background: vars.color.brandSubtle,\n fontWeight: 500,\n },\n },\n})\n\n// Section title (top-level group heading like \"Get started\", \"Organize\")\nexport const sidebarText = style({\n display: \"flex\",\n alignItems: \"center\",\n gap: vars.space.sm,\n padding: `0.375rem 0`,\n marginTop: vars.space.lg,\n color: vars.color.text,\n textDecoration: \"none\",\n fontWeight: 600,\n fontSize: vars.fontSize.sm,\n transition: `all ${vars.transition.fast}`,\n selectors: {\n \"&:hover\": {\n color: vars.color.text,\n },\n \"&.active\": {\n color: vars.color.brand,\n },\n \"li:first-child > div > &\": {\n marginTop: 0,\n },\n },\n})\n\nexport const sidebarTextButton = style({\n width: \"100%\",\n background: \"none\",\n border: \"none\",\n appearance: \"none\",\n WebkitAppearance: \"none\",\n fontFamily: \"inherit\",\n lineHeight: \"inherit\",\n textAlign: \"left\",\n cursor: \"pointer\",\n})\n\nexport const sidebarCollapse = style({\n display: \"flex\",\n alignItems: \"center\",\n alignSelf: \"center\",\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: vars.space.xs,\n color: vars.color.textLighter,\n borderRadius: \"50%\",\n transition: `all ${vars.transition.base}`,\n selectors: {\n \"&:hover\": {\n color: vars.color.text,\n },\n \"&.collapsed\": {\n transform: \"rotate(-90deg)\",\n },\n },\n})\n\nexport const sidebarCollapseWrapper = style({\n display: \"grid\",\n gridTemplateRows: \"1fr\",\n transition: `grid-template-rows ${vars.transition.slow}`,\n selectors: {\n '&[data-collapsed=\"true\"]': {\n gridTemplateRows: \"0fr\",\n },\n },\n})\n\nexport const sidebarCollapseInner = style({\n overflow: \"hidden\",\n minHeight: 0,\n})\n","import {\n Children,\n type ComponentProps,\n createContext,\n isValidElement,\n type ReactElement,\n type ReactNode,\n use,\n useMemo,\n useState,\n} from \"react\"\nimport { NavLink, useLocation } from \"react-router\"\n\nimport type { SidebarItem as SidebarItemType } from \"../config/types\"\n\nimport { useArdoSidebar } from \"../runtime/hooks\"\nimport { ChevronDownIcon } from \"./icons\"\nimport * as styles from \"./Sidebar.css\"\n\n/** Route path type - uses React Router's NavLink 'to' prop type for type-safe routes */\ntype RoutePath = ComponentProps<typeof NavLink>[\"to\"]\n\n// =============================================================================\n// Sidebar Context\n// =============================================================================\n\ntype SidebarContextValue = {\n currentPath: string\n}\n\nconst SidebarContext = createContext<SidebarContextValue>({ currentPath: \"\" })\n\nfunction useSidebarContext() {\n return use(SidebarContext)\n}\n\n// =============================================================================\n// Sidebar Component Types\n// =============================================================================\n\nexport type ArdoSidebarProps = {\n /** Sidebar items (for data-driven approach) */\n items?: SidebarItemType[]\n /** Children for JSX composition (SidebarGroup, SidebarLink) */\n children?: ReactNode\n /** Content rendered above navigation (e.g. search) */\n header?: ReactNode\n /** Additional CSS classes */\n className?: string\n}\n\n// =============================================================================\n// Sidebar Main Component\n// =============================================================================\n\n/**\n * Sidebar component supporting data-driven, JSX composition, and zero-config patterns.\n *\n * When neither `items` nor `children` are provided, automatically renders from\n * the Ardo sidebar context (`virtual:ardo/sidebar`).\n *\n * @example Zero-config (from context)\n * ```tsx\n * <Sidebar />\n * ```\n *\n * @example Data-driven (items prop)\n * ```tsx\n * <Sidebar items={[\n * { text: 'Introduction', link: '/intro' },\n * { text: 'Guide', items: [\n * { text: 'Getting Started', link: '/guide/getting-started' }\n * ]}\n * ]} />\n * ```\n *\n * @example JSX composition\n * ```tsx\n * <Sidebar>\n * <SidebarLink to=\"/intro\">Introduction</SidebarLink>\n * <SidebarGroup title=\"Guide\">\n * <SidebarLink to=\"/guide/getting-started\">Getting Started</SidebarLink>\n * </SidebarGroup>\n * </Sidebar>\n * ```\n */\nexport function ArdoSidebar({ items, children, header, className }: ArdoSidebarProps) {\n const { pathname } = useLocation()\n const contextSidebar = useArdoSidebar()\n const hasCustomChildren = children != null\n const resolvedItems = items ?? (hasCustomChildren ? undefined : contextSidebar)\n const hasResolvedItems = (resolvedItems?.length ?? 0) > 0\n const contextValue = useMemo(() => ({ currentPath: pathname }), [pathname])\n\n return (\n <SidebarContext value={contextValue}>\n <aside className={className ?? styles.sidebar}>\n {header != null && <div className={styles.sidebarHeader}>{header}</div>}\n <nav aria-label=\"Main navigation\" className={styles.sidebarNav}>\n {hasCustomChildren ? (\n <ul className={`${styles.sidebarList} ${styles.sidebarList0}`}>{children}</ul>\n ) : hasResolvedItems ? (\n <SidebarItems items={resolvedItems ?? []} depth={0} />\n ) : null}\n </nav>\n </aside>\n </SidebarContext>\n )\n}\n\n// =============================================================================\n// SidebarGroup Component\n// =============================================================================\n\nexport type ArdoSidebarGroupProps = {\n /** Group title */\n title: string\n /** Optional link for the group title */\n to?: string\n /** Initial collapsed state (default: false) */\n collapsed?: boolean\n /** Whether group is collapsible (default: true if has children) */\n collapsible?: boolean\n /** Children (SidebarLink, nested SidebarGroup) */\n children?: ReactNode\n /** Additional CSS classes */\n className?: string\n}\n\n/**\n * Group component for organizing sidebar links.\n *\n * @example\n * ```tsx\n * <SidebarGroup title=\"Guide\">\n * <SidebarLink to=\"/guide/intro\">Introduction</SidebarLink>\n * <SidebarLink to=\"/guide/setup\">Setup</SidebarLink>\n * </SidebarGroup>\n * ```\n *\n * @example With collapsible state\n * ```tsx\n * <SidebarGroup title=\"Advanced\" collapsed>\n * <SidebarLink to=\"/advanced/config\">Configuration</SidebarLink>\n * </SidebarGroup>\n * ```\n */\nexport function ArdoSidebarGroup({\n title,\n to,\n collapsed: initialCollapsed = false,\n collapsible = true,\n children,\n className,\n}: ArdoSidebarGroupProps) {\n const [collapsed, setCollapsed] = useState(initialCollapsed)\n const { currentPath } = useSidebarContext()\n\n // Check if any child is active\n const hasActiveChild = checkChildrenActive(children, currentPath)\n\n const textClassName = [styles.sidebarText, hasActiveChild && \"child-active\"]\n .filter(Boolean)\n .join(\" \")\n const textButtonClassName = [textClassName, styles.sidebarTextButton].join(\" \")\n\n const hasChildren = Children.count(children) > 0\n const hasTo = (to ?? \"\") !== \"\"\n const canToggle = collapsible && hasChildren\n\n return (\n <li className={className ?? styles.sidebarItem}>\n <div className={styles.sidebarItemHeader}>\n {hasTo ? (\n <NavLink\n to={to ?? \"/\"}\n end\n className={({ isActive }) =>\n [textClassName, isActive && \"active\"].filter(Boolean).join(\" \")\n }\n >\n {title}\n </NavLink>\n ) : (\n <button\n type=\"button\"\n className={textButtonClassName}\n onClick={() => {\n if (canToggle) {\n setCollapsed(!collapsed)\n }\n }}\n >\n {title}\n </button>\n )}\n\n {canToggle && (\n <button\n type=\"button\"\n className={[styles.sidebarCollapse, collapsed && \"collapsed\"].filter(Boolean).join(\" \")}\n onClick={() => {\n setCollapsed(!collapsed)\n }}\n aria-label={collapsed ? \"Expand\" : \"Collapse\"}\n >\n <ChevronDownIcon size={16} />\n </button>\n )}\n </div>\n\n {hasChildren && (\n <div className={styles.sidebarCollapseWrapper} data-collapsed={collapsed}>\n <div className={styles.sidebarCollapseInner}>\n <ul className={`${styles.sidebarList} ${styles.sidebarList1}`}>{children}</ul>\n </div>\n </div>\n )}\n </li>\n )\n}\n\n// =============================================================================\n// SidebarLink Component\n// =============================================================================\n\nexport type ArdoSidebarLinkProps = {\n /** Internal route path (type-safe with React Router's registered routes) */\n to: RoutePath\n /** Link text */\n children: ReactNode\n /** Additional CSS classes */\n className?: string\n}\n\n/**\n * Sidebar navigation link.\n *\n * @example\n * ```tsx\n * <SidebarLink to=\"/guide/getting-started\">Getting Started</SidebarLink>\n * ```\n */\nexport function ArdoSidebarLink({ to, children, className }: ArdoSidebarLinkProps) {\n const baseClassName = className ?? styles.sidebarLink\n return (\n <li className={styles.sidebarItem}>\n <NavLink\n to={to}\n className={({ isActive }) =>\n [baseClassName, isActive && \"active\"].filter(Boolean).join(\" \")\n }\n >\n {children}\n </NavLink>\n </li>\n )\n}\n\n// =============================================================================\n// Internal: Data-driven sidebar rendering\n// =============================================================================\n\ntype SidebarItemsProps = {\n items: SidebarItemType[]\n depth: number\n}\n\nfunction SidebarItems({ items, depth }: SidebarItemsProps) {\n return (\n <ul\n className={`${styles.sidebarList} ${depth === 0 ? styles.sidebarList0 : styles.sidebarList1}`}\n >\n {items.map((item) => (\n <SidebarItemComponent\n key={item.link ?? `${item.text}-${String(depth)}`}\n item={item}\n depth={depth}\n />\n ))}\n </ul>\n )\n}\n\ntype SidebarItemComponentProps = {\n item: SidebarItemType\n depth: number\n}\n\nfunction SidebarItemComponent({ item, depth }: SidebarItemComponentProps) {\n const { currentPath } = useSidebarContext()\n const [collapsed, setCollapsed] = useState(item.collapsed ?? false)\n const childItems = item.items ?? []\n\n const hasChildren = childItems.length > 0\n\n const hasActiveChild =\n hasChildren &&\n childItems.some(\n (child) =>\n child.link === currentPath ||\n child.items?.some((grandchild) => grandchild.link === currentPath)\n )\n const hasItemLink = (item.link ?? \"\") !== \"\"\n\n const linkClassName = [styles.sidebarLink, hasActiveChild && \"child-active\"]\n .filter(Boolean)\n .join(\" \")\n\n const textClassName = [styles.sidebarText, hasActiveChild && \"child-active\"]\n .filter(Boolean)\n .join(\" \")\n const textButtonClassName = [textClassName, styles.sidebarTextButton].join(\" \")\n\n return (\n <li className={styles.sidebarItem}>\n <div className={styles.sidebarItemHeader}>\n {hasItemLink ? (\n <NavLink\n to={item.link ?? \"/\"}\n className={({ isActive }) =>\n [linkClassName, isActive && \"active\"].filter(Boolean).join(\" \")\n }\n >\n {item.text}\n </NavLink>\n ) : (\n <button\n type=\"button\"\n className={textButtonClassName}\n onClick={() => {\n if (hasChildren) {\n setCollapsed(!collapsed)\n }\n }}\n >\n {item.text}\n </button>\n )}\n\n {hasChildren && (\n <button\n type=\"button\"\n className={[styles.sidebarCollapse, collapsed && \"collapsed\"].filter(Boolean).join(\" \")}\n onClick={() => {\n setCollapsed(!collapsed)\n }}\n aria-label={collapsed ? \"Expand\" : \"Collapse\"}\n >\n <ChevronDownIcon size={16} />\n </button>\n )}\n </div>\n\n {hasChildren && (\n <div className={styles.sidebarCollapseWrapper} data-collapsed={collapsed}>\n <div className={styles.sidebarCollapseInner}>\n <SidebarItems items={childItems} depth={depth + 1} />\n </div>\n </div>\n )}\n </li>\n )\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\nfunction isSidebarChildActive(child: ReactElement, currentPath: string): boolean {\n if (isSidebarLinkElement(child)) {\n return child.props.to === currentPath\n }\n if (isSidebarGroupElement(child)) {\n const groupProps = child.props\n return (\n groupProps.to === currentPath ||\n (groupProps.children != null && checkChildrenActive(groupProps.children, currentPath))\n )\n }\n return false\n}\n\nfunction checkChildrenActive(children: ReactNode, currentPath: string): boolean {\n return Children.toArray(children).some(\n (child) => isValidElement(child) && isSidebarChildActive(child, currentPath)\n )\n}\n\nfunction isSidebarLinkElement(child: ReactElement): child is ReactElement<ArdoSidebarLinkProps> {\n return child.type === ArdoSidebarLink\n}\n\nfunction isSidebarGroupElement(child: ReactElement): child is ReactElement<ArdoSidebarGroupProps> {\n return child.type === ArdoSidebarGroup\n}\n","import { cloneElement, isValidElement, type ReactNode, useMemo } from \"react\"\nimport { Outlet, useLocation } from \"react-router\"\n\nimport type { ArdoConfig, SidebarItem } from \"../config/types\"\n\nimport { ArdoProvider, type ArdoSiteConfig, ArdoSiteConfigProvider } from \"../runtime/hooks\"\nimport { ArdoSearch } from \"./components/Search\"\nimport { ArdoFooter, type ArdoFooterProps } from \"./Footer\"\nimport { ArdoHeader, type ArdoHeaderProps } from \"./Header\"\nimport { ArdoLayout } from \"./Layout\"\nimport * as layoutStyles from \"./Layout.css\"\nimport { ArdoSidebar, type ArdoSidebarProps } from \"./Sidebar\"\n\n// =============================================================================\n// ArdoRoot Component\n// =============================================================================\n\nexport type ArdoRootProps = {\n /** Ardo config (from virtual:ardo/config) */\n config: ArdoConfig\n /** Sidebar data (from virtual:ardo/sidebar) */\n sidebar: SidebarItem[]\n /** Custom header element (overrides auto-generated header) */\n header?: ReactNode\n /** Custom sidebar element (overrides auto-generated sidebar) */\n sidebarContent?: ReactNode\n /** Custom footer element (overrides auto-generated footer) */\n footer?: ReactNode\n /** Props passed to auto-generated ArdoHeader (ignored when header is provided) */\n headerProps?: ArdoHeaderProps\n /** Props passed to auto-generated ArdoSidebar (ignored when sidebarContent is provided) */\n sidebarProps?: ArdoSidebarProps\n /** Props passed to auto-generated ArdoFooter (ignored when footer is provided) */\n footerProps?: ArdoFooterProps\n /** Edit link configuration (applied site-wide via ArdoSiteConfig) */\n editLink?: { pattern: string; text?: string }\n /** Last updated configuration (applied site-wide via ArdoSiteConfig) */\n lastUpdated?: { enabled?: boolean; text?: string; formatOptions?: Intl.DateTimeFormatOptions }\n /** TOC label (applied site-wide via ArdoSiteConfig) */\n tocLabel?: string\n /** Additional CSS classes for the layout */\n className?: string\n /** Content to render (defaults to <Outlet />) */\n children?: ReactNode\n}\n\n/**\n * All-in-one root component that combines ArdoProvider, Layout, Header,\n * Sidebar, Footer, and homepage detection into a single component.\n *\n * @example Minimal usage\n * ```tsx\n * import config from \"virtual:ardo/config\"\n * import sidebar from \"virtual:ardo/sidebar\"\n *\n * export default function Root() {\n * return <ArdoRoot config={config} sidebar={sidebar} />\n * }\n * ```\n *\n * @example With custom nav and footer overrides\n * ```tsx\n * export default function Root() {\n * return (\n * <ArdoRoot\n * config={config}\n * sidebar={sidebar}\n * headerProps={{\n * nav: (\n * <Nav>\n * <NavLink to=\"/guide\">Guide</NavLink>\n * <NavLink to=\"/api\">API</NavLink>\n * </Nav>\n * ),\n * }}\n * footerProps={{\n * message: \"Released under the MIT License.\",\n * }}\n * editLink={{\n * pattern: \"https://github.com/user/repo/edit/main/docs/:path\",\n * text: \"Edit this page on GitHub\",\n * }}\n * lastUpdated={{ enabled: true }}\n * />\n * )\n * }\n * ```\n */\nfunction resolveRootHeader(\n header: ReactNode,\n headerProps: ArdoHeaderProps | undefined,\n mobileMenuContent: ReactNode\n): ReactNode {\n if (header != null) {\n return enhanceHeaderWithMobileMenuContent(header, mobileMenuContent)\n }\n return (\n <ArdoHeader\n {...headerProps}\n mobileMenuContent={headerProps?.mobileMenuContent ?? mobileMenuContent}\n />\n )\n}\n\nfunction resolveLayoutClassName(className: string | undefined, isHomePage: boolean): string {\n if (className != null) return className\n return isHomePage ? `${layoutStyles.layout} ${layoutStyles.home}` : layoutStyles.layout\n}\n\nexport function ArdoRoot({\n config,\n sidebar,\n header,\n sidebarContent,\n footer,\n headerProps,\n sidebarProps,\n footerProps,\n editLink,\n lastUpdated,\n tocLabel,\n className,\n children,\n}: ArdoRootProps) {\n const location = useLocation()\n const isHomePage = location.pathname === \"/\" || location.pathname === \"\"\n const searchPlaceholder = headerProps?.searchPlaceholder\n const showSearch = headerProps?.search !== false\n const sidebarSearch =\n !isHomePage && showSearch ? <ArdoSearch placeholder={searchPlaceholder} /> : undefined\n const resolvedSidebar = isHomePage\n ? undefined\n : wrapSidebarWithSearch(sidebarContent, sidebarProps, sidebarSearch)\n const resolvedHeader = resolveRootHeader(\n header,\n { ...headerProps, search: false },\n isHomePage ? undefined : resolvedSidebar\n )\n\n const siteConfig = useMemo<ArdoSiteConfig>(\n () => ({ editLink, lastUpdated, tocLabel }),\n [editLink, lastUpdated, tocLabel]\n )\n\n const content = (\n <ArdoProvider config={config} sidebar={sidebar}>\n <ArdoLayout\n className={resolveLayoutClassName(className, isHomePage)}\n header={resolvedHeader}\n sidebar={resolvedSidebar}\n footer={footer ?? <ArdoFooter {...footerProps} />}\n >\n {children ?? <Outlet />}\n </ArdoLayout>\n </ArdoProvider>\n )\n\n const hasSiteConfig =\n editLink !== undefined || lastUpdated !== undefined || (tocLabel ?? \"\") !== \"\"\n return hasSiteConfig ? (\n <ArdoSiteConfigProvider value={siteConfig}>{content}</ArdoSiteConfigProvider>\n ) : (\n content\n )\n}\n\n/**\n * Wraps sidebar content with a search field header.\n * If the user provides custom sidebarContent (which is typically an <ArdoSidebar>),\n * we clone it and inject the search as its `header` prop.\n * Otherwise we create a default <ArdoSidebar> with search.\n */\nfunction wrapSidebarWithSearch(\n sidebarContent: ReactNode | undefined,\n sidebarProps: ArdoSidebarProps | undefined,\n search: ReactNode | undefined\n): ReactNode {\n if (sidebarContent == null) {\n return <ArdoSidebar {...sidebarProps} header={search} />\n }\n\n // If sidebarContent is an ArdoSidebar element, clone it with the search header\n if (isValidElement<ArdoSidebarProps>(sidebarContent) && sidebarContent.type === ArdoSidebar) {\n return cloneElement(sidebarContent, {\n header: sidebarContent.props.header ?? search,\n })\n }\n\n // Fallback: wrap custom content in an ArdoSidebar with search\n return <ArdoSidebar header={search}>{sidebarContent}</ArdoSidebar>\n}\n\nfunction enhanceHeaderWithMobileMenuContent(\n header: ReactNode,\n mobileMenuContent: ReactNode\n): ReactNode {\n if (!isValidElement<ArdoHeaderProps>(header) || header.type !== ArdoHeader) {\n return header\n }\n\n const existingMobileMenuContent = header.props.mobileMenuContent\n if (existingMobileMenuContent !== undefined) {\n return header\n }\n\n return cloneElement(header, { mobileMenuContent })\n}\n","import { globalStyle, style } from \"@vanilla-extract/css\"\n\nimport { fadeInUp } from \"../theme/animations.css\"\nimport { vars } from \"../theme/contract.css\"\n\nexport const features = style({\n padding: \"80px 24px\",\n background: vars.color.bgSoft,\n borderTop: `1px solid ${vars.color.border}`,\n \"@media\": {\n \"(max-width: 768px)\": {\n padding: \"48px 16px\",\n },\n },\n})\n\nexport const featuresHeader = style({\n textAlign: \"center\",\n marginBottom: \"48px\",\n})\n\nexport const featuresTitle = style({\n fontSize: \"36px\",\n fontWeight: 700,\n letterSpacing: \"-0.02em\",\n marginBottom: \"12px\",\n \"@media\": {\n \"(max-width: 768px)\": {\n fontSize: \"28px\",\n },\n },\n})\n\nexport const featuresSubtitle = style({\n fontSize: \"18px\",\n color: vars.color.textLight,\n maxWidth: \"560px\",\n margin: \"0 auto\",\n \"@media\": {\n \"(max-width: 768px)\": {\n fontSize: \"16px\",\n },\n },\n})\n\nexport const featuresContainer = style({\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(260px, 1fr))\",\n gap: \"20px\",\n maxWidth: \"1100px\",\n margin: \"0 auto\",\n})\n\nexport const feature = style({\n padding: \"28px\",\n background: vars.color.bg,\n borderRadius: vars.radius.lg,\n border: `1px solid ${vars.color.border}`,\n boxShadow: vars.color.shadowSm,\n transition: `all ${vars.transition.base}`,\n animation: `${fadeInUp} 0.5s ease both`,\n selectors: {\n \"&:hover\": {\n borderColor: \"oklch(0.48 0.15 170 / 0.4)\",\n boxShadow: `${vars.color.shadowMd}, 0 0 0 1px oklch(0.48 0.15 170 / 0.1)`,\n },\n },\n \"@media\": {\n \"(hover: hover)\": {\n selectors: {\n \"&:hover\": {\n transform: \"translateY(-3px)\",\n },\n },\n },\n \"(prefers-reduced-motion: reduce)\": {\n animation: \"none\",\n selectors: {\n \"&:hover\": {\n transform: \"none\",\n },\n },\n },\n },\n})\n\n// Stagger animation delays\nfor (let i = 1; i <= 6; i++) {\n globalStyle(`${featuresContainer} ${feature}:nth-child(${i})`, {\n animationDelay: `${(i - 1) * 80}ms`,\n })\n}\n\nexport const featureIcon = style({\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"48px\",\n height: \"48px\",\n marginBottom: \"16px\",\n background: vars.color.brandSubtle,\n border: \"1px solid oklch(0.48 0.15 170 / 0.12)\",\n borderRadius: \"50%\",\n color: vars.color.brand,\n transition: `all ${vars.transition.base}`,\n})\n\nglobalStyle(`${feature}:hover ${featureIcon}`, {\n background: vars.color.brand,\n color: \"white\",\n borderColor: \"transparent\",\n})\n\nexport const featureTitle = style({\n fontSize: \"17px\",\n fontWeight: 600,\n marginBottom: \"10px\",\n letterSpacing: \"-0.01em\",\n})\n\nexport const featureDetails = style({\n fontSize: \"14px\",\n color: vars.color.textLight,\n lineHeight: 1.6,\n marginBottom: \"12px\",\n})\n\nexport const featureLink = style({\n fontSize: \"14px\",\n fontWeight: 500,\n color: vars.color.brand,\n textDecoration: \"none\",\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"4px\",\n transition: `gap ${vars.transition.fast}`,\n selectors: {\n \"&:hover\": {\n gap: \"8px\",\n },\n \"&::after\": {\n content: '\"\\\\2192\"',\n },\n },\n})\n","import type { ReactNode } from \"react\"\n\nimport { Link } from \"react-router\"\n\nimport * as styles from \"./Features.css\"\n\nexport type ArdoFeaturesProps = {\n /** Feature cards as children */\n children: ReactNode\n /** Section title */\n title?: string\n /** Section subtitle */\n subtitle?: string\n /** Additional CSS class */\n className?: string\n}\n\nexport type ArdoFeatureCardProps = {\n /** Feature title */\n title: string\n /** Icon as ReactNode (emoji, Lucide icon component, or any JSX) */\n icon?: ReactNode\n /** Feature description as children */\n children: ReactNode\n /** Optional link */\n link?: string\n /** Link text (defaults to \"Learn more\") */\n linkText?: string\n /** Additional CSS class */\n className?: string\n}\n\n/**\n * Individual feature card component.\n *\n * @example\n * ```tsx\n * import { Zap } from \"lucide-react\"\n *\n * <ArdoFeatureCard title=\"Fast\" icon={<Zap size={28} />}>\n * Lightning fast builds with Vite\n * </ArdoFeatureCard>\n * ```\n */\nexport function ArdoFeatureCard({\n title,\n icon,\n children,\n link,\n linkText,\n className,\n}: ArdoFeatureCardProps) {\n const hasIcon = icon != null\n const hasLink = (link ?? \"\") !== \"\"\n const resolvedLinkText = linkText ?? \"Learn more\"\n\n return (\n <div className={className ?? styles.feature}>\n {hasIcon && <div className={styles.featureIcon}>{icon}</div>}\n <h3 className={styles.featureTitle}>{title}</h3>\n <p className={styles.featureDetails}>{children}</p>\n {hasLink && (\n <Link to={link ?? \"\"} className={styles.featureLink}>\n {resolvedLinkText}\n </Link>\n )}\n </div>\n )\n}\n\n/**\n * Features grid component for displaying multiple feature cards.\n *\n * @example\n * ```tsx\n * <ArdoFeatures title=\"Key Features\" subtitle=\"Everything you need\">\n * <ArdoFeatureCard title=\"React-First\" icon=\"⚛️\">Built on React.</ArdoFeatureCard>\n * <ArdoFeatureCard title=\"Fast\" icon=\"⚡\">Powered by Vite.</ArdoFeatureCard>\n * </ArdoFeatures>\n * ```\n */\nexport function ArdoFeatures({ children, title, subtitle, className }: ArdoFeaturesProps) {\n const hasTitle = (title ?? \"\") !== \"\"\n const hasSubtitle = (subtitle ?? \"\") !== \"\"\n const hasHeader = hasTitle || hasSubtitle\n\n return (\n <section className={className ?? styles.features}>\n {hasHeader && (\n <div className={styles.featuresHeader}>\n {hasTitle && <h2 className={styles.featuresTitle}>{title}</h2>}\n {hasSubtitle && <p className={styles.featuresSubtitle}>{subtitle}</p>}\n </div>\n )}\n <div className={styles.featuresContainer}>{children}</div>\n </section>\n )\n}\n","import { globalStyle, style } from \"@vanilla-extract/css\"\n\nimport { fadeInUp } from \"../theme/animations.css\"\nimport { vars } from \"../theme/contract.css\"\n\nexport const hero = style({\n padding: \"100px 24px 80px\",\n textAlign: \"center\",\n position: \"relative\",\n overflow: \"hidden\",\n selectors: {\n \"&::before\": {\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n background: `radial-gradient(ellipse 60% 50% at 30% 0%, oklch(0.48 0.15 200 / 0.06) 0%, transparent 60%), radial-gradient(ellipse 80% 50% at 70% -10%, oklch(0.48 0.15 170 / 0.12) 0%, transparent 70%), linear-gradient(180deg, ${vars.color.bg} 0%, ${vars.color.bgSoft} 100%)`,\n pointerEvents: \"none\",\n },\n \".dark &::before\": {\n background: `radial-gradient(ellipse 60% 50% at 30% 0%, oklch(0.65 0.16 200 / 0.1) 0%, transparent 60%), radial-gradient(ellipse 80% 50% at 70% -10%, oklch(0.65 0.16 170 / 0.2) 0%, transparent 70%), linear-gradient(180deg, ${vars.color.bg} 0%, ${vars.color.bgSoft} 100%)`,\n },\n },\n \"@media\": {\n \"(max-width: 768px)\": {\n padding: \"60px 20px\",\n },\n },\n})\n\nexport const heroContainer = style({\n maxWidth: \"800px\",\n margin: \"0 auto\",\n position: \"relative\",\n zIndex: 1,\n})\n\nexport const heroAnimate = style({\n animation: `${fadeInUp} 0.6s ease both`,\n \"@media\": {\n \"(prefers-reduced-motion: reduce)\": {\n animation: \"none\",\n },\n },\n})\n\nglobalStyle(`${hero} img`, {\n maxWidth: \"180px\",\n marginBottom: \"40px\",\n filter: \"drop-shadow(0 4px 20px oklch(0.48 0.15 170 / 0.15))\",\n})\n\nexport const heroVersion = style({\n display: \"inline-block\",\n padding: \"4px 14px\",\n fontSize: \"13px\",\n fontWeight: 600,\n color: vars.color.brand,\n background: vars.color.brandSubtle,\n border: \"1px solid oklch(0.48 0.15 170 / 0.15)\",\n borderRadius: \"999px\",\n marginBottom: \"16px\",\n letterSpacing: \"0.02em\",\n})\n\nexport const heroName = style({\n fontSize: \"64px\",\n fontWeight: 800,\n background: vars.color.brandGradient,\n WebkitBackgroundClip: \"text\",\n WebkitTextFillColor: \"transparent\",\n backgroundClip: \"text\",\n letterSpacing: \"-0.03em\",\n lineHeight: 1.1,\n \"@media\": {\n \"(max-width: 768px)\": {\n fontSize: \"40px\",\n },\n },\n})\n\nexport const heroText = style({\n fontSize: \"48px\",\n fontWeight: 700,\n marginTop: \"8px\",\n letterSpacing: \"-0.02em\",\n lineHeight: 1.15,\n \"@media\": {\n \"(max-width: 768px)\": {\n fontSize: \"28px\",\n },\n },\n})\n\nexport const heroTagline = style({\n fontSize: \"18px\",\n color: vars.color.textLight,\n marginTop: \"24px\",\n maxWidth: \"560px\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n lineHeight: 1.65,\n \"@media\": {\n \"(max-width: 768px)\": {\n fontSize: \"16px\",\n },\n },\n})\n\nexport const heroActions = style({\n display: \"flex\",\n justifyContent: \"center\",\n gap: \"16px\",\n marginTop: \"40px\",\n flexWrap: \"wrap\",\n})\n\nexport const heroAction = style({\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"8px\",\n padding: \"14px 28px\",\n fontSize: \"15px\",\n fontWeight: 600,\n textDecoration: \"none\",\n borderRadius: vars.radius.base,\n transition: `all ${vars.transition.base}`,\n})\n\nexport const heroActionBrand = style({\n background: vars.color.brand,\n color: \"white\",\n boxShadow: \"0 4px 14px oklch(0.48 0.15 170 / 0.3)\",\n selectors: {\n \"&:hover\": {\n background: vars.color.brandDark,\n boxShadow: \"0 6px 20px oklch(0.48 0.15 170 / 0.4)\",\n },\n },\n \"@media\": {\n \"(hover: hover)\": {\n selectors: {\n \"&:hover\": {\n transform: \"translateY(-2px)\",\n },\n },\n },\n \"(prefers-reduced-motion: reduce)\": {\n selectors: {\n \"&:hover\": {\n transform: \"none\",\n },\n },\n },\n },\n})\n\nexport const heroActionAlt = style({\n background: vars.color.bg,\n color: vars.color.text,\n border: `1px solid ${vars.color.border}`,\n selectors: {\n \"&:hover\": {\n borderColor: vars.color.brand,\n color: vars.color.brand,\n },\n },\n})\n","import type { ComponentProps, ReactNode } from \"react\"\n\nimport { Link } from \"react-router\"\n\nimport * as styles from \"./Hero.css\"\n\n/** Internal route path from React Router */\ntype RoutePath = ComponentProps<typeof Link>[\"to\"]\n\nexport type ArdoHeroAction = {\n /** Button text */\n text: string\n /** Link destination - internal route path or external URL */\n link: RoutePath\n /** Visual theme: \"brand\" for primary, \"alt\" for secondary */\n theme?: \"alt\" | \"brand\"\n /** Optional icon as ReactNode (e.g. Lucide icon component) */\n icon?: ReactNode\n}\n\nexport type ArdoHeroImage = {\n /** Image for light mode */\n light: string\n /** Image for dark mode */\n dark?: string\n /** Alt text for the image */\n alt?: string\n}\n\nexport type ArdoHeroProps = {\n /** Large title displayed prominently */\n name?: string\n /** Secondary text below the name */\n text?: string\n /** Descriptive tagline */\n tagline?: string\n /** Hero image - can be a string URL or an object with light/dark variants */\n image?: ArdoHeroImage | string\n /** Call-to-action buttons */\n actions?: ArdoHeroAction[]\n /** Additional CSS class */\n className?: string\n /** Version string displayed as a pill badge above the name */\n version?: string\n}\n\n/**\n * Hero section component for landing pages.\n *\n * @example\n * ```tsx\n * import { ArrowRight, Github } from \"lucide-react\"\n *\n * <Hero\n * name=\"Ardo\"\n * text=\"React-first Documentation\"\n * tagline=\"Build beautiful documentation sites with React.\"\n * image=\"/logo.svg\"\n * actions={[\n * { text: \"Get Started\", link: \"/guide/getting-started\", theme: \"brand\", icon: <ArrowRight size={16} /> },\n * { text: \"GitHub\", link: \"https://github.com/...\", theme: \"alt\", icon: <Github size={16} /> }\n * ]}\n * />\n * ```\n */\nfunction HeroActionButton({ action }: { action: ArdoHeroAction }) {\n const link = action.link\n const isExternal =\n typeof link === \"string\" && (link.startsWith(\"http://\") || link.startsWith(\"https://\"))\n const cls = `${styles.heroAction} ${action.theme === \"alt\" ? styles.heroActionAlt : styles.heroActionBrand}`\n const content = (\n <>\n {action.icon}\n {action.text}\n </>\n )\n\n if (isExternal) {\n return (\n <a href={link} className={cls} target=\"_blank\" rel=\"noopener noreferrer\">\n {content}\n </a>\n )\n }\n return (\n <Link to={link} className={cls}>\n {content}\n </Link>\n )\n}\n\nfunction resolveHeroImage(image: ArdoHeroProps[\"image\"], name: string | undefined) {\n const url = typeof image === \"string\" ? image : (image?.light ?? \"\")\n const alt = typeof image === \"string\" ? (name ?? \"\") : (image?.alt ?? name ?? \"\")\n return { url, alt }\n}\n\nexport function ArdoHero({\n name,\n text,\n tagline,\n image,\n actions,\n className,\n version,\n}: ArdoHeroProps) {\n const img = resolveHeroImage(image, name)\n\n return (\n <section className={className ?? styles.hero}>\n <div className={`${styles.heroContainer} ${styles.heroAnimate}`}>\n {img.url !== \"\" && (\n <div>\n <img src={img.url} alt={img.alt} />\n </div>\n )}\n <div>\n {(version ?? \"\") !== \"\" && <span className={styles.heroVersion}>v{version}</span>}\n {(name ?? \"\") !== \"\" && <h1 className={styles.heroName}>{name}</h1>}\n {(text ?? \"\") !== \"\" && <p className={styles.heroText}>{text}</p>}\n {(tagline ?? \"\") !== \"\" && <p className={styles.heroTagline}>{tagline}</p>}\n {(actions?.length ?? 0) > 0 && (\n <div className={styles.heroActions}>\n {actions?.map((action) => {\n const key =\n typeof action.link === \"string\" ? `${action.link}-${action.text}` : action.text\n return <HeroActionButton key={key} action={action} />\n })}\n </div>\n )}\n </div>\n </div>\n </section>\n )\n}\n","import type { ReactNode } from \"react\"\n\nimport { Link } from \"react-router\"\n\nimport { useArdoConfig, useArdoPageData } from \"../runtime/hooks\"\nimport { ArdoFeatureCard, ArdoFeatures } from \"./components/Features\"\nimport * as heroStyles from \"./components/Hero.css\"\nimport { ArdoFooter, type ArdoFooterProps } from \"./Footer\"\nimport { ArdoHeader, type ArdoHeaderProps } from \"./Header\"\nimport * as layoutStyles from \"./Layout.css\"\n\nexport type ArdoHomePageProps = {\n /** Props passed to the Header component */\n headerProps?: ArdoHeaderProps\n /** Props passed to the Footer component */\n footerProps?: ArdoFooterProps\n /** Custom header element (overrides auto-generated header) */\n header?: ReactNode\n /** Custom footer element (overrides auto-generated footer) */\n footer?: ReactNode\n}\n\nfunction HomeHeroSection({\n hero,\n fallbackTitle,\n}: {\n hero: NonNullable<ReturnType<typeof useArdoPageData>>[\"frontmatter\"][\"hero\"]\n fallbackTitle: string\n}) {\n if (hero === undefined) return null\n const heroImage = hero.image\n const heroActions = hero.actions ?? []\n const heroName = hero.name ?? \"\"\n return (\n <section className={heroStyles.hero}>\n <div className={heroStyles.heroContainer}>\n {heroImage !== undefined && (\n <div>\n <img\n src={typeof heroImage === \"string\" ? heroImage : heroImage.light}\n alt={heroName !== \"\" ? heroName : fallbackTitle}\n />\n </div>\n )}\n <div>\n {heroName !== \"\" && <h1 className={heroStyles.heroName}>{heroName}</h1>}\n {(hero.text ?? \"\") !== \"\" && <p className={heroStyles.heroText}>{hero.text}</p>}\n {(hero.tagline ?? \"\") !== \"\" && <p className={heroStyles.heroTagline}>{hero.tagline}</p>}\n {heroActions.length > 0 && (\n <div className={heroStyles.heroActions}>\n {heroActions.map((action) => (\n <Link\n key={`${action.link}-${action.text}`}\n to={action.link}\n className={`${heroStyles.heroAction} ${action.theme === \"alt\" ? heroStyles.heroActionAlt : heroStyles.heroActionBrand}`}\n >\n {action.text}\n </Link>\n ))}\n </div>\n )}\n </div>\n </div>\n </section>\n )\n}\n\nfunction HomeFeaturesSection({\n features,\n}: {\n features: NonNullable<ReturnType<typeof useArdoPageData>>[\"frontmatter\"][\"features\"]\n}) {\n const safeFeatures = features ?? []\n if (safeFeatures.length === 0) return null\n return (\n <ArdoFeatures>\n {safeFeatures.map((feature) => (\n <ArdoFeatureCard\n key={feature.link ?? feature.title}\n title={feature.title}\n icon={feature.icon}\n link={feature.link}\n linkText={feature.linkText}\n >\n {feature.details}\n </ArdoFeatureCard>\n ))}\n </ArdoFeatures>\n )\n}\n\nexport function ArdoHomePage({ headerProps, footerProps, header, footer }: ArdoHomePageProps = {}) {\n const pageData = useArdoPageData()\n const config = useArdoConfig()\n\n return (\n <div className={layoutStyles.home}>\n {header ?? <ArdoHeader title={config.title} {...headerProps} />}\n <main className={layoutStyles.homeMain}>\n <HomeHeroSection hero={pageData?.frontmatter.hero} fallbackTitle={config.title} />\n <HomeFeaturesSection features={pageData?.frontmatter.features} />\n </main>\n {footer ?? <ArdoFooter {...footerProps} />}\n </div>\n )\n}\n","import { type ComponentProps, createContext, type ReactNode, use, useMemo, useState } from \"react\"\nimport { NavLink as RouterNavLink } from \"react-router\"\n\nimport * as styles from \"./Nav.css\"\n\n/** Route path type - uses React Router's NavLink 'to' prop type for type-safe routes */\ntype RoutePath = ComponentProps<typeof RouterNavLink>[\"to\"]\n\n// Nav context for shared state\ntype NavContextValue = {\n mobileMenuOpen: boolean\n setMobileMenuOpen: (open: boolean) => void\n}\n\nconst NavContext = createContext<NavContextValue | null>(null)\n\nfunction useNavContext() {\n return use(NavContext)\n}\n\n// =============================================================================\n// Nav Component\n// =============================================================================\n\nexport type ArdoNavProps = {\n children?: ReactNode\n className?: string\n}\n\n/**\n * Navigation container component for composing navigation links.\n *\n * @example\n * ```tsx\n * <Nav>\n * <NavLink to=\"/guide\">Guide</NavLink>\n * <NavLink to=\"/api\">API</NavLink>\n * <NavLink href=\"https://github.com/...\">GitHub</NavLink>\n * </Nav>\n * ```\n */\nexport function ArdoNav({ children, className }: ArdoNavProps) {\n return <nav className={className ?? styles.nav}>{children}</nav>\n}\n\n// =============================================================================\n// NavLink Component\n// =============================================================================\n\nexport type ArdoNavLinkProps = {\n /** Internal route path (type-safe with React Router's registered routes) */\n to?: RoutePath\n /** External URL (uses anchor tag) */\n href?: string\n /** Link text or children */\n children: ReactNode\n /** Additional CSS classes */\n className?: string\n /** Active state match pattern */\n activeMatch?: string\n}\n\n/**\n * Navigation link component supporting both internal routes and external URLs.\n *\n * @example\n * ```tsx\n * // Internal link\n * <NavLink to=\"/guide\">Guide</NavLink>\n *\n * // External link\n * <NavLink href=\"https://github.com/...\">GitHub</NavLink>\n * ```\n */\nexport function ArdoNavLink({\n to,\n href,\n children,\n className,\n activeMatch: _activeMatch,\n}: ArdoNavLinkProps) {\n const navContext = useNavContext()\n const baseClassName = className ?? styles.navLink\n const hasHref = (href ?? \"\") !== \"\"\n const hasTo = to !== undefined\n\n // Handle click for mobile menu\n const handleClick = () => {\n navContext?.setMobileMenuOpen(false)\n }\n\n // External link\n if (hasHref) {\n return (\n <a\n href={href ?? \"\"}\n className={baseClassName}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={handleClick}\n >\n {children}\n </a>\n )\n }\n\n // Internal link\n if (hasTo) {\n return (\n <RouterNavLink\n to={to}\n className={({ isActive }: { isActive: boolean }) =>\n [baseClassName, isActive && \"active\"].filter(Boolean).join(\" \")\n }\n onClick={handleClick}\n >\n {children}\n </RouterNavLink>\n )\n }\n\n // Text-only (no link)\n return <span className={baseClassName}>{children}</span>\n}\n\n// =============================================================================\n// NavProvider Component\n// =============================================================================\n\nexport type NavProviderProps = {\n children: ReactNode\n}\n\n/**\n * Provider for Nav context (mobile menu state).\n * Used internally by Header component.\n */\nexport function NavProvider({ children }: NavProviderProps) {\n const [mobileMenuOpen, setMobileMenuOpen] = useState(false)\n const contextValue = useMemo(() => ({ mobileMenuOpen, setMobileMenuOpen }), [mobileMenuOpen])\n\n return <NavContext value={contextValue}>{children}</NavContext>\n}\n\n// Export context hook for external use\nexport { useNavContext }\n"],"mappings":"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"}