@clarify-labs/renderer 0.11.11 → 0.11.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/output/{ClarifyShell-DLOGS18o.cjs → ClarifyShell-Cv4GYuCM.cjs} +197 -179
- package/output/ClarifyShell-Cv4GYuCM.cjs.map +1 -0
- package/output/{ClarifyShell-DGm_R5Bp.js → ClarifyShell-Dh4TgQkW.js} +198 -180
- package/output/ClarifyShell-Dh4TgQkW.js.map +1 -0
- package/output/{OpenApiOperation-bY3wbaJC.js → OpenApiOperation-B6WpfQ0n.js} +2 -2
- package/output/{OpenApiOperation-bY3wbaJC.js.map → OpenApiOperation-B6WpfQ0n.js.map} +1 -1
- package/output/{OpenApiOperation-416zAKci.cjs → OpenApiOperation-MEemAiXJ.cjs} +2 -2
- package/output/{OpenApiOperation-416zAKci.cjs.map → OpenApiOperation-MEemAiXJ.cjs.map} +1 -1
- package/output/{PageActions-D52u18C8.js → PageActions-B5PYif9Q.js} +2 -2
- package/output/{PageActions-D52u18C8.js.map → PageActions-B5PYif9Q.js.map} +1 -1
- package/output/{PageActions-CVOTIuxh.cjs → PageActions-DEAcLCtt.cjs} +2 -2
- package/output/{PageActions-CVOTIuxh.cjs.map → PageActions-DEAcLCtt.cjs.map} +1 -1
- package/output/{SearchDialog--OLp05za.cjs → SearchDialog-Dz1kUiHe.cjs} +3 -3
- package/output/SearchDialog-Dz1kUiHe.cjs.map +1 -0
- package/output/{SearchDialog-Cq7w-uc7.js → SearchDialog-boUYmwrD.js} +3 -3
- package/output/SearchDialog-boUYmwrD.js.map +1 -0
- package/output/app/AppShell.d.ts +8 -1
- package/output/app/FooterRegion.d.ts +5 -0
- package/output/client.cjs +3 -3
- package/output/client.js +3 -3
- package/output/core/types.d.ts +3 -0
- package/output/index.cjs +4 -4
- package/output/index.js +4 -4
- package/output/preview.cjs +2 -2
- package/output/preview.js +2 -2
- package/output/{render-D_QvIv7Z.js → render-Cn0R4zQQ.js} +2 -2
- package/output/{render-D_QvIv7Z.js.map → render-Cn0R4zQQ.js.map} +1 -1
- package/output/{render-TErh9x_2.cjs → render-WvWfRv-m.cjs} +2 -2
- package/output/{render-TErh9x_2.cjs.map → render-WvWfRv-m.cjs.map} +1 -1
- package/output/server.cjs +2 -2
- package/output/server.js +2 -2
- package/package.json +1 -1
- package/output/ClarifyShell-DGm_R5Bp.js.map +0 -1
- package/output/ClarifyShell-DLOGS18o.cjs.map +0 -1
- package/output/SearchDialog--OLp05za.cjs.map +0 -1
- package/output/SearchDialog-Cq7w-uc7.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_rolldown_runtime = require("./rolldown-runtime-DakpK96I.cjs");
|
|
2
2
|
const require_i18n = require("./i18n-BMNCgF9o.cjs");
|
|
3
|
-
require("./PageActions-
|
|
3
|
+
require("./PageActions-DEAcLCtt.cjs");
|
|
4
4
|
let clsx = require("clsx");
|
|
5
5
|
clsx = require_rolldown_runtime.__toESM(clsx, 1);
|
|
6
6
|
let react = require("react");
|
|
@@ -18,7 +18,7 @@ function routeGroupTitles(navigation) {
|
|
|
18
18
|
function buildSearchItems(routes, navigation) {
|
|
19
19
|
const groupTitles = routeGroupTitles(navigation);
|
|
20
20
|
return routes.flatMap((route) => {
|
|
21
|
-
if (route.isBareAlias) return [];
|
|
21
|
+
if (route.isBareAlias || route.searchable === false) return [];
|
|
22
22
|
const groupTitle = groupTitles.get(route.path);
|
|
23
23
|
return [{
|
|
24
24
|
title: route.title,
|
|
@@ -420,4 +420,4 @@ function SearchDialog(arg0) {
|
|
|
420
420
|
exports.SearchDialog = SearchDialog;
|
|
421
421
|
exports.default = SearchDialog;
|
|
422
422
|
|
|
423
|
-
//# sourceMappingURL=SearchDialog
|
|
423
|
+
//# sourceMappingURL=SearchDialog-Dz1kUiHe.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchDialog-Dz1kUiHe.cjs","names":[],"sources":["../source/shell/search/items.ts","../source/shell/search/pagefind.ts","../source/shell/search/SearchInput.tsx","../source/shell/search/Highlight.tsx","../source/shell/search/SearchResult.tsx","../source/shell/search/SearchDialog.tsx"],"sourcesContent":["import type { NavigationNode, RouteItem } from '../../types'\n\nimport type { SearchItem } from './types'\n\nfunction routeGroupTitles(navigation: NavigationNode[]) {\n const titles = new Map<string, string>()\n\n for (const node of navigation) {\n if (node.children?.length) {\n for (const child of node.children) {\n titles.set(child.path, node.title)\n }\n } else {\n titles.set(node.path, node.title)\n }\n }\n\n return titles\n}\n\nexport function buildSearchItems(routes: RouteItem[], navigation: NavigationNode[]): SearchItem[] {\n const groupTitles = routeGroupTitles(navigation)\n\n return routes.flatMap((route) => {\n // Skip bare alias routes (e.g., /path) from search to avoid duplicates in multilingual sites\n if (route.isBareAlias || route.searchable === false) return []\n \n const groupTitle = groupTitles.get(route.path)\n const pageItem: SearchItem = {\n title: route.title,\n pageTitle: route.title,\n sectionTitle: groupTitle,\n url: route.path,\n keywords: [groupTitle, route.title, route.path, route.kind].filter(Boolean).join(' ').toLowerCase(),\n }\n\n const sectionItems = route.sections?.map((section) => ({\n title: section.title,\n pageTitle: route.title,\n sectionTitle: groupTitle,\n url: `${route.path}#${section.id}`,\n keywords: [groupTitle, route.title, section.title, route.path, section.id].filter(Boolean).join(' ').toLowerCase(),\n })) ?? []\n\n return [pageItem, ...sectionItems]\n })\n}\n","import type { Pagefind } from './types'\n\ntype PagefindModule = {\n createInstance: () => Pagefind\n}\n\nconst pagefindPromises = new Map<string, Promise<Pagefind | null>>()\n\nexport function pagefindCacheKey(assetPrefix: string, locale: string | undefined) {\n return `${assetPrefix || '/'}:${locale || 'default'}`\n}\n\nexport function resolvePagefindUrl(assetPrefix: string): string {\n const prefix = assetPrefix || '/'\n return `${prefix.endsWith('/') ? prefix : `${prefix}/`}pagefind/pagefind.js`\n}\n\nexport function loadPagefind(assetPrefix: string, locale: string | undefined): Promise<Pagefind | null> {\n if (typeof window === 'undefined') return Promise.resolve(null)\n\n const cacheKey = pagefindCacheKey(assetPrefix, locale)\n const cachedPagefind = pagefindPromises.get(cacheKey)\n if (cachedPagefind) {\n return cachedPagefind\n }\n\n const pagefindUrl = resolvePagefindUrl(assetPrefix)\n const pagefindPromise = import(/* @vite-ignore */ pagefindUrl)\n .then(async (module: PagefindModule) => {\n const previousLanguage = document.documentElement.lang\n if (locale) document.documentElement.lang = locale\n const pagefind = module.createInstance()\n if (previousLanguage !== locale) document.documentElement.lang = previousLanguage\n try {\n await pagefind.init?.()\n } catch (error) {\n if (error instanceof Error && error.message.includes('No language indexes found')) {\n return null\n }\n throw error\n }\n return pagefind\n })\n .catch((error: unknown) => {\n pagefindPromises.delete(cacheKey)\n console.warn('[clarify:search] Pagefind instance failed', { cacheKey, locale, error })\n return null\n })\n\n pagefindPromises.set(cacheKey, pagefindPromise)\n return pagefindPromise\n}\n\nexport function normalizePagefindUrl(url: string, routePrefix: string): string {\n const parsedUrl = new URL(url, typeof window === 'undefined' ? 'http://localhost' : window.location.origin)\n let pathname = parsedUrl.pathname\n const prefix = routePrefix && routePrefix !== '/' ? `/${routePrefix.replace(/^\\/+|\\/+$/g, '')}` : ''\n\n if (prefix && (pathname === prefix || pathname.startsWith(`${prefix}/`))) {\n pathname = pathname.slice(prefix.length) || '/'\n }\n\n return `${pathname}${parsedUrl.search}${parsedUrl.hash}`\n}\n","import clsx from 'clsx'\nimport { LoaderCircle, Search as SearchIcon } from 'lucide-react'\nimport { forwardRef } from 'react'\n\nimport { useBuiltInText } from '../../i18n'\n\nexport const SearchInput = forwardRef<\n React.ElementRef<'input'>,\n {\n query: string\n setQuery: (query: string) => void\n onClose: () => void\n onSubmit: () => void\n activeDescendantId?: string\n loading?: boolean\n }\n>(function SearchInput(arg0, inputRef) {\n const { query, setQuery, onClose, onSubmit, activeDescendantId, loading = false } = arg0\n const t = useBuiltInText()\n const Icon = loading ? LoaderCircle : SearchIcon\n\n return (\n <div className=\"clarify-search-input group relative flex h-12\">\n <Icon\n aria-hidden=\"true\"\n className={clsx(\n 'pointer-events-none absolute top-0 left-3 h-full w-5 stroke-(--clarify-theme-tokens-colors-muted)',\n loading && 'animate-spin',\n )}\n />\n <input\n ref={inputRef}\n data-autofocus\n role=\"combobox\"\n aria-expanded={query !== ''}\n aria-controls=\"clarify-search-results\"\n aria-activedescendant={activeDescendantId}\n value={query}\n onChange={(event) => setQuery(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n if (query) setQuery('')\n else onClose()\n }\n if (event.key === 'Enter') {\n event.preventDefault()\n onSubmit()\n }\n }}\n placeholder={t('search.placeholder')}\n className=\"clarify-search-field flex-auto appearance-none bg-transparent pr-4 pl-10 outline-hidden focus:w-full focus:flex-none [&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden [&::-webkit-search-results-button]:hidden [&::-webkit-search-results-decoration]:hidden\"\n />\n </div>\n )\n})\n","import { Fragment } from 'react'\nimport type { ReactNode } from 'react'\n\nfunction stripHtml(value: string): string {\n if (typeof document === 'undefined') return value.replace(/<[^>]*>/g, '')\n const template = document.createElement('template')\n template.innerHTML = value\n return template.content.textContent ?? ''\n}\n\nfunction escapeRegExp(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\ntype HighlightQueryProps = { text: string; query: string }\n\nexport function HighlightQuery(arg0: HighlightQueryProps) {\n const { text, query } = arg0\n\n if (!query) return text\n\n const parts = text.split(new RegExp(`(${escapeRegExp(query)})`, 'ig'))\n\n return (\n <>\n {parts.map((part, index) =>\n part.toLowerCase() === query.toLowerCase() ? (\n <mark key={index} className=\"bg-transparent text-(--clarify-theme-tokens-colors-primary) underline\">\n {part}\n </mark>\n ) : (\n <Fragment key={index}>{part}</Fragment>\n ),\n )}\n </>\n )\n}\n\nfunction renderExcerptNode(node: ChildNode, key: string): ReactNode {\n if (node.nodeType === Node.TEXT_NODE) return node.textContent\n if (node.nodeType !== Node.ELEMENT_NODE) return null\n\n const element = node as HTMLElement\n const children = Array.from(element.childNodes).map((child, index) => renderExcerptNode(child, `${key}-${index}`))\n\n if (element.tagName.toLowerCase() === 'mark') {\n return (\n <mark key={key} className=\"bg-transparent text-(--clarify-theme-tokens-colors-primary) underline\">\n {children}\n </mark>\n )\n }\n\n return <Fragment key={key}>{children}</Fragment>\n}\n\ntype HighlightExcerptProps = { excerpt: string; query: string }\n\nexport function HighlightExcerpt(arg0: HighlightExcerptProps) {\n const { excerpt, query } = arg0\n\n if (typeof document === 'undefined' || !excerpt.includes('<mark')) {\n return <HighlightQuery text={stripHtml(excerpt)} query={query} />\n }\n\n const template = document.createElement('template')\n template.innerHTML = excerpt\n\n return <>{Array.from(template.content.childNodes).map((node, index) => renderExcerptNode(node, String(index)))}</>\n}\n","import clsx from 'clsx'\nimport { Fragment, useId } from 'react'\n\nimport { HighlightExcerpt, HighlightQuery } from './Highlight'\nimport type { SearchDisplayItem } from './types'\n\ntype SearchResultProps = {\n result: SearchDisplayItem\n query: string\n active: boolean\n onActive: () => void\n onSelect: () => void\n}\n\nexport function SearchResult(arg0: SearchResultProps) {\n const { result, query, active, onActive, onSelect } = arg0\n const id = useId()\n const hierarchy = result.type === 'quick'\n ? [result.sectionTitle, result.pageTitle].filter((value): value is string => typeof value === 'string')\n : []\n\n return (\n <li\n id={id}\n className={clsx('clarify-search-result group block cursor-pointer px-4 py-3', active && 'clarify-search-result-active')}\n aria-selected={active}\n onMouseEnter={onActive}\n onMouseMove={onActive}\n onMouseDown={(event) => {\n event.preventDefault()\n onSelect()\n }}\n >\n <div className=\"clarify-search-result-title\">\n <HighlightQuery text={result.title} query={query} />\n </div>\n {hierarchy.length > 0 ? (\n <div className=\"clarify-search-result-hierarchy mt-1 truncate whitespace-nowrap\">\n {hierarchy.map((item, itemIndex, items) => (\n <Fragment key={`${item}-${itemIndex}`}>\n <HighlightQuery text={item} query={query} />\n <span className={itemIndex === items.length - 1 ? 'sr-only' : 'clarify-search-result-separator mx-2'}>/</span>\n </Fragment>\n ))}\n </div>\n ) : null}\n {result.type === 'full-text' && result.excerpt ? (\n <p className=\"clarify-search-result-excerpt mt-1 line-clamp-2 text-xs leading-5 text-(--clarify-theme-tokens-colors-muted)\">\n <HighlightExcerpt excerpt={result.excerpt} query={query} />\n </p>\n ) : null}\n </li>\n )\n}\n","import { Dialog, DialogBackdrop, DialogPanel } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { SearchX } from 'lucide-react'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { useLocation, useNavigate } from 'react-router-dom'\n\nimport { useBuiltInText } from '../../i18n'\nimport type { NavigationNode, RouteItem } from '../../types'\n\nimport { buildSearchItems } from './items'\nimport { loadPagefind, normalizePagefindUrl, pagefindCacheKey } from './pagefind'\nimport { SearchInput } from './SearchInput'\nimport { SearchResult } from './SearchResult'\nimport type { FullTextSearchItem, Pagefind, SearchDisplayItem } from './types'\n\ntype SearchDialogProps = {\n open: boolean\n setOpen: (open: boolean) => void\n routes: RouteItem[]\n navigation: NavigationNode[]\n routePrefix: string\n assetPrefix: string\n currentLocale?: string\n className?: string\n onNavigate?: () => void\n}\n\ntype PagefindState = {\n key: string\n pagefind: Pagefind | null\n available: boolean\n}\n\ntype FullTextSearchState = {\n key: string\n results: FullTextSearchItem[] | null\n}\n\ntype UseSearchDialogLifecycleArgs = {\n open: boolean\n setOpen: (open: boolean) => void\n}\n\nfunction useSearchDialogLifecycle(arg0: UseSearchDialogLifecycleArgs) {\n const { open, setOpen } = arg0\n const location = useLocation()\n\n useEffect(() => {\n setOpen(false)\n }, [location.pathname, location.search, location.hash, setOpen])\n\n useEffect(() => {\n if (typeof window === 'undefined') return undefined\n if (open) return undefined\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key === 'k' && (event.metaKey || event.ctrlKey)) {\n event.preventDefault()\n setOpen(true)\n }\n }\n\n window.addEventListener('keydown', onKeyDown)\n return () => window.removeEventListener('keydown', onKeyDown)\n }, [open, setOpen])\n}\n\ntype UseSearchDataArgs = {\n query: string\n searchItems: ReturnType<typeof buildSearchItems>\n routePrefix: string\n assetPrefix: string\n currentLocale?: string\n}\n\ntype SearchDataState = {\n results: SearchDisplayItem[]\n searchInputLoading: boolean\n showNoResults: boolean\n}\n\nfunction useSearchData(arg0: UseSearchDataArgs): SearchDataState {\n const { query, searchItems, routePrefix, assetPrefix, currentLocale } = arg0\n const [fullTextState, setFullTextState] = useState<FullTextSearchState | null>(null)\n const [pagefindState, setPagefindState] = useState<PagefindState | null>(null)\n\n const quickResults = useMemo(() => {\n const normalizedQuery = query.trim().toLowerCase()\n if (!normalizedQuery) return []\n return searchItems.filter((item) => item.keywords.includes(normalizedQuery)).slice(0, 8).map((item) => ({ ...item, type: 'quick' as const }))\n }, [query, searchItems])\n\n const pagefindKey = pagefindCacheKey(assetPrefix, currentLocale)\n const activePagefindState = pagefindState?.key === pagefindKey ? pagefindState : null\n const pagefind = activePagefindState?.pagefind ?? null\n const pagefindAvailable = activePagefindState?.available ?? null\n const trimmedQuery = query.trim()\n const fullTextKey = `${pagefindKey}:${trimmedQuery}`\n const fullTextResults = fullTextState?.key === fullTextKey ? fullTextState.results : null\n const results: SearchDisplayItem[] = fullTextResults ?? quickResults\n const searchInputLoading = pagefindAvailable === null || Boolean(trimmedQuery && pagefind && fullTextState?.key !== fullTextKey)\n const showNoResults = Boolean(query.trim()) && results.length === 0 && pagefindAvailable !== null\n\n useEffect(() => {\n let cancelled = false\n\n loadPagefind(assetPrefix, currentLocale).then((loadedPagefind) => {\n if (cancelled) return\n setPagefindState({ key: pagefindKey, pagefind: loadedPagefind, available: Boolean(loadedPagefind) })\n })\n\n return () => {\n cancelled = true\n }\n }, [assetPrefix, currentLocale, pagefindKey])\n\n useEffect(() => {\n let cancelled = false\n if (!trimmedQuery || !pagefind) return undefined\n\n Promise.resolve().then(async () => {\n if (cancelled) return\n\n try {\n const search = await pagefind.search(trimmedQuery, { limit: 8 })\n const data = await Promise.all(search.results.map(async (result) => ({ id: result.id, data: await result.data() })))\n if (cancelled) return\n setFullTextState({\n key: fullTextKey,\n results: data.map(({ id, data }) => ({\n type: 'full-text',\n id,\n title: data.meta.title || data.url,\n url: normalizePagefindUrl(data.url, routePrefix),\n excerpt: data.excerpt,\n })),\n })\n } catch (error: unknown) {\n console.warn('[clarify:search] Pagefind search failed', { currentLocale, query: trimmedQuery, error })\n if (!cancelled) setFullTextState({ key: fullTextKey, results: null })\n }\n })\n\n return () => {\n cancelled = true\n }\n }, [currentLocale, fullTextKey, pagefind, routePrefix, trimmedQuery])\n\n return {\n results,\n searchInputLoading,\n showNoResults,\n }\n}\n\nexport function SearchDialog(arg0: SearchDialogProps) {\n const {\n open,\n setOpen,\n routes,\n navigation,\n routePrefix,\n assetPrefix,\n currentLocale,\n className,\n onNavigate = () => {},\n } = arg0\n\n const t = useBuiltInText()\n const navigate = useNavigate()\n const inputRef = useRef<React.ElementRef<typeof SearchInput>>(null)\n const [query, setQuery] = useState('')\n const [activeIndex, setActiveIndex] = useState(0)\n const searchItems = useMemo(() => buildSearchItems(routes, navigation), [navigation, routes])\n\n useSearchDialogLifecycle({ open, setOpen })\n const { results, searchInputLoading, showNoResults } = useSearchData({ query, searchItems, routePrefix, assetPrefix, currentLocale })\n\n const updateQuery = (value: string) => {\n setQuery(value)\n setActiveIndex(0)\n }\n\n function closeDialog() {\n updateQuery('')\n setOpen(false)\n }\n\n function selectResult(result = results[activeIndex]) {\n if (!result) return\n navigate(result.url)\n onNavigate()\n closeDialog()\n }\n\n function renderResultsPanel() {\n return (\n <div className=\"border-t border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-background) empty:hidden dark:border-zinc-100/5 dark:bg-white/2.5\">\n {showNoResults ? (\n <div className=\"p-6 text-center\">\n <SearchX className=\"mx-auto h-5 w-5 stroke-(--clarify-theme-tokens-colors-foreground) dark:stroke-zinc-600\" />\n <p className=\"mt-2 text-xs text-(--clarify-theme-tokens-colors-muted) dark:text-zinc-400\">\n {t('search.noResults', { query })}\n </p>\n </div>\n ) : null}\n {results.length ? (\n <ul id=\"clarify-search-results\" className=\"clarify-search-results\" role=\"listbox\">\n {results.map((result, resultIndex) => (\n <SearchResult\n key={result.type === 'full-text' ? result.id : result.url}\n result={result}\n query={query}\n active={resultIndex === activeIndex}\n onActive={() => setActiveIndex(resultIndex)}\n onSelect={() => selectResult(result)}\n />\n ))}\n </ul>\n ) : null}\n </div>\n )\n }\n\n return (\n <Dialog open={open} onClose={closeDialog} className={clsx('clarify-search-dialog fixed inset-0 z-50', className)}>\n <DialogBackdrop\n transition\n className=\"clarify-search-backdrop clarify-ui-backdrop fixed inset-0 backdrop-blur-xs data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in\"\n />\n\n <div className=\"fixed inset-0 overflow-y-auto px-4 py-4 sm:px-6 sm:py-20 md:py-32 lg:px-8 lg:py-(--clarify-search-dialog-padding-block-lg)\">\n <DialogPanel\n transition\n className=\"clarify-search-panel mx-auto transform-gpu overflow-hidden rounded-(--clarify-theme-tokens-radius-lg) bg-(--clarify-theme-tokens-colors-surface) shadow-xl ring-1 ring-(--clarify-theme-tokens-colors-border) data-closed:scale-95 data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in sm:max-w-xl dark:bg-zinc-900 dark:ring-zinc-800\"\n onKeyDown={(event) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n setActiveIndex((index) => (results.length ? (index + 1) % results.length : 0))\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n setActiveIndex((index) => (results.length ? (index - 1 + results.length) % results.length : 0))\n }\n }}\n >\n <SearchInput\n ref={inputRef}\n query={query}\n setQuery={updateQuery}\n onClose={closeDialog}\n onSubmit={() => selectResult()}\n loading={searchInputLoading}\n />\n {renderResultsPanel()}\n </DialogPanel>\n </div>\n </Dialog>\n )\n}\n\nexport default SearchDialog\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as useBuiltInText } from "./i18n-Zmmhz7FF.js";
|
|
2
|
-
import "./PageActions-
|
|
2
|
+
import "./PageActions-B5PYif9Q.js";
|
|
3
3
|
import clsx from "clsx";
|
|
4
4
|
import { Fragment, forwardRef, useEffect, useId, useMemo, useRef, useState } from "react";
|
|
5
5
|
import { useLocation, useNavigate } from "react-router-dom";
|
|
@@ -16,7 +16,7 @@ function routeGroupTitles(navigation) {
|
|
|
16
16
|
function buildSearchItems(routes, navigation) {
|
|
17
17
|
const groupTitles = routeGroupTitles(navigation);
|
|
18
18
|
return routes.flatMap((route) => {
|
|
19
|
-
if (route.isBareAlias) return [];
|
|
19
|
+
if (route.isBareAlias || route.searchable === false) return [];
|
|
20
20
|
const groupTitle = groupTitles.get(route.path);
|
|
21
21
|
return [{
|
|
22
22
|
title: route.title,
|
|
@@ -417,4 +417,4 @@ function SearchDialog(arg0) {
|
|
|
417
417
|
//#endregion
|
|
418
418
|
export { SearchDialog, SearchDialog as default };
|
|
419
419
|
|
|
420
|
-
//# sourceMappingURL=SearchDialog-
|
|
420
|
+
//# sourceMappingURL=SearchDialog-boUYmwrD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchDialog-boUYmwrD.js","names":[],"sources":["../source/shell/search/items.ts","../source/shell/search/pagefind.ts","../source/shell/search/SearchInput.tsx","../source/shell/search/Highlight.tsx","../source/shell/search/SearchResult.tsx","../source/shell/search/SearchDialog.tsx"],"sourcesContent":["import type { NavigationNode, RouteItem } from '../../types'\n\nimport type { SearchItem } from './types'\n\nfunction routeGroupTitles(navigation: NavigationNode[]) {\n const titles = new Map<string, string>()\n\n for (const node of navigation) {\n if (node.children?.length) {\n for (const child of node.children) {\n titles.set(child.path, node.title)\n }\n } else {\n titles.set(node.path, node.title)\n }\n }\n\n return titles\n}\n\nexport function buildSearchItems(routes: RouteItem[], navigation: NavigationNode[]): SearchItem[] {\n const groupTitles = routeGroupTitles(navigation)\n\n return routes.flatMap((route) => {\n // Skip bare alias routes (e.g., /path) from search to avoid duplicates in multilingual sites\n if (route.isBareAlias || route.searchable === false) return []\n \n const groupTitle = groupTitles.get(route.path)\n const pageItem: SearchItem = {\n title: route.title,\n pageTitle: route.title,\n sectionTitle: groupTitle,\n url: route.path,\n keywords: [groupTitle, route.title, route.path, route.kind].filter(Boolean).join(' ').toLowerCase(),\n }\n\n const sectionItems = route.sections?.map((section) => ({\n title: section.title,\n pageTitle: route.title,\n sectionTitle: groupTitle,\n url: `${route.path}#${section.id}`,\n keywords: [groupTitle, route.title, section.title, route.path, section.id].filter(Boolean).join(' ').toLowerCase(),\n })) ?? []\n\n return [pageItem, ...sectionItems]\n })\n}\n","import type { Pagefind } from './types'\n\ntype PagefindModule = {\n createInstance: () => Pagefind\n}\n\nconst pagefindPromises = new Map<string, Promise<Pagefind | null>>()\n\nexport function pagefindCacheKey(assetPrefix: string, locale: string | undefined) {\n return `${assetPrefix || '/'}:${locale || 'default'}`\n}\n\nexport function resolvePagefindUrl(assetPrefix: string): string {\n const prefix = assetPrefix || '/'\n return `${prefix.endsWith('/') ? prefix : `${prefix}/`}pagefind/pagefind.js`\n}\n\nexport function loadPagefind(assetPrefix: string, locale: string | undefined): Promise<Pagefind | null> {\n if (typeof window === 'undefined') return Promise.resolve(null)\n\n const cacheKey = pagefindCacheKey(assetPrefix, locale)\n const cachedPagefind = pagefindPromises.get(cacheKey)\n if (cachedPagefind) {\n return cachedPagefind\n }\n\n const pagefindUrl = resolvePagefindUrl(assetPrefix)\n const pagefindPromise = import(/* @vite-ignore */ pagefindUrl)\n .then(async (module: PagefindModule) => {\n const previousLanguage = document.documentElement.lang\n if (locale) document.documentElement.lang = locale\n const pagefind = module.createInstance()\n if (previousLanguage !== locale) document.documentElement.lang = previousLanguage\n try {\n await pagefind.init?.()\n } catch (error) {\n if (error instanceof Error && error.message.includes('No language indexes found')) {\n return null\n }\n throw error\n }\n return pagefind\n })\n .catch((error: unknown) => {\n pagefindPromises.delete(cacheKey)\n console.warn('[clarify:search] Pagefind instance failed', { cacheKey, locale, error })\n return null\n })\n\n pagefindPromises.set(cacheKey, pagefindPromise)\n return pagefindPromise\n}\n\nexport function normalizePagefindUrl(url: string, routePrefix: string): string {\n const parsedUrl = new URL(url, typeof window === 'undefined' ? 'http://localhost' : window.location.origin)\n let pathname = parsedUrl.pathname\n const prefix = routePrefix && routePrefix !== '/' ? `/${routePrefix.replace(/^\\/+|\\/+$/g, '')}` : ''\n\n if (prefix && (pathname === prefix || pathname.startsWith(`${prefix}/`))) {\n pathname = pathname.slice(prefix.length) || '/'\n }\n\n return `${pathname}${parsedUrl.search}${parsedUrl.hash}`\n}\n","import clsx from 'clsx'\nimport { LoaderCircle, Search as SearchIcon } from 'lucide-react'\nimport { forwardRef } from 'react'\n\nimport { useBuiltInText } from '../../i18n'\n\nexport const SearchInput = forwardRef<\n React.ElementRef<'input'>,\n {\n query: string\n setQuery: (query: string) => void\n onClose: () => void\n onSubmit: () => void\n activeDescendantId?: string\n loading?: boolean\n }\n>(function SearchInput(arg0, inputRef) {\n const { query, setQuery, onClose, onSubmit, activeDescendantId, loading = false } = arg0\n const t = useBuiltInText()\n const Icon = loading ? LoaderCircle : SearchIcon\n\n return (\n <div className=\"clarify-search-input group relative flex h-12\">\n <Icon\n aria-hidden=\"true\"\n className={clsx(\n 'pointer-events-none absolute top-0 left-3 h-full w-5 stroke-(--clarify-theme-tokens-colors-muted)',\n loading && 'animate-spin',\n )}\n />\n <input\n ref={inputRef}\n data-autofocus\n role=\"combobox\"\n aria-expanded={query !== ''}\n aria-controls=\"clarify-search-results\"\n aria-activedescendant={activeDescendantId}\n value={query}\n onChange={(event) => setQuery(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n if (query) setQuery('')\n else onClose()\n }\n if (event.key === 'Enter') {\n event.preventDefault()\n onSubmit()\n }\n }}\n placeholder={t('search.placeholder')}\n className=\"clarify-search-field flex-auto appearance-none bg-transparent pr-4 pl-10 outline-hidden focus:w-full focus:flex-none [&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden [&::-webkit-search-results-button]:hidden [&::-webkit-search-results-decoration]:hidden\"\n />\n </div>\n )\n})\n","import { Fragment } from 'react'\nimport type { ReactNode } from 'react'\n\nfunction stripHtml(value: string): string {\n if (typeof document === 'undefined') return value.replace(/<[^>]*>/g, '')\n const template = document.createElement('template')\n template.innerHTML = value\n return template.content.textContent ?? ''\n}\n\nfunction escapeRegExp(value: string) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\ntype HighlightQueryProps = { text: string; query: string }\n\nexport function HighlightQuery(arg0: HighlightQueryProps) {\n const { text, query } = arg0\n\n if (!query) return text\n\n const parts = text.split(new RegExp(`(${escapeRegExp(query)})`, 'ig'))\n\n return (\n <>\n {parts.map((part, index) =>\n part.toLowerCase() === query.toLowerCase() ? (\n <mark key={index} className=\"bg-transparent text-(--clarify-theme-tokens-colors-primary) underline\">\n {part}\n </mark>\n ) : (\n <Fragment key={index}>{part}</Fragment>\n ),\n )}\n </>\n )\n}\n\nfunction renderExcerptNode(node: ChildNode, key: string): ReactNode {\n if (node.nodeType === Node.TEXT_NODE) return node.textContent\n if (node.nodeType !== Node.ELEMENT_NODE) return null\n\n const element = node as HTMLElement\n const children = Array.from(element.childNodes).map((child, index) => renderExcerptNode(child, `${key}-${index}`))\n\n if (element.tagName.toLowerCase() === 'mark') {\n return (\n <mark key={key} className=\"bg-transparent text-(--clarify-theme-tokens-colors-primary) underline\">\n {children}\n </mark>\n )\n }\n\n return <Fragment key={key}>{children}</Fragment>\n}\n\ntype HighlightExcerptProps = { excerpt: string; query: string }\n\nexport function HighlightExcerpt(arg0: HighlightExcerptProps) {\n const { excerpt, query } = arg0\n\n if (typeof document === 'undefined' || !excerpt.includes('<mark')) {\n return <HighlightQuery text={stripHtml(excerpt)} query={query} />\n }\n\n const template = document.createElement('template')\n template.innerHTML = excerpt\n\n return <>{Array.from(template.content.childNodes).map((node, index) => renderExcerptNode(node, String(index)))}</>\n}\n","import clsx from 'clsx'\nimport { Fragment, useId } from 'react'\n\nimport { HighlightExcerpt, HighlightQuery } from './Highlight'\nimport type { SearchDisplayItem } from './types'\n\ntype SearchResultProps = {\n result: SearchDisplayItem\n query: string\n active: boolean\n onActive: () => void\n onSelect: () => void\n}\n\nexport function SearchResult(arg0: SearchResultProps) {\n const { result, query, active, onActive, onSelect } = arg0\n const id = useId()\n const hierarchy = result.type === 'quick'\n ? [result.sectionTitle, result.pageTitle].filter((value): value is string => typeof value === 'string')\n : []\n\n return (\n <li\n id={id}\n className={clsx('clarify-search-result group block cursor-pointer px-4 py-3', active && 'clarify-search-result-active')}\n aria-selected={active}\n onMouseEnter={onActive}\n onMouseMove={onActive}\n onMouseDown={(event) => {\n event.preventDefault()\n onSelect()\n }}\n >\n <div className=\"clarify-search-result-title\">\n <HighlightQuery text={result.title} query={query} />\n </div>\n {hierarchy.length > 0 ? (\n <div className=\"clarify-search-result-hierarchy mt-1 truncate whitespace-nowrap\">\n {hierarchy.map((item, itemIndex, items) => (\n <Fragment key={`${item}-${itemIndex}`}>\n <HighlightQuery text={item} query={query} />\n <span className={itemIndex === items.length - 1 ? 'sr-only' : 'clarify-search-result-separator mx-2'}>/</span>\n </Fragment>\n ))}\n </div>\n ) : null}\n {result.type === 'full-text' && result.excerpt ? (\n <p className=\"clarify-search-result-excerpt mt-1 line-clamp-2 text-xs leading-5 text-(--clarify-theme-tokens-colors-muted)\">\n <HighlightExcerpt excerpt={result.excerpt} query={query} />\n </p>\n ) : null}\n </li>\n )\n}\n","import { Dialog, DialogBackdrop, DialogPanel } from '@headlessui/react'\nimport clsx from 'clsx'\nimport { SearchX } from 'lucide-react'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { useLocation, useNavigate } from 'react-router-dom'\n\nimport { useBuiltInText } from '../../i18n'\nimport type { NavigationNode, RouteItem } from '../../types'\n\nimport { buildSearchItems } from './items'\nimport { loadPagefind, normalizePagefindUrl, pagefindCacheKey } from './pagefind'\nimport { SearchInput } from './SearchInput'\nimport { SearchResult } from './SearchResult'\nimport type { FullTextSearchItem, Pagefind, SearchDisplayItem } from './types'\n\ntype SearchDialogProps = {\n open: boolean\n setOpen: (open: boolean) => void\n routes: RouteItem[]\n navigation: NavigationNode[]\n routePrefix: string\n assetPrefix: string\n currentLocale?: string\n className?: string\n onNavigate?: () => void\n}\n\ntype PagefindState = {\n key: string\n pagefind: Pagefind | null\n available: boolean\n}\n\ntype FullTextSearchState = {\n key: string\n results: FullTextSearchItem[] | null\n}\n\ntype UseSearchDialogLifecycleArgs = {\n open: boolean\n setOpen: (open: boolean) => void\n}\n\nfunction useSearchDialogLifecycle(arg0: UseSearchDialogLifecycleArgs) {\n const { open, setOpen } = arg0\n const location = useLocation()\n\n useEffect(() => {\n setOpen(false)\n }, [location.pathname, location.search, location.hash, setOpen])\n\n useEffect(() => {\n if (typeof window === 'undefined') return undefined\n if (open) return undefined\n\n function onKeyDown(event: KeyboardEvent) {\n if (event.key === 'k' && (event.metaKey || event.ctrlKey)) {\n event.preventDefault()\n setOpen(true)\n }\n }\n\n window.addEventListener('keydown', onKeyDown)\n return () => window.removeEventListener('keydown', onKeyDown)\n }, [open, setOpen])\n}\n\ntype UseSearchDataArgs = {\n query: string\n searchItems: ReturnType<typeof buildSearchItems>\n routePrefix: string\n assetPrefix: string\n currentLocale?: string\n}\n\ntype SearchDataState = {\n results: SearchDisplayItem[]\n searchInputLoading: boolean\n showNoResults: boolean\n}\n\nfunction useSearchData(arg0: UseSearchDataArgs): SearchDataState {\n const { query, searchItems, routePrefix, assetPrefix, currentLocale } = arg0\n const [fullTextState, setFullTextState] = useState<FullTextSearchState | null>(null)\n const [pagefindState, setPagefindState] = useState<PagefindState | null>(null)\n\n const quickResults = useMemo(() => {\n const normalizedQuery = query.trim().toLowerCase()\n if (!normalizedQuery) return []\n return searchItems.filter((item) => item.keywords.includes(normalizedQuery)).slice(0, 8).map((item) => ({ ...item, type: 'quick' as const }))\n }, [query, searchItems])\n\n const pagefindKey = pagefindCacheKey(assetPrefix, currentLocale)\n const activePagefindState = pagefindState?.key === pagefindKey ? pagefindState : null\n const pagefind = activePagefindState?.pagefind ?? null\n const pagefindAvailable = activePagefindState?.available ?? null\n const trimmedQuery = query.trim()\n const fullTextKey = `${pagefindKey}:${trimmedQuery}`\n const fullTextResults = fullTextState?.key === fullTextKey ? fullTextState.results : null\n const results: SearchDisplayItem[] = fullTextResults ?? quickResults\n const searchInputLoading = pagefindAvailable === null || Boolean(trimmedQuery && pagefind && fullTextState?.key !== fullTextKey)\n const showNoResults = Boolean(query.trim()) && results.length === 0 && pagefindAvailable !== null\n\n useEffect(() => {\n let cancelled = false\n\n loadPagefind(assetPrefix, currentLocale).then((loadedPagefind) => {\n if (cancelled) return\n setPagefindState({ key: pagefindKey, pagefind: loadedPagefind, available: Boolean(loadedPagefind) })\n })\n\n return () => {\n cancelled = true\n }\n }, [assetPrefix, currentLocale, pagefindKey])\n\n useEffect(() => {\n let cancelled = false\n if (!trimmedQuery || !pagefind) return undefined\n\n Promise.resolve().then(async () => {\n if (cancelled) return\n\n try {\n const search = await pagefind.search(trimmedQuery, { limit: 8 })\n const data = await Promise.all(search.results.map(async (result) => ({ id: result.id, data: await result.data() })))\n if (cancelled) return\n setFullTextState({\n key: fullTextKey,\n results: data.map(({ id, data }) => ({\n type: 'full-text',\n id,\n title: data.meta.title || data.url,\n url: normalizePagefindUrl(data.url, routePrefix),\n excerpt: data.excerpt,\n })),\n })\n } catch (error: unknown) {\n console.warn('[clarify:search] Pagefind search failed', { currentLocale, query: trimmedQuery, error })\n if (!cancelled) setFullTextState({ key: fullTextKey, results: null })\n }\n })\n\n return () => {\n cancelled = true\n }\n }, [currentLocale, fullTextKey, pagefind, routePrefix, trimmedQuery])\n\n return {\n results,\n searchInputLoading,\n showNoResults,\n }\n}\n\nexport function SearchDialog(arg0: SearchDialogProps) {\n const {\n open,\n setOpen,\n routes,\n navigation,\n routePrefix,\n assetPrefix,\n currentLocale,\n className,\n onNavigate = () => {},\n } = arg0\n\n const t = useBuiltInText()\n const navigate = useNavigate()\n const inputRef = useRef<React.ElementRef<typeof SearchInput>>(null)\n const [query, setQuery] = useState('')\n const [activeIndex, setActiveIndex] = useState(0)\n const searchItems = useMemo(() => buildSearchItems(routes, navigation), [navigation, routes])\n\n useSearchDialogLifecycle({ open, setOpen })\n const { results, searchInputLoading, showNoResults } = useSearchData({ query, searchItems, routePrefix, assetPrefix, currentLocale })\n\n const updateQuery = (value: string) => {\n setQuery(value)\n setActiveIndex(0)\n }\n\n function closeDialog() {\n updateQuery('')\n setOpen(false)\n }\n\n function selectResult(result = results[activeIndex]) {\n if (!result) return\n navigate(result.url)\n onNavigate()\n closeDialog()\n }\n\n function renderResultsPanel() {\n return (\n <div className=\"border-t border-(--clarify-theme-tokens-colors-border) bg-(--clarify-theme-tokens-colors-background) empty:hidden dark:border-zinc-100/5 dark:bg-white/2.5\">\n {showNoResults ? (\n <div className=\"p-6 text-center\">\n <SearchX className=\"mx-auto h-5 w-5 stroke-(--clarify-theme-tokens-colors-foreground) dark:stroke-zinc-600\" />\n <p className=\"mt-2 text-xs text-(--clarify-theme-tokens-colors-muted) dark:text-zinc-400\">\n {t('search.noResults', { query })}\n </p>\n </div>\n ) : null}\n {results.length ? (\n <ul id=\"clarify-search-results\" className=\"clarify-search-results\" role=\"listbox\">\n {results.map((result, resultIndex) => (\n <SearchResult\n key={result.type === 'full-text' ? result.id : result.url}\n result={result}\n query={query}\n active={resultIndex === activeIndex}\n onActive={() => setActiveIndex(resultIndex)}\n onSelect={() => selectResult(result)}\n />\n ))}\n </ul>\n ) : null}\n </div>\n )\n }\n\n return (\n <Dialog open={open} onClose={closeDialog} className={clsx('clarify-search-dialog fixed inset-0 z-50', className)}>\n <DialogBackdrop\n transition\n className=\"clarify-search-backdrop clarify-ui-backdrop fixed inset-0 backdrop-blur-xs data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in\"\n />\n\n <div className=\"fixed inset-0 overflow-y-auto px-4 py-4 sm:px-6 sm:py-20 md:py-32 lg:px-8 lg:py-(--clarify-search-dialog-padding-block-lg)\">\n <DialogPanel\n transition\n className=\"clarify-search-panel mx-auto transform-gpu overflow-hidden rounded-(--clarify-theme-tokens-radius-lg) bg-(--clarify-theme-tokens-colors-surface) shadow-xl ring-1 ring-(--clarify-theme-tokens-colors-border) data-closed:scale-95 data-closed:opacity-0 data-enter:duration-300 data-enter:ease-out data-leave:duration-200 data-leave:ease-in sm:max-w-xl dark:bg-zinc-900 dark:ring-zinc-800\"\n onKeyDown={(event) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n setActiveIndex((index) => (results.length ? (index + 1) % results.length : 0))\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n setActiveIndex((index) => (results.length ? (index - 1 + results.length) % results.length : 0))\n }\n }}\n >\n <SearchInput\n ref={inputRef}\n query={query}\n setQuery={updateQuery}\n onClose={closeDialog}\n onSubmit={() => selectResult()}\n loading={searchInputLoading}\n />\n {renderResultsPanel()}\n </DialogPanel>\n </div>\n </Dialog>\n )\n}\n\nexport default SearchDialog\n"],"mappings":"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"}
|
package/output/app/AppShell.d.ts
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import { RuntimeSlotRegistry } from '../slots';
|
|
2
|
-
import { RouteItem, NavigationNode, NavigationTree } from '../types';
|
|
2
|
+
import { RouteItem, NavigationNode, NavigationTab, NavigationTree } from '../types';
|
|
3
3
|
export type AppShellProps = {
|
|
4
4
|
routes: RouteItem[];
|
|
5
5
|
navigation: NavigationTree;
|
|
6
6
|
runtimeSlots?: RuntimeSlotRegistry;
|
|
7
7
|
};
|
|
8
8
|
export declare function scrollToHash(hash: string): () => void;
|
|
9
|
+
export declare function visibleNavigation(nodes: NavigationNode[], pathname: string, locale?: string): NavigationNode[];
|
|
10
|
+
type NavigationState = {
|
|
11
|
+
items: NavigationNode[];
|
|
12
|
+
tabs?: NavigationTab[];
|
|
13
|
+
};
|
|
9
14
|
export declare function resolvePageLayout(route: RouteItem | undefined, navigation: NavigationNode[], pathname: string): 'documentation' | 'blog';
|
|
15
|
+
export declare function navigationFromTabs(tabs: NavigationTab[], pathname: string, locale?: string): NavigationState;
|
|
10
16
|
export declare function AppShell(arg0: AppShellProps): import("react").JSX.Element;
|
|
17
|
+
export {};
|
package/output/client.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_ClarifyShell = require("./ClarifyShell-
|
|
3
|
-
const require_PageActions = require("./PageActions-
|
|
4
|
-
const require_render = require("./render-
|
|
2
|
+
const require_ClarifyShell = require("./ClarifyShell-Cv4GYuCM.cjs");
|
|
3
|
+
const require_PageActions = require("./PageActions-DEAcLCtt.cjs");
|
|
4
|
+
const require_render = require("./render-WvWfRv-m.cjs");
|
|
5
5
|
exports.ThemeEditor = require_ClarifyShell.ThemeEditor;
|
|
6
6
|
exports.applyThemeVariables = require_ClarifyShell.applyThemeVariables;
|
|
7
7
|
exports.getStoredLocalePreference = require_PageActions.getStoredLocalePreference;
|
package/output/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as themeBootstrapScript, i as themeEditorPresets, n as ThemeEditor, r as applyThemeVariables, s as themeStorageKey } from "./ClarifyShell-
|
|
2
|
-
import { C as themeCookieName, S as storeThemePreference, _ as getStoredLocalePreference, b as readLocaleCookie, v as getStoredThemePreference, x as storeLocalePreference, y as localeCookieName } from "./PageActions-
|
|
3
|
-
import { t as render } from "./render-
|
|
1
|
+
import { a as themeBootstrapScript, i as themeEditorPresets, n as ThemeEditor, r as applyThemeVariables, s as themeStorageKey } from "./ClarifyShell-Dh4TgQkW.js";
|
|
2
|
+
import { C as themeCookieName, S as storeThemePreference, _ as getStoredLocalePreference, b as readLocaleCookie, v as getStoredThemePreference, x as storeLocalePreference, y as localeCookieName } from "./PageActions-B5PYif9Q.js";
|
|
3
|
+
import { t as render } from "./render-Cn0R4zQQ.js";
|
|
4
4
|
export { ThemeEditor, applyThemeVariables, getStoredLocalePreference, getStoredThemePreference, localeCookieName, readLocaleCookie, render, storeLocalePreference, storeThemePreference, themeBootstrapScript, themeCookieName, themeEditorPresets, themeStorageKey };
|
package/output/core/types.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export type NavigationNode = {
|
|
|
20
20
|
title: string;
|
|
21
21
|
icon?: string;
|
|
22
22
|
layout?: 'documentation' | 'blog';
|
|
23
|
+
visible?: 'always' | 'active' | 'never';
|
|
24
|
+
searchable?: boolean;
|
|
23
25
|
children?: NavigationNode[];
|
|
24
26
|
sections?: RouteSection[];
|
|
25
27
|
};
|
|
@@ -29,6 +31,7 @@ export type RouteItem = {
|
|
|
29
31
|
locale?: string;
|
|
30
32
|
isFallback?: boolean;
|
|
31
33
|
isBareAlias?: boolean;
|
|
34
|
+
searchable?: boolean;
|
|
32
35
|
alternates?: Record<string, string>;
|
|
33
36
|
title: string;
|
|
34
37
|
description?: string;
|
package/output/index.cjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_rolldown_runtime = require("./rolldown-runtime-DakpK96I.cjs");
|
|
3
3
|
const require_i18n = require("./i18n-BMNCgF9o.cjs");
|
|
4
|
-
const require_ClarifyShell = require("./ClarifyShell-
|
|
5
|
-
const require_PageActions = require("./PageActions-
|
|
6
|
-
const require_OpenApiOperation = require("./OpenApiOperation-
|
|
4
|
+
const require_ClarifyShell = require("./ClarifyShell-Cv4GYuCM.cjs");
|
|
5
|
+
const require_PageActions = require("./PageActions-DEAcLCtt.cjs");
|
|
6
|
+
const require_OpenApiOperation = require("./OpenApiOperation-MEemAiXJ.cjs");
|
|
7
7
|
const require_remark = require("./remark-DTLbG8PK.cjs");
|
|
8
|
-
const require_render = require("./render-
|
|
8
|
+
const require_render = require("./render-WvWfRv-m.cjs");
|
|
9
9
|
let clsx = require("clsx");
|
|
10
10
|
clsx = require_rolldown_runtime.__toESM(clsx, 1);
|
|
11
11
|
let react = require("react");
|
package/output/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { A as Heading, B as Callout, C as Tabs, D as GridPattern, E as Prose, F as CodeGroup, H as LocalizedLink, I as Pre, L as Mermaid, M as Feedback, N as Collapse, O as HeroPattern, P as Code, R as Card, S as TabItem, T as Steps, V as Button, _ as Markdown, b as primitives_exports, d as EndpointMethodBadge, f as getOpenApiOperationEntryById, j as Tag, k as Logo, m as listOpenApiOperations, n as OpenApiOperation$1, p as getOpenApiOperationSectionId, r as OpenApiRequestWorkbench, v as Release, w as Step, x as WebFrame, y as ReleaseItem, z as CardGroup } from "./OpenApiOperation-
|
|
1
|
+
import { A as Heading, B as Callout, C as Tabs, D as GridPattern, E as Prose, F as CodeGroup, H as LocalizedLink, I as Pre, L as Mermaid, M as Feedback, N as Collapse, O as HeroPattern, P as Code, R as Card, S as TabItem, T as Steps, V as Button, _ as Markdown, b as primitives_exports, d as EndpointMethodBadge, f as getOpenApiOperationEntryById, j as Tag, k as Logo, m as listOpenApiOperations, n as OpenApiOperation$1, p as getOpenApiOperationSectionId, r as OpenApiRequestWorkbench, v as Release, w as Step, x as WebFrame, y as ReleaseItem, z as CardGroup } from "./OpenApiOperation-B6WpfQ0n.js";
|
|
2
2
|
import { a as useConfig, c as useConfigUpdaterOptional, i as OpenApiSpecsContext, l as useLocale, n as ConfigProvider, s as useConfigUpdater, t as useBuiltInText, u as useOpenApiSpecs } from "./i18n-Zmmhz7FF.js";
|
|
3
|
-
import { a as themeBootstrapScript, c as AppShell, d as
|
|
4
|
-
import { T as localizeHref, c as remToPx, g as useTheme, h as ThemeProvider, m as ThemeToggle, o as SectionProvider, s as useSectionStore, t as PageActions } from "./PageActions-
|
|
3
|
+
import { a as themeBootstrapScript, c as AppShell, d as BuiltWithClarify, f as RenderErrorPanel, g as useSlot, h as SlotProvider, i as themeEditorPresets, l as PageBanner, m as RuntimeSlotsProvider, n as ThemeEditor, o as themePresets, p as RuntimeSlot, r as applyThemeVariables, u as PageFooter } from "./ClarifyShell-Dh4TgQkW.js";
|
|
4
|
+
import { T as localizeHref, c as remToPx, g as useTheme, h as ThemeProvider, m as ThemeToggle, o as SectionProvider, s as useSectionStore, t as PageActions } from "./PageActions-B5PYif9Q.js";
|
|
5
5
|
import { n as parseCodeMeta, t as markdownRemarkPlugins } from "./remark-C9iRQM0R.js";
|
|
6
|
-
import { t as render } from "./render-
|
|
6
|
+
import { t as render } from "./render-Cn0R4zQQ.js";
|
|
7
7
|
import clsx from "clsx";
|
|
8
8
|
import { useEffect, useState } from "react";
|
|
9
9
|
import { useLocation } from "react-router-dom";
|
package/output/preview.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
const require_i18n = require("./i18n-BMNCgF9o.cjs");
|
|
3
|
-
const require_PageActions = require("./PageActions-
|
|
4
|
-
const require_OpenApiOperation = require("./OpenApiOperation-
|
|
3
|
+
const require_PageActions = require("./PageActions-DEAcLCtt.cjs");
|
|
4
|
+
const require_OpenApiOperation = require("./OpenApiOperation-MEemAiXJ.cjs");
|
|
5
5
|
let react = require("react");
|
|
6
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
7
|
let lucide_react = require("lucide-react");
|
package/output/preview.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { a as ResponseExamplesPanel, c as getAuthOptions, g as getRequestBody, h as getMediaTypeEntries, i as RequestExamplesPanel, l as getServerKey, o as authPlaceholder, s as defaultServerVariables, t as EndpointIdentity, u as getServers } from "./OpenApiOperation-
|
|
1
|
+
import { a as ResponseExamplesPanel, c as getAuthOptions, g as getRequestBody, h as getMediaTypeEntries, i as RequestExamplesPanel, l as getServerKey, o as authPlaceholder, s as defaultServerVariables, t as EndpointIdentity, u as getServers } from "./OpenApiOperation-B6WpfQ0n.js";
|
|
2
2
|
import { i as OpenApiSpecsContext, n as ConfigProvider, r as LocaleContext } from "./i18n-Zmmhz7FF.js";
|
|
3
|
-
import { a as Navigation, o as SectionProvider } from "./PageActions-
|
|
3
|
+
import { a as Navigation, o as SectionProvider } from "./PageActions-B5PYif9Q.js";
|
|
4
4
|
import { useState } from "react";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
import { Menu, X } from "lucide-react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as ClarifyShell } from "./ClarifyShell-
|
|
1
|
+
import { t as ClarifyShell } from "./ClarifyShell-Dh4TgQkW.js";
|
|
2
2
|
import { StrictMode } from "react";
|
|
3
3
|
import { BrowserRouter } from "react-router-dom";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -56,4 +56,4 @@ function render(options) {
|
|
|
56
56
|
//#endregion
|
|
57
57
|
export { render as t };
|
|
58
58
|
|
|
59
|
-
//# sourceMappingURL=render-
|
|
59
|
+
//# sourceMappingURL=render-Cn0R4zQQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-
|
|
1
|
+
{"version":3,"file":"render-Cn0R4zQQ.js","names":[],"sources":["../source/runtime/render.tsx"],"sourcesContent":["import { StrictMode } from 'react'\nimport { hydrateRoot, createRoot, type Root } from 'react-dom/client'\nimport { BrowserRouter } from 'react-router-dom'\n\nimport type { RenderOptions } from '../types'\n\nimport { ClarifyShell } from './ClarifyShell'\n\nlet root: Root | undefined\n\n/**\n * Clarify 客户端 Hydration 入口。\n * 在文档项目的 main.tsx 中调用:\n * ```ts\n * import { render } from '@clarify-labs/renderer';\n * import { routes } from 'virtual:clarify/routes';\n * import { config } from 'virtual:clarify/config';\n * render({ config, routes });\n * ```\n */\nfunction isHydrationDebugEnabled(): boolean {\n if (typeof window === 'undefined') return false\n\n try {\n const params = new URLSearchParams(window.location.search)\n return params.get('clarifyHydrationDebug') === '1' || window.localStorage.getItem('clarify:hydration-debug') === '1'\n } catch {\n return false\n }\n}\n\nexport function render(options: RenderOptions) {\n const { config, routes, navigation, openApiSpecs = {}, runtimeSlots, container, themeEditor = false } = options\n\n const target = container ?? document.getElementById('root')\n if (!target) {\n throw new Error('[clarify] 渲染失败:找不到挂载节点,请确保 HTML 中存在 id=\"root\" 的元素')\n }\n\n const app = (\n <StrictMode>\n <BrowserRouter basename={config.routePrefix}>\n <ClarifyShell\n config={config}\n routes={routes}\n navigation={navigation}\n openApiSpecs={openApiSpecs}\n runtimeSlots={runtimeSlots}\n themeEditor={themeEditor}\n />\n </BrowserRouter>\n </StrictMode>\n )\n\n const hydrationDebug = isHydrationDebugEnabled()\n\n if (root) {\n root.render(app)\n return\n }\n\n try {\n root = hydrateRoot(target as Element, app, {\n onRecoverableError(error, errorInfo) {\n // Phase 1: suppress hydration mismatch noise by default. React 19\n // recovers automatically, but diagnostics can be enabled explicitly.\n if (hydrationDebug) {\n console.warn('[clarify] Recoverable hydration error:', error, errorInfo)\n }\n },\n })\n } catch (err) {\n console.warn('[clarify] Hydration failed, falling back to client render:', err)\n root = createRoot(target as Element)\n root.render(app)\n }\n}\n"],"mappings":";;;;;;AAQA,IAAI;;;;;;;;;;;AAYJ,SAAS,0BAAmC;CAC1C,IAAI,OAAO,WAAW,aAAa,OAAO;CAE1C,IAAI;EAEF,OAAO,IADY,gBAAgB,OAAO,SAAS,MAC5C,CAAA,CAAO,IAAI,uBAAuB,MAAM,OAAO,OAAO,aAAa,QAAQ,yBAAyB,MAAM;CACnH,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,OAAO,SAAwB;CAC7C,MAAM,EAAE,QAAQ,QAAQ,YAAY,eAAe,CAAC,GAAG,cAAc,WAAW,cAAc,UAAU;CAExG,MAAM,SAAS,aAAa,SAAS,eAAe,MAAM;CAC1D,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,qDAAmD;CAGrE,MAAM,MACJ,oBAAC,YAAD,EAAA,UACE,oBAAC,eAAD;EAAe,UAAU,OAAO;YAC9B,oBAAC,cAAD;GACU;GACA;GACI;GACE;GACA;GACD;EACd,CAAA;CACY,CAAA,EACL,CAAA;CAGd,MAAM,iBAAiB,wBAAwB;CAE/C,IAAI,MAAM;EACR,KAAK,OAAO,GAAG;EACf;CACF;CAEA,IAAI;EACF,OAAO,YAAY,QAAmB,KAAK,EACzC,mBAAmB,OAAO,WAAW;GAGnC,IAAI,gBACF,QAAQ,KAAK,0CAA0C,OAAO,SAAS;EAE3E,EACF,CAAC;CACH,SAAS,KAAK;EACZ,QAAQ,KAAK,8DAA8D,GAAG;EAC9E,OAAO,WAAW,MAAiB;EACnC,KAAK,OAAO,GAAG;CACjB;AACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_ClarifyShell = require("./ClarifyShell-
|
|
1
|
+
const require_ClarifyShell = require("./ClarifyShell-Cv4GYuCM.cjs");
|
|
2
2
|
let react = require("react");
|
|
3
3
|
let react_router_dom = require("react-router-dom");
|
|
4
4
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -61,4 +61,4 @@ Object.defineProperty(exports, "render", {
|
|
|
61
61
|
}
|
|
62
62
|
});
|
|
63
63
|
|
|
64
|
-
//# sourceMappingURL=render-
|
|
64
|
+
//# sourceMappingURL=render-WvWfRv-m.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-
|
|
1
|
+
{"version":3,"file":"render-WvWfRv-m.cjs","names":[],"sources":["../source/runtime/render.tsx"],"sourcesContent":["import { StrictMode } from 'react'\nimport { hydrateRoot, createRoot, type Root } from 'react-dom/client'\nimport { BrowserRouter } from 'react-router-dom'\n\nimport type { RenderOptions } from '../types'\n\nimport { ClarifyShell } from './ClarifyShell'\n\nlet root: Root | undefined\n\n/**\n * Clarify 客户端 Hydration 入口。\n * 在文档项目的 main.tsx 中调用:\n * ```ts\n * import { render } from '@clarify-labs/renderer';\n * import { routes } from 'virtual:clarify/routes';\n * import { config } from 'virtual:clarify/config';\n * render({ config, routes });\n * ```\n */\nfunction isHydrationDebugEnabled(): boolean {\n if (typeof window === 'undefined') return false\n\n try {\n const params = new URLSearchParams(window.location.search)\n return params.get('clarifyHydrationDebug') === '1' || window.localStorage.getItem('clarify:hydration-debug') === '1'\n } catch {\n return false\n }\n}\n\nexport function render(options: RenderOptions) {\n const { config, routes, navigation, openApiSpecs = {}, runtimeSlots, container, themeEditor = false } = options\n\n const target = container ?? document.getElementById('root')\n if (!target) {\n throw new Error('[clarify] 渲染失败:找不到挂载节点,请确保 HTML 中存在 id=\"root\" 的元素')\n }\n\n const app = (\n <StrictMode>\n <BrowserRouter basename={config.routePrefix}>\n <ClarifyShell\n config={config}\n routes={routes}\n navigation={navigation}\n openApiSpecs={openApiSpecs}\n runtimeSlots={runtimeSlots}\n themeEditor={themeEditor}\n />\n </BrowserRouter>\n </StrictMode>\n )\n\n const hydrationDebug = isHydrationDebugEnabled()\n\n if (root) {\n root.render(app)\n return\n }\n\n try {\n root = hydrateRoot(target as Element, app, {\n onRecoverableError(error, errorInfo) {\n // Phase 1: suppress hydration mismatch noise by default. React 19\n // recovers automatically, but diagnostics can be enabled explicitly.\n if (hydrationDebug) {\n console.warn('[clarify] Recoverable hydration error:', error, errorInfo)\n }\n },\n })\n } catch (err) {\n console.warn('[clarify] Hydration failed, falling back to client render:', err)\n root = createRoot(target as Element)\n root.render(app)\n }\n}\n"],"mappings":";;;;;;AAQA,IAAI;;;;;;;;;;;AAYJ,SAAS,0BAAmC;CAC1C,IAAI,OAAO,WAAW,aAAa,OAAO;CAE1C,IAAI;EAEF,OAAO,IADY,gBAAgB,OAAO,SAAS,MAC5C,CAAA,CAAO,IAAI,uBAAuB,MAAM,OAAO,OAAO,aAAa,QAAQ,yBAAyB,MAAM;CACnH,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,OAAO,SAAwB;CAC7C,MAAM,EAAE,QAAQ,QAAQ,YAAY,eAAe,CAAC,GAAG,cAAc,WAAW,cAAc,UAAU;CAExG,MAAM,SAAS,aAAa,SAAS,eAAe,MAAM;CAC1D,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,qDAAmD;CAGrE,MAAM,MACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAA,YAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAA,eAAD;EAAe,UAAU,OAAO;YAC9B,iBAAA,GAAA,kBAAA,IAAA,CAAC,qBAAA,cAAD;GACU;GACA;GACI;GACE;GACA;GACD;EACd,CAAA;CACY,CAAA,EACL,CAAA;CAGd,MAAM,iBAAiB,wBAAwB;CAE/C,IAAI,MAAM;EACR,KAAK,OAAO,GAAG;EACf;CACF;CAEA,IAAI;EACF,QAAA,GAAA,iBAAA,YAAA,CAAmB,QAAmB,KAAK,EACzC,mBAAmB,OAAO,WAAW;GAGnC,IAAI,gBACF,QAAQ,KAAK,0CAA0C,OAAO,SAAS;EAE3E,EACF,CAAC;CACH,SAAS,KAAK;EACZ,QAAQ,KAAK,8DAA8D,GAAG;EAC9E,QAAA,GAAA,iBAAA,WAAA,CAAkB,MAAiB;EACnC,KAAK,OAAO,GAAG;CACjB;AACF"}
|
package/output/server.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_ClarifyShell = require("./ClarifyShell-
|
|
3
|
-
const require_PageActions = require("./PageActions-
|
|
2
|
+
const require_ClarifyShell = require("./ClarifyShell-Cv4GYuCM.cjs");
|
|
3
|
+
const require_PageActions = require("./PageActions-DEAcLCtt.cjs");
|
|
4
4
|
let react = require("react");
|
|
5
5
|
let react_router_dom = require("react-router-dom");
|
|
6
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
package/output/server.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as ClarifyShell } from "./ClarifyShell-
|
|
2
|
-
import { E as prefixHref } from "./PageActions-
|
|
1
|
+
import { t as ClarifyShell } from "./ClarifyShell-Dh4TgQkW.js";
|
|
2
|
+
import { E as prefixHref } from "./PageActions-B5PYif9Q.js";
|
|
3
3
|
import { StrictMode } from "react";
|
|
4
4
|
import { StaticRouter } from "react-router-dom";
|
|
5
5
|
import { jsx } from "react/jsx-runtime";
|