@geenius/docs 0.9.0 → 0.11.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.
- package/CHANGELOG.md +12 -0
- package/package.json +7 -7
- package/packages/react/dist/index.js +201 -148
- package/packages/react/dist/index.js.map +1 -1
- package/packages/react-css/dist/index.css +30 -18
- package/packages/react-css/dist/index.css.map +1 -1
- package/packages/shared/dist/index.d.ts +49 -4
- package/packages/shared/dist/index.js +51 -5
- package/packages/shared/dist/index.js.map +1 -1
- package/packages/solidjs/dist/index.js +190 -143
- package/packages/solidjs/dist/index.js.map +1 -1
- package/packages/solidjs-css/dist/index.css +30 -18
- package/packages/solidjs-css/dist/index.css.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils.ts","../src/components/Breadcrumbs.tsx","../../shared/src/utilities.ts","../src/components/DocPage.tsx","../src/components/DocSearch.tsx","../src/components/DocSidebar.tsx","../src/components/TableOfContents.tsx","../src/components/DocsLayout.tsx","../src/components/EditButton.tsx","../src/components/PageNavigation.tsx","../src/components/VersionSelector.tsx","../src/hooks/useDocSearch.ts","../src/hooks/useDocs.ts","../src/hooks/useDocsAdmin.ts","../src/hooks/useTableOfContents.ts","../src/pages/DocSearchPage.tsx","../src/pages/DocsAdminPage.tsx","../src/pages/DocsIndexPage.tsx","../src/pages/DocViewPage.tsx"],"names":["jsx","jsxs","useState","useCallback","motion","AnimatePresence","useRef","useEffect","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module docsReactUtils\n * @package @geenius/docs/react\n * @description Provides the Tailwind-aware class composition helper for the\n * React docs variant so exported components can expose stable `className`\n * extension points without duplicating merge logic.\n */\n\nimport { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\n/**\n * Merges conditional class fragments while preserving Tailwind conflict\n * resolution.\n *\n * @param inputs - Class fragments that may include arrays, objects, and falsy values.\n * @returns A merged Tailwind-safe class string.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs))\n}\n","/**\n * @module reactBreadcrumbs\n * @package @geenius/docs/react\n * @description Renders breadcrumb navigation for the React docs variant using\n * the shared docs route metadata and Tailwind styling contract.\n */\n\nimport type { BreadcrumbItem } from '@geenius/docs/shared'\nimport React from 'react'\nimport { cn } from '../lib/utils'\n\ninterface BreadcrumbsProps {\n items: BreadcrumbItem[]\n className?: string\n}\n\n/**\n * Renders the current docs breadcrumb trail.\n *\n * @param props - Breadcrumb items describing the current page ancestry.\n * @returns Breadcrumb navigation or `null` when there are no items to show.\n */\nexport function Breadcrumbs({\n items,\n className,\n}: BreadcrumbsProps): React.JSX.Element | null {\n if (items.length === 0) return null\n\n return (\n <nav className={cn('flex items-center gap-1.5 text-sm', className)} aria-label=\"Breadcrumb\">\n {items.map((item, idx) => (\n <React.Fragment key={`${item.href}-${item.title}`}>\n {idx > 0 && (\n <svg\n aria-hidden=\"true\"\n className=\"h-3.5 w-3.5 shrink-0 text-white/20\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path d=\"M6 4l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n )}\n {idx === items.length - 1 ? (\n <span className=\"truncate text-white/60\">{item.title}</span>\n ) : (\n <a\n href={item.href}\n className=\"truncate text-white/40 transition-colors hover:text-white/70\"\n >\n {item.title}\n </a>\n )}\n </React.Fragment>\n ))}\n </nav>\n )\n}\n","/**\n * @module docsUtilities\n * @package @geenius/docs/shared\n * @description Hosts the framework-agnostic docs helpers used by the shared\n * barrel and provider implementations for search, slugging, breadcrumbs, table\n * of contents extraction, and default config resolution.\n */\n\nimport type {\n BreadcrumbItem,\n DocPage,\n DocSection,\n DocsConfig,\n SearchResult,\n TocItem,\n} from './types'\n\nfunction toTocLevel(level: number): TocItem['level'] {\n if (level === 2 || level === 3 || level === 4) {\n return level\n }\n\n return 4\n}\n\n/**\n * Extracts a nested table of contents from Markdown heading lines.\n *\n * @param mdxContent - Markdown or MDX content to parse.\n * @returns A nested heading tree containing only level 2 through 4 headings.\n */\nexport function extractToc(mdxContent: string): TocItem[] {\n const headingRegex = /^(#{2,4})\\s+(.+)$/gm\n const items: TocItem[] = []\n let match = headingRegex.exec(mdxContent)\n\n while (match !== null) {\n const text = match[2].trim()\n items.push({\n id: slugify(text),\n text,\n level: toTocLevel(match[1].length),\n children: [],\n })\n match = headingRegex.exec(mdxContent)\n }\n\n const nested: TocItem[] = []\n let currentH2: TocItem | null = null\n let currentH3: TocItem | null = null\n\n for (const item of items) {\n if (item.level === 2) {\n currentH2 = item\n currentH3 = null\n nested.push(item)\n continue\n }\n\n if (item.level === 3) {\n currentH3 = item\n if (currentH2) {\n currentH2.children.push(item)\n } else {\n nested.push(item)\n }\n continue\n }\n\n if (currentH3) {\n currentH3.children.push(item)\n } else if (currentH2) {\n currentH2.children.push(item)\n } else {\n nested.push(item)\n }\n }\n\n return nested\n}\n\n/**\n * Calculates approximate word count and reading time for page content.\n *\n * @param content - Markdown or MDX content to measure.\n * @returns Word count and reading-time metadata derived from the content.\n */\nexport function calcWordCount(\n content: string,\n): { wordCount: number; readingTime: number } {\n const stripped = content\n .replace(/```[\\s\\S]*?```/g, '')\n .replace(/`[^`]+`/g, '')\n .replace(/!\\[.*?\\]\\(.*?\\)/g, '')\n .replace(/\\[([^\\]]+)\\]\\(.*?\\)/g, '$1')\n .replace(/[#*_~>|-]/g, '')\n .trim()\n\n const words = stripped.split(/\\s+/).filter(Boolean)\n\n return {\n wordCount: words.length,\n readingTime: Math.max(1, Math.ceil(words.length / 225)),\n }\n}\n\n/**\n * Builds a breadcrumb trail for a page from a section tree.\n *\n * @param sections - Full section list used to resolve parent relationships.\n * @param sectionId - Identifier of the page's containing section.\n * @param slug - Page slug appended as the terminal breadcrumb.\n * @returns Breadcrumb items suitable for page-level navigation UI.\n */\nexport function buildBreadcrumbs(\n sections: DocSection[],\n sectionId: string,\n slug: string,\n): BreadcrumbItem[] {\n const crumbs: BreadcrumbItem[] = [{ title: 'Docs', href: '/docs' }]\n const sectionMap = new Map(sections.map((section) => [section.id, section]))\n const trail: DocSection[] = []\n let current = sectionMap.get(sectionId)\n\n while (current) {\n trail.unshift(current)\n current = current.parentId ? sectionMap.get(current.parentId) : undefined\n }\n\n for (const section of trail) {\n crumbs.push({ title: section.title, href: `/docs/${section.slug}` })\n }\n\n if (slug) {\n const parentSlug = trail[trail.length - 1]?.slug ?? ''\n crumbs.push({ title: slug, href: `/docs/${parentSlug}/${slug}` })\n }\n\n return crumbs\n}\n\n/**\n * Builds a full-text search index from published pages and their sections.\n *\n * @param pages - Page records to index.\n * @param sections - Section metadata used to enrich each result.\n * @returns Search index entries derived from the published pages.\n */\nexport function buildDocsIndex(\n pages: DocPage[],\n sections: DocSection[],\n): SearchResult[] {\n const sectionMap = new Map(sections.map((section) => [section.id, section]))\n\n return pages\n .filter((page) => page.status === 'published')\n .map((page) => {\n const section = sectionMap.get(page.sectionId)\n\n return {\n pageId: page.id,\n pageTitle: page.title,\n sectionTitle: section?.title ?? '',\n sectionSlug: section?.slug ?? '',\n slug: page.slug,\n highlight: page.excerpt ?? page.content.slice(0, 160),\n score: 0,\n tags: page.tags,\n }\n })\n}\n\n/**\n * Searches a shared search index and returns ranked matches.\n *\n * @param query - User-entered search query.\n * @param index - Search index entries to rank.\n * @returns Ranked search results limited to the top twenty entries.\n */\nexport function searchDocs(\n query: string,\n index: SearchResult[],\n): SearchResult[] {\n if (!query.trim()) {\n return []\n }\n\n const terms = query.toLowerCase().split(/\\s+/).filter(Boolean)\n\n return index\n .map((entry) => {\n let score = 0\n const titleLower = entry.pageTitle.toLowerCase()\n const highlightLower = entry.highlight.toLowerCase()\n const sectionLower = entry.sectionTitle.toLowerCase()\n const tagsLower = entry.tags.map((tag) => tag.toLowerCase())\n\n for (const term of terms) {\n if (titleLower.includes(term)) {\n score += 10\n }\n if (tagsLower.some((tag) => tag.includes(term))) {\n score += 5\n }\n if (sectionLower.includes(term)) {\n score += 3\n }\n if (highlightLower.includes(term)) {\n score += 2\n }\n }\n\n return { ...entry, score }\n })\n .filter((entry) => entry.score > 0)\n .sort((left, right) => right.score - left.score)\n .slice(0, 20)\n}\n\n/**\n * Creates a URL-safe slug from arbitrary text.\n *\n * @param title - Source text to slugify.\n * @returns A lower-case kebab-case slug.\n */\nexport function slugify(title: string): string {\n return title\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '')\n}\n\n/**\n * Produces a search-result snippet centred around a matching query.\n *\n * @param text - Source text used to build the snippet.\n * @param query - User-entered search query.\n * @param maxLen - Maximum snippet length.\n * @returns A trimmed snippet containing the best query match when available.\n */\nexport function highlightMatch(\n text: string,\n query: string,\n maxLen = 160,\n): string {\n if (!query.trim()) {\n return text.slice(0, maxLen)\n }\n\n const lowerText = text.toLowerCase()\n const lowerQuery = query.toLowerCase()\n const index = lowerText.indexOf(lowerQuery)\n\n if (index === -1) {\n return text.slice(0, maxLen)\n }\n\n const start = Math.max(0, index - 40)\n const end = Math.min(text.length, index + query.length + (maxLen - 80))\n let snippet = text.slice(start, end)\n\n if (start > 0) {\n snippet = `…${snippet}`\n }\n if (end < text.length) {\n snippet = `${snippet}…`\n }\n\n return snippet\n}\n\n/**\n * Baseline config used by the framework variants when no explicit config is provided.\n */\nexport const defaultDocsConfig: DocsConfig = {\n siteName: 'Docs',\n cmdKEnabled: true,\n showReadingTime: true,\n showLastEdited: true,\n versionsEnabled: false,\n defaultAccess: 'public',\n printModeEnabled: true,\n}\n","/**\n * @module reactDocPage\n * @package @geenius/docs/react\n * @description Renders a docs page body with safe Markdown semantics, heading\n * anchors, and package-consistent typography. The component deliberately avoids\n * raw HTML injection so authored docs content stays within the Markdown runtime.\n */\n\n\nimport type { DocPage as DocPageType } from '@geenius/docs/shared'\nimport { slugify } from '@geenius/docs/shared'\nimport type React from 'react'\nimport type { ReactNode } from 'react'\nimport { Children } from 'react'\nimport type { Components } from 'react-markdown'\nimport ReactMarkdown from 'react-markdown'\nimport remarkGfm from 'remark-gfm'\nimport { cn } from '../lib/utils'\n\ninterface DocPageProps {\n page: DocPageType\n className?: string\n}\n\nfunction getNodeText(children: ReactNode): string {\n return Children.toArray(children)\n .map((child) => {\n if (typeof child === 'string' || typeof child === 'number') {\n return String(child)\n }\n\n return ''\n })\n .join(' ')\n}\n\nfunction createHeading(\n Tag: 'h1' | 'h2' | 'h3' | 'h4',\n className: string,\n): NonNullable<Components[typeof Tag]> {\n return ({ children }) => {\n const text = getNodeText(children)\n const id = slugify(text)\n\n return (\n <Tag id={id} className={cn(className, 'scroll-mt-20')}>\n <a href={`#${id}`} className=\"transition-colors hover:text-primary\">\n {children}\n </a>\n </Tag>\n )\n }\n}\n\n/**\n * Renders a docs page body using safe Markdown rendering.\n *\n * @param props - Docs page record containing the Markdown body to render.\n * @returns The rendered page article.\n */\nexport function DocPage(props: DocPageProps): React.JSX.Element {\n return (\n <article className={cn('prose-custom max-w-none', props.className)}>\n <ReactMarkdown\n remarkPlugins={[remarkGfm]}\n components={{\n h1: createHeading('h1', 'mb-4 mt-8 text-3xl font-bold'),\n h2: createHeading(\n 'h2',\n 'mb-3 mt-8 border-b border-white/10 pb-2 text-2xl font-bold',\n ),\n h3: createHeading('h3', 'mb-2 mt-6 text-xl font-semibold'),\n h4: createHeading('h4', 'mb-2 mt-4 text-lg font-medium'),\n p: ({ children }) => (\n <p className=\"my-3 leading-relaxed text-white/80\">{children}</p>\n ),\n a: ({ href, children }) => (\n <a\n href={href}\n target={href?.startsWith('/') ? undefined : '_blank'}\n rel={href?.startsWith('/') ? undefined : 'noreferrer noopener'}\n className=\"underline underline-offset-2 transition-colors hover:text-primary\"\n >\n {children}\n </a>\n ),\n code: ({ className, children }) =>\n className ? (\n <code className={className}>{children}</code>\n ) : (\n <code className=\"rounded bg-white/10 px-1.5 py-0.5 text-sm text-primary\">\n {children}\n </code>\n ),\n pre: ({ children }) => (\n <pre className=\"my-4 overflow-x-auto rounded-lg bg-black/30 p-4 text-sm leading-relaxed\">\n {children}\n </pre>\n ),\n blockquote: ({ children }) => (\n <blockquote className=\"my-4 rounded-r-lg border-l-4 border-primary/40 bg-white/5 py-3 pl-4 pr-4 italic text-white/70\">\n {children}\n </blockquote>\n ),\n table: ({ children }) => (\n <div className=\"my-4 overflow-x-auto rounded-lg border border-white/10\">\n <table className=\"w-full text-sm\">{children}</table>\n </div>\n ),\n th: ({ children }) => (\n <th className=\"border-b border-white/10 bg-white/5 px-4 py-2.5 text-left font-semibold\">\n {children}\n </th>\n ),\n td: ({ children }) => (\n <td className=\"border-b border-white/5 px-4 py-2 text-white/70 last:border-none\">\n {children}\n </td>\n ),\n }}\n >\n {props.page.content}\n </ReactMarkdown>\n </article>\n )\n}\n","/**\n * @module reactDocSearch\n * @package @geenius/docs/react\n * @description Provides the React command-palette style docs search modal with\n * animated presentation, keyboard navigation, and result highlighting.\n */\n\nimport type { SearchResult } from '@geenius/docs/shared'\nimport { highlightMatch } from '@geenius/docs/shared'\nimport { AnimatePresence, motion } from '@geenius/motion/react'\nimport type React from 'react'\nimport { useCallback, useEffect, useId, useRef, useState } from 'react'\nimport { cn } from '../lib/utils'\n\ninterface DocSearchProps {\n results: SearchResult[]\n query: string\n onQuery: (q: string) => void\n onSelect: (result: SearchResult) => void\n isOpen: boolean\n onClose: () => void\n className?: string\n}\n\nconst FOCUSABLE_SELECTOR =\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n\nfunction getActiveElement(): HTMLElement | null {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null\n}\n\n/**\n * Renders the modal search surface for the React docs variant.\n *\n * @param props - Search results, query state, and modal interaction handlers.\n * @returns Search dialog markup when open, otherwise `null`.\n */\nexport function DocSearch({\n results,\n query,\n onQuery,\n onSelect,\n isOpen,\n onClose,\n className,\n}: DocSearchProps): React.JSX.Element | null {\n const [activeIndex, setActiveIndex] = useState(0)\n const dialogId = useId()\n const inputRef = useRef<HTMLInputElement>(null)\n const dialogRef = useRef<HTMLDivElement>(null)\n const resultRefs = useRef<Array<HTMLButtonElement | null>>([])\n const previousFocusRef = useRef<HTMLElement | null>(null)\n const activeResultId = results[activeIndex]\n ? `${dialogId}-result-${results[activeIndex].pageId}`\n : undefined\n\n useEffect(() => {\n if (isOpen) {\n previousFocusRef.current = getActiveElement()\n inputRef.current?.focus()\n setActiveIndex(0)\n }\n\n return () => {\n previousFocusRef.current?.focus()\n }\n }, [isOpen])\n\n useEffect(() => {\n if (!query.trim() || results.length === 0) {\n setActiveIndex(0)\n }\n }, [query, results.length])\n\n useEffect(() => {\n resultRefs.current[activeIndex]?.scrollIntoView({ block: 'nearest' })\n }, [activeIndex])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setActiveIndex((i) => Math.min(i + 1, results.length - 1))\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n setActiveIndex((i) => Math.max(i - 1, 0))\n } else if (e.key === 'Enter' && results[activeIndex]) {\n e.preventDefault()\n onSelect(results[activeIndex])\n } else if (e.key === 'Escape') {\n e.preventDefault()\n onClose()\n } else if (e.key === 'Tab' && dialogRef.current) {\n const focusableElements = Array.from(\n dialogRef.current.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n ).filter((element) => !element.hasAttribute('disabled'))\n\n if (focusableElements.length === 0) {\n return\n }\n\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault()\n lastElement.focus()\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault()\n firstElement.focus()\n }\n }\n },\n [results, activeIndex, onSelect, onClose]\n )\n\n return (\n <AnimatePresence>\n {isOpen && (\n <div className={cn('fixed inset-0 z-50 flex items-start justify-center pt-[15vh]', className)}>\n <motion.button\n type=\"button\"\n aria-label=\"Close search\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"fixed inset-0 bg-black/60 backdrop-blur-md\"\n onClick={onClose}\n />\n\n <motion.div\n ref={dialogRef}\n initial={{ opacity: 0, scale: 0.95, y: -20 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.95, y: -20 }}\n transition={{ type: 'spring', damping: 25, stiffness: 250 }}\n className=\"relative z-10 w-full max-w-xl overflow-hidden rounded-2xl border border-white/10 bg-card/40 backdrop-blur-3xl shadow-2xl ring-1 ring-white/5\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={`${dialogId}-title`}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center gap-3 border-b border-white/10 px-5 py-4 bg-white/5\">\n <h2 id={`${dialogId}-title`} className=\"sr-only\">\n Search documentation\n </h2>\n <svg aria-hidden=\"true\" className=\"h-5 w-5 shrink-0 text-white/40\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z\" clipRule=\"evenodd\" />\n </svg>\n <input\n ref={inputRef}\n type=\"search\"\n value={query}\n onChange={(e) => onQuery(e.target.value)}\n placeholder=\"Search documentation…\"\n aria-label=\"Search documentation\"\n aria-controls={`${dialogId}-results`}\n aria-activedescendant={activeResultId}\n className=\"flex-1 bg-transparent text-sm text-white placeholder-white/30 outline-none\"\n />\n <kbd className=\"rounded border border-white/10 bg-white/5 px-1.5 py-0.5 text-[11px] text-white/30 font-medium\">\n ESC\n </kbd>\n </div>\n\n <div\n id={`${dialogId}-results`}\n className=\"max-h-80 overflow-y-auto p-2\"\n role=\"listbox\"\n >\n <AnimatePresence mode=\"popLayout\">\n {results.length === 0 && query.trim() && (\n <motion.div \n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"flex flex-col items-center py-10 text-center text-white/30\"\n >\n <svg aria-hidden=\"true\" className=\"mb-3 h-10 w-10 opacity-50\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" strokeWidth=\"1.5\" />\n <path d=\"M21 21l-4.35-4.35\" strokeWidth=\"1.5\" />\n </svg>\n <p className=\"text-sm\">No results for “{query}”</p>\n <p className=\"mt-1 text-xs opacity-60\">Try different keywords</p>\n </motion.div>\n )}\n\n {results.length === 0 && !query.trim() && (\n <motion.div \n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"py-8 text-center text-sm text-white/30\"\n >\n Start typing to search…\n </motion.div>\n )}\n </AnimatePresence>\n\n {results.map((result, idx) => (\n <button\n key={result.pageId}\n ref={(element) => {\n resultRefs.current[idx] = element\n }}\n id={`${dialogId}-result-${result.pageId}`}\n type=\"button\"\n role=\"option\"\n aria-selected={idx === activeIndex}\n onMouseEnter={() => setActiveIndex(idx)}\n onClick={() => onSelect(result)}\n className={`group flex w-full flex-col gap-1 rounded-xl px-4 py-3 text-left transition-colors relative my-0.5 ${\n idx === activeIndex\n ? 'bg-primary/15 text-white ring-1 ring-primary/30'\n : 'text-white/70 hover:bg-white/5'\n }`}\n >\n {idx === activeIndex && (\n <motion.div \n layoutId=\"search-active-bg\"\n className=\"absolute inset-0 bg-primary/10 rounded-xl\"\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n />\n )}\n <div className=\"relative z-10 flex items-center gap-2\">\n <span className=\"rounded bg-primary/20 px-1.5 py-0.5 text-[10px] font-medium text-primary\">\n {result.sectionTitle}\n </span>\n <span className=\"text-sm font-medium\">{result.pageTitle}</span>\n </div>\n <p className=\"relative z-10 truncate text-xs text-white/40\">\n {highlightMatch(result.highlight, query)}\n </p>\n {result.tags.length > 0 && (\n <div className=\"relative z-10 flex gap-1 mt-1\">\n {result.tags.slice(0, 3).map((tag) => (\n <span key={tag} className=\"rounded bg-white/5 px-1.5 py-0.5 text-[10px] text-white/30 border border-white/5\">\n {tag}\n </span>\n ))}\n </div>\n )}\n </button>\n ))}\n </div>\n\n <div className=\"flex items-center gap-4 border-t border-white/10 px-5 py-2.5 text-[11px] text-white/30 bg-black/20\">\n <span className=\"flex items-center gap-1\"><kbd className=\"rounded border border-white/10 bg-white/5 px-1 pb-0.5 text-[10px]\">↑</kbd> <kbd className=\"rounded border border-white/10 bg-white/5 px-1 pb-0.5 text-[10px]\">↓</kbd> navigate</span>\n <span className=\"flex items-center gap-1\"><kbd className=\"rounded border border-white/10 bg-white/5 px-1 pb-0.5 text-[10px]\">↵</kbd> select</span>\n <span className=\"flex items-center gap-1\"><kbd className=\"rounded border border-white/10 bg-white/5 px-1 pb-0.5 text-[10px]\">esc</kbd> close</span>\n </div>\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n )\n}\n","/**\n * @module reactDocSidebar\n * @package @geenius/docs/react\n * @description Renders the hierarchical sidebar navigation used by the React\n * docs variant, including animated section expansion and active page states.\n */\n\nimport type { DocPage, DocSection } from '@geenius/docs/shared'\nimport { AnimatePresence, motion } from '@geenius/motion/react'\nimport { useCallback, useState } from 'react'\nimport { cn } from '../lib/utils'\nimport type { DocsSectionWithPages } from '../types'\n\ninterface DocSidebarProps {\n sections: DocsSectionWithPages[]\n currentPageId?: string\n onNavigate: (page: DocPage, section: DocSection) => void\n className?: string\n}\n\n/**\n * Sidebar navigation for docs sections and pages.\n *\n * @param props - Section tree, active page id, and page navigation callback.\n * @returns Sidebar markup for the React docs experience.\n */\nexport function DocSidebar({\n sections,\n currentPageId,\n onNavigate,\n className,\n}: DocSidebarProps): React.JSX.Element {\n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set())\n\n const toggle = useCallback((id: string) => {\n setExpandedIds((prev) => {\n const next = new Set(prev)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n }, [])\n\n const topLevel = sections.filter((s) => !s.parentId)\n const childrenOf = (parentId: string) =>\n sections.filter((s) => s.parentId === parentId)\n\n const renderSection = (section: DocsSectionWithPages, depth: number) => {\n const children = childrenOf(section.id)\n const isExpanded = expandedIds.has(section.id)\n const pages = section.pages ?? []\n const hasContent = children.length > 0 || pages.length > 0\n\n return (\n <div key={section.id} className=\"mb-1\" style={{ paddingLeft: depth * 12 }}>\n <motion.button\n type=\"button\"\n onClick={() => toggle(section.id)}\n className=\"flex w-full items-center gap-2 rounded-xl px-3 py-2 text-left text-sm font-medium transition-colors hover:bg-white/10\"\n whileHover={{ x: 2 }}\n whileTap={{ scale: 0.98 }}\n >\n {section.icon && <span className=\"text-base\">{section.icon}</span>}\n <span className=\"flex-1 truncate text-foreground\">{section.title}</span>\n {section.pageCount != null && (\n <span className=\"text-xs tabular-nums opacity-50 text-muted-foreground\">{section.pageCount}</span>\n )}\n {hasContent && (\n <motion.svg\n animate={{ rotate: isExpanded ? 90 : 0 }}\n className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <path d=\"M6 4l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" />\n </motion.svg>\n )}\n </motion.button>\n\n <AnimatePresence initial={false}>\n {isExpanded && (\n <motion.div \n initial={{ height: 0, opacity: 0 }}\n animate={{ height: \"auto\", opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.2, ease: \"easeInOut\" }}\n className=\"ml-2 overflow-hidden border-l border-border pl-2\"\n >\n {pages.map((page) => (\n <motion.button\n key={page.id}\n type=\"button\"\n onClick={() => onNavigate(page, section)}\n whileHover={{ x: 2 }}\n whileTap={{ scale: 0.98 }}\n className={`flex w-full items-center gap-2 rounded-lg px-3 py-1.5 my-0.5 text-left text-sm transition-all outline-none ${\n currentPageId === page.id\n ? 'bg-primary/10 text-primary font-semibold ring-1 ring-primary/20'\n : 'text-muted-foreground hover:text-foreground hover:bg-muted'\n }`}\n >\n <span className=\"truncate\">{page.title}</span>\n </motion.button>\n ))}\n {children.map((child) => renderSection(child, depth + 1))}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n )\n }\n\n return (\n <nav className={cn('flex flex-col gap-1 py-4', className)}>\n <div className=\"px-4 pb-3 text-xs font-bold uppercase tracking-widest text-muted-foreground\">\n Documentation\n </div>\n {topLevel.map((s) => renderSection(s, 0))}\n </nav>\n )\n}\n","/**\n * @module reactTableOfContents\n * @package @geenius/docs/react\n * @description Renders the React docs table of contents with animated active\n * heading states and nested anchor links derived from the shared TOC model.\n */\n\nimport type { TocItem } from '@geenius/docs/shared'\nimport { AnimatePresence, motion } from '@geenius/motion/react'\nimport { cn } from '../lib/utils'\n\ninterface TableOfContentsProps {\n toc: TocItem[]\n activeId?: string\n className?: string\n}\n\nfunction TocLink({ item, activeId, depth = 0 }: { item: TocItem; activeId?: string; depth?: number }) {\n const isActive = activeId === item.id\n return (\n <>\n <motion.a\n href={`#${item.id}`}\n className={cn(\n 'block truncate border-l-2 py-1 text-[13px] transition-all relative',\n isActive\n ? 'border-primary text-primary font-medium'\n : 'border-transparent text-white/40 hover:text-white/80 hover:border-white/20',\n )}\n style={{ paddingLeft: 12 + depth * 12 }}\n whileHover={{ x: 2 }}\n whileTap={{ scale: 0.98 }}\n layout\n >\n {item.text}\n </motion.a>\n {item.children.map((child) => (\n <TocLink key={child.id} item={child} activeId={activeId} depth={depth + 1} />\n ))}\n </>\n )\n}\n\n/**\n * Renders the page table of contents.\n *\n * @param props - TOC entries and the currently active heading id.\n * @returns TOC navigation or `null` when the page has no headings.\n */\nexport function TableOfContents({\n toc,\n activeId,\n className,\n}: TableOfContentsProps): React.JSX.Element | null {\n if (toc.length === 0) return null\n\n return (\n <nav className={cn('sticky top-24', className)}>\n <h4 className=\"mb-3 text-xs font-semibold uppercase tracking-widest text-white/40\">\n On this page\n </h4>\n <motion.div className=\"flex flex-col relative\" layoutRoot>\n <AnimatePresence>\n {toc.map((item) => (\n <motion.div key={item.id} initial={{ opacity: 0, x: -10 }} animate={{ opacity: 1, x: 0 }}>\n <TocLink item={item} activeId={activeId} />\n </motion.div>\n ))}\n </AnimatePresence>\n </motion.div>\n </nav>\n )\n}\n","/**\n * @module reactDocsLayout\n * @package @geenius/docs/react\n * @description Composes the React docs page shell with sidebar navigation,\n * breadcrumb chrome, animated content transitions, and the right-rail TOC.\n */\n\nimport type { BreadcrumbItem, DocPage, DocSection, TocItem } from '@geenius/docs/shared'\nimport { AnimatePresence, motion } from '@geenius/motion/react'\nimport type React from 'react'\nimport { cn } from '../lib/utils'\nimport type { DocsSectionWithPages } from '../types'\nimport { Breadcrumbs } from './Breadcrumbs'\nimport { DocSidebar } from './DocSidebar'\nimport { TableOfContents } from './TableOfContents'\n\ninterface DocsLayoutProps {\n sections: DocsSectionWithPages[]\n currentPage?: DocPage\n toc?: TocItem[]\n activeHeadingId?: string\n breadcrumbs?: BreadcrumbItem[]\n currentPageId?: string\n onNavigate: (page: DocPage, section: DocSection) => void\n children: React.ReactNode\n className?: string\n}\n\n/**\n * Layout shell shared by React docs pages.\n *\n * @param props - Navigation state, table-of-contents state, and page content.\n * @returns Full page layout for React docs screens.\n */\nexport function DocsLayout({\n sections,\n toc,\n activeHeadingId,\n breadcrumbs,\n currentPageId,\n onNavigate,\n children,\n className,\n}: DocsLayoutProps): React.JSX.Element {\n return (\n <div className={cn('flex min-h-screen bg-[#090a0f] text-white', className)}>\n <aside className=\"sticky top-0 hidden h-screen w-[260px] shrink-0 overflow-y-auto border-r border-white/5 bg-[#0b0c12] lg:block\">\n <DocSidebar\n sections={sections}\n currentPageId={currentPageId}\n onNavigate={onNavigate}\n />\n </aside>\n\n <main className=\"flex-1 overflow-hidden\">\n <div className=\"mx-auto flex max-w-6xl gap-8 px-6 py-8 lg:px-10\">\n <motion.div \n className=\"min-w-0 flex-1\"\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ type: 'spring', delay: 0.1 }}\n >\n {breadcrumbs && breadcrumbs.length > 0 && (\n <div className=\"mb-6\">\n <Breadcrumbs items={breadcrumbs} />\n </div>\n )}\n <AnimatePresence mode=\"popLayout\">\n <motion.div \n key={currentPageId}\n initial={{ opacity: 0, x: -10 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: 10 }}\n transition={{ type: 'spring', damping: 25, stiffness: 200 }}\n >\n {children}\n </motion.div>\n </AnimatePresence>\n </motion.div>\n\n {toc && toc.length > 0 && (\n <motion.aside \n className=\"hidden w-[220px] shrink-0 xl:block\"\n initial={{ opacity: 0, x: 10 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ delay: 0.2 }}\n >\n <TableOfContents toc={toc} activeId={activeHeadingId} />\n </motion.aside>\n )}\n </div>\n </main>\n </div>\n )\n}\n","/**\n * @module reactEditButton\n * @package @geenius/docs/react\n * @description Exposes the React docs \"Edit this page\" affordance so hosts can\n * route readers to the source repository for the active document.\n */\nimport { cn } from '../lib/utils'\n\ninterface EditButtonProps {\n pageSlug: string\n editUrl?: string\n className?: string\n}\n\n/**\n * Renders the source-edit link for the current docs page.\n *\n * @param props - Page slug and optional edit URL base.\n * @returns Edit link markup or `null` when editing is disabled.\n */\nexport function EditButton({\n pageSlug,\n editUrl,\n className,\n}: EditButtonProps): React.JSX.Element | null {\n if (!editUrl) return null\n\n const href = `${editUrl.replace(/\\/$/, '')}/${pageSlug}.mdx`\n\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-lg border border-white/10 px-3 py-1.5 text-xs text-white/40 transition-colors hover:border-white/20 hover:text-white/60',\n className,\n )}\n >\n <svg aria-hidden=\"true\" className=\"h-3.5 w-3.5\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\">\n <path d=\"M11.5 1.5l3 3-9 9H2.5v-3l9-9z\" strokeWidth=\"1.5\" strokeLinejoin=\"round\" />\n </svg>\n Edit this page\n </a>\n )\n}\n","/**\n * @module reactPageNavigation\n * @package @geenius/docs/react\n * @description Renders previous and next article affordances for the React\n * docs variant using the shared page navigation contract.\n */\nimport { cn } from '../lib/utils'\n\ninterface PageNavigationProps {\n prev?: { title: string; href: string }\n next?: { title: string; href: string }\n className?: string\n}\n\n/**\n * Renders previous and next page links for the active article.\n *\n * @param props - Optional previous and next navigation links.\n * @returns Navigation markup or `null` when no links are available.\n */\nexport function PageNavigation({\n prev,\n next,\n className,\n}: PageNavigationProps): React.JSX.Element | null {\n if (!prev && !next) return null\n\n return (\n <div className={cn('mt-12 flex items-stretch gap-4 border-t border-white/10 pt-8', className)}>\n {prev ? (\n <a\n href={prev.href}\n className=\"group flex flex-1 flex-col rounded-xl border border-white/10 p-4 transition-all hover:border-primary/40 hover:bg-white/5\"\n >\n <span className=\"text-xs text-white/40 group-hover:text-primary transition-colors\">\n ← Previous\n </span>\n <span className=\"mt-1 text-sm font-medium text-white/80 group-hover:text-white transition-colors truncate\">\n {prev.title}\n </span>\n </a>\n ) : (\n <div className=\"flex-1\" />\n )}\n {next ? (\n <a\n href={next.href}\n className=\"group flex flex-1 flex-col items-end rounded-xl border border-white/10 p-4 text-right transition-all hover:border-primary/40 hover:bg-white/5\"\n >\n <span className=\"text-xs text-white/40 group-hover:text-primary transition-colors\">\n Next →\n </span>\n <span className=\"mt-1 text-sm font-medium text-white/80 group-hover:text-white transition-colors truncate\">\n {next.title}\n </span>\n </a>\n ) : (\n <div className=\"flex-1\" />\n )}\n </div>\n )\n}\n","/**\n * @module reactVersionSelector\n * @package @geenius/docs/react\n * @description Provides the React docs version switcher with a disclosure menu\n * for choosing among published documentation versions.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport { cn } from '../lib/utils'\n\ninterface VersionSelectorProps {\n versions: string[]\n current: string\n onSelect: (version: string) => void\n className?: string\n}\n\n/**\n * Renders a version switcher when multiple docs versions exist.\n *\n * @param props - Supported versions, the current version, and selection callback.\n * @returns Version selector markup or `null` when only one version exists.\n */\nexport function VersionSelector({\n versions,\n current,\n onSelect,\n className,\n}: VersionSelectorProps): React.JSX.Element | null {\n const [isOpen, setIsOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (ref.current && e.target instanceof Node && !ref.current.contains(e.target)) {\n setIsOpen(false)\n }\n }\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [])\n\n if (versions.length <= 1) return null\n\n return (\n <div ref={ref} className={cn('relative', className)}>\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex items-center gap-1.5 rounded-lg border border-white/10 bg-white/5 px-3 py-1.5 text-xs font-medium text-white/60 transition-colors hover:border-primary/30 hover:text-white/80\"\n >\n <span>v{current}</span>\n <svg aria-hidden=\"true\" className={`h-3 w-3 transition-transform ${isOpen ? 'rotate-180' : ''}`} viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M4 6l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" />\n </svg>\n </button>\n\n {isOpen && (\n <div className=\"absolute right-0 top-full z-20 mt-1 min-w-[120px] overflow-hidden rounded-lg border border-white/10 bg-[#111218] shadow-xl\">\n {versions.map((v) => (\n <button\n key={v}\n type=\"button\"\n onClick={() => {\n onSelect(v)\n setIsOpen(false)\n }}\n className={`flex w-full items-center px-3 py-2 text-xs transition-colors ${\n v === current\n ? 'bg-primary/15 text-primary font-medium'\n : 'text-white/60 hover:bg-white/5 hover:text-white/80'\n }`}\n >\n v{v}\n {v === current && <span className=\"ml-auto text-[10px]\">✓</span>}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n","/**\n * @module reactUseDocSearch\n * @package @geenius/docs/react\n * @description Implements debounced search state for the React docs variant so\n * modal and page-level search flows share a common query lifecycle.\n */\n\nimport type { SearchResult } from '@geenius/docs/shared'\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\n/**\n * Search state returned by the React docs search hook.\n */\nexport interface DocSearchState {\n results: SearchResult[]\n isSearching: boolean\n query: string\n setQuery: (q: string) => void\n clearSearch: () => void\n}\n\n/**\n * Debounces docs search calls for the React variant.\n *\n * @param searchFn - Search function that returns ranked docs results.\n * @param debounceMs - Delay before the search function is executed.\n * @returns Search state and control helpers.\n */\nexport function useDocSearch(\n searchFn: (query: string) => SearchResult[] | Promise<SearchResult[]>,\n debounceMs = 250,\n): DocSearchState {\n const [query, setQuery] = useState('')\n const [results, setResults] = useState<SearchResult[]>([])\n const [isSearching, setIsSearching] = useState(false)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(() => {\n if (!query.trim()) {\n setResults([])\n setIsSearching(false)\n return\n }\n\n setIsSearching(true)\n\n if (timerRef.current) clearTimeout(timerRef.current)\n\n timerRef.current = setTimeout(async () => {\n try {\n const r = await searchFn(query)\n setResults(r)\n } catch {\n setResults([])\n } finally {\n setIsSearching(false)\n }\n }, debounceMs)\n\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [query, searchFn, debounceMs])\n\n const clearSearch = useCallback(() => {\n setQuery('')\n setResults([])\n setIsSearching(false)\n }, [])\n\n return { results, isSearching, query, setQuery, clearSearch }\n}\n","/**\n * @module reactUseDocs\n * @package @geenius/docs/react\n * @description Provides the core React docs state container that normalizes\n * section trees, current page selection, search state, and merged config.\n */\n\nimport type { DocPage, DocSection, DocsConfig } from '@geenius/docs/shared'\nimport { defaultDocsConfig } from '@geenius/docs/shared'\nimport { useCallback, useMemo, useState } from 'react'\n\n/**\n * Aggregate docs state exposed to React pages and components.\n */\nexport interface DocsState {\n sections: (DocSection & { pages: DocPage[]; pageCount: number })[]\n currentSection: DocSection | null\n setSection: (section: DocSection | null) => void\n currentPage: DocPage | null\n setPage: (page: DocPage | null) => void\n searchQuery: string\n setSearchQuery: (query: string) => void\n isLoading: boolean\n config: DocsConfig\n flatPages: DocPage[]\n}\n\n/**\n * Creates normalized docs state for React pages and components.\n *\n * @param tree - Docs section tree with eagerly attached pages.\n * @param config - Optional config overrides merged onto the shared defaults.\n * @returns Normalized docs state for the React docs surface.\n */\nexport function useDocs(\n tree: (DocSection & { pages: DocPage[]; pageCount: number })[] | undefined,\n config?: Partial<DocsConfig>,\n): DocsState {\n const [currentSection, setSection] = useState<DocSection | null>(null)\n const [currentPage, setPage] = useState<DocPage | null>(null)\n const [searchQuery, setSearchQuery] = useState('')\n\n const mergedConfig = useMemo(\n () => ({ ...defaultDocsConfig, ...config }),\n [config]\n )\n\n const sections = useMemo(() => tree ?? [], [tree])\n\n const flatPages = useMemo(\n () => sections.flatMap((s) => s.pages ?? []),\n [sections]\n )\n\n const isLoading = tree === undefined\n\n const handleSetSection = useCallback((section: DocSection | null) => {\n setSection(section)\n setPage(null)\n }, [])\n\n return {\n sections,\n currentSection,\n setSection: handleSetSection,\n currentPage,\n setPage,\n searchQuery,\n setSearchQuery,\n isLoading,\n config: mergedConfig,\n flatPages,\n }\n}\n","/**\n * @module reactUseDocsAdmin\n * @package @geenius/docs/react\n * @description Wraps docs admin mutations in stable React callbacks so the\n * admin pages can manage sections and pages without coupling to one backend.\n */\n\nimport { useCallback } from 'react'\n\n/**\n * Stable admin actions exposed to React docs management surfaces.\n */\nexport interface DocsAdminActions {\n createSection: (data: {\n title: string\n slug: string\n parentId?: string\n order: number\n icon?: string\n description?: string\n access: 'public' | 'team' | 'admin'\n }) => Promise<void>\n updateSection: (\n sectionId: string,\n data: Record<string, unknown>\n ) => Promise<void>\n deleteSection: (sectionId: string) => Promise<void>\n reorderSections: (sectionIds: string[]) => Promise<void>\n createPage: (data: {\n title: string\n slug: string\n content: string\n sectionId: string\n access: 'public' | 'team' | 'admin'\n tags?: string[]\n version?: string\n status?: 'draft' | 'published' | 'archived'\n author?: { name: string; avatar?: string }\n excerpt?: string\n order?: number\n }) => Promise<void>\n updatePage: (pageId: string, data: Record<string, unknown>) => Promise<void>\n publishPage: (pageId: string) => Promise<void>\n archivePage: (pageId: string) => Promise<void>\n deletePage: (pageId: string) => Promise<void>\n reorderPages: (pageIds: string[]) => Promise<void>\n movePage: (\n pageId: string,\n newSectionId: string,\n newOrder: number\n ) => Promise<void>\n}\n\n/**\n * Admin hook factory — accepts mutation functions (from Convex useMutation or similar)\n * and returns a stable set of admin action callbacks.\n *\n * @param mutations - Backend mutation functions for docs admin operations.\n * @returns Stable admin action callbacks for the React docs variant.\n */\nexport function useDocsAdmin(mutations: {\n createSection: (args: Record<string, unknown>) => Promise<unknown>\n updateSection: (args: Record<string, unknown>) => Promise<unknown>\n deleteSection: (args: Record<string, unknown>) => Promise<unknown>\n reorderSections: (args: Record<string, unknown>) => Promise<unknown>\n createPage: (args: Record<string, unknown>) => Promise<unknown>\n updatePage: (args: Record<string, unknown>) => Promise<unknown>\n publishPage: (args: Record<string, unknown>) => Promise<unknown>\n archivePage: (args: Record<string, unknown>) => Promise<unknown>\n deletePage: (args: Record<string, unknown>) => Promise<unknown>\n reorderPages: (args: Record<string, unknown>) => Promise<unknown>\n movePage: (args: Record<string, unknown>) => Promise<unknown>\n}): DocsAdminActions {\n const createSection = useCallback(\n async (data: Parameters<DocsAdminActions['createSection']>[0]) => {\n await mutations.createSection(data)\n },\n [mutations]\n )\n\n const updateSection = useCallback(\n async (sectionId: string, data: Record<string, unknown>) => {\n await mutations.updateSection({ sectionId, ...data })\n },\n [mutations]\n )\n\n const deleteSection = useCallback(\n async (sectionId: string) => {\n await mutations.deleteSection({ sectionId })\n },\n [mutations]\n )\n\n const reorderSections = useCallback(\n async (sectionIds: string[]) => {\n await mutations.reorderSections({ sectionIds })\n },\n [mutations]\n )\n\n const createPage = useCallback(\n async (data: Parameters<DocsAdminActions['createPage']>[0]) => {\n await mutations.createPage(data)\n },\n [mutations]\n )\n\n const updatePage = useCallback(\n async (pageId: string, data: Record<string, unknown>) => {\n await mutations.updatePage({ pageId, ...data })\n },\n [mutations]\n )\n\n const publishPage = useCallback(\n async (pageId: string) => {\n await mutations.publishPage({ pageId })\n },\n [mutations]\n )\n\n const archivePage = useCallback(\n async (pageId: string) => {\n await mutations.archivePage({ pageId })\n },\n [mutations]\n )\n\n const deletePage = useCallback(\n async (pageId: string) => {\n await mutations.deletePage({ pageId })\n },\n [mutations]\n )\n\n const reorderPages = useCallback(\n async (pageIds: string[]) => {\n await mutations.reorderPages({ pageIds })\n },\n [mutations]\n )\n\n const movePage = useCallback(\n async (pageId: string, newSectionId: string, newOrder: number) => {\n await mutations.movePage({ pageId, newSectionId, newOrder })\n },\n [mutations]\n )\n\n return {\n createSection,\n updateSection,\n deleteSection,\n reorderSections,\n createPage,\n updatePage,\n publishPage,\n archivePage,\n deletePage,\n reorderPages,\n movePage,\n }\n}\n","/**\n * @module reactUseTableOfContents\n * @package @geenius/docs/react\n * @description Tracks the extracted table of contents and active heading state\n * for rendered React docs pages.\n */\n\nimport type { TocItem } from '@geenius/docs/shared'\nimport { extractToc } from '@geenius/docs/shared'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\n/**\n * Table-of-contents state returned by the React docs hook.\n */\nexport interface TableOfContentsState {\n toc: TocItem[]\n activeId: string\n setActiveId: (id: string) => void\n}\n\n/**\n * Extracts and tracks a page table of contents for React article screens.\n *\n * @param mdxContent - Markdown or MDX source for the active page.\n * @returns Extracted TOC entries plus the active heading id.\n */\nexport function useTableOfContents(mdxContent: string | undefined): TableOfContentsState {\n const [activeId, setActiveId] = useState('')\n const observerRef = useRef<IntersectionObserver | null>(null)\n\n const toc = useMemo(() => {\n if (!mdxContent) return []\n return extractToc(mdxContent)\n }, [mdxContent])\n\n const flatIds = useMemo(() => {\n const ids: string[] = []\n const collect = (items: TocItem[]) => {\n for (const item of items) {\n ids.push(item.id)\n collect(item.children)\n }\n }\n collect(toc)\n return ids\n }, [toc])\n\n const handleSetActiveId = useCallback((id: string) => {\n setActiveId(id)\n }, [])\n\n useEffect(() => {\n if (flatIds.length === 0) return\n\n if (observerRef.current) observerRef.current.disconnect()\n\n const callback: IntersectionObserverCallback = (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setActiveId(entry.target.id)\n break\n }\n }\n }\n\n observerRef.current = new IntersectionObserver(callback, {\n rootMargin: '-80px 0px -70% 0px',\n threshold: 0,\n })\n\n for (const id of flatIds) {\n const el = document.getElementById(id)\n if (el) observerRef.current.observe(el)\n }\n\n return () => {\n observerRef.current?.disconnect()\n }\n }, [flatIds])\n\n return { toc, activeId, setActiveId: handleSetActiveId }\n}\n","/**\n * @module reactDocSearchPage\n * @package @geenius/docs/react\n * @description Renders the dedicated React docs search page with a full-page\n * query input, ranked search results, and empty-state messaging.\n */\n\nimport type { DocPage, DocSection, SearchResult } from '@geenius/docs/shared'\nimport { buildDocsIndex, highlightMatch, searchDocs } from '@geenius/docs/shared'\nimport { useCallback, useMemo } from 'react'\nimport { useDocSearch } from '../hooks/useDocSearch'\nimport { cn } from '../lib/utils'\n\ninterface DocSearchPageProps {\n tree: (DocSection & { pages: DocPage[]; pageCount: number })[] | undefined\n onSelectPage?: (page: DocPage, section: DocSection) => void\n className?: string\n}\n\n/**\n * Dedicated search page for the React docs variant.\n *\n * @param props - Docs tree and optional page selection handler.\n * @returns Search page UI or a loading state when the tree is unresolved.\n */\nexport function DocSearchPage({\n tree,\n onSelectPage,\n className,\n}: DocSearchPageProps): React.JSX.Element {\n const sections = useMemo(() => tree ?? [], [tree])\n const flatPages = useMemo(() => sections.flatMap((s) => s.pages ?? []), [sections])\n\n const searchFn = useCallback(\n (q: string): SearchResult[] => {\n const index = buildDocsIndex(flatPages, sections)\n return searchDocs(q, index)\n },\n [flatPages, sections]\n )\n\n const { results, isSearching, query, setQuery } = useDocSearch(searchFn)\n\n if (tree === undefined) {\n return (\n <div className={cn('min-h-screen bg-[#090a0f] px-6 py-16', className)}>\n <div className=\"mx-auto max-w-2xl\">\n <div className=\"mb-8 h-12 animate-pulse rounded-xl bg-white/5\" />\n <div className=\"space-y-3\">\n {Array.from({ length: 5 }, (_, index) => `doc-search-skeleton-${index}`).map((key) => (\n <div key={key} className=\"h-20 animate-pulse rounded-xl bg-white/5\" />\n ))}\n </div>\n </div>\n </div>\n )\n }\n\n return (\n <div className={cn('min-h-screen bg-[#090a0f] text-white', className)}>\n <div className=\"mx-auto max-w-2xl px-6 py-16\">\n <h1 className=\"mb-8 text-2xl font-bold\">Search Documentation</h1>\n\n <div className=\"relative mb-8\">\n <svg aria-hidden=\"true\" className=\"absolute left-4 top-1/2 h-5 w-5 -translate-y-1/2 text-white/30\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z\" clipRule=\"evenodd\" />\n </svg>\n <input\n type=\"text\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Type to search…\"\n className=\"w-full rounded-xl border border-white/10 bg-white/5 py-3.5 pl-12 pr-4 text-sm text-white placeholder-white/30 outline-none transition-colors focus:border-primary/40 focus:ring-1 focus:ring-ring/20\"\n />\n {isSearching && (\n <div className=\"absolute right-4 top-1/2 -translate-y-1/2\">\n <div className=\"h-4 w-4 animate-spin rounded-full border-2 border-white/10 border-t-primary\" />\n </div>\n )}\n </div>\n\n {results.length > 0 && (\n <div className=\"space-y-2\">\n {results.map((result) => {\n const section = sections.find((s) => s.slug === result.sectionSlug)\n const page = flatPages.find((p) => p.id === result.pageId)\n return (\n <button\n key={result.pageId}\n type=\"button\"\n onClick={() => {\n if (page && section && onSelectPage) onSelectPage(page, section)\n }}\n className=\"flex w-full flex-col gap-1.5 rounded-xl border border-white/5 bg-white/[0.02] p-4 text-left transition-all hover:border-primary/20 hover:bg-white/[0.05]\"\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"rounded bg-primary/20 px-2 py-0.5 text-[10px] font-medium text-primary\">\n {result.sectionTitle}\n </span>\n <span className=\"text-sm font-medium text-white/90\">{result.pageTitle}</span>\n <span className=\"ml-auto text-xs tabular-nums text-white/20\">\n {page?.readingTime ?? 0} min\n </span>\n </div>\n <p className=\"text-xs leading-relaxed text-white/40\">\n {highlightMatch(result.highlight, query)}\n </p>\n {result.tags.length > 0 && (\n <div className=\"flex gap-1 mt-1\">\n {result.tags.slice(0, 4).map((tag) => (\n <span key={tag} className=\"rounded bg-white/5 px-1.5 py-0.5 text-[10px] text-white/30\">\n {tag}\n </span>\n ))}\n </div>\n )}\n </button>\n )\n })}\n </div>\n )}\n\n {query.trim() && results.length === 0 && !isSearching && (\n <div className=\"flex flex-col items-center py-16 text-center\">\n <div className=\"mb-4 text-5xl opacity-30\">🔍</div>\n <h3 className=\"mb-2 text-lg font-medium text-white/60\">No results found</h3>\n <p className=\"text-sm text-white/30\">\n Try different keywords or check your spelling.\n </p>\n </div>\n )}\n\n {!query.trim() && (\n <div className=\"flex flex-col items-center py-16 text-center\">\n <div className=\"mb-4 text-5xl opacity-20\">📖</div>\n <p className=\"text-sm text-white/30\">Start typing to search across all documentation</p>\n </div>\n )}\n </div>\n </div>\n )\n}\n","/**\n * @module reactDocsAdminPage\n * @package @geenius/docs/react\n * @description Renders the React docs admin surface for creating, updating,\n * publishing, and deleting docs sections and pages.\n */\n\nimport type { DocAccess, DocPage, DocSection } from '@geenius/docs/shared'\nimport { useMemo, useState } from 'react'\nimport type { DocsAdminActions } from '../hooks/useDocsAdmin'\nimport { cn } from '../lib/utils'\n\ninterface DocsAdminPageProps {\n tree: (DocSection & { pages: DocPage[]; pageCount: number })[] | undefined\n allPages?: DocPage[]\n admin: DocsAdminActions\n className?: string\n}\n\ninterface SectionForm {\n title: string\n slug: string\n description: string\n icon: string\n access: DocAccess\n}\n\ninterface PageForm {\n title: string\n slug: string\n content: string\n access: DocAccess\n tags: string\n}\n\nfunction toDocAccess(value: string): DocAccess {\n if (value === 'public' || value === 'team' || value === 'admin') {\n return value\n }\n\n return 'team'\n}\n\nfunction initialSectionForm(): SectionForm {\n return {\n title: '',\n slug: '',\n description: '',\n icon: '',\n access: 'team',\n }\n}\n\nfunction initialPageForm(): PageForm {\n return {\n title: '',\n slug: '',\n content: '',\n access: 'team',\n tags: '',\n }\n}\n\n/**\n * Admin page for section and page management in the React docs variant.\n *\n * @param props - Tree data, optional page list, and admin actions.\n * @returns Admin UI for managing docs content.\n */\nexport function DocsAdminPage({\n tree,\n allPages,\n admin,\n className,\n}: DocsAdminPageProps): React.JSX.Element {\n const sections = useMemo(() => tree ?? [], [tree])\n const [selectedSectionId, setSelectedSectionId] = useState<string | null>(null)\n const [sectionForm, setSectionForm] = useState<SectionForm>(initialSectionForm())\n const [pageForm, setPageForm] = useState<PageForm>(initialPageForm())\n const [showSectionForm, setShowSectionForm] = useState(false)\n const [showPageForm, setShowPageForm] = useState(false)\n\n const selectedSection = sections.find((s) => s.id === selectedSectionId)\n const sectionPages = useMemo(() => {\n if (!selectedSection) return []\n if (allPages) return allPages.filter((p) => p.sectionId === selectedSectionId)\n return selectedSection.pages ?? []\n }, [selectedSection, allPages, selectedSectionId])\n const canCreateSection =\n sectionForm.title.trim().length > 0 && sectionForm.slug.trim().length > 0\n const canCreatePage =\n pageForm.title.trim().length > 0 &&\n pageForm.slug.trim().length > 0 &&\n pageForm.content.trim().length > 0\n\n if (tree === undefined) {\n return (\n <div className={cn('min-h-screen bg-[#090a0f] px-6 py-12', className)}>\n <div className=\"mx-auto max-w-6xl\">\n <div className=\"mb-8 h-10 w-48 animate-pulse rounded bg-white/5\" />\n <div className=\"grid gap-6 md:grid-cols-2\">\n <div className=\"h-96 animate-pulse rounded-xl bg-white/5\" />\n <div className=\"h-96 animate-pulse rounded-xl bg-white/5\" />\n </div>\n </div>\n </div>\n )\n }\n\n return (\n <div className={cn('min-h-screen bg-[#090a0f] text-white', className)}>\n <div className=\"mx-auto max-w-6xl px-6 py-12\">\n <h1 className=\"mb-8 text-2xl font-bold\">Docs Admin</h1>\n\n <div className=\"grid gap-6 md:grid-cols-2\">\n <div className=\"rounded-xl border border-white/8 bg-white/[0.02] p-5\">\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-white/80\">Sections</h2>\n <button\n type=\"button\"\n onClick={() => setShowSectionForm(!showSectionForm)}\n className=\"rounded-lg bg-primary px-3 py-1.5 text-xs font-medium transition-colors hover:bg-primary/90\"\n >\n + Add Section\n </button>\n </div>\n\n {showSectionForm && (\n <div className=\"mb-4 space-y-2 rounded-lg border border-white/10 bg-white/5 p-4\">\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-section-title\">\n <span className=\"text-xs font-medium text-white/50\">Title</span>\n <input\n id=\"docs-admin-section-title\"\n type=\"text\"\n placeholder=\"Getting Started\"\n value={sectionForm.title}\n onChange={(e) =>\n setSectionForm({ ...sectionForm, title: e.target.value })\n }\n className=\"w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm outline-none focus:border-primary/40\"\n />\n </label>\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-section-slug\">\n <span className=\"text-xs font-medium text-white/50\">Slug</span>\n <input\n id=\"docs-admin-section-slug\"\n type=\"text\"\n placeholder=\"getting-started\"\n value={sectionForm.slug}\n onChange={(e) =>\n setSectionForm({ ...sectionForm, slug: e.target.value })\n }\n className=\"w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm outline-none focus:border-primary/40\"\n />\n </label>\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-section-icon\">\n <span className=\"text-xs font-medium text-white/50\">Icon</span>\n <input\n id=\"docs-admin-section-icon\"\n type=\"text\"\n placeholder=\"📚\"\n value={sectionForm.icon}\n onChange={(e) =>\n setSectionForm({ ...sectionForm, icon: e.target.value })\n }\n className=\"w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm outline-none focus:border-primary/40\"\n />\n </label>\n <label\n className=\"block space-y-1\"\n htmlFor=\"docs-admin-section-description\"\n >\n <span className=\"text-xs font-medium text-white/50\">\n Description\n </span>\n <input\n id=\"docs-admin-section-description\"\n type=\"text\"\n placeholder=\"Overview pages and onboarding guides.\"\n value={sectionForm.description}\n onChange={(e) =>\n setSectionForm({\n ...sectionForm,\n description: e.target.value,\n })\n }\n className=\"w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm outline-none focus:border-primary/40\"\n />\n </label>\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-section-access\">\n <span className=\"text-xs font-medium text-white/50\">Access</span>\n <select\n id=\"docs-admin-section-access\"\n value={sectionForm.access}\n onChange={(e) =>\n setSectionForm({\n ...sectionForm,\n access: toDocAccess(e.target.value),\n })\n }\n className=\"w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm outline-none focus:border-primary/40\"\n >\n <option value=\"public\">Public</option>\n <option value=\"team\">Team</option>\n <option value=\"admin\">Admin</option>\n </select>\n </label>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n disabled={!canCreateSection}\n onClick={async () => {\n await admin.createSection({\n ...sectionForm,\n order: sections.length,\n icon: sectionForm.icon || undefined,\n description: sectionForm.description || undefined,\n })\n setSectionForm(initialSectionForm())\n setShowSectionForm(false)\n }}\n className=\"rounded-lg bg-primary px-4 py-2 text-xs font-medium disabled:cursor-not-allowed disabled:opacity-40 hover:bg-primary/90\"\n >\n Create\n </button>\n <button\n type=\"button\"\n onClick={() => setShowSectionForm(false)}\n className=\"rounded-lg border border-white/10 px-4 py-2 text-xs hover:bg-white/5\"\n >\n Cancel\n </button>\n </div>\n </div>\n )}\n\n <div className=\"space-y-1\">\n {sections.length === 0 && (\n <p className=\"py-8 text-center text-sm text-white/30\">No sections yet</p>\n )}\n {sections.map((section) => (\n <div\n key={section.id}\n className={`group flex items-center gap-2 rounded-lg px-3 py-2.5 transition-colors cursor-pointer ${\n selectedSectionId === section.id\n ? 'bg-primary/15 text-primary'\n : 'hover:bg-white/5 text-white/70'\n }`}\n >\n <button\n type=\"button\"\n className=\"flex min-w-0 flex-1 items-center gap-2 text-left\"\n onClick={() => setSelectedSectionId(section.id)}\n >\n {section.icon && <span>{section.icon}</span>}\n <span className=\"flex-1 text-sm font-medium truncate\">{section.title}</span>\n <span className=\"text-[11px] tabular-nums opacity-40\">{section.pageCount ?? 0}</span>\n </button>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n if (confirm(`Delete section \"${section.title}\"?`)) {\n admin.deleteSection(section.id)\n }\n }}\n className=\"rounded p-1 text-white/20 opacity-0 transition-opacity group-hover:opacity-100 hover:text-destructive\"\n aria-label={`Delete section ${section.title}`}\n title=\"Delete section\"\n >\n <svg aria-hidden=\"true\" className=\"h-3.5 w-3.5\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M5.5 5.5A.5.5 0 016 6v6a.5.5 0 01-1 0V6a.5.5 0 01.5-.5zm2.5 0a.5.5 0 01.5.5v6a.5.5 0 01-1 0V6a.5.5 0 01.5-.5zm3 .5a.5.5 0 00-1 0v6a.5.5 0 001 0V6z\" />\n <path fillRule=\"evenodd\" d=\"M14.5 3a1 1 0 01-1 1H13v9a2 2 0 01-2 2H5a2 2 0 01-2-2V4h-.5a1 1 0 010-2H6a1 1 0 011-1h2a1 1 0 011 1h3.5a1 1 0 011 1zM4.118 4L4 4.059V13a1 1 0 001 1h6a1 1 0 001-1V4.059L11.882 4H4.118z\" clipRule=\"evenodd\" />\n </svg>\n </button>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"rounded-xl border border-white/8 bg-white/[0.02] p-5\">\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-white/80\">\n {selectedSection ? `Pages — ${selectedSection.title}` : 'Pages'}\n </h2>\n {selectedSection && (\n <button\n type=\"button\"\n onClick={() => setShowPageForm(!showPageForm)}\n className=\"rounded-lg bg-primary px-3 py-1.5 text-xs font-medium transition-colors hover:bg-primary/90\"\n >\n + Add Page\n </button>\n )}\n </div>\n\n {!selectedSection && (\n <p className=\"py-16 text-center text-sm text-white/30\">Select a section to manage pages</p>\n )}\n\n {showPageForm && selectedSection && (\n <div className=\"mb-4 space-y-2 rounded-lg border border-white/10 bg-white/5 p-4\">\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-page-title\">\n <span className=\"text-xs font-medium text-white/50\">Title</span>\n <input\n id=\"docs-admin-page-title\"\n type=\"text\"\n placeholder=\"Install the package\"\n value={pageForm.title}\n onChange={(e) =>\n setPageForm({ ...pageForm, title: e.target.value })\n }\n className=\"w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm outline-none focus:border-primary/40\"\n />\n </label>\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-page-slug\">\n <span className=\"text-xs font-medium text-white/50\">Slug</span>\n <input\n id=\"docs-admin-page-slug\"\n type=\"text\"\n placeholder=\"install\"\n value={pageForm.slug}\n onChange={(e) =>\n setPageForm({ ...pageForm, slug: e.target.value })\n }\n className=\"w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm outline-none focus:border-primary/40\"\n />\n </label>\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-page-content\">\n <span className=\"text-xs font-medium text-white/50\">\n Content (MDX)\n </span>\n <textarea\n id=\"docs-admin-page-content\"\n placeholder=\"# Install\"\n value={pageForm.content}\n onChange={(e) =>\n setPageForm({ ...pageForm, content: e.target.value })\n }\n rows={5}\n className=\"w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm outline-none focus:border-primary/40 resize-y\"\n />\n </label>\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-page-tags\">\n <span className=\"text-xs font-medium text-white/50\">\n Tags\n </span>\n <input\n id=\"docs-admin-page-tags\"\n type=\"text\"\n placeholder=\"setup, install\"\n value={pageForm.tags}\n onChange={(e) =>\n setPageForm({ ...pageForm, tags: e.target.value })\n }\n className=\"w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm outline-none focus:border-primary/40\"\n />\n </label>\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-page-access\">\n <span className=\"text-xs font-medium text-white/50\">Access</span>\n <select\n id=\"docs-admin-page-access\"\n value={pageForm.access}\n onChange={(e) =>\n setPageForm({\n ...pageForm,\n access: toDocAccess(e.target.value),\n })\n }\n className=\"w-full rounded-lg border border-white/10 bg-white/5 px-3 py-2 text-sm outline-none focus:border-primary/40\"\n >\n <option value=\"public\">Public</option>\n <option value=\"team\">Team</option>\n <option value=\"admin\">Admin</option>\n </select>\n </label>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n disabled={!canCreatePage}\n onClick={async () => {\n await admin.createPage({\n title: pageForm.title,\n slug: pageForm.slug,\n content: pageForm.content,\n sectionId: selectedSection.id,\n access: pageForm.access,\n tags: pageForm.tags ? pageForm.tags.split(',').map((t) => t.trim()) : [],\n order: sectionPages.length,\n })\n setPageForm(initialPageForm())\n setShowPageForm(false)\n }}\n className=\"rounded-lg bg-primary px-4 py-2 text-xs font-medium disabled:cursor-not-allowed disabled:opacity-40 hover:bg-primary/90\"\n >\n Create\n </button>\n <button\n type=\"button\"\n onClick={() => setShowPageForm(false)}\n className=\"rounded-lg border border-white/10 px-4 py-2 text-xs hover:bg-white/5\"\n >\n Cancel\n </button>\n </div>\n </div>\n )}\n\n {selectedSection && sectionPages.length > 0 && (\n <div className=\"space-y-1\">\n {sectionPages.map((page) => (\n <div\n key={page.id}\n className=\"group flex items-center gap-3 rounded-lg px-3 py-2.5 transition-colors hover:bg-white/5\"\n >\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-white/80 truncate\">{page.title}</p>\n <p className=\"text-[11px] text-white/30\">/{page.slug}</p>\n </div>\n <span\n className={`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium ${\n page.status === 'published'\n ? 'bg-success/15 text-success'\n : page.status === 'archived'\n ? 'bg-white/5 text-white/30'\n : 'bg-warning/15 text-warning'\n }`}\n >\n {page.status}\n </span>\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n {page.status === 'draft' && (\n <button\n type=\"button\"\n onClick={() => admin.publishPage(page.id)}\n className=\"rounded px-2 py-1 text-[11px] text-success hover:bg-success/10\"\n title=\"Publish\"\n >\n Publish\n </button>\n )}\n {page.status === 'published' && (\n <button\n type=\"button\"\n onClick={() => admin.archivePage(page.id)}\n className=\"rounded px-2 py-1 text-[11px] text-warning hover:bg-warning/10\"\n title=\"Archive\"\n >\n Archive\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => {\n if (confirm(`Delete page \"${page.title}\"?`)) admin.deletePage(page.id)\n }}\n className=\"rounded p-1 text-white/20 hover:text-destructive\"\n aria-label={`Delete page ${page.title}`}\n title=\"Delete\"\n >\n <svg aria-hidden=\"true\" className=\"h-3.5 w-3.5\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M5.5 5.5A.5.5 0 016 6v6a.5.5 0 01-1 0V6a.5.5 0 01.5-.5zm2.5 0a.5.5 0 01.5.5v6a.5.5 0 01-1 0V6a.5.5 0 01.5-.5zm3 .5a.5.5 0 00-1 0v6a.5.5 0 001 0V6z\" />\n <path fillRule=\"evenodd\" d=\"M14.5 3a1 1 0 01-1 1H13v9a2 2 0 01-2 2H5a2 2 0 01-2-2V4h-.5a1 1 0 010-2H6a1 1 0 011-1h2a1 1 0 011 1h3.5a1 1 0 011 1zM4.118 4L4 4.059V13a1 1 0 001 1h6a1 1 0 001-1V4.059L11.882 4H4.118z\" clipRule=\"evenodd\" />\n </svg>\n </button>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {selectedSection && sectionPages.length === 0 && !showPageForm && (\n <p className=\"py-12 text-center text-sm text-white/30\">No pages in this section</p>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n}\n","/**\n * @module reactDocsIndexPage\n * @package @geenius/docs/react\n * @description Renders the React docs landing page with section discovery,\n * recent updates, and command-palette search entry points.\n */\n\nimport type { DocPage, DocSection, SearchResult } from '@geenius/docs/shared'\nimport { buildDocsIndex, searchDocs } from '@geenius/docs/shared'\nimport { useCallback, useEffect, useState } from 'react'\nimport { DocSearch } from '../components/DocSearch'\nimport { useDocSearch } from '../hooks/useDocSearch'\nimport { useDocs } from '../hooks/useDocs'\nimport { cn } from '../lib/utils'\n\ninterface DocsIndexPageProps {\n tree: (DocSection & { pages: DocPage[]; pageCount: number })[] | undefined\n onSelectPage?: (page: DocPage, section: DocSection) => void\n className?: string\n}\n\n/**\n * Landing page for the React docs experience.\n *\n * @param props - Docs tree plus optional page selection handler.\n * @returns Landing page UI for the React docs variant.\n */\nexport function DocsIndexPage({\n tree,\n onSelectPage,\n className,\n}: DocsIndexPageProps): React.JSX.Element {\n const docs = useDocs(tree)\n const [isSearchOpen, setIsSearchOpen] = useState(false)\n\n const searchFn = useCallback(\n (q: string): SearchResult[] => {\n const index = buildDocsIndex(docs.flatPages, docs.sections)\n return searchDocs(q, index)\n },\n [docs.flatPages, docs.sections]\n )\n\n const search = useDocSearch(searchFn)\n\n useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault()\n setIsSearchOpen(true)\n }\n }\n document.addEventListener('keydown', handler)\n return () => document.removeEventListener('keydown', handler)\n }, [])\n\n if (docs.isLoading) {\n return (\n <div className={cn('min-h-screen bg-[#090a0f] px-6 py-16', className)}>\n <div className=\"mx-auto max-w-5xl\">\n <div className=\"mb-10 h-10 w-64 animate-pulse rounded-lg bg-white/5\" />\n <div className=\"mb-8 h-12 w-full max-w-xl animate-pulse rounded-xl bg-white/5\" />\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {Array.from({ length: 6 }, (_, index) => `docs-index-skeleton-${index}`).map((key) => (\n <div key={key} className=\"h-36 animate-pulse rounded-xl bg-white/5\" />\n ))}\n </div>\n </div>\n </div>\n )\n }\n\n if (docs.sections.length === 0) {\n return (\n <div\n className={cn(\n 'flex min-h-screen flex-col items-center justify-center bg-[#090a0f] text-center',\n className,\n )}\n >\n <div className=\"mb-4 text-6xl opacity-30\">📚</div>\n <h2 className=\"mb-2 text-xl font-semibold text-white/80\">No documentation yet</h2>\n <p className=\"max-w-sm text-sm text-white/40\">\n Create your first section and pages to get started with your documentation.\n </p>\n </div>\n )\n }\n\n return (\n <div className={cn('min-h-screen bg-[#090a0f] text-white', className)}>\n <div className=\"mx-auto max-w-5xl px-6 py-16\">\n <h1 className=\"mb-2 text-4xl font-bold tracking-tight\">Documentation</h1>\n <p className=\"mb-10 text-lg text-white/50\">\n Browse guides, API references, and tutorials.\n </p>\n\n <button\n type=\"button\"\n onClick={() => setIsSearchOpen(true)}\n className=\"mb-12 flex w-full max-w-xl items-center gap-3 rounded-xl border border-white/10 bg-white/5 px-5 py-3.5 text-left text-sm text-white/30 transition-colors hover:border-white/20 hover:bg-white/[0.07]\"\n >\n <svg aria-hidden=\"true\" className=\"h-4.5 w-4.5 shrink-0\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z\" clipRule=\"evenodd\" />\n </svg>\n <span className=\"flex-1\">Search documentation…</span>\n <kbd className=\"rounded border border-white/10 bg-white/5 px-2 py-0.5 text-[11px]\">⌘K</kbd>\n </button>\n\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {docs.sections\n .filter((s) => !s.parentId)\n .map((section) => (\n <button\n key={section.id}\n type=\"button\"\n onClick={() => {\n const firstPage = section.pages?.[0]\n if (firstPage && onSelectPage) onSelectPage(firstPage, section)\n }}\n className=\"group flex flex-col rounded-xl border border-white/8 bg-white/[0.03] p-5 text-left transition-all hover:border-primary/30 hover:bg-white/[0.06] hover:shadow-lg hover:shadow-primary/5\"\n >\n {section.icon && (\n <span className=\"mb-3 text-2xl\">{section.icon}</span>\n )}\n <h3 className=\"mb-1.5 text-base font-semibold text-white/90 group-hover:text-white transition-colors\">\n {section.title}\n </h3>\n {section.description && (\n <p className=\"mb-3 flex-1 text-sm leading-relaxed text-white/40\">\n {section.description}\n </p>\n )}\n <div className=\"flex items-center gap-2 text-xs text-white/25\">\n <span>{section.pageCount ?? 0} pages</span>\n </div>\n </button>\n ))}\n </div>\n\n {docs.flatPages.length > 0 && (\n <div className=\"mt-16\">\n <h2 className=\"mb-6 text-lg font-semibold text-white/80\">Recently updated</h2>\n <div className=\"space-y-2\">\n {docs.flatPages\n .sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime())\n .slice(0, 8)\n .map((page) => {\n const section = docs.sections.find((s) => s.id === page.sectionId)\n return (\n <button\n key={page.id}\n type=\"button\"\n onClick={() => section && onSelectPage?.(page, section)}\n className=\"flex w-full items-center gap-4 rounded-lg px-4 py-3 text-left transition-colors hover:bg-white/5\"\n >\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-white/80 truncate\">{page.title}</p>\n <p className=\"text-xs text-white/30 truncate\">{section?.title}</p>\n </div>\n <span className=\"shrink-0 text-xs tabular-nums text-white/20\">\n {page.readingTime} min read\n </span>\n </button>\n )\n })}\n </div>\n </div>\n )}\n </div>\n\n <DocSearch\n results={search.results}\n query={search.query}\n onQuery={search.setQuery}\n onSelect={(result) => {\n setIsSearchOpen(false)\n search.clearSearch()\n const section = docs.sections.find((s) => s.slug === result.sectionSlug)\n const page = docs.flatPages.find((p) => p.id === result.pageId)\n if (page && section && onSelectPage) onSelectPage(page, section)\n }}\n isOpen={isSearchOpen}\n onClose={() => setIsSearchOpen(false)}\n />\n </div>\n )\n}\n","/**\n * @module reactDocViewPage\n * @package @geenius/docs/react\n * @description Renders the primary React docs article page with layout chrome,\n * metadata, TOC tracking, edit actions, and previous or next navigation.\n */\n\nimport type { DocPage as DocPageType, DocSection } from '@geenius/docs/shared'\nimport { buildBreadcrumbs } from '@geenius/docs/shared'\nimport { useEffect, useMemo } from 'react'\nimport { DocPage } from '../components/DocPage'\nimport { DocsLayout } from '../components/DocsLayout'\nimport { EditButton } from '../components/EditButton'\nimport { PageNavigation } from '../components/PageNavigation'\nimport { useDocs } from '../hooks/useDocs'\nimport { useTableOfContents } from '../hooks/useTableOfContents'\nimport { cn } from '../lib/utils'\n\ninterface DocViewPageProps {\n tree: (DocSection & { pages: DocPageType[]; pageCount: number })[] | undefined\n page: DocPageType | null | undefined\n editPageUrl?: string\n onNavigate: (page: DocPageType, section: DocSection) => void\n onIncrementView?: (pageId: string) => void\n className?: string\n}\n\n/**\n * Detailed article page for the React docs variant.\n *\n * @param props - Docs tree, active page, and page-level interaction handlers.\n * @returns Detailed page view or an appropriate loading or empty state.\n */\nexport function DocViewPage({\n tree,\n page,\n editPageUrl,\n onNavigate,\n onIncrementView,\n className,\n}: DocViewPageProps): React.JSX.Element {\n const docs = useDocs(tree)\n const { toc, activeId } = useTableOfContents(page?.content)\n\n useEffect(() => {\n if (page?.id && onIncrementView) {\n onIncrementView(page.id)\n }\n }, [page?.id, onIncrementView])\n\n const breadcrumbs = useMemo(() => {\n if (!page) return []\n return buildBreadcrumbs(docs.sections, page.sectionId, page.slug)\n }, [docs.sections, page])\n\n const { prev, next } = useMemo(() => {\n if (!page) return { prev: undefined, next: undefined }\n const allPages = docs.flatPages\n const idx = allPages.findIndex((p) => p.id === page.id)\n const section = docs.sections.find((s) => s.id === page.sectionId)\n return {\n prev: idx > 0\n ? { title: allPages[idx - 1].title, href: `/docs/${section?.slug ?? ''}/${allPages[idx - 1].slug}` }\n : undefined,\n next: idx < allPages.length - 1\n ? { title: allPages[idx + 1].title, href: `/docs/${section?.slug ?? ''}/${allPages[idx + 1].slug}` }\n : undefined,\n }\n }, [page, docs.flatPages, docs.sections])\n\n if (docs.isLoading || page === undefined) {\n return (\n <div className={cn('flex min-h-screen bg-[#090a0f]', className)}>\n <div className=\"hidden w-[260px] shrink-0 border-r border-white/5 bg-[#0b0c12] lg:block\">\n <div className=\"space-y-3 p-4\">\n {Array.from({ length: 8 }, (_, index) => `doc-view-sidebar-skeleton-${index}`).map((key) => (\n <div key={key} className=\"h-8 animate-pulse rounded-lg bg-white/5\" />\n ))}\n </div>\n </div>\n <div className=\"flex-1 px-10 py-8\">\n <div className=\"mx-auto max-w-3xl space-y-4\">\n <div className=\"h-5 w-48 animate-pulse rounded bg-white/5\" />\n <div className=\"h-10 w-96 animate-pulse rounded bg-white/5\" />\n <div className=\"mt-8 space-y-3\">\n {Array.from({ length: 12 }, (_, index) => `doc-view-body-skeleton-${index}`).map((key, index) => (\n <div key={key} className=\"h-4 animate-pulse rounded bg-white/5\" style={{ width: `${60 + index * 3}%` }} />\n ))}\n </div>\n </div>\n </div>\n </div>\n )\n }\n\n if (!page) {\n return (\n <div\n className={cn(\n 'flex min-h-screen flex-col items-center justify-center bg-[#090a0f] text-center',\n className,\n )}\n >\n <div className=\"mb-4 text-6xl opacity-30\">🔍</div>\n <h2 className=\"mb-2 text-xl font-semibold text-white/80\">Page not found</h2>\n <p className=\"text-sm text-white/40\">The documentation page you're looking for doesn't exist.</p>\n </div>\n )\n }\n\n return (\n <DocsLayout\n sections={docs.sections}\n currentPage={page}\n toc={toc}\n activeHeadingId={activeId}\n breadcrumbs={breadcrumbs}\n currentPageId={page.id}\n onNavigate={onNavigate}\n className={className}\n >\n <div className=\"mb-8\">\n <h1 className=\"mb-3 text-3xl font-bold tracking-tight\">{page.title}</h1>\n <div className=\"flex flex-wrap items-center gap-4 text-sm text-white/40\">\n <span className=\"flex items-center gap-1.5\">\n {page.author.avatar ? (\n <img src={page.author.avatar} alt=\"\" className=\"h-5 w-5 rounded-full\" />\n ) : (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full bg-primary/20 text-[10px] text-primary\">\n {page.author.name[0]}\n </span>\n )}\n {page.author.name}\n </span>\n {page.readingTime > 0 && (\n <span>{page.readingTime} min read</span>\n )}\n {page.lastEditedBy && (\n <span>\n Edited by {page.lastEditedBy.name}\n </span>\n )}\n {page.viewCount > 0 && (\n <span>{page.viewCount.toLocaleString()} views</span>\n )}\n </div>\n\n {page.tags.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-1.5\">\n {page.tags.map((tag) => (\n <span key={tag} className=\"rounded-full bg-white/5 px-2.5 py-0.5 text-xs text-white/40\">\n {tag}\n </span>\n ))}\n </div>\n )}\n </div>\n\n <DocPage page={page} />\n\n <div className=\"mt-10 flex items-center justify-between border-t border-white/5 pt-6\">\n <EditButton pageSlug={page.slug} editUrl={editPageUrl} />\n {page.version && (\n <span className=\"text-xs text-white/25\">v{page.version}</span>\n )}\n </div>\n\n <PageNavigation prev={prev} next={next} />\n </DocsLayout>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/components/Breadcrumbs.tsx","../../shared/src/utilities.ts","../src/components/DocPage.tsx","../src/components/DocSearch.tsx","../src/components/DocSidebar.tsx","../src/components/TableOfContents.tsx","../src/components/DocsLayout.tsx","../src/components/EditButton.tsx","../src/components/PageNavigation.tsx","../src/components/VersionSelector.tsx","../src/hooks/useDocSearch.ts","../src/hooks/useDocs.ts","../src/hooks/useDocsAdmin.ts","../src/hooks/useTableOfContents.ts","../src/pages/DocSearchPage.tsx","../src/pages/DocsAdminPage.tsx","../src/pages/DocsIndexPage.tsx","../src/pages/DocViewPage.tsx"],"names":["jsx","jsxs","useState","useCallback","motion","AnimatePresence","useRef","useId","useEffect","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module docsReactUtils\n * @package @geenius/docs/react\n * @description Provides the Tailwind-aware class composition helper for the\n * React docs variant so exported components can expose stable `className`\n * extension points without duplicating merge logic.\n */\n\nimport { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\n/**\n * Merges conditional class fragments while preserving Tailwind conflict\n * resolution.\n *\n * @param inputs - Class fragments that may include arrays, objects, and falsy values.\n * @returns A merged Tailwind-safe class string.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs))\n}\n","/**\n * @module reactBreadcrumbs\n * @package @geenius/docs/react\n * @description Renders breadcrumb navigation for the React docs variant using\n * the shared docs route metadata and Tailwind styling contract.\n */\n\nimport type { BreadcrumbItem } from '@geenius/docs/shared'\nimport React from 'react'\nimport { cn } from '../lib/utils'\n\ninterface BreadcrumbsProps {\n items: BreadcrumbItem[]\n className?: string\n}\n\n/**\n * Renders the current docs breadcrumb trail.\n *\n * @param props - Breadcrumb items describing the current page ancestry.\n * @returns Breadcrumb navigation or `null` when there are no items to show.\n */\nexport function Breadcrumbs({\n items,\n className,\n}: BreadcrumbsProps): React.JSX.Element | null {\n if (items.length === 0) return null\n\n return (\n <nav className={cn('flex items-center gap-1.5 text-sm', className)} aria-label=\"Breadcrumb\">\n {items.map((item, idx) => (\n <React.Fragment key={`${item.href}-${item.title}`}>\n {idx > 0 && (\n <svg\n aria-hidden=\"true\"\n className=\"h-3.5 w-3.5 shrink-0 text-foreground/20\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path d=\"M6 4l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n )}\n {idx === items.length - 1 ? (\n <span className=\"truncate text-foreground/60\">{item.title}</span>\n ) : (\n <a\n href={item.href}\n className=\"truncate text-foreground/40 transition-colors hover:text-foreground/70\"\n >\n {item.title}\n </a>\n )}\n </React.Fragment>\n ))}\n </nav>\n )\n}\n","/**\n * @module docsUtilities\n * @package @geenius/docs/shared\n * @description Hosts the framework-agnostic docs helpers used by the shared\n * barrel and provider implementations for search, slugging, breadcrumbs, table\n * of contents extraction, and default config resolution.\n */\n\nimport type {\n BreadcrumbItem,\n DocPage,\n DocSection,\n DocsConfig,\n SearchResult,\n TocItem,\n} from './types'\n\nfunction toTocLevel(level: number): TocItem['level'] {\n if (level === 2 || level === 3 || level === 4) {\n return level\n }\n\n return 4\n}\n\n/**\n * Extracts a nested table of contents from Markdown heading lines.\n *\n * @param mdxContent - Markdown or MDX content to parse.\n * @returns A nested heading tree containing only level 2 through 4 headings.\n */\nexport function extractToc(mdxContent: string): TocItem[] {\n const headingRegex = /^(#{2,4})\\s+(.+)$/gm\n const items: TocItem[] = []\n let match = headingRegex.exec(mdxContent)\n\n while (match !== null) {\n const text = match[2].trim()\n items.push({\n id: slugify(text),\n text,\n level: toTocLevel(match[1].length),\n children: [],\n })\n match = headingRegex.exec(mdxContent)\n }\n\n const nested: TocItem[] = []\n let currentH2: TocItem | null = null\n let currentH3: TocItem | null = null\n\n for (const item of items) {\n if (item.level === 2) {\n currentH2 = item\n currentH3 = null\n nested.push(item)\n continue\n }\n\n if (item.level === 3) {\n currentH3 = item\n if (currentH2) {\n currentH2.children.push(item)\n } else {\n nested.push(item)\n }\n continue\n }\n\n if (currentH3) {\n currentH3.children.push(item)\n } else if (currentH2) {\n currentH2.children.push(item)\n } else {\n nested.push(item)\n }\n }\n\n return nested\n}\n\n/**\n * Calculates approximate word count and reading time for page content.\n *\n * @param content - Markdown or MDX content to measure.\n * @returns Word count and reading-time metadata derived from the content.\n */\nexport function calcWordCount(\n content: string,\n): { wordCount: number; readingTime: number } {\n const stripped = content\n .replace(/```[\\s\\S]*?```/g, '')\n .replace(/`[^`]+`/g, '')\n .replace(/!\\[.*?\\]\\(.*?\\)/g, '')\n .replace(/\\[([^\\]]+)\\]\\(.*?\\)/g, '$1')\n .replace(/[#*_~>|-]/g, '')\n .trim()\n\n const words = stripped.split(/\\s+/).filter(Boolean)\n\n return {\n wordCount: words.length,\n readingTime: Math.max(1, Math.ceil(words.length / 225)),\n }\n}\n\n/**\n * Builds a breadcrumb trail for a page from a section tree.\n *\n * @param sections - Full section list used to resolve parent relationships.\n * @param sectionId - Identifier of the page's containing section.\n * @param slug - Page slug appended as the terminal breadcrumb.\n * @returns Breadcrumb items suitable for page-level navigation UI.\n */\nexport function buildBreadcrumbs(\n sections: DocSection[],\n sectionId: string,\n slug: string,\n): BreadcrumbItem[] {\n const crumbs: BreadcrumbItem[] = [{ title: 'Docs', href: '/docs' }]\n const sectionMap = new Map(sections.map((section) => [section.id, section]))\n const trail: DocSection[] = []\n let current = sectionMap.get(sectionId)\n\n while (current) {\n trail.unshift(current)\n current = current.parentId ? sectionMap.get(current.parentId) : undefined\n }\n\n for (const section of trail) {\n crumbs.push({ title: section.title, href: `/docs/${section.slug}` })\n }\n\n if (slug) {\n const parentSlug = trail[trail.length - 1]?.slug ?? ''\n crumbs.push({ title: slug, href: `/docs/${parentSlug}/${slug}` })\n }\n\n return crumbs\n}\n\n/**\n * Builds a full-text search index from published pages and their sections.\n *\n * @param pages - Page records to index.\n * @param sections - Section metadata used to enrich each result.\n * @returns Search index entries derived from the published pages.\n */\nexport function buildDocsIndex(\n pages: DocPage[],\n sections: DocSection[],\n): SearchResult[] {\n const sectionMap = new Map(sections.map((section) => [section.id, section]))\n\n return pages\n .filter((page) => page.status === 'published')\n .map((page) => {\n const section = sectionMap.get(page.sectionId)\n\n return {\n pageId: page.id,\n pageTitle: page.title,\n sectionTitle: section?.title ?? '',\n sectionSlug: section?.slug ?? '',\n slug: page.slug,\n highlight: page.excerpt ?? page.content.slice(0, 160),\n score: 0,\n tags: page.tags,\n }\n })\n}\n\n/**\n * Searches a shared search index and returns ranked matches.\n *\n * @param query - User-entered search query.\n * @param index - Search index entries to rank.\n * @returns Ranked search results limited to the top twenty entries.\n */\nexport function searchDocs(\n query: string,\n index: SearchResult[],\n): SearchResult[] {\n if (!query.trim()) {\n return []\n }\n\n const terms = query.toLowerCase().split(/\\s+/).filter(Boolean)\n\n return index\n .map((entry) => {\n let score = 0\n const titleLower = entry.pageTitle.toLowerCase()\n const highlightLower = entry.highlight.toLowerCase()\n const sectionLower = entry.sectionTitle.toLowerCase()\n const tagsLower = entry.tags.map((tag) => tag.toLowerCase())\n\n for (const term of terms) {\n if (titleLower.includes(term)) {\n score += 10\n }\n if (tagsLower.some((tag) => tag.includes(term))) {\n score += 5\n }\n if (sectionLower.includes(term)) {\n score += 3\n }\n if (highlightLower.includes(term)) {\n score += 2\n }\n }\n\n return { ...entry, score }\n })\n .filter((entry) => entry.score > 0)\n .sort((left, right) => right.score - left.score)\n .slice(0, 20)\n}\n\n/**\n * Creates a URL-safe slug from arbitrary text.\n *\n * @param title - Source text to slugify.\n * @returns A lower-case kebab-case slug.\n */\nexport function slugify(title: string): string {\n return title\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/(^-|-$)/g, '')\n}\n\n/**\n * Produces a search-result snippet centred around a matching query.\n *\n * @param text - Source text used to build the snippet.\n * @param query - User-entered search query.\n * @param maxLen - Maximum snippet length.\n * @returns A trimmed snippet containing the best query match when available.\n */\nexport function highlightMatch(\n text: string,\n query: string,\n maxLen = 160,\n): string {\n if (!query.trim()) {\n return text.slice(0, maxLen)\n }\n\n const lowerText = text.toLowerCase()\n const lowerQuery = query.toLowerCase()\n const index = lowerText.indexOf(lowerQuery)\n\n if (index === -1) {\n return text.slice(0, maxLen)\n }\n\n const start = Math.max(0, index - 40)\n const end = Math.min(text.length, index + query.length + (maxLen - 80))\n let snippet = text.slice(start, end)\n\n if (start > 0) {\n snippet = `…${snippet}`\n }\n if (end < text.length) {\n snippet = `${snippet}…`\n }\n\n return snippet\n}\n\n/**\n * Baseline config used by the framework variants when no explicit config is provided.\n */\nexport const defaultDocsConfig: DocsConfig = {\n siteName: 'Docs',\n cmdKEnabled: true,\n showReadingTime: true,\n showLastEdited: true,\n versionsEnabled: false,\n defaultAccess: 'public',\n printModeEnabled: true,\n}\n","/**\n * @module reactDocPage\n * @package @geenius/docs/react\n * @description Renders a docs page body with safe Markdown semantics, heading\n * anchors, and package-consistent typography. The component deliberately avoids\n * raw HTML injection so authored docs content stays within the Markdown runtime.\n */\n\n\nimport type { DocPage as DocPageType } from '@geenius/docs/shared'\nimport { slugify } from '@geenius/docs/shared'\nimport type React from 'react'\nimport type { ReactNode } from 'react'\nimport { Children } from 'react'\nimport type { Components } from 'react-markdown'\nimport ReactMarkdown from 'react-markdown'\nimport remarkGfm from 'remark-gfm'\nimport { cn } from '../lib/utils'\n\ninterface DocPageProps {\n page: DocPageType\n className?: string\n}\n\nfunction getNodeText(children: ReactNode): string {\n return Children.toArray(children)\n .map((child) => {\n if (typeof child === 'string' || typeof child === 'number') {\n return String(child)\n }\n\n return ''\n })\n .join(' ')\n}\n\nfunction createHeading(\n Tag: 'h1' | 'h2' | 'h3' | 'h4',\n className: string,\n): NonNullable<Components[typeof Tag]> {\n return ({ children }) => {\n const text = getNodeText(children)\n const id = slugify(text)\n\n return (\n <Tag id={id} className={cn(className, 'scroll-mt-20')}>\n <a href={`#${id}`} className=\"transition-colors hover:text-primary\">\n {children}\n </a>\n </Tag>\n )\n }\n}\n\n/**\n * Renders a docs page body using safe Markdown rendering.\n *\n * @param props - Docs page record containing the Markdown body to render.\n * @returns The rendered page article.\n */\nexport function DocPage(props: DocPageProps): React.JSX.Element {\n return (\n <article className={cn('prose-custom max-w-none', props.className)}>\n <ReactMarkdown\n remarkPlugins={[remarkGfm]}\n components={{\n h1: createHeading('h1', 'mb-4 mt-8 text-3xl font-bold'),\n h2: createHeading(\n 'h2',\n 'mb-3 mt-8 border-b border-border/60 pb-2 text-2xl font-bold',\n ),\n h3: createHeading('h3', 'mb-2 mt-6 text-xl font-semibold'),\n h4: createHeading('h4', 'mb-2 mt-4 text-lg font-medium'),\n p: ({ children }) => (\n <p className=\"my-3 leading-relaxed text-foreground/80\">{children}</p>\n ),\n a: ({ href, children }) => (\n <a\n href={href}\n target={href?.startsWith('/') ? undefined : '_blank'}\n rel={href?.startsWith('/') ? undefined : 'noreferrer noopener'}\n className=\"underline underline-offset-2 transition-colors hover:text-primary\"\n >\n {children}\n </a>\n ),\n code: ({ className, children }) =>\n className ? (\n <code className={className}>{children}</code>\n ) : (\n <code className=\"rounded bg-foreground/10 px-1.5 py-0.5 text-sm text-primary\">\n {children}\n </code>\n ),\n pre: ({ children }) => (\n <pre className=\"my-4 overflow-x-auto rounded-lg bg-background/80 p-4 text-sm leading-relaxed\">\n {children}\n </pre>\n ),\n blockquote: ({ children }) => (\n <blockquote className=\"my-4 rounded-r-lg border-l-4 border-primary/40 bg-foreground/5 py-3 pl-4 pr-4 italic text-foreground/70\">\n {children}\n </blockquote>\n ),\n table: ({ children }) => (\n <div className=\"my-4 overflow-x-auto rounded-lg border border-border/60\">\n <table className=\"w-full text-sm\">{children}</table>\n </div>\n ),\n th: ({ children }) => (\n <th className=\"border-b border-border/60 bg-foreground/5 px-4 py-2.5 text-left font-semibold\">\n {children}\n </th>\n ),\n td: ({ children }) => (\n <td className=\"border-b border-border/40 px-4 py-2 text-foreground/70 last:border-none\">\n {children}\n </td>\n ),\n }}\n >\n {props.page.content}\n </ReactMarkdown>\n </article>\n )\n}\n","/**\n * @module reactDocSearch\n * @package @geenius/docs/react\n * @description Provides the React command-palette style docs search modal with\n * animated presentation, keyboard navigation, and result highlighting.\n */\n\nimport type { SearchResult } from '@geenius/docs/shared'\nimport { highlightMatch } from '@geenius/docs/shared'\nimport { AnimatePresence, motion } from '@geenius/motion/react'\nimport type React from 'react'\nimport { useCallback, useEffect, useId, useRef, useState } from 'react'\nimport { cn } from '../lib/utils'\n\ninterface DocSearchProps {\n results: SearchResult[]\n query: string\n onQuery: (q: string) => void\n onSelect: (result: SearchResult) => void\n isOpen: boolean\n onClose: () => void\n className?: string\n}\n\nconst FOCUSABLE_SELECTOR =\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n\nfunction getActiveElement(): HTMLElement | null {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null\n}\n\n/**\n * Renders the modal search surface for the React docs variant.\n *\n * @param props - Search results, query state, and modal interaction handlers.\n * @returns Search dialog markup when open, otherwise `null`.\n */\nexport function DocSearch({\n results,\n query,\n onQuery,\n onSelect,\n isOpen,\n onClose,\n className,\n}: DocSearchProps): React.JSX.Element | null {\n const [activeIndex, setActiveIndex] = useState(0)\n const dialogId = useId()\n const inputRef = useRef<HTMLInputElement>(null)\n const dialogRef = useRef<HTMLDivElement>(null)\n const resultRefs = useRef<Array<HTMLButtonElement | null>>([])\n const previousFocusRef = useRef<HTMLElement | null>(null)\n const activeResultId = results[activeIndex]\n ? `${dialogId}-result-${results[activeIndex].pageId}`\n : undefined\n\n useEffect(() => {\n if (isOpen) {\n previousFocusRef.current = getActiveElement()\n inputRef.current?.focus()\n setActiveIndex(0)\n }\n\n return () => {\n previousFocusRef.current?.focus()\n }\n }, [isOpen])\n\n useEffect(() => {\n if (!query.trim() || results.length === 0) {\n setActiveIndex(0)\n }\n }, [query, results.length])\n\n useEffect(() => {\n resultRefs.current[activeIndex]?.scrollIntoView({ block: 'nearest' })\n }, [activeIndex])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n setActiveIndex((i) => Math.min(i + 1, results.length - 1))\n } else if (e.key === 'ArrowUp') {\n e.preventDefault()\n setActiveIndex((i) => Math.max(i - 1, 0))\n } else if (e.key === 'Enter' && results[activeIndex]) {\n e.preventDefault()\n onSelect(results[activeIndex])\n } else if (e.key === 'Escape') {\n e.preventDefault()\n onClose()\n } else if (e.key === 'Tab' && dialogRef.current) {\n const focusableElements = Array.from(\n dialogRef.current.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n ).filter((element) => !element.hasAttribute('disabled'))\n\n if (focusableElements.length === 0) {\n return\n }\n\n const firstElement = focusableElements[0]\n const lastElement = focusableElements[focusableElements.length - 1]\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault()\n lastElement.focus()\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault()\n firstElement.focus()\n }\n }\n },\n [results, activeIndex, onSelect, onClose]\n )\n\n return (\n <AnimatePresence>\n {isOpen && (\n <div className={cn('fixed inset-0 z-50 flex items-start justify-center pt-[15vh]', className)}>\n <motion.button\n type=\"button\"\n aria-label=\"Close search\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"fixed inset-0 bg-background/80 backdrop-blur-md\"\n onClick={onClose}\n />\n\n <motion.div\n ref={dialogRef}\n initial={{ opacity: 0, scale: 0.95, y: -20 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.95, y: -20 }}\n transition={{ type: 'spring', damping: 25, stiffness: 250 }}\n className=\"relative z-10 w-full max-w-xl overflow-hidden rounded-2xl border border-border/60 bg-card/40 backdrop-blur-3xl shadow-2xl ring-1 ring-border/40\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={`${dialogId}-title`}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"flex items-center gap-3 border-b border-border/60 px-5 py-4 bg-foreground/5\">\n <h2 id={`${dialogId}-title`} className=\"sr-only\">\n Search documentation\n </h2>\n <svg aria-hidden=\"true\" className=\"h-5 w-5 shrink-0 text-foreground/40\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z\" clipRule=\"evenodd\" />\n </svg>\n <input\n ref={inputRef}\n type=\"search\"\n value={query}\n onChange={(e) => onQuery(e.target.value)}\n placeholder=\"Search documentation…\"\n aria-label=\"Search documentation\"\n aria-controls={`${dialogId}-results`}\n aria-activedescendant={activeResultId}\n className=\"flex-1 bg-transparent text-sm text-foreground placeholder:text-muted-foreground outline-none focus-visible:ring-0\"\n />\n <kbd className=\"rounded border border-border/60 bg-foreground/5 px-1.5 py-0.5 text-[11px] text-foreground/30 font-medium\">\n ESC\n </kbd>\n </div>\n\n <div\n id={`${dialogId}-results`}\n className=\"max-h-80 overflow-y-auto p-2\"\n role=\"listbox\"\n >\n <AnimatePresence mode=\"popLayout\">\n {results.length === 0 && query.trim() && (\n <motion.div \n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"flex flex-col items-center py-10 text-center text-foreground/30\"\n >\n <svg aria-hidden=\"true\" className=\"mb-3 h-10 w-10 opacity-50\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" strokeWidth=\"1.5\" />\n <path d=\"M21 21l-4.35-4.35\" strokeWidth=\"1.5\" />\n </svg>\n <p className=\"text-sm\">No results for “{query}”</p>\n <p className=\"mt-1 text-xs opacity-60\">Try different keywords</p>\n </motion.div>\n )}\n\n {results.length === 0 && !query.trim() && (\n <motion.div \n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"py-8 text-center text-sm text-foreground/30\"\n >\n Start typing to search…\n </motion.div>\n )}\n </AnimatePresence>\n\n {results.map((result, idx) => (\n <button\n key={result.pageId}\n ref={(element) => {\n resultRefs.current[idx] = element\n }}\n id={`${dialogId}-result-${result.pageId}`}\n type=\"button\"\n role=\"option\"\n aria-selected={idx === activeIndex}\n onMouseEnter={() => setActiveIndex(idx)}\n onClick={() => onSelect(result)}\n className={cn(\n 'group relative my-0.5 flex w-full flex-col gap-1 rounded-xl px-4 py-3 text-left transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40',\n idx === activeIndex\n ? 'bg-primary/15 text-foreground ring-1 ring-primary/30'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground',\n )}\n >\n {idx === activeIndex && (\n <motion.div \n layoutId=\"search-active-bg\"\n className=\"absolute inset-0 bg-primary/10 rounded-xl\"\n transition={{ type: 'spring', stiffness: 300, damping: 30 }}\n />\n )}\n <div className=\"relative z-10 flex items-center gap-2\">\n <span className=\"rounded bg-primary/20 px-1.5 py-0.5 text-[10px] font-medium text-primary\">\n {result.sectionTitle}\n </span>\n <span className=\"text-sm font-medium\">{result.pageTitle}</span>\n </div>\n <p className=\"relative z-10 truncate text-xs text-foreground/40\">\n {highlightMatch(result.highlight, query)}\n </p>\n {result.tags.length > 0 && (\n <div className=\"relative z-10 flex gap-1 mt-1\">\n {result.tags.slice(0, 3).map((tag) => (\n <span key={tag} className=\"rounded bg-foreground/5 px-1.5 py-0.5 text-[10px] text-foreground/30 border border-border/40\">\n {tag}\n </span>\n ))}\n </div>\n )}\n </button>\n ))}\n </div>\n\n <div className=\"flex items-center gap-4 border-t border-border/60 px-5 py-2.5 text-[11px] text-foreground/30 bg-background/70\">\n <span className=\"flex items-center gap-1\"><kbd className=\"rounded border border-border/60 bg-foreground/5 px-1 pb-0.5 text-[10px]\">↑</kbd> <kbd className=\"rounded border border-border/60 bg-foreground/5 px-1 pb-0.5 text-[10px]\">↓</kbd> navigate</span>\n <span className=\"flex items-center gap-1\"><kbd className=\"rounded border border-border/60 bg-foreground/5 px-1 pb-0.5 text-[10px]\">↵</kbd> select</span>\n <span className=\"flex items-center gap-1\"><kbd className=\"rounded border border-border/60 bg-foreground/5 px-1 pb-0.5 text-[10px]\">esc</kbd> close</span>\n </div>\n </motion.div>\n </div>\n )}\n </AnimatePresence>\n )\n}\n","/**\n * @module reactDocSidebar\n * @package @geenius/docs/react\n * @description Renders the hierarchical sidebar navigation used by the React\n * docs variant, including animated section expansion and active page states.\n */\n\nimport type { DocPage, DocSection } from '@geenius/docs/shared'\nimport { AnimatePresence, motion } from '@geenius/motion/react'\nimport { useCallback, useState } from 'react'\nimport { cn } from '../lib/utils'\nimport type { DocsSectionWithPages } from '../types'\n\ninterface DocSidebarProps {\n sections: DocsSectionWithPages[]\n currentPageId?: string\n onNavigate: (page: DocPage, section: DocSection) => void\n className?: string\n}\n\n/**\n * Sidebar navigation for docs sections and pages.\n *\n * @param props - Section tree, active page id, and page navigation callback.\n * @returns Sidebar markup for the React docs experience.\n */\nexport function DocSidebar({\n sections,\n currentPageId,\n onNavigate,\n className,\n}: DocSidebarProps): React.JSX.Element {\n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set())\n\n const toggle = useCallback((id: string) => {\n setExpandedIds((prev) => {\n const next = new Set(prev)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n }, [])\n\n const topLevel = sections.filter((s) => !s.parentId)\n const childrenOf = (parentId: string) =>\n sections.filter((s) => s.parentId === parentId)\n\n const renderSection = (section: DocsSectionWithPages, depth: number) => {\n const children = childrenOf(section.id)\n const isExpanded = expandedIds.has(section.id)\n const pages = section.pages ?? []\n const hasContent = children.length > 0 || pages.length > 0\n\n return (\n <div key={section.id} className=\"mb-1\" style={{ paddingLeft: depth * 12 }}>\n <motion.button\n type=\"button\"\n onClick={() => toggle(section.id)}\n aria-expanded={hasContent ? isExpanded : undefined}\n className={cn(\n 'flex w-full items-center gap-2 rounded-xl px-3 py-2 text-left text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40',\n isExpanded\n ? 'bg-muted text-foreground'\n : 'text-foreground hover:bg-muted/70',\n )}\n whileHover={{ x: 2 }}\n whileTap={{ scale: 0.98 }}\n >\n {section.icon && <span className=\"text-base\">{section.icon}</span>}\n <span className=\"flex-1 truncate text-foreground\">{section.title}</span>\n {section.pageCount != null && (\n <span className=\"text-xs tabular-nums opacity-50 text-muted-foreground\">{section.pageCount}</span>\n )}\n {hasContent && (\n <motion.svg\n animate={{ rotate: isExpanded ? 90 : 0 }}\n className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <path d=\"M6 4l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" />\n </motion.svg>\n )}\n </motion.button>\n\n <AnimatePresence initial={false}>\n {isExpanded && (\n <motion.div \n initial={{ height: 0, opacity: 0 }}\n animate={{ height: \"auto\", opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.2, ease: \"easeInOut\" }}\n className=\"ml-2 overflow-hidden border-l border-border pl-2\"\n >\n {pages.map((page) => (\n <motion.button\n key={page.id}\n type=\"button\"\n onClick={() => onNavigate(page, section)}\n whileHover={{ x: 2 }}\n whileTap={{ scale: 0.98 }}\n className={cn(\n 'my-0.5 flex w-full items-center gap-2 rounded-lg px-3 py-1.5 text-left text-sm transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40',\n currentPageId === page.id\n ? 'bg-primary/10 font-semibold text-primary ring-1 ring-primary/20'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground',\n )}\n >\n <span className=\"truncate\">{page.title}</span>\n </motion.button>\n ))}\n {children.map((child) => renderSection(child, depth + 1))}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n )\n }\n\n return (\n <nav className={cn('flex flex-col gap-1 py-4', className)}>\n <div className=\"px-4 pb-3 text-xs font-bold uppercase tracking-widest text-muted-foreground\">\n Documentation\n </div>\n {topLevel.map((s) => renderSection(s, 0))}\n </nav>\n )\n}\n","/**\n * @module reactTableOfContents\n * @package @geenius/docs/react\n * @description Renders the React docs table of contents with animated active\n * heading states and nested anchor links derived from the shared TOC model.\n */\n\nimport type { TocItem } from '@geenius/docs/shared'\nimport { AnimatePresence, motion } from '@geenius/motion/react'\nimport { cn } from '../lib/utils'\n\ninterface TableOfContentsProps {\n toc: TocItem[]\n activeId?: string\n className?: string\n}\n\nfunction TocLink({ item, activeId, depth = 0 }: { item: TocItem; activeId?: string; depth?: number }) {\n const isActive = activeId === item.id\n return (\n <>\n <motion.a\n href={`#${item.id}`}\n className={cn(\n 'block truncate border-l-2 py-1 text-[13px] transition-all relative',\n isActive\n ? 'border-primary text-primary font-medium'\n : 'border-transparent text-foreground/40 hover:text-foreground/80 hover:border-border/80',\n )}\n style={{ paddingLeft: 12 + depth * 12 }}\n whileHover={{ x: 2 }}\n whileTap={{ scale: 0.98 }}\n layout\n >\n {item.text}\n </motion.a>\n {item.children.map((child) => (\n <TocLink key={child.id} item={child} activeId={activeId} depth={depth + 1} />\n ))}\n </>\n )\n}\n\n/**\n * Renders the page table of contents.\n *\n * @param props - TOC entries and the currently active heading id.\n * @returns TOC navigation or `null` when the page has no headings.\n */\nexport function TableOfContents({\n toc,\n activeId,\n className,\n}: TableOfContentsProps): React.JSX.Element | null {\n if (toc.length === 0) return null\n\n return (\n <nav className={cn('sticky top-24', className)}>\n <h4 className=\"mb-3 text-xs font-semibold uppercase tracking-widest text-foreground/40\">\n On this page\n </h4>\n <motion.div className=\"flex flex-col relative\" layoutRoot>\n <AnimatePresence>\n {toc.map((item) => (\n <motion.div key={item.id} initial={{ opacity: 0, x: -10 }} animate={{ opacity: 1, x: 0 }}>\n <TocLink item={item} activeId={activeId} />\n </motion.div>\n ))}\n </AnimatePresence>\n </motion.div>\n </nav>\n )\n}\n","/**\n * @module reactDocsLayout\n * @package @geenius/docs/react\n * @description Composes the React docs page shell with sidebar navigation,\n * breadcrumb chrome, animated content transitions, and the right-rail TOC.\n */\n\nimport type { BreadcrumbItem, DocPage, DocSection, TocItem } from '@geenius/docs/shared'\nimport { AnimatePresence, motion } from '@geenius/motion/react'\nimport type React from 'react'\nimport { cn } from '../lib/utils'\nimport type { DocsSectionWithPages } from '../types'\nimport { Breadcrumbs } from './Breadcrumbs'\nimport { DocSidebar } from './DocSidebar'\nimport { TableOfContents } from './TableOfContents'\n\ninterface DocsLayoutProps {\n sections: DocsSectionWithPages[]\n currentPage?: DocPage\n toc?: TocItem[]\n activeHeadingId?: string\n breadcrumbs?: BreadcrumbItem[]\n currentPageId?: string\n onNavigate: (page: DocPage, section: DocSection) => void\n children: React.ReactNode\n className?: string\n}\n\n/**\n * Layout shell shared by React docs pages.\n *\n * @param props - Navigation state, table-of-contents state, and page content.\n * @returns Full page layout for React docs screens.\n */\nexport function DocsLayout({\n sections,\n toc,\n activeHeadingId,\n breadcrumbs,\n currentPageId,\n onNavigate,\n children,\n className,\n}: DocsLayoutProps): React.JSX.Element {\n return (\n <div className={cn('flex min-h-screen bg-background text-foreground', className)}>\n <aside className=\"sticky top-0 hidden h-screen w-[260px] shrink-0 overflow-y-auto border-r border-border bg-card lg:block\">\n <DocSidebar\n sections={sections}\n currentPageId={currentPageId}\n onNavigate={onNavigate}\n />\n </aside>\n\n <main className=\"flex-1 overflow-hidden\">\n <div className=\"mx-auto flex max-w-6xl gap-8 px-6 py-8 lg:px-10\">\n <motion.div \n className=\"min-w-0 flex-1\"\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ type: 'spring', delay: 0.1 }}\n >\n {breadcrumbs && breadcrumbs.length > 0 && (\n <div className=\"mb-6\">\n <Breadcrumbs items={breadcrumbs} />\n </div>\n )}\n <AnimatePresence mode=\"popLayout\">\n <motion.div \n key={currentPageId}\n initial={{ opacity: 0, x: -10 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: 10 }}\n transition={{ type: 'spring', damping: 25, stiffness: 200 }}\n >\n {children}\n </motion.div>\n </AnimatePresence>\n </motion.div>\n\n {toc && toc.length > 0 && (\n <motion.aside \n className=\"hidden w-[220px] shrink-0 xl:block\"\n initial={{ opacity: 0, x: 10 }}\n animate={{ opacity: 1, x: 0 }}\n transition={{ delay: 0.2 }}\n >\n <TableOfContents toc={toc} activeId={activeHeadingId} />\n </motion.aside>\n )}\n </div>\n </main>\n </div>\n )\n}\n","/**\n * @module reactEditButton\n * @package @geenius/docs/react\n * @description Exposes the React docs \"Edit this page\" affordance so hosts can\n * route readers to the source repository for the active document.\n */\nimport { cn } from '../lib/utils'\n\ninterface EditButtonProps {\n pageSlug: string\n editUrl?: string\n className?: string\n}\n\n/**\n * Renders the source-edit link for the current docs page.\n *\n * @param props - Page slug and optional edit URL base.\n * @returns Edit link markup or `null` when editing is disabled.\n */\nexport function EditButton({\n pageSlug,\n editUrl,\n className,\n}: EditButtonProps): React.JSX.Element | null {\n if (!editUrl) return null\n\n const href = `${editUrl.replace(/\\/$/, '')}/${pageSlug}.mdx`\n\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-lg border border-border/60 px-3 py-1.5 text-xs text-foreground/40 transition-colors hover:border-border/80 hover:text-foreground/60',\n className,\n )}\n >\n <svg aria-hidden=\"true\" className=\"h-3.5 w-3.5\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\">\n <path d=\"M11.5 1.5l3 3-9 9H2.5v-3l9-9z\" strokeWidth=\"1.5\" strokeLinejoin=\"round\" />\n </svg>\n Edit this page\n </a>\n )\n}\n","/**\n * @module reactPageNavigation\n * @package @geenius/docs/react\n * @description Renders previous and next article affordances for the React\n * docs variant using the shared page navigation contract.\n */\nimport { cn } from '../lib/utils'\n\ninterface PageNavigationProps {\n prev?: { title: string; href: string }\n next?: { title: string; href: string }\n className?: string\n}\n\n/**\n * Renders previous and next page links for the active article.\n *\n * @param props - Optional previous and next navigation links.\n * @returns Navigation markup or `null` when no links are available.\n */\nexport function PageNavigation({\n prev,\n next,\n className,\n}: PageNavigationProps): React.JSX.Element | null {\n if (!prev && !next) return null\n\n return (\n <div className={cn('mt-12 flex items-stretch gap-4 border-t border-border/60 pt-8', className)}>\n {prev ? (\n <a\n href={prev.href}\n className=\"group flex flex-1 flex-col rounded-xl border border-border/60 p-4 transition-all hover:border-primary/40 hover:bg-foreground/5\"\n >\n <span className=\"text-xs text-foreground/40 group-hover:text-primary transition-colors\">\n ← Previous\n </span>\n <span className=\"mt-1 text-sm font-medium text-foreground/80 group-hover:text-foreground transition-colors truncate\">\n {prev.title}\n </span>\n </a>\n ) : (\n <div className=\"flex-1\" />\n )}\n {next ? (\n <a\n href={next.href}\n className=\"group flex flex-1 flex-col items-end rounded-xl border border-border/60 p-4 text-right transition-all hover:border-primary/40 hover:bg-foreground/5\"\n >\n <span className=\"text-xs text-foreground/40 group-hover:text-primary transition-colors\">\n Next →\n </span>\n <span className=\"mt-1 text-sm font-medium text-foreground/80 group-hover:text-foreground transition-colors truncate\">\n {next.title}\n </span>\n </a>\n ) : (\n <div className=\"flex-1\" />\n )}\n </div>\n )\n}\n","/**\n * @module reactVersionSelector\n * @package @geenius/docs/react\n * @description Provides the React docs version switcher with a disclosure menu\n * for choosing among published documentation versions.\n */\n\nimport { useEffect, useId, useRef, useState } from 'react'\nimport { cn } from '../lib/utils'\n\ninterface VersionSelectorProps {\n versions: string[]\n current: string\n onSelect: (version: string) => void\n className?: string\n}\n\n/**\n * Renders a version switcher when multiple docs versions exist.\n *\n * @param props - Supported versions, the current version, and selection callback.\n * @returns Version selector markup or `null` when only one version exists.\n */\nexport function VersionSelector({\n versions,\n current,\n onSelect,\n className,\n}: VersionSelectorProps): React.JSX.Element | null {\n const [isOpen, setIsOpen] = useState(false)\n const ref = useRef<HTMLDivElement>(null)\n const menuId = useId()\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (ref.current && e.target instanceof Node && !ref.current.contains(e.target)) {\n setIsOpen(false)\n }\n }\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [])\n\n if (versions.length <= 1) return null\n\n return (\n <div ref={ref} className={cn('relative', className)}>\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={menuId}\n className={cn(\n 'flex items-center gap-1.5 rounded-lg border border-border bg-card/60 px-3 py-1.5 text-xs font-medium text-muted-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40',\n isOpen && 'border-primary/30 text-foreground',\n )}\n >\n <span>v{current}</span>\n <svg\n aria-hidden=\"true\"\n className={cn('h-3 w-3 transition-transform', isOpen && 'rotate-180')}\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <path d=\"M4 6l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" />\n </svg>\n </button>\n\n {isOpen && (\n <div\n id={menuId}\n role=\"listbox\"\n className=\"absolute right-0 top-full z-20 mt-1 min-w-[120px] overflow-hidden rounded-lg border border-border bg-popover shadow-xl\"\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n event.preventDefault()\n setIsOpen(false)\n }\n }}\n >\n {versions.map((v) => (\n <button\n key={v}\n type=\"button\"\n role=\"option\"\n aria-selected={v === current}\n onClick={() => {\n onSelect(v)\n setIsOpen(false)\n }}\n className={cn(\n 'flex w-full items-center px-3 py-2 text-xs transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring/40',\n v === current\n ? 'bg-primary/15 font-medium text-primary'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground',\n )}\n >\n v{v}\n {v === current && <span className=\"ml-auto text-[10px]\">✓</span>}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n","/**\n * @module reactUseDocSearch\n * @package @geenius/docs/react\n * @description Implements debounced search state for the React docs variant so\n * modal and page-level search flows share a common query lifecycle.\n */\n\nimport type { SearchResult } from '@geenius/docs/shared'\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\n/**\n * Search state returned by the React docs search hook.\n */\nexport interface DocSearchState {\n results: SearchResult[]\n isSearching: boolean\n query: string\n setQuery: (q: string) => void\n clearSearch: () => void\n}\n\n/**\n * Debounces docs search calls for the React variant.\n *\n * @param searchFn - Search function that returns ranked docs results.\n * @param debounceMs - Delay before the search function is executed.\n * @returns Search state and control helpers.\n */\nexport function useDocSearch(\n searchFn: (query: string) => SearchResult[] | Promise<SearchResult[]>,\n debounceMs = 250,\n): DocSearchState {\n const [query, setQuery] = useState('')\n const [results, setResults] = useState<SearchResult[]>([])\n const [isSearching, setIsSearching] = useState(false)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n useEffect(() => {\n if (!query.trim()) {\n setResults([])\n setIsSearching(false)\n return\n }\n\n setIsSearching(true)\n\n if (timerRef.current) clearTimeout(timerRef.current)\n\n timerRef.current = setTimeout(async () => {\n try {\n const r = await searchFn(query)\n setResults(r)\n } catch {\n setResults([])\n } finally {\n setIsSearching(false)\n }\n }, debounceMs)\n\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [query, searchFn, debounceMs])\n\n const clearSearch = useCallback(() => {\n setQuery('')\n setResults([])\n setIsSearching(false)\n }, [])\n\n return { results, isSearching, query, setQuery, clearSearch }\n}\n","/**\n * @module reactUseDocs\n * @package @geenius/docs/react\n * @description Provides the core React docs state container that normalizes\n * section trees, current page selection, search state, and merged config.\n */\n\nimport type { DocPage, DocSection, DocsConfig } from '@geenius/docs/shared'\nimport { defaultDocsConfig } from '@geenius/docs/shared'\nimport { useCallback, useMemo, useState } from 'react'\n\n/**\n * Aggregate docs state exposed to React pages and components.\n */\nexport interface DocsState {\n sections: (DocSection & { pages: DocPage[]; pageCount: number })[]\n currentSection: DocSection | null\n setSection: (section: DocSection | null) => void\n currentPage: DocPage | null\n setPage: (page: DocPage | null) => void\n searchQuery: string\n setSearchQuery: (query: string) => void\n isLoading: boolean\n config: DocsConfig\n flatPages: DocPage[]\n}\n\n/**\n * Creates normalized docs state for React pages and components.\n *\n * @param tree - Docs section tree with eagerly attached pages.\n * @param config - Optional config overrides merged onto the shared defaults.\n * @returns Normalized docs state for the React docs surface.\n */\nexport function useDocs(\n tree: (DocSection & { pages: DocPage[]; pageCount: number })[] | undefined,\n config?: Partial<DocsConfig>,\n): DocsState {\n const [currentSection, setSection] = useState<DocSection | null>(null)\n const [currentPage, setPage] = useState<DocPage | null>(null)\n const [searchQuery, setSearchQuery] = useState('')\n\n const mergedConfig = useMemo(\n () => ({ ...defaultDocsConfig, ...config }),\n [config]\n )\n\n const sections = useMemo(() => tree ?? [], [tree])\n\n const flatPages = useMemo(\n () => sections.flatMap((s) => s.pages ?? []),\n [sections]\n )\n\n const isLoading = tree === undefined\n\n const handleSetSection = useCallback((section: DocSection | null) => {\n setSection(section)\n setPage(null)\n }, [])\n\n return {\n sections,\n currentSection,\n setSection: handleSetSection,\n currentPage,\n setPage,\n searchQuery,\n setSearchQuery,\n isLoading,\n config: mergedConfig,\n flatPages,\n }\n}\n","/**\n * @module reactUseDocsAdmin\n * @package @geenius/docs/react\n * @description Wraps docs admin mutations in stable React callbacks so the\n * admin pages can manage sections and pages without coupling to one backend.\n */\n\nimport { useCallback } from 'react'\n\n/**\n * Stable admin actions exposed to React docs management surfaces.\n */\nexport interface DocsAdminActions {\n createSection: (data: {\n title: string\n slug: string\n parentId?: string\n order: number\n icon?: string\n description?: string\n access: 'public' | 'team' | 'admin'\n }) => Promise<void>\n updateSection: (\n sectionId: string,\n data: Record<string, unknown>\n ) => Promise<void>\n deleteSection: (sectionId: string) => Promise<void>\n reorderSections: (sectionIds: string[]) => Promise<void>\n createPage: (data: {\n title: string\n slug: string\n content: string\n sectionId: string\n access: 'public' | 'team' | 'admin'\n tags?: string[]\n version?: string\n status?: 'draft' | 'published' | 'archived'\n author?: { name: string; avatar?: string }\n excerpt?: string\n order?: number\n }) => Promise<void>\n updatePage: (pageId: string, data: Record<string, unknown>) => Promise<void>\n publishPage: (pageId: string) => Promise<void>\n archivePage: (pageId: string) => Promise<void>\n deletePage: (pageId: string) => Promise<void>\n reorderPages: (pageIds: string[]) => Promise<void>\n movePage: (\n pageId: string,\n newSectionId: string,\n newOrder: number\n ) => Promise<void>\n}\n\n/**\n * Admin hook factory — accepts mutation functions (from Convex useMutation or similar)\n * and returns a stable set of admin action callbacks.\n *\n * @param mutations - Backend mutation functions for docs admin operations.\n * @returns Stable admin action callbacks for the React docs variant.\n */\nexport function useDocsAdmin(mutations: {\n createSection: (args: Record<string, unknown>) => Promise<unknown>\n updateSection: (args: Record<string, unknown>) => Promise<unknown>\n deleteSection: (args: Record<string, unknown>) => Promise<unknown>\n reorderSections: (args: Record<string, unknown>) => Promise<unknown>\n createPage: (args: Record<string, unknown>) => Promise<unknown>\n updatePage: (args: Record<string, unknown>) => Promise<unknown>\n publishPage: (args: Record<string, unknown>) => Promise<unknown>\n archivePage: (args: Record<string, unknown>) => Promise<unknown>\n deletePage: (args: Record<string, unknown>) => Promise<unknown>\n reorderPages: (args: Record<string, unknown>) => Promise<unknown>\n movePage: (args: Record<string, unknown>) => Promise<unknown>\n}): DocsAdminActions {\n const createSection = useCallback(\n async (data: Parameters<DocsAdminActions['createSection']>[0]) => {\n await mutations.createSection(data)\n },\n [mutations]\n )\n\n const updateSection = useCallback(\n async (sectionId: string, data: Record<string, unknown>) => {\n await mutations.updateSection({ sectionId, ...data })\n },\n [mutations]\n )\n\n const deleteSection = useCallback(\n async (sectionId: string) => {\n await mutations.deleteSection({ sectionId })\n },\n [mutations]\n )\n\n const reorderSections = useCallback(\n async (sectionIds: string[]) => {\n await mutations.reorderSections({ sectionIds })\n },\n [mutations]\n )\n\n const createPage = useCallback(\n async (data: Parameters<DocsAdminActions['createPage']>[0]) => {\n await mutations.createPage(data)\n },\n [mutations]\n )\n\n const updatePage = useCallback(\n async (pageId: string, data: Record<string, unknown>) => {\n await mutations.updatePage({ pageId, ...data })\n },\n [mutations]\n )\n\n const publishPage = useCallback(\n async (pageId: string) => {\n await mutations.publishPage({ pageId })\n },\n [mutations]\n )\n\n const archivePage = useCallback(\n async (pageId: string) => {\n await mutations.archivePage({ pageId })\n },\n [mutations]\n )\n\n const deletePage = useCallback(\n async (pageId: string) => {\n await mutations.deletePage({ pageId })\n },\n [mutations]\n )\n\n const reorderPages = useCallback(\n async (pageIds: string[]) => {\n await mutations.reorderPages({ pageIds })\n },\n [mutations]\n )\n\n const movePage = useCallback(\n async (pageId: string, newSectionId: string, newOrder: number) => {\n await mutations.movePage({ pageId, newSectionId, newOrder })\n },\n [mutations]\n )\n\n return {\n createSection,\n updateSection,\n deleteSection,\n reorderSections,\n createPage,\n updatePage,\n publishPage,\n archivePage,\n deletePage,\n reorderPages,\n movePage,\n }\n}\n","/**\n * @module reactUseTableOfContents\n * @package @geenius/docs/react\n * @description Tracks the extracted table of contents and active heading state\n * for rendered React docs pages.\n */\n\nimport type { TocItem } from '@geenius/docs/shared'\nimport { extractToc } from '@geenius/docs/shared'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\n/**\n * Table-of-contents state returned by the React docs hook.\n */\nexport interface TableOfContentsState {\n toc: TocItem[]\n activeId: string\n setActiveId: (id: string) => void\n}\n\n/**\n * Extracts and tracks a page table of contents for React article screens.\n *\n * @param mdxContent - Markdown or MDX source for the active page.\n * @returns Extracted TOC entries plus the active heading id.\n */\nexport function useTableOfContents(mdxContent: string | undefined): TableOfContentsState {\n const [activeId, setActiveId] = useState('')\n const observerRef = useRef<IntersectionObserver | null>(null)\n\n const toc = useMemo(() => {\n if (!mdxContent) return []\n return extractToc(mdxContent)\n }, [mdxContent])\n\n const flatIds = useMemo(() => {\n const ids: string[] = []\n const collect = (items: TocItem[]) => {\n for (const item of items) {\n ids.push(item.id)\n collect(item.children)\n }\n }\n collect(toc)\n return ids\n }, [toc])\n\n const handleSetActiveId = useCallback((id: string) => {\n setActiveId(id)\n }, [])\n\n useEffect(() => {\n if (flatIds.length === 0) return\n\n if (observerRef.current) observerRef.current.disconnect()\n\n const callback: IntersectionObserverCallback = (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setActiveId(entry.target.id)\n break\n }\n }\n }\n\n observerRef.current = new IntersectionObserver(callback, {\n rootMargin: '-80px 0px -70% 0px',\n threshold: 0,\n })\n\n for (const id of flatIds) {\n const el = document.getElementById(id)\n if (el) observerRef.current.observe(el)\n }\n\n return () => {\n observerRef.current?.disconnect()\n }\n }, [flatIds])\n\n return { toc, activeId, setActiveId: handleSetActiveId }\n}\n","/**\n * @module reactDocSearchPage\n * @package @geenius/docs/react\n * @description Renders the dedicated React docs search page with a full-page\n * query input, ranked search results, and empty-state messaging.\n */\n\nimport type { DocPage, DocSection, SearchResult } from '@geenius/docs/shared'\nimport { buildDocsIndex, highlightMatch, searchDocs } from '@geenius/docs/shared'\nimport { useCallback, useMemo } from 'react'\nimport { useDocSearch } from '../hooks/useDocSearch'\nimport { cn } from '../lib/utils'\n\ninterface DocSearchPageProps {\n tree: (DocSection & { pages: DocPage[]; pageCount: number })[] | undefined\n onSelectPage?: (page: DocPage, section: DocSection) => void\n className?: string\n}\n\n/**\n * Dedicated search page for the React docs variant.\n *\n * @param props - Docs tree and optional page selection handler.\n * @returns Search page UI or a loading state when the tree is unresolved.\n */\nexport function DocSearchPage({\n tree,\n onSelectPage,\n className,\n}: DocSearchPageProps): React.JSX.Element {\n const sections = useMemo(() => tree ?? [], [tree])\n const flatPages = useMemo(() => sections.flatMap((s) => s.pages ?? []), [sections])\n\n const searchFn = useCallback(\n (q: string): SearchResult[] => {\n const index = buildDocsIndex(flatPages, sections)\n return searchDocs(q, index)\n },\n [flatPages, sections]\n )\n\n const { results, isSearching, query, setQuery } = useDocSearch(searchFn)\n\n if (tree === undefined) {\n return (\n <div className={cn('min-h-screen bg-background px-6 py-16', className)}>\n <div className=\"mx-auto max-w-2xl\">\n <div className=\"mb-8 h-12 animate-pulse rounded-xl bg-foreground/5\" />\n <div className=\"space-y-3\">\n {Array.from({ length: 5 }, (_, index) => `doc-search-skeleton-${index}`).map((key) => (\n <div key={key} className=\"h-20 animate-pulse rounded-xl bg-foreground/5\" />\n ))}\n </div>\n </div>\n </div>\n )\n }\n\n return (\n <div className={cn('min-h-screen bg-background text-foreground', className)}>\n <div className=\"mx-auto max-w-2xl px-6 py-16\">\n <h1 className=\"mb-8 text-2xl font-bold\">Search Documentation</h1>\n\n <div className=\"relative mb-8\">\n <svg aria-hidden=\"true\" className=\"absolute left-4 top-1/2 h-5 w-5 -translate-y-1/2 text-foreground/30\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z\" clipRule=\"evenodd\" />\n </svg>\n <input\n type=\"text\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder=\"Type to search…\"\n aria-label=\"Search documentation\"\n className=\"w-full rounded-xl border border-border bg-card/60 py-3.5 pl-12 pr-4 text-sm text-foreground placeholder:text-muted-foreground outline-none transition-colors focus:border-primary/40 focus:ring-2 focus:ring-ring/20\"\n />\n {isSearching && (\n <div className=\"absolute right-4 top-1/2 -translate-y-1/2\">\n <div className=\"h-4 w-4 animate-spin rounded-full border-2 border-border/60 border-t-primary\" />\n </div>\n )}\n </div>\n\n {results.length > 0 && (\n <div className=\"space-y-2\">\n {results.map((result) => {\n const section = sections.find((s) => s.slug === result.sectionSlug)\n const page = flatPages.find((p) => p.id === result.pageId)\n return (\n <button\n key={result.pageId}\n type=\"button\"\n onClick={() => {\n if (page && section && onSelectPage) onSelectPage(page, section)\n }}\n className=\"flex w-full flex-col gap-1.5 rounded-xl border border-border bg-card/40 p-4 text-left transition-all hover:border-primary/20 hover:bg-card\"\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"rounded bg-primary/20 px-2 py-0.5 text-[10px] font-medium text-primary\">\n {result.sectionTitle}\n </span>\n <span className=\"text-sm font-medium text-foreground/90\">{result.pageTitle}</span>\n <span className=\"ml-auto text-xs tabular-nums text-foreground/20\">\n {page?.readingTime ?? 0} min\n </span>\n </div>\n <p className=\"text-xs leading-relaxed text-foreground/40\">\n {highlightMatch(result.highlight, query)}\n </p>\n {result.tags.length > 0 && (\n <div className=\"flex gap-1 mt-1\">\n {result.tags.slice(0, 4).map((tag) => (\n <span key={tag} className=\"rounded bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground\">\n {tag}\n </span>\n ))}\n </div>\n )}\n </button>\n )\n })}\n </div>\n )}\n\n {query.trim() && results.length === 0 && !isSearching && (\n <div className=\"flex flex-col items-center py-16 text-center\">\n <div className=\"mb-4 text-5xl opacity-30\">🔍</div>\n <h3 className=\"mb-2 text-lg font-medium text-foreground/60\">No results found</h3>\n <p className=\"text-sm text-foreground/30\">\n Try different keywords or check your spelling.\n </p>\n </div>\n )}\n\n {!query.trim() && (\n <div className=\"flex flex-col items-center py-16 text-center\">\n <div className=\"mb-4 text-5xl opacity-20\">📖</div>\n <p className=\"text-sm text-foreground/30\">Start typing to search across all documentation</p>\n </div>\n )}\n </div>\n </div>\n )\n}\n","/**\n * @module reactDocsAdminPage\n * @package @geenius/docs/react\n * @description Renders the React docs admin surface for creating, updating,\n * publishing, and deleting docs sections and pages.\n */\n\nimport type { DocAccess, DocPage, DocSection } from '@geenius/docs/shared'\nimport { useMemo, useState } from 'react'\nimport type { DocsAdminActions } from '../hooks/useDocsAdmin'\nimport { cn } from '../lib/utils'\n\ninterface DocsAdminPageProps {\n tree: (DocSection & { pages: DocPage[]; pageCount: number })[] | undefined\n allPages?: DocPage[]\n admin: DocsAdminActions\n className?: string\n}\n\ninterface SectionForm {\n title: string\n slug: string\n description: string\n icon: string\n access: DocAccess\n}\n\ninterface PageForm {\n title: string\n slug: string\n content: string\n access: DocAccess\n tags: string\n}\n\nfunction toDocAccess(value: string): DocAccess {\n if (value === 'public' || value === 'team' || value === 'admin') {\n return value\n }\n\n return 'team'\n}\n\nfunction initialSectionForm(): SectionForm {\n return {\n title: '',\n slug: '',\n description: '',\n icon: '',\n access: 'team',\n }\n}\n\nfunction initialPageForm(): PageForm {\n return {\n title: '',\n slug: '',\n content: '',\n access: 'team',\n tags: '',\n }\n}\n\n/**\n * Admin page for section and page management in the React docs variant.\n *\n * @param props - Tree data, optional page list, and admin actions.\n * @returns Admin UI for managing docs content.\n */\nexport function DocsAdminPage({\n tree,\n allPages,\n admin,\n className,\n}: DocsAdminPageProps): React.JSX.Element {\n const sections = useMemo(() => tree ?? [], [tree])\n const [selectedSectionId, setSelectedSectionId] = useState<string | null>(null)\n const [sectionForm, setSectionForm] = useState<SectionForm>(initialSectionForm())\n const [pageForm, setPageForm] = useState<PageForm>(initialPageForm())\n const [showSectionForm, setShowSectionForm] = useState(false)\n const [showPageForm, setShowPageForm] = useState(false)\n\n const selectedSection = sections.find((s) => s.id === selectedSectionId)\n const sectionPages = useMemo(() => {\n if (!selectedSection) return []\n if (allPages) return allPages.filter((p) => p.sectionId === selectedSectionId)\n return selectedSection.pages ?? []\n }, [selectedSection, allPages, selectedSectionId])\n const canCreateSection =\n sectionForm.title.trim().length > 0 && sectionForm.slug.trim().length > 0\n const canCreatePage =\n pageForm.title.trim().length > 0 &&\n pageForm.slug.trim().length > 0 &&\n pageForm.content.trim().length > 0\n\n if (tree === undefined) {\n return (\n <div className={cn('min-h-screen bg-background px-6 py-12', className)}>\n <div className=\"mx-auto max-w-6xl\">\n <div className=\"mb-8 h-10 w-48 animate-pulse rounded bg-muted/60\" />\n <div className=\"grid gap-6 md:grid-cols-2\">\n <div className=\"h-96 animate-pulse rounded-xl bg-muted/60\" />\n <div className=\"h-96 animate-pulse rounded-xl bg-muted/60\" />\n </div>\n </div>\n </div>\n )\n }\n\n return (\n <div className={cn('min-h-screen bg-background text-foreground', className)}>\n <div className=\"mx-auto max-w-6xl px-6 py-12\">\n <h1 className=\"mb-8 text-2xl font-bold\">Docs Admin</h1>\n\n <div className=\"grid gap-6 md:grid-cols-2\">\n <div className=\"rounded-xl border border-border bg-card/40 p-5\">\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-foreground\">Sections</h2>\n <button\n type=\"button\"\n onClick={() => setShowSectionForm(!showSectionForm)}\n className=\"rounded-lg bg-primary px-3 py-1.5 text-xs font-medium transition-colors hover:bg-primary/90\"\n >\n + Add Section\n </button>\n </div>\n\n {showSectionForm && (\n <div className=\"mb-4 space-y-2 rounded-lg border border-border bg-card/60 p-4\">\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-section-title\">\n <span className=\"text-xs font-medium text-muted-foreground\">Title</span>\n <input\n id=\"docs-admin-section-title\"\n type=\"text\"\n placeholder=\"Getting Started\"\n value={sectionForm.title}\n onChange={(e) =>\n setSectionForm({ ...sectionForm, title: e.target.value })\n }\n className=\"w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20\"\n />\n </label>\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-section-slug\">\n <span className=\"text-xs font-medium text-muted-foreground\">Slug</span>\n <input\n id=\"docs-admin-section-slug\"\n type=\"text\"\n placeholder=\"getting-started\"\n value={sectionForm.slug}\n onChange={(e) =>\n setSectionForm({ ...sectionForm, slug: e.target.value })\n }\n className=\"w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20\"\n />\n </label>\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-section-icon\">\n <span className=\"text-xs font-medium text-muted-foreground\">Icon</span>\n <input\n id=\"docs-admin-section-icon\"\n type=\"text\"\n placeholder=\"📚\"\n value={sectionForm.icon}\n onChange={(e) =>\n setSectionForm({ ...sectionForm, icon: e.target.value })\n }\n className=\"w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20\"\n />\n </label>\n <label\n className=\"block space-y-1\"\n htmlFor=\"docs-admin-section-description\"\n >\n <span className=\"text-xs font-medium text-muted-foreground\">\n Description\n </span>\n <input\n id=\"docs-admin-section-description\"\n type=\"text\"\n placeholder=\"Overview pages and onboarding guides.\"\n value={sectionForm.description}\n onChange={(e) =>\n setSectionForm({\n ...sectionForm,\n description: e.target.value,\n })\n }\n className=\"w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20\"\n />\n </label>\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-section-access\">\n <span className=\"text-xs font-medium text-muted-foreground\">Access</span>\n <select\n id=\"docs-admin-section-access\"\n value={sectionForm.access}\n onChange={(e) =>\n setSectionForm({\n ...sectionForm,\n access: toDocAccess(e.target.value),\n })\n }\n className=\"w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20\"\n >\n <option value=\"public\">Public</option>\n <option value=\"team\">Team</option>\n <option value=\"admin\">Admin</option>\n </select>\n </label>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n disabled={!canCreateSection}\n onClick={async () => {\n await admin.createSection({\n ...sectionForm,\n order: sections.length,\n icon: sectionForm.icon || undefined,\n description: sectionForm.description || undefined,\n })\n setSectionForm(initialSectionForm())\n setShowSectionForm(false)\n }}\n className=\"rounded-lg bg-primary px-4 py-2 text-xs font-medium disabled:cursor-not-allowed disabled:opacity-40 hover:bg-primary/90\"\n >\n Create\n </button>\n <button\n type=\"button\"\n onClick={() => setShowSectionForm(false)}\n className=\"rounded-lg border border-border px-4 py-2 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n >\n Cancel\n </button>\n </div>\n </div>\n )}\n\n <div className=\"space-y-1\">\n {sections.length === 0 && (\n <p className=\"py-8 text-center text-sm text-muted-foreground\">No sections yet</p>\n )}\n {sections.map((section) => (\n <div\n key={section.id}\n className={cn(\n 'group flex cursor-pointer items-center gap-2 rounded-lg px-3 py-2.5 transition-colors',\n selectedSectionId === section.id\n ? 'bg-primary/15 text-primary'\n : 'text-muted-foreground hover:bg-muted hover:text-foreground',\n )}\n >\n <button\n type=\"button\"\n className=\"flex min-w-0 flex-1 items-center gap-2 text-left\"\n onClick={() => setSelectedSectionId(section.id)}\n >\n {section.icon && <span>{section.icon}</span>}\n <span className=\"flex-1 text-sm font-medium truncate\">{section.title}</span>\n <span className=\"text-[11px] tabular-nums opacity-40\">{section.pageCount ?? 0}</span>\n </button>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation()\n if (confirm(`Delete section \"${section.title}\"?`)) {\n admin.deleteSection(section.id)\n }\n }}\n className=\"rounded p-1 text-muted-foreground/60 opacity-0 transition-opacity group-hover:opacity-100 hover:text-destructive\"\n aria-label={`Delete section ${section.title}`}\n title=\"Delete section\"\n >\n <svg aria-hidden=\"true\" className=\"h-3.5 w-3.5\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M5.5 5.5A.5.5 0 016 6v6a.5.5 0 01-1 0V6a.5.5 0 01.5-.5zm2.5 0a.5.5 0 01.5.5v6a.5.5 0 01-1 0V6a.5.5 0 01.5-.5zm3 .5a.5.5 0 00-1 0v6a.5.5 0 001 0V6z\" />\n <path fillRule=\"evenodd\" d=\"M14.5 3a1 1 0 01-1 1H13v9a2 2 0 01-2 2H5a2 2 0 01-2-2V4h-.5a1 1 0 010-2H6a1 1 0 011-1h2a1 1 0 011 1h3.5a1 1 0 011 1zM4.118 4L4 4.059V13a1 1 0 001 1h6a1 1 0 001-1V4.059L11.882 4H4.118z\" clipRule=\"evenodd\" />\n </svg>\n </button>\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"rounded-xl border border-border bg-card/40 p-5\">\n <div className=\"mb-4 flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-foreground\">\n {selectedSection ? `Pages — ${selectedSection.title}` : 'Pages'}\n </h2>\n {selectedSection && (\n <button\n type=\"button\"\n onClick={() => setShowPageForm(!showPageForm)}\n className=\"rounded-lg bg-primary px-3 py-1.5 text-xs font-medium transition-colors hover:bg-primary/90\"\n >\n + Add Page\n </button>\n )}\n </div>\n\n {!selectedSection && (\n <p className=\"py-16 text-center text-sm text-muted-foreground\">Select a section to manage pages</p>\n )}\n\n {showPageForm && selectedSection && (\n <div className=\"mb-4 space-y-2 rounded-lg border border-border bg-card/60 p-4\">\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-page-title\">\n <span className=\"text-xs font-medium text-muted-foreground\">Title</span>\n <input\n id=\"docs-admin-page-title\"\n type=\"text\"\n placeholder=\"Install the package\"\n value={pageForm.title}\n onChange={(e) =>\n setPageForm({ ...pageForm, title: e.target.value })\n }\n className=\"w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20\"\n />\n </label>\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-page-slug\">\n <span className=\"text-xs font-medium text-muted-foreground\">Slug</span>\n <input\n id=\"docs-admin-page-slug\"\n type=\"text\"\n placeholder=\"install\"\n value={pageForm.slug}\n onChange={(e) =>\n setPageForm({ ...pageForm, slug: e.target.value })\n }\n className=\"w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20\"\n />\n </label>\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-page-content\">\n <span className=\"text-xs font-medium text-muted-foreground\">\n Content (MDX)\n </span>\n <textarea\n id=\"docs-admin-page-content\"\n placeholder=\"# Install\"\n value={pageForm.content}\n onChange={(e) =>\n setPageForm({ ...pageForm, content: e.target.value })\n }\n rows={5}\n className=\"w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20 resize-y\"\n />\n </label>\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-page-tags\">\n <span className=\"text-xs font-medium text-muted-foreground\">\n Tags\n </span>\n <input\n id=\"docs-admin-page-tags\"\n type=\"text\"\n placeholder=\"setup, install\"\n value={pageForm.tags}\n onChange={(e) =>\n setPageForm({ ...pageForm, tags: e.target.value })\n }\n className=\"w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20\"\n />\n </label>\n <label className=\"block space-y-1\" htmlFor=\"docs-admin-page-access\">\n <span className=\"text-xs font-medium text-muted-foreground\">Access</span>\n <select\n id=\"docs-admin-page-access\"\n value={pageForm.access}\n onChange={(e) =>\n setPageForm({\n ...pageForm,\n access: toDocAccess(e.target.value),\n })\n }\n className=\"w-full rounded-lg border border-border bg-card/70 px-3 py-2 text-sm outline-none focus:border-primary/40 focus:ring-2 focus:ring-ring/20\"\n >\n <option value=\"public\">Public</option>\n <option value=\"team\">Team</option>\n <option value=\"admin\">Admin</option>\n </select>\n </label>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n disabled={!canCreatePage}\n onClick={async () => {\n await admin.createPage({\n title: pageForm.title,\n slug: pageForm.slug,\n content: pageForm.content,\n sectionId: selectedSection.id,\n access: pageForm.access,\n tags: pageForm.tags ? pageForm.tags.split(',').map((t) => t.trim()) : [],\n order: sectionPages.length,\n })\n setPageForm(initialPageForm())\n setShowPageForm(false)\n }}\n className=\"rounded-lg bg-primary px-4 py-2 text-xs font-medium disabled:cursor-not-allowed disabled:opacity-40 hover:bg-primary/90\"\n >\n Create\n </button>\n <button\n type=\"button\"\n onClick={() => setShowPageForm(false)}\n className=\"rounded-lg border border-border px-4 py-2 text-xs text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n >\n Cancel\n </button>\n </div>\n </div>\n )}\n\n {selectedSection && sectionPages.length > 0 && (\n <div className=\"space-y-1\">\n {sectionPages.map((page) => (\n <div\n key={page.id}\n className=\"group flex items-center gap-3 rounded-lg px-3 py-2.5 transition-colors hover:bg-muted\"\n >\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-foreground truncate\">{page.title}</p>\n <p className=\"text-[11px] text-muted-foreground\">/{page.slug}</p>\n </div>\n <span\n className={cn(\n 'shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium',\n page.status === 'published'\n ? 'bg-success/15 text-success'\n : page.status === 'archived'\n ? 'bg-muted text-muted-foreground'\n : 'bg-warning/15 text-warning',\n )}\n >\n {page.status}\n </span>\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n {page.status === 'draft' && (\n <button\n type=\"button\"\n onClick={() => admin.publishPage(page.id)}\n className=\"rounded px-2 py-1 text-[11px] text-success hover:bg-success/10\"\n title=\"Publish\"\n >\n Publish\n </button>\n )}\n {page.status === 'published' && (\n <button\n type=\"button\"\n onClick={() => admin.archivePage(page.id)}\n className=\"rounded px-2 py-1 text-[11px] text-warning hover:bg-warning/10\"\n title=\"Archive\"\n >\n Archive\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => {\n if (confirm(`Delete page \"${page.title}\"?`)) admin.deletePage(page.id)\n }}\n className=\"rounded p-1 text-muted-foreground/60 hover:text-destructive\"\n aria-label={`Delete page ${page.title}`}\n title=\"Delete\"\n >\n <svg aria-hidden=\"true\" className=\"h-3.5 w-3.5\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M5.5 5.5A.5.5 0 016 6v6a.5.5 0 01-1 0V6a.5.5 0 01.5-.5zm2.5 0a.5.5 0 01.5.5v6a.5.5 0 01-1 0V6a.5.5 0 01.5-.5zm3 .5a.5.5 0 00-1 0v6a.5.5 0 001 0V6z\" />\n <path fillRule=\"evenodd\" d=\"M14.5 3a1 1 0 01-1 1H13v9a2 2 0 01-2 2H5a2 2 0 01-2-2V4h-.5a1 1 0 010-2H6a1 1 0 011-1h2a1 1 0 011 1h3.5a1 1 0 011 1zM4.118 4L4 4.059V13a1 1 0 001 1h6a1 1 0 001-1V4.059L11.882 4H4.118z\" clipRule=\"evenodd\" />\n </svg>\n </button>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {selectedSection && sectionPages.length === 0 && !showPageForm && (\n <p className=\"py-12 text-center text-sm text-muted-foreground\">No pages in this section</p>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n}\n","/**\n * @module reactDocsIndexPage\n * @package @geenius/docs/react\n * @description Renders the React docs landing page with section discovery,\n * recent updates, and command-palette search entry points.\n */\n\nimport type { DocPage, DocSection, SearchResult } from '@geenius/docs/shared'\nimport { buildDocsIndex, searchDocs } from '@geenius/docs/shared'\nimport { useCallback, useEffect, useState } from 'react'\nimport { DocSearch } from '../components/DocSearch'\nimport { useDocSearch } from '../hooks/useDocSearch'\nimport { useDocs } from '../hooks/useDocs'\nimport { cn } from '../lib/utils'\n\ninterface DocsIndexPageProps {\n tree: (DocSection & { pages: DocPage[]; pageCount: number })[] | undefined\n onSelectPage?: (page: DocPage, section: DocSection) => void\n className?: string\n}\n\n/**\n * Landing page for the React docs experience.\n *\n * @param props - Docs tree plus optional page selection handler.\n * @returns Landing page UI for the React docs variant.\n */\nexport function DocsIndexPage({\n tree,\n onSelectPage,\n className,\n}: DocsIndexPageProps): React.JSX.Element {\n const docs = useDocs(tree)\n const [isSearchOpen, setIsSearchOpen] = useState(false)\n\n const searchFn = useCallback(\n (q: string): SearchResult[] => {\n const index = buildDocsIndex(docs.flatPages, docs.sections)\n return searchDocs(q, index)\n },\n [docs.flatPages, docs.sections]\n )\n\n const search = useDocSearch(searchFn)\n\n useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault()\n setIsSearchOpen(true)\n }\n }\n document.addEventListener('keydown', handler)\n return () => document.removeEventListener('keydown', handler)\n }, [])\n\n if (docs.isLoading) {\n return (\n <div className={cn('min-h-screen bg-background px-6 py-16', className)}>\n <div className=\"mx-auto max-w-5xl\">\n <div className=\"mb-10 h-10 w-64 animate-pulse rounded-lg bg-foreground/5\" />\n <div className=\"mb-8 h-12 w-full max-w-xl animate-pulse rounded-xl bg-foreground/5\" />\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {Array.from({ length: 6 }, (_, index) => `docs-index-skeleton-${index}`).map((key) => (\n <div key={key} className=\"h-36 animate-pulse rounded-xl bg-foreground/5\" />\n ))}\n </div>\n </div>\n </div>\n )\n }\n\n if (docs.sections.length === 0) {\n return (\n <div\n className={cn(\n 'flex min-h-screen flex-col items-center justify-center bg-background text-center',\n className,\n )}\n >\n <div className=\"mb-4 text-6xl opacity-30\">📚</div>\n <h2 className=\"mb-2 text-xl font-semibold text-foreground/80\">No documentation yet</h2>\n <p className=\"max-w-sm text-sm text-foreground/40\">\n Create your first section and pages to get started with your documentation.\n </p>\n </div>\n )\n }\n\n return (\n <div className={cn('min-h-screen bg-background text-foreground', className)}>\n <div className=\"mx-auto max-w-5xl px-6 py-16\">\n <h1 className=\"mb-2 text-4xl font-bold tracking-tight\">Documentation</h1>\n <p className=\"mb-10 text-lg text-foreground/50\">\n Browse guides, API references, and tutorials.\n </p>\n\n <button\n type=\"button\"\n onClick={() => setIsSearchOpen(true)}\n aria-haspopup=\"dialog\"\n className=\"mb-12 flex w-full max-w-xl items-center gap-3 rounded-xl border border-border bg-card/60 px-5 py-3.5 text-left text-sm text-muted-foreground transition-colors hover:border-primary/20 hover:bg-card\"\n >\n <svg aria-hidden=\"true\" className=\"h-4.5 w-4.5 shrink-0\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path fillRule=\"evenodd\" d=\"M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z\" clipRule=\"evenodd\" />\n </svg>\n <span className=\"flex-1\">Search documentation…</span>\n <kbd className=\"rounded border border-border/60 bg-foreground/5 px-2 py-0.5 text-[11px]\">⌘K</kbd>\n </button>\n\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-3\">\n {docs.sections\n .filter((s) => !s.parentId)\n .map((section) => (\n <button\n key={section.id}\n type=\"button\"\n onClick={() => {\n const firstPage = section.pages?.[0]\n if (firstPage && onSelectPage) onSelectPage(firstPage, section)\n }}\n className=\"group flex flex-col rounded-xl border border-border bg-card/40 p-5 text-left transition-all hover:border-primary/30 hover:bg-card hover:shadow-lg hover:shadow-primary/5\"\n >\n {section.icon && (\n <span className=\"mb-3 text-2xl\">{section.icon}</span>\n )}\n <h3 className=\"mb-1.5 text-base font-semibold text-foreground/90 group-hover:text-foreground transition-colors\">\n {section.title}\n </h3>\n {section.description && (\n <p className=\"mb-3 flex-1 text-sm leading-relaxed text-foreground/40\">\n {section.description}\n </p>\n )}\n <div className=\"flex items-center gap-2 text-xs text-foreground/25\">\n <span>{section.pageCount ?? 0} pages</span>\n </div>\n </button>\n ))}\n </div>\n\n {docs.flatPages.length > 0 && (\n <div className=\"mt-16\">\n <h2 className=\"mb-6 text-lg font-semibold text-foreground/80\">Recently updated</h2>\n <div className=\"space-y-2\">\n {docs.flatPages\n .sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime())\n .slice(0, 8)\n .map((page) => {\n const section = docs.sections.find((s) => s.id === page.sectionId)\n return (\n <button\n key={page.id}\n type=\"button\"\n onClick={() => section && onSelectPage?.(page, section)}\n className=\"flex w-full items-center gap-4 rounded-lg px-4 py-3 text-left transition-colors hover:bg-muted\"\n >\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-foreground/80 truncate\">{page.title}</p>\n <p className=\"text-xs text-foreground/30 truncate\">{section?.title}</p>\n </div>\n <span className=\"shrink-0 text-xs tabular-nums text-foreground/20\">\n {page.readingTime} min read\n </span>\n </button>\n )\n })}\n </div>\n </div>\n )}\n </div>\n\n <DocSearch\n results={search.results}\n query={search.query}\n onQuery={search.setQuery}\n onSelect={(result) => {\n setIsSearchOpen(false)\n search.clearSearch()\n const section = docs.sections.find((s) => s.slug === result.sectionSlug)\n const page = docs.flatPages.find((p) => p.id === result.pageId)\n if (page && section && onSelectPage) onSelectPage(page, section)\n }}\n isOpen={isSearchOpen}\n onClose={() => setIsSearchOpen(false)}\n />\n </div>\n )\n}\n","/**\n * @module reactDocViewPage\n * @package @geenius/docs/react\n * @description Renders the primary React docs article page with layout chrome,\n * metadata, TOC tracking, edit actions, and previous or next navigation.\n */\n\nimport type { DocPage as DocPageType, DocSection } from '@geenius/docs/shared'\nimport { buildBreadcrumbs } from '@geenius/docs/shared'\nimport { useEffect, useMemo } from 'react'\nimport { DocPage } from '../components/DocPage'\nimport { DocsLayout } from '../components/DocsLayout'\nimport { EditButton } from '../components/EditButton'\nimport { PageNavigation } from '../components/PageNavigation'\nimport { useDocs } from '../hooks/useDocs'\nimport { useTableOfContents } from '../hooks/useTableOfContents'\nimport { cn } from '../lib/utils'\n\ninterface DocViewPageProps {\n tree: (DocSection & { pages: DocPageType[]; pageCount: number })[] | undefined\n page: DocPageType | null | undefined\n editPageUrl?: string\n onNavigate: (page: DocPageType, section: DocSection) => void\n onIncrementView?: (pageId: string) => void\n className?: string\n}\n\n/**\n * Detailed article page for the React docs variant.\n *\n * @param props - Docs tree, active page, and page-level interaction handlers.\n * @returns Detailed page view or an appropriate loading or empty state.\n */\nexport function DocViewPage({\n tree,\n page,\n editPageUrl,\n onNavigate,\n onIncrementView,\n className,\n}: DocViewPageProps): React.JSX.Element {\n const docs = useDocs(tree)\n const { toc, activeId } = useTableOfContents(page?.content)\n\n useEffect(() => {\n if (page?.id && onIncrementView) {\n onIncrementView(page.id)\n }\n }, [page?.id, onIncrementView])\n\n const breadcrumbs = useMemo(() => {\n if (!page) return []\n return buildBreadcrumbs(docs.sections, page.sectionId, page.slug)\n }, [docs.sections, page])\n\n const { prev, next } = useMemo(() => {\n if (!page) return { prev: undefined, next: undefined }\n const allPages = docs.flatPages\n const idx = allPages.findIndex((p) => p.id === page.id)\n const section = docs.sections.find((s) => s.id === page.sectionId)\n return {\n prev: idx > 0\n ? { title: allPages[idx - 1].title, href: `/docs/${section?.slug ?? ''}/${allPages[idx - 1].slug}` }\n : undefined,\n next: idx < allPages.length - 1\n ? { title: allPages[idx + 1].title, href: `/docs/${section?.slug ?? ''}/${allPages[idx + 1].slug}` }\n : undefined,\n }\n }, [page, docs.flatPages, docs.sections])\n\n if (docs.isLoading || page === undefined) {\n return (\n <div className={cn('flex min-h-screen bg-background', className)}>\n <div className=\"hidden w-[260px] shrink-0 border-r border-border bg-card lg:block\">\n <div className=\"space-y-3 p-4\">\n {Array.from({ length: 8 }, (_, index) => `doc-view-sidebar-skeleton-${index}`).map((key) => (\n <div key={key} className=\"h-8 animate-pulse rounded-lg bg-foreground/5\" />\n ))}\n </div>\n </div>\n <div className=\"flex-1 px-10 py-8\">\n <div className=\"mx-auto max-w-3xl space-y-4\">\n <div className=\"h-5 w-48 animate-pulse rounded bg-foreground/5\" />\n <div className=\"h-10 w-96 animate-pulse rounded bg-foreground/5\" />\n <div className=\"mt-8 space-y-3\">\n {Array.from({ length: 12 }, (_, index) => `doc-view-body-skeleton-${index}`).map((key, index) => (\n <div key={key} className=\"h-4 animate-pulse rounded bg-foreground/5\" style={{ width: `${60 + index * 3}%` }} />\n ))}\n </div>\n </div>\n </div>\n </div>\n )\n }\n\n if (!page) {\n return (\n <div\n className={cn(\n 'flex min-h-screen flex-col items-center justify-center bg-background text-center',\n className,\n )}\n >\n <div className=\"mb-4 text-6xl opacity-30\">🔍</div>\n <h2 className=\"mb-2 text-xl font-semibold text-foreground/80\">Page not found</h2>\n <p className=\"text-sm text-foreground/40\">The documentation page you're looking for doesn't exist.</p>\n </div>\n )\n }\n\n return (\n <DocsLayout\n sections={docs.sections}\n currentPage={page}\n toc={toc}\n activeHeadingId={activeId}\n breadcrumbs={breadcrumbs}\n currentPageId={page.id}\n onNavigate={onNavigate}\n className={className}\n >\n <div className=\"mb-8\">\n <h1 className=\"mb-3 text-3xl font-bold tracking-tight\">{page.title}</h1>\n <div className=\"flex flex-wrap items-center gap-4 text-sm text-foreground/40\">\n <span className=\"flex items-center gap-1.5\">\n {page.author.avatar ? (\n <img src={page.author.avatar} alt=\"\" className=\"h-5 w-5 rounded-full\" />\n ) : (\n <span className=\"flex h-5 w-5 items-center justify-center rounded-full bg-primary/20 text-[10px] text-primary\">\n {page.author.name[0]}\n </span>\n )}\n {page.author.name}\n </span>\n {page.readingTime > 0 && (\n <span>{page.readingTime} min read</span>\n )}\n {page.lastEditedBy && (\n <span>\n Edited by {page.lastEditedBy.name}\n </span>\n )}\n {page.viewCount > 0 && (\n <span>{page.viewCount.toLocaleString()} views</span>\n )}\n </div>\n\n {page.tags.length > 0 && (\n <div className=\"mt-3 flex flex-wrap gap-1.5\">\n {page.tags.map((tag) => (\n <span key={tag} className=\"rounded-full bg-foreground/5 px-2.5 py-0.5 text-xs text-foreground/40\">\n {tag}\n </span>\n ))}\n </div>\n )}\n </div>\n\n <DocPage page={page} />\n\n <div className=\"mt-10 flex items-center justify-between border-t border-border/40 pt-6\">\n <EditButton pageSlug={page.slug} editUrl={editPageUrl} />\n {page.version && (\n <span className=\"text-xs text-foreground/25\">v{page.version}</span>\n )}\n </div>\n\n <PageNavigation prev={prev} next={next} />\n </DocsLayout>\n )\n}\n"]}
|