@unterberg/nivel 0.2.7 → 0.2.8

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.
@@ -0,0 +1,20 @@
1
+ import * as _classmatejs_react from '@classmatejs/react';
2
+ import * as react from 'react';
3
+
4
+ declare const LayoutSize: {
5
+ readonly xxs: "xxs";
6
+ readonly xs: "xs";
7
+ readonly sm: "sm";
8
+ readonly md: "md";
9
+ readonly lg: "lg";
10
+ readonly xl: "xl";
11
+ readonly full: "full";
12
+ };
13
+ type LayoutSize = (typeof LayoutSize)[keyof typeof LayoutSize];
14
+ interface LayoutComponentProps {
15
+ $size?: LayoutSize;
16
+ $noGrow?: boolean;
17
+ }
18
+ declare const LayoutComponent: _classmatejs_react.CmBaseComponent<react.ClassAttributes<HTMLDivElement> & react.HTMLAttributes<HTMLDivElement> & LayoutComponentProps & Partial<LayoutComponentProps>>;
19
+
20
+ export { LayoutComponent as L };
@@ -1,9 +1,11 @@
1
1
  import {
2
- LayoutComponent,
3
2
  useDocsGlobalContext,
4
3
  useDocsSearchActions,
5
4
  useDocsSearchStore
6
- } from "./chunk-ESAHWFDZ.js";
5
+ } from "./chunk-US7NPQZ6.js";
6
+ import {
7
+ LayoutComponent
8
+ } from "./chunk-7MAISHRP.js";
7
9
  import {
8
10
  withSiteBaseUrl
9
11
  } from "./chunk-PYYPYIBD.js";
@@ -332,4 +334,4 @@ var SearchSuggestionBox = ({
332
334
  export {
333
335
  SearchModal
334
336
  };
335
- //# sourceMappingURL=SearchModal-Q2MTOIZU.js.map
337
+ //# sourceMappingURL=SearchModal-PV67QW52.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime/client/components/SearchModal.tsx","../src/runtime/client/search.ts"],"sourcesContent":["import { ArrowRightFromLine, MessageCircleQuestion, TriangleAlert } from 'lucide-react'\nimport type { RefObject } from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport { withSiteBaseUrl } from '../../../shared/assets.js'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\nimport { searchAlgoliaIndex } from '../search.js'\nimport { useDocsSearchActions, useDocsSearchStore } from '../store/runtime-store.js'\nimport { LayoutComponent } from './LayoutComponent.js'\n\nconst MIN_QUERY_LENGTH = 2\nconst QUERY_DEBOUNCE_MS = 150\n\nconst useDebouncedValue = (value: string, delayMs: number) => {\n const [debouncedValue, setDebouncedValue] = useState(value)\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n setDebouncedValue(value)\n }, delayMs)\n\n return () => {\n window.clearTimeout(timeoutId)\n }\n }, [delayMs, value])\n\n return debouncedValue\n}\n\ntype SearchResults = Awaited<ReturnType<typeof searchAlgoliaIndex>>\n\nconst useSearchResults = (options: { canSearch: boolean; isOpen: boolean; normalizedQuery: string }) => {\n const docs = useDocsGlobalContext()\n const { canSearch, isOpen, normalizedQuery } = options\n const [results, setResults] = useState<SearchResults>([])\n const [isLoading, setIsLoading] = useState(false)\n const [isError, setIsError] = useState(false)\n\n useEffect(() => {\n if (!isOpen || !canSearch) {\n setResults([])\n setIsLoading(false)\n setIsError(false)\n return\n }\n\n const abortController = new AbortController()\n\n setIsLoading(true)\n setIsError(false)\n\n searchAlgoliaIndex({\n config: docs.algolia,\n query: normalizedQuery,\n signal: abortController.signal,\n })\n .then((nextResults) => {\n if (abortController.signal.aborted) {\n return\n }\n\n setResults(nextResults)\n })\n .catch((error: unknown) => {\n if (abortController.signal.aborted) {\n return\n }\n\n const isAbortError = error instanceof DOMException && error.name === 'AbortError'\n\n if (!isAbortError) {\n setResults([])\n setIsError(true)\n }\n })\n .finally(() => {\n if (!abortController.signal.aborted) {\n setIsLoading(false)\n }\n })\n\n return () => {\n abortController.abort()\n }\n }, [canSearch, docs.algolia, isOpen, normalizedQuery])\n\n return {\n results,\n isLoading,\n isError,\n }\n}\n\nexport const SearchModal = () => {\n const docs = useDocsGlobalContext()\n const { urlPathname } = usePageContext()\n const { close, setQuery } = useDocsSearchActions()\n const isOpen = useDocsSearchStore((state) => state.isOpen)\n const query = useDocsSearchStore((state) => state.query)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const suggestionBoxRef = useRef<HTMLDivElement | null>(null)\n const previousPathnameRef = useRef(urlPathname)\n const debouncedQuery = useDebouncedValue(query, QUERY_DEBOUNCE_MS)\n const normalizedQuery = debouncedQuery.trim()\n const canSearch = Boolean(docs.algolia) && normalizedQuery.length >= MIN_QUERY_LENGTH\n const { isError, isLoading, results } = useSearchResults({\n canSearch,\n isOpen,\n normalizedQuery,\n })\n\n useEffect(() => {\n if (previousPathnameRef.current !== urlPathname) {\n close()\n previousPathnameRef.current = urlPathname\n }\n }, [close, urlPathname])\n\n useEffect(() => {\n if (!isOpen) {\n return\n }\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target as Node\n\n if (!containerRef.current?.contains(target) && !suggestionBoxRef.current?.contains(target)) {\n close()\n }\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n close()\n }\n }\n\n document.addEventListener('pointerdown', handlePointerDown)\n document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown)\n document.removeEventListener('keydown', handleKeyDown)\n }\n }, [close, isOpen])\n\n if (!docs.algolia) {\n return null\n }\n\n return (\n <div ref={containerRef} className=\"relative\">\n <SearchSuggestionBox\n contentRef={suggestionBoxRef}\n isError={isError}\n isLoading={isLoading}\n isOpen={isOpen}\n onClose={close}\n onQueryChange={setQuery}\n query={query}\n results={results}\n />\n </div>\n )\n}\n\ntype SearchSuggestionBoxProps = {\n contentRef: RefObject<HTMLDivElement | null>\n isError: boolean\n isLoading: boolean\n isOpen: boolean\n onClose: () => void\n onQueryChange: (query: string) => void\n query: string\n results: SearchResults\n}\n\nconst SearchSuggestionBox = ({\n contentRef,\n isError,\n isLoading,\n isOpen,\n onClose,\n onQueryChange,\n query,\n results,\n}: SearchSuggestionBoxProps) => {\n const inputRef = useRef<HTMLInputElement | null>(null)\n const normalizedQuery = query.trim()\n const canSearch = normalizedQuery.length >= MIN_QUERY_LENGTH\n\n useEffect(() => {\n if (!isOpen) {\n return\n }\n\n const frameId = window.requestAnimationFrame(() => {\n inputRef.current?.focus()\n inputRef.current?.setSelectionRange(query.length, query.length)\n })\n\n return () => {\n window.cancelAnimationFrame(frameId)\n }\n }, [isOpen, query.length])\n\n if (!isOpen || typeof document === 'undefined') {\n return null\n }\n\n return createPortal(\n <div className=\"fixed inset-0 z-30 h-full w-full bg-base-100/50 backdrop-blur-lg\">\n <div className=\"absolute inset-0 z-1 bg-linear-to-b from-base-100 via-base-100 via-25% to-primary-muted-superlight dark:bg-linear-to-t\" />\n <LayoutComponent\n ref={contentRef}\n $size=\"sm\"\n className=\"mt-5 relative z-2 rounded-box bg-base-100/70 p-6 pt-6 shadow-lg shadow-primary-muted-light\"\n >\n <input\n placeholder=\"Search docs\"\n ref={inputRef}\n type=\"text\"\n className=\"input input-primary input-xl w-full\"\n value={query}\n onChange={(event) => onQueryChange(event.target.value)}\n />\n <div className=\"flex h-7 items-center px-4 text-xs text-base-muted\">\n {isLoading ? (\n <span className=\"flex items-center gap-1\">\n <span className=\"loading loading-dots loading-xs\" />\n Searching...\n </span>\n ) : normalizedQuery ? null : (\n <span className=\"flex items-center gap-1\">\n <MessageCircleQuestion className=\"size-3 shrink-0\" />\n Type at least {MIN_QUERY_LENGTH} characters.\n </span>\n )}\n </div>\n {normalizedQuery ? (\n isError ? (\n <div className=\"flex items-center gap-2 rounded-box border border-warning/40 bg-base-100 p-4 text-sm text-base-muted shadow-md shadow-primary-muted-light\">\n <TriangleAlert className=\"size-4 shrink-0 text-warning\" />\n Search is temporarily unavailable.\n </div>\n ) : !canSearch ? (\n <div className=\"text-sm text-base-muted\">Keep typing to search.</div>\n ) : !isLoading && results.length === 0 ? (\n <div className=\"text-sm text-base-muted\">No results found.</div>\n ) : (\n <div className=\"-mx-2 max-h-80 overflow-y-auto p-2\">\n <ul className=\"flex flex-col gap-2\">\n {results.map((result) => (\n <li key={result.href}>\n <a\n href={withSiteBaseUrl(result.href)}\n className=\"block rounded-box border border-base-muted-medium bg-base-100 p-4 shadow-md hover:border-primary-muted hover:bg-base-200\"\n onClick={onClose}\n >\n <div className=\"mb-2 flex items-center justify-start gap-2\">\n <div className=\"font-bold text-base-content\">{result.title}</div>\n {result.sectionTitle ? (\n <div className=\"flex items-center gap-1 text-sm text-base-muted-medium\">\n <ArrowRightFromLine className=\"size-3\" /> {result.sectionTitle}\n </div>\n ) : null}\n </div>\n {result.excerpt ? <p className=\"text-xs leading-5 text-base-muted\">{result.excerpt}</p> : null}\n </a>\n </li>\n ))}\n </ul>\n </div>\n )\n ) : null}\n </LayoutComponent>\n </div>,\n document.body,\n )\n}\n","import type { ResolvedDocsAlgoliaConfig } from '../../docs/types.js'\n\ntype DocsSearchResult = {\n href: string\n title: string\n excerpt?: string\n sectionTitle?: string\n}\n\ntype SearchAlgoliaResponse = {\n hits?: unknown[]\n}\n\ntype AlgoliaDocSearchHit = {\n url?: unknown\n url_without_anchor?: unknown\n type?: unknown\n category?: unknown\n content?: unknown\n hierarchy?: Record<string, unknown> | null\n _highlightResult?: {\n content?: {\n value?: unknown\n }\n } | null\n _snippetResult?: {\n content?: {\n value?: unknown\n }\n } | null\n}\n\nconst hierarchyLevels = ['lvl0', 'lvl1', 'lvl2', 'lvl3', 'lvl4', 'lvl5', 'lvl6'] as const\n\nconst stripHtml = (value: string) => value.replace(/<[^>]+>/g, '')\n\nconst normalizeString = (value: unknown) => {\n if (typeof value === 'string') {\n const normalized = stripHtml(value).replace(/\\s+/g, ' ').trim()\n return normalized || undefined\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value)\n }\n\n return undefined\n}\n\nconst getValueAtPath = (value: unknown, path: string): unknown => {\n if (!path) {\n return undefined\n }\n\n const segments = path.split('.').filter(Boolean)\n let currentValue = value\n\n for (const segment of segments) {\n if (!currentValue || typeof currentValue !== 'object' || Array.isArray(currentValue)) {\n return undefined\n }\n\n currentValue = (currentValue as Record<string, unknown>)[segment]\n }\n\n return currentValue\n}\n\nconst getMappedString = (value: unknown, path: string): string | undefined => {\n return normalizeString(getValueAtPath(value, path))\n}\n\nconst buildSearchUrl = (appId: string, indexName: string) => {\n return `https://${appId}-dsn.algolia.net/1/indexes/${encodeURIComponent(indexName)}/query`\n}\n\nconst getDocSearchHierarchyValue = (\n hierarchy: AlgoliaDocSearchHit['hierarchy'],\n level: (typeof hierarchyLevels)[number],\n) => {\n if (!hierarchy || typeof hierarchy !== 'object') {\n return undefined\n }\n\n return normalizeString(hierarchy[level])\n}\n\nconst getDocSearchTitleLevel = (hit: AlgoliaDocSearchHit) => {\n const levelFromType =\n typeof hit.type === 'string' && /^lvl[0-6]$/.test(hit.type) ? (hit.type as (typeof hierarchyLevels)[number]) : null\n\n if (levelFromType && getDocSearchHierarchyValue(hit.hierarchy, levelFromType)) {\n return levelFromType\n }\n\n return [...hierarchyLevels]\n .reverse()\n .find((level) => level !== 'lvl0' && getDocSearchHierarchyValue(hit.hierarchy, level))\n}\n\nconst getDocSearchFallbackResult = (hit: unknown): Partial<DocsSearchResult> => {\n const docSearchHit = hit as AlgoliaDocSearchHit\n const titleLevel = getDocSearchTitleLevel(docSearchHit)\n const title = titleLevel ? getDocSearchHierarchyValue(docSearchHit.hierarchy, titleLevel) : undefined\n const titleLevelIndex = titleLevel ? hierarchyLevels.indexOf(titleLevel) : -1\n const sectionTitle =\n hierarchyLevels\n .slice(0, Math.max(titleLevelIndex, 0))\n .reverse()\n .map((level) => getDocSearchHierarchyValue(docSearchHit.hierarchy, level))\n .find(Boolean) ?? normalizeString(docSearchHit.category)\n\n return {\n href: normalizeString(docSearchHit.url) ?? normalizeString(docSearchHit.url_without_anchor),\n title: title ?? normalizeString(docSearchHit.category),\n excerpt:\n normalizeString(docSearchHit._snippetResult?.content?.value) ??\n normalizeString(docSearchHit.content) ??\n normalizeString(docSearchHit._highlightResult?.content?.value),\n sectionTitle,\n }\n}\n\nconst mapHitToSearchResult = (hit: unknown, config: ResolvedDocsAlgoliaConfig): DocsSearchResult | null => {\n const docSearchFallback = getDocSearchFallbackResult(hit)\n const href = getMappedString(hit, config.fields.href) ?? docSearchFallback.href\n const title = getMappedString(hit, config.fields.title) ?? docSearchFallback.title\n\n if (!href || !title) {\n return null\n }\n\n const excerpt = getMappedString(hit, config.fields.excerpt) ?? docSearchFallback.excerpt\n const sectionTitle = getMappedString(hit, config.fields.sectionTitle) ?? docSearchFallback.sectionTitle\n\n return {\n href,\n title,\n excerpt,\n sectionTitle,\n }\n}\n\nexport const searchAlgoliaIndex = async (options: {\n config?: ResolvedDocsAlgoliaConfig | null\n query: string\n signal?: AbortSignal\n}) => {\n const { config, query, signal } = options\n\n if (!config) {\n throw new Error('Algolia search is not configured.')\n }\n\n const response = await fetch(buildSearchUrl(config.appId, config.indexName), {\n method: 'POST',\n signal,\n headers: {\n accept: 'application/json',\n 'content-type': 'application/json',\n 'x-algolia-api-key': config.apiKey,\n 'x-algolia-application-id': config.appId,\n },\n body: JSON.stringify({\n query,\n ...config.searchParams,\n }),\n })\n\n if (!response.ok) {\n throw new Error(`Algolia search request failed with status ${response.status}.`)\n }\n\n const data = (await response.json()) as SearchAlgoliaResponse\n\n return (data.hits ?? [])\n .map((hit) => mapHitToSearchResult(hit, config))\n .filter((result): result is DocsSearchResult => result !== null)\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/runtime/client/components/SearchModal.tsx","../src/runtime/client/search.ts"],"sourcesContent":["import { ArrowRightFromLine, MessageCircleQuestion, TriangleAlert } from 'lucide-react'\nimport type { RefObject } from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport { withSiteBaseUrl } from '../../../shared/assets.js'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\nimport { searchAlgoliaIndex } from '../search.js'\nimport { useDocsSearchActions, useDocsSearchStore } from '../store/runtime-store.js'\nimport { LayoutComponent } from './LayoutComponent.js'\n\nconst MIN_QUERY_LENGTH = 2\nconst QUERY_DEBOUNCE_MS = 150\n\nconst useDebouncedValue = (value: string, delayMs: number) => {\n const [debouncedValue, setDebouncedValue] = useState(value)\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n setDebouncedValue(value)\n }, delayMs)\n\n return () => {\n window.clearTimeout(timeoutId)\n }\n }, [delayMs, value])\n\n return debouncedValue\n}\n\ntype SearchResults = Awaited<ReturnType<typeof searchAlgoliaIndex>>\n\nconst useSearchResults = (options: { canSearch: boolean; isOpen: boolean; normalizedQuery: string }) => {\n const docs = useDocsGlobalContext()\n const { canSearch, isOpen, normalizedQuery } = options\n const [results, setResults] = useState<SearchResults>([])\n const [isLoading, setIsLoading] = useState(false)\n const [isError, setIsError] = useState(false)\n\n useEffect(() => {\n if (!isOpen || !canSearch) {\n setResults([])\n setIsLoading(false)\n setIsError(false)\n return\n }\n\n const abortController = new AbortController()\n\n setIsLoading(true)\n setIsError(false)\n\n searchAlgoliaIndex({\n config: docs.algolia,\n query: normalizedQuery,\n signal: abortController.signal,\n })\n .then((nextResults) => {\n if (abortController.signal.aborted) {\n return\n }\n\n setResults(nextResults)\n })\n .catch((error: unknown) => {\n if (abortController.signal.aborted) {\n return\n }\n\n const isAbortError = error instanceof DOMException && error.name === 'AbortError'\n\n if (!isAbortError) {\n setResults([])\n setIsError(true)\n }\n })\n .finally(() => {\n if (!abortController.signal.aborted) {\n setIsLoading(false)\n }\n })\n\n return () => {\n abortController.abort()\n }\n }, [canSearch, docs.algolia, isOpen, normalizedQuery])\n\n return {\n results,\n isLoading,\n isError,\n }\n}\n\nexport const SearchModal = () => {\n const docs = useDocsGlobalContext()\n const { urlPathname } = usePageContext()\n const { close, setQuery } = useDocsSearchActions()\n const isOpen = useDocsSearchStore((state) => state.isOpen)\n const query = useDocsSearchStore((state) => state.query)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const suggestionBoxRef = useRef<HTMLDivElement | null>(null)\n const previousPathnameRef = useRef(urlPathname)\n const debouncedQuery = useDebouncedValue(query, QUERY_DEBOUNCE_MS)\n const normalizedQuery = debouncedQuery.trim()\n const canSearch = Boolean(docs.algolia) && normalizedQuery.length >= MIN_QUERY_LENGTH\n const { isError, isLoading, results } = useSearchResults({\n canSearch,\n isOpen,\n normalizedQuery,\n })\n\n useEffect(() => {\n if (previousPathnameRef.current !== urlPathname) {\n close()\n previousPathnameRef.current = urlPathname\n }\n }, [close, urlPathname])\n\n useEffect(() => {\n if (!isOpen) {\n return\n }\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target as Node\n\n if (!containerRef.current?.contains(target) && !suggestionBoxRef.current?.contains(target)) {\n close()\n }\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n close()\n }\n }\n\n document.addEventListener('pointerdown', handlePointerDown)\n document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown)\n document.removeEventListener('keydown', handleKeyDown)\n }\n }, [close, isOpen])\n\n if (!docs.algolia) {\n return null\n }\n\n return (\n <div ref={containerRef} className=\"relative\">\n <SearchSuggestionBox\n contentRef={suggestionBoxRef}\n isError={isError}\n isLoading={isLoading}\n isOpen={isOpen}\n onClose={close}\n onQueryChange={setQuery}\n query={query}\n results={results}\n />\n </div>\n )\n}\n\ntype SearchSuggestionBoxProps = {\n contentRef: RefObject<HTMLDivElement | null>\n isError: boolean\n isLoading: boolean\n isOpen: boolean\n onClose: () => void\n onQueryChange: (query: string) => void\n query: string\n results: SearchResults\n}\n\nconst SearchSuggestionBox = ({\n contentRef,\n isError,\n isLoading,\n isOpen,\n onClose,\n onQueryChange,\n query,\n results,\n}: SearchSuggestionBoxProps) => {\n const inputRef = useRef<HTMLInputElement | null>(null)\n const normalizedQuery = query.trim()\n const canSearch = normalizedQuery.length >= MIN_QUERY_LENGTH\n\n useEffect(() => {\n if (!isOpen) {\n return\n }\n\n const frameId = window.requestAnimationFrame(() => {\n inputRef.current?.focus()\n inputRef.current?.setSelectionRange(query.length, query.length)\n })\n\n return () => {\n window.cancelAnimationFrame(frameId)\n }\n }, [isOpen, query.length])\n\n if (!isOpen || typeof document === 'undefined') {\n return null\n }\n\n return createPortal(\n <div className=\"fixed inset-0 z-30 h-full w-full bg-base-100/50 backdrop-blur-lg\">\n <div className=\"absolute inset-0 z-1 bg-linear-to-b from-base-100 via-base-100 via-25% to-primary-muted-superlight dark:bg-linear-to-t\" />\n <LayoutComponent\n ref={contentRef}\n $size=\"sm\"\n className=\"mt-5 relative z-2 rounded-box bg-base-100/70 p-6 pt-6 shadow-lg shadow-primary-muted-light\"\n >\n <input\n placeholder=\"Search docs\"\n ref={inputRef}\n type=\"text\"\n className=\"input input-primary input-xl w-full\"\n value={query}\n onChange={(event) => onQueryChange(event.target.value)}\n />\n <div className=\"flex h-7 items-center px-4 text-xs text-base-muted\">\n {isLoading ? (\n <span className=\"flex items-center gap-1\">\n <span className=\"loading loading-dots loading-xs\" />\n Searching...\n </span>\n ) : normalizedQuery ? null : (\n <span className=\"flex items-center gap-1\">\n <MessageCircleQuestion className=\"size-3 shrink-0\" />\n Type at least {MIN_QUERY_LENGTH} characters.\n </span>\n )}\n </div>\n {normalizedQuery ? (\n isError ? (\n <div className=\"flex items-center gap-2 rounded-box border border-warning/40 bg-base-100 p-4 text-sm text-base-muted shadow-md shadow-primary-muted-light\">\n <TriangleAlert className=\"size-4 shrink-0 text-warning\" />\n Search is temporarily unavailable.\n </div>\n ) : !canSearch ? (\n <div className=\"text-sm text-base-muted\">Keep typing to search.</div>\n ) : !isLoading && results.length === 0 ? (\n <div className=\"text-sm text-base-muted\">No results found.</div>\n ) : (\n <div className=\"-mx-2 max-h-80 overflow-y-auto p-2\">\n <ul className=\"flex flex-col gap-2\">\n {results.map((result) => (\n <li key={result.href}>\n <a\n href={withSiteBaseUrl(result.href)}\n className=\"block rounded-box border border-base-muted-medium bg-base-100 p-4 shadow-md hover:border-primary-muted hover:bg-base-200\"\n onClick={onClose}\n >\n <div className=\"mb-2 flex items-center justify-start gap-2\">\n <div className=\"font-bold text-base-content\">{result.title}</div>\n {result.sectionTitle ? (\n <div className=\"flex items-center gap-1 text-sm text-base-muted-medium\">\n <ArrowRightFromLine className=\"size-3\" /> {result.sectionTitle}\n </div>\n ) : null}\n </div>\n {result.excerpt ? <p className=\"text-xs leading-5 text-base-muted\">{result.excerpt}</p> : null}\n </a>\n </li>\n ))}\n </ul>\n </div>\n )\n ) : null}\n </LayoutComponent>\n </div>,\n document.body,\n )\n}\n","import type { ResolvedDocsAlgoliaConfig } from '../../docs/types.js'\n\ntype DocsSearchResult = {\n href: string\n title: string\n excerpt?: string\n sectionTitle?: string\n}\n\ntype SearchAlgoliaResponse = {\n hits?: unknown[]\n}\n\ntype AlgoliaDocSearchHit = {\n url?: unknown\n url_without_anchor?: unknown\n type?: unknown\n category?: unknown\n content?: unknown\n hierarchy?: Record<string, unknown> | null\n _highlightResult?: {\n content?: {\n value?: unknown\n }\n } | null\n _snippetResult?: {\n content?: {\n value?: unknown\n }\n } | null\n}\n\nconst hierarchyLevels = ['lvl0', 'lvl1', 'lvl2', 'lvl3', 'lvl4', 'lvl5', 'lvl6'] as const\n\nconst stripHtml = (value: string) => value.replace(/<[^>]+>/g, '')\n\nconst normalizeString = (value: unknown) => {\n if (typeof value === 'string') {\n const normalized = stripHtml(value).replace(/\\s+/g, ' ').trim()\n return normalized || undefined\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value)\n }\n\n return undefined\n}\n\nconst getValueAtPath = (value: unknown, path: string): unknown => {\n if (!path) {\n return undefined\n }\n\n const segments = path.split('.').filter(Boolean)\n let currentValue = value\n\n for (const segment of segments) {\n if (!currentValue || typeof currentValue !== 'object' || Array.isArray(currentValue)) {\n return undefined\n }\n\n currentValue = (currentValue as Record<string, unknown>)[segment]\n }\n\n return currentValue\n}\n\nconst getMappedString = (value: unknown, path: string): string | undefined => {\n return normalizeString(getValueAtPath(value, path))\n}\n\nconst buildSearchUrl = (appId: string, indexName: string) => {\n return `https://${appId}-dsn.algolia.net/1/indexes/${encodeURIComponent(indexName)}/query`\n}\n\nconst getDocSearchHierarchyValue = (\n hierarchy: AlgoliaDocSearchHit['hierarchy'],\n level: (typeof hierarchyLevels)[number],\n) => {\n if (!hierarchy || typeof hierarchy !== 'object') {\n return undefined\n }\n\n return normalizeString(hierarchy[level])\n}\n\nconst getDocSearchTitleLevel = (hit: AlgoliaDocSearchHit) => {\n const levelFromType =\n typeof hit.type === 'string' && /^lvl[0-6]$/.test(hit.type) ? (hit.type as (typeof hierarchyLevels)[number]) : null\n\n if (levelFromType && getDocSearchHierarchyValue(hit.hierarchy, levelFromType)) {\n return levelFromType\n }\n\n return [...hierarchyLevels]\n .reverse()\n .find((level) => level !== 'lvl0' && getDocSearchHierarchyValue(hit.hierarchy, level))\n}\n\nconst getDocSearchFallbackResult = (hit: unknown): Partial<DocsSearchResult> => {\n const docSearchHit = hit as AlgoliaDocSearchHit\n const titleLevel = getDocSearchTitleLevel(docSearchHit)\n const title = titleLevel ? getDocSearchHierarchyValue(docSearchHit.hierarchy, titleLevel) : undefined\n const titleLevelIndex = titleLevel ? hierarchyLevels.indexOf(titleLevel) : -1\n const sectionTitle =\n hierarchyLevels\n .slice(0, Math.max(titleLevelIndex, 0))\n .reverse()\n .map((level) => getDocSearchHierarchyValue(docSearchHit.hierarchy, level))\n .find(Boolean) ?? normalizeString(docSearchHit.category)\n\n return {\n href: normalizeString(docSearchHit.url) ?? normalizeString(docSearchHit.url_without_anchor),\n title: title ?? normalizeString(docSearchHit.category),\n excerpt:\n normalizeString(docSearchHit._snippetResult?.content?.value) ??\n normalizeString(docSearchHit.content) ??\n normalizeString(docSearchHit._highlightResult?.content?.value),\n sectionTitle,\n }\n}\n\nconst mapHitToSearchResult = (hit: unknown, config: ResolvedDocsAlgoliaConfig): DocsSearchResult | null => {\n const docSearchFallback = getDocSearchFallbackResult(hit)\n const href = getMappedString(hit, config.fields.href) ?? docSearchFallback.href\n const title = getMappedString(hit, config.fields.title) ?? docSearchFallback.title\n\n if (!href || !title) {\n return null\n }\n\n const excerpt = getMappedString(hit, config.fields.excerpt) ?? docSearchFallback.excerpt\n const sectionTitle = getMappedString(hit, config.fields.sectionTitle) ?? docSearchFallback.sectionTitle\n\n return {\n href,\n title,\n excerpt,\n sectionTitle,\n }\n}\n\nexport const searchAlgoliaIndex = async (options: {\n config?: ResolvedDocsAlgoliaConfig | null\n query: string\n signal?: AbortSignal\n}) => {\n const { config, query, signal } = options\n\n if (!config) {\n throw new Error('Algolia search is not configured.')\n }\n\n const response = await fetch(buildSearchUrl(config.appId, config.indexName), {\n method: 'POST',\n signal,\n headers: {\n accept: 'application/json',\n 'content-type': 'application/json',\n 'x-algolia-api-key': config.apiKey,\n 'x-algolia-application-id': config.appId,\n },\n body: JSON.stringify({\n query,\n ...config.searchParams,\n }),\n })\n\n if (!response.ok) {\n throw new Error(`Algolia search request failed with status ${response.status}.`)\n }\n\n const data = (await response.json()) as SearchAlgoliaResponse\n\n return (data.hits ?? [])\n .map((hit) => mapHitToSearchResult(hit, config))\n .filter((result): result is DocsSearchResult => result !== null)\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,34 @@
1
+ // src/runtime/client/components/LayoutComponent.tsx
2
+ import cm from "@classmatejs/react";
3
+ var LayoutSize = {
4
+ xxs: "xxs",
5
+ xs: "xs",
6
+ sm: "sm",
7
+ md: "md",
8
+ lg: "lg",
9
+ xl: "xl",
10
+ full: "full"
11
+ };
12
+ var layoutComponentSizeMapping = {
13
+ xxs: "max-w-[480px]",
14
+ xs: "max-w-[768px]",
15
+ sm: "max-w-5xl",
16
+ md: "max-w-6xl",
17
+ lg: "max-w-7xl",
18
+ xl: "max-w-[1440px]",
19
+ full: "max-w-full"
20
+ };
21
+ var LayoutComponent = cm.div.variants({
22
+ base: ({ $noGrow }) => `px-4 ${$noGrow ? "" : "mx-auto w-full"} relative`,
23
+ variants: {
24
+ $size: layoutComponentSizeMapping
25
+ },
26
+ defaultVariants: {
27
+ $size: LayoutSize.xl
28
+ }
29
+ });
30
+
31
+ export {
32
+ LayoutComponent
33
+ };
34
+ //# sourceMappingURL=chunk-7MAISHRP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/client/components/LayoutComponent.tsx"],"sourcesContent":["import cm from '@classmatejs/react'\n\nconst LayoutSize = {\n xxs: 'xxs',\n xs: 'xs',\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n xl: 'xl',\n full: 'full',\n} as const\ntype LayoutSize = (typeof LayoutSize)[keyof typeof LayoutSize]\n\nconst layoutComponentSizeMapping: { [key in LayoutSize]: string } = {\n xxs: 'max-w-[480px]',\n xs: 'max-w-[768px]',\n sm: 'max-w-5xl',\n md: 'max-w-6xl',\n lg: 'max-w-7xl',\n xl: 'max-w-[1440px]',\n full: 'max-w-full',\n} as const\n\ninterface LayoutComponentProps {\n $size?: LayoutSize\n $noGrow?: boolean\n}\n\nexport const LayoutComponent = cm.div.variants<LayoutComponentProps>({\n base: ({ $noGrow }) => `px-4 ${$noGrow ? '' : 'mx-auto w-full'} relative`,\n variants: {\n $size: layoutComponentSizeMapping,\n },\n defaultVariants: {\n $size: LayoutSize.xl,\n },\n})\n"],"mappings":";AAAA,OAAO,QAAQ;AAEf,IAAM,aAAa;AAAA,EACjB,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AACR;AAGA,IAAM,6BAA8D;AAAA,EAClE,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AACR;AAOO,IAAM,kBAAkB,GAAG,IAAI,SAA+B;AAAA,EACnE,MAAM,CAAC,EAAE,QAAQ,MAAM,QAAQ,UAAU,KAAK,gBAAgB;AAAA,EAC9D,UAAU;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EACA,iBAAiB;AAAA,IACf,OAAO,WAAW;AAAA,EACpB;AACF,CAAC;","names":[]}
@@ -655,4 +655,4 @@ export {
655
655
  RepoLink,
656
656
  Table
657
657
  };
658
- //# sourceMappingURL=chunk-C724XH47.js.map
658
+ //# sourceMappingURL=chunk-EP67BY43.js.map
@@ -1,7 +1,6 @@
1
1
  import {
2
2
  DocsGlobalContextProvider,
3
3
  DocsRuntimeStoreProvider,
4
- LayoutComponent,
5
4
  createDocsRuntimeStore,
6
5
  getDocsFromGlobalContext,
7
6
  useDocsFromPageGlobalContext,
@@ -10,7 +9,7 @@ import {
10
9
  useDocsSearchStore,
11
10
  useDocsSidebarActions,
12
11
  useDocsSidebarStore
13
- } from "./chunk-ESAHWFDZ.js";
12
+ } from "./chunk-US7NPQZ6.js";
14
13
  import {
15
14
  createHeadingSlugger,
16
15
  getDocsIconMapKey,
@@ -25,6 +24,9 @@ import {
25
24
  renderInlineMarkdown,
26
25
  resolveDocsHref
27
26
  } from "./chunk-WMHFKLPG.js";
27
+ import {
28
+ LayoutComponent
29
+ } from "./chunk-7MAISHRP.js";
28
30
  import {
29
31
  nivelAssetUrl,
30
32
  withSiteBaseUrl
@@ -43,7 +45,7 @@ import { useEffect, useState } from "react";
43
45
  import { jsx } from "react/jsx-runtime";
44
46
  var searchModalModulePromise = null;
45
47
  var loadSearchModalModule = () => {
46
- searchModalModulePromise ??= import("./SearchModal-Q2MTOIZU.js");
48
+ searchModalModulePromise ??= import("./SearchModal-PV67QW52.js");
47
49
  return searchModalModulePromise;
48
50
  };
49
51
  var Search = () => {
@@ -1805,4 +1807,4 @@ export {
1805
1807
  DocsLayout,
1806
1808
  DocsPage
1807
1809
  };
1808
- //# sourceMappingURL=chunk-PBYVWITH.js.map
1810
+ //# sourceMappingURL=chunk-GAPREBCU.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/runtime/client/AppLayout.tsx","../src/runtime/client/components/Navbar/index.tsx","../src/runtime/client/components/Search.tsx","../src/runtime/client/components/Navbar/DocsNavbar.tsx","../src/runtime/client/components/Brand.tsx","../src/runtime/client/components/SocialLinks.tsx","../src/runtime/client/components/ThemeSwitch.tsx","../src/runtime/client/store/settings-store.ts","../src/runtime/client/store/settings-storage.ts","../src/runtime/client/theme.ts","../src/runtime/client/components/Navbar/AsideButtons.tsx","../src/runtime/client/components/Navbar/LandingPageNavbar.tsx","../src/runtime/client/components/Navbar/MegaMenu.tsx","../src/runtime/client/components/Navbar/useMegaMenu.ts","../src/runtime/client/components/UserSettingsSync.tsx","../src/runtime/client/components/MetaHead/FaviconLinks.tsx","../src/runtime/client/components/MetaHead/FontLinks.tsx","../src/runtime/client/components/MetaHead/ThemeBootstrap.tsx","../src/runtime/client/components/MetaHead/index.tsx","../src/runtime/client/components/ProseContainer.tsx","../src/runtime/client/DocsLayout.tsx","../src/runtime/client/components/DocsPagination.tsx","../src/runtime/client/components/Footer.tsx","../src/runtime/client/components/HeadingLinkCopy.tsx","../src/runtime/client/components/Sidebar.tsx","../src/runtime/client/components/docsNavigation.ts","../src/runtime/client/components/TableOfContents.tsx","../src/runtime/client/components/TableOfContentsMobile.tsx","../src/runtime/client/components/BreadcrumbSidebarTrigger.tsx","../src/runtime/client/components/useTableOfContentsState.ts","../src/runtime/client/DocsPage.tsx","../src/runtime/client/components/DocsBreadcrumbs.tsx","../src/runtime/client/getMdxRuntimeValue.tsx"],"sourcesContent":["import { cmMerge } from '@classmatejs/react'\nimport type { ReactNode } from 'react'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport NavbarNew from './components/Navbar/index.js'\nimport { UserSettingsSync } from './components/UserSettingsSync.js'\nimport { DocsGlobalContextProvider, type DocsPageContext, getDocsFromGlobalContext } from './docsGlobalContext.js'\nimport { createDocsRuntimeStore, DocsRuntimeStoreProvider } from './store/runtime-store.js'\n\ninterface AppLayoutProps {\n children: ReactNode\n header?: ReactNode\n}\n\nconst runtimeStore = createDocsRuntimeStore()\n\nexport const AppLayout = ({ children, header }: AppLayoutProps) => {\n const { urlPathname } = usePageContext()\n const pageContext = usePageContext()\n\n const docs = getDocsFromGlobalContext(pageContext as DocsPageContext)\n const isLandingPage = urlPathname === '/'\n\n return (\n <DocsRuntimeStoreProvider store={runtimeStore}>\n <DocsGlobalContextProvider docs={docs}>\n <UserSettingsSync theme={docs.theme} />\n <div className=\"min-h-screen bg-base-100 text-base-content\">\n {header ?? <NavbarNew />}\n <div className={cmMerge(isLandingPage ? '' : 'pt-14')}>{children}</div>\n </div>\n </DocsGlobalContextProvider>\n </DocsRuntimeStoreProvider>\n )\n}\n","import cm from '@classmatejs/react'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport { getActiveSectionByPathname } from '../../../../docs/runtime'\nimport { useDocsGlobalContext } from '../../docsGlobalContext'\nimport { useDocsSearchActions } from '../../store/runtime-store'\nimport { LayoutComponent } from '../LayoutComponent'\nimport { Search } from '../Search'\nimport DocsNavbar from './DocsNavbar'\nimport LandingPageNavbar from './LandingPageNavbar'\nimport { MegaMenu } from './MegaMenu'\nimport useMegaMenu from './useMegaMenu'\n\nconst NavbarNew = () => {\n const docs = useDocsGlobalContext()\n const { urlPathname, urlParsed } = usePageContext()\n const isLandingPage = urlParsed.pathname === '/'\n const sections = docs.sidebarSections\n const activeSection = getActiveSectionByPathname(docs, urlPathname)\n const { toggle: toggleSearch } = useDocsSearchActions()\n\n const { closeMegaMenu, hoveredSectionId, isMegaMenuOpen, openMegaMenu, scheduleMegaMenuOpen, scheduleMegaMenuClose } =\n useMegaMenu({\n activeSectionId: activeSection?.id,\n sections,\n })\n\n return (\n <StyledNavbar $border={isLandingPage}>\n <LayoutComponent>\n {isLandingPage ? (\n <LandingPageNavbar\n openMegaMenu={openMegaMenu}\n scheduleMegaMenuOpen={scheduleMegaMenuOpen}\n scheduleMegaMenuClose={scheduleMegaMenuClose}\n toggleSearch={toggleSearch}\n closeMegaMenu={closeMegaMenu}\n hoveredSectionId={hoveredSectionId}\n isMegaMenuOpen={isMegaMenuOpen}\n />\n ) : (\n <DocsNavbar\n openMegaMenu={openMegaMenu}\n scheduleMegaMenuOpen={scheduleMegaMenuOpen}\n scheduleMegaMenuClose={scheduleMegaMenuClose}\n toggleSearch={toggleSearch}\n closeMegaMenu={closeMegaMenu}\n activeSection={activeSection}\n hoveredSectionId={hoveredSectionId}\n isMegaMenuOpen={isMegaMenuOpen}\n />\n )}\n </LayoutComponent>\n <Search />\n <MegaMenu\n sections={sections}\n activeSectionId={activeSection?.id}\n hoveredSectionId={hoveredSectionId}\n isActive={isMegaMenuOpen}\n onOpen={openMegaMenu}\n onClose={scheduleMegaMenuClose}\n isLandingPage={isLandingPage}\n />\n </StyledNavbar>\n )\n}\n\nexport default NavbarNew\n\nconst StyledNavbar = cm.header<{ $border: boolean }>`\n top-0 left-0 z-20 w-full bg-base-100\n pt-0 h-14\n ${({ $border }) => ($border ? 'relative' : 'fixed')}\n`\n","import { useEffect, useState } from 'react'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\nimport { useDocsSearchStore } from '../store/runtime-store.js'\n\ntype SearchModalModule = typeof import('./SearchModal.js')\n\nlet searchModalModulePromise: Promise<SearchModalModule> | null = null\n\nconst loadSearchModalModule = () => {\n searchModalModulePromise ??= import('./SearchModal.js')\n return searchModalModulePromise\n}\n\nexport const Search = () => {\n const docs = useDocsGlobalContext()\n const isOpen = useDocsSearchStore((state) => state.isOpen)\n const [searchModalModule, setSearchModalModule] = useState<SearchModalModule | null>(null)\n\n useEffect(() => {\n if (!docs.algolia || !isOpen || searchModalModule !== null) {\n return\n }\n\n let isMounted = true\n\n loadSearchModalModule().then((module) => {\n if (isMounted) {\n setSearchModalModule(module)\n }\n })\n\n return () => {\n isMounted = false\n }\n }, [docs.algolia, isOpen, searchModalModule])\n\n if (!docs.algolia || searchModalModule === null) {\n return null\n }\n\n const { SearchModal } = searchModalModule\n\n return <SearchModal />\n}\n","import cm, { cmMerge } from '@classmatejs/react'\nimport { ChevronDown, Menu, TextSearch } from 'lucide-react'\nimport { useCallback } from 'react'\nimport { getDocsIconMapKey } from '../../../../docs/iconKeys.js'\nimport type { ResolvedDocsSection } from '../../../../docs/types'\nimport { withSiteBaseUrl } from '../../../../shared/assets'\nimport { renderInlineMarkdown } from '../../../../shared/renderInlineMarkdown'\nimport { useDocsGlobalContext } from '../../docsGlobalContext'\nimport { Brand } from '../Brand'\nimport AsideButtons from './AsideButtons'\n\nconst StyledNav = cm.nav`\n gap-4\n flex-1 pl-10 items-center justify-end lg:justify-start \n hidden lg:flex\n`\n\nconst StyledNavList = cm.ul`\n inline-flex items-center gap-2 font-semibold \n`\n\ninterface DocsNavbarProps {\n scheduleMegaMenuClose?: () => void\n scheduleMegaMenuOpen: (id?: string) => void\n openMegaMenu: (id?: string) => void\n toggleSearch: () => void\n closeMegaMenu?: () => void\n activeSection?: ResolvedDocsSection | null\n hoveredSectionId?: string\n isMegaMenuOpen: boolean\n}\n\nconst DocsNavbar = ({\n closeMegaMenu,\n openMegaMenu,\n scheduleMegaMenuOpen,\n scheduleMegaMenuClose,\n toggleSearch,\n activeSection,\n hoveredSectionId,\n isMegaMenuOpen,\n}: DocsNavbarProps) => {\n const docs = useDocsGlobalContext()\n\n const handleClick = useCallback(() => {\n alert('TODO: Open mobile menu')\n }, [])\n\n return (\n <div className=\"flex flex-1 gap-4 pt-3 justify-between\">\n <div className=\"lg:min-w-76 min-w-none\">\n <Brand brand={docs.brand} />\n </div>\n <StyledNav aria-label=\"Primary\">\n <StyledNavList className=\"\">\n {docs.navbarItems.map((item) => {\n const ItemIcon = docs.docsIconMap[getDocsIconMapKey('section', item.id)]\n const isMegaMenuItemActive = isMegaMenuOpen && hoveredSectionId === item.id\n\n return (\n <li key={item.id}>\n <a\n href={withSiteBaseUrl(item.href)}\n className={'block'}\n onPointerEnter={() => scheduleMegaMenuOpen(item.id)}\n onPointerLeave={scheduleMegaMenuClose}\n onFocus={() => openMegaMenu(item.id)}\n onBlur={scheduleMegaMenuClose}\n onClick={closeMegaMenu}\n >\n <span\n className={cmMerge(\n 'btn text-base btn-sm md:min-w-30 px-2 whitespace-nowrap tracking-tight',\n activeSection?.id === item.id ? 'btn-primary btn-soft' : 'btn-ghost ',\n )}\n >\n {ItemIcon ? <ItemIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n {renderInlineMarkdown(item.title)}\n <ChevronDown\n className={cmMerge(\n 'size-4 shrink-0 transition-transform duration-200',\n isMegaMenuItemActive ? 'rotate-180' : 'rotate-0',\n )}\n />\n </span>\n </a>\n </li>\n )\n })}\n {docs.algolia ? (\n <li>\n <button\n type=\"button\"\n onClick={toggleSearch}\n className=\"btn btn-ghost btn-sm text-base md:min-w-30 px-2 whitespace-nowrap tracking-tight\"\n >\n Search\n <TextSearch className=\"size-4\" />\n </button>\n </li>\n ) : null}\n </StyledNavList>\n </StyledNav>\n <button type=\"button\" className=\"block lg:hidden\" aria-label=\"Open navigation menu\" onClick={handleClick}>\n <Menu className=\"w-6 h-6\" />\n </button>\n <div className=\"lg:min-w-40 hidden lg:block\">\n <AsideButtons />\n </div>\n </div>\n )\n}\n\nexport default DocsNavbar\n","import { cmMerge } from '@classmatejs/react'\nimport type { ResolvedDocsBrandConfig } from '../../../docs/types.js'\n\ninterface BrandProps {\n brand: ResolvedDocsBrandConfig\n noText?: boolean\n}\n\nexport const Brand = ({ brand, noText = false }: BrandProps) => {\n const defaultLogo = brand.logoLight ?? brand.logoDark\n\n return (\n <a\n href={brand.href}\n className=\"flex items-center gap-3 text-base-content no-underline\"\n aria-label={noText ? `${brand.text} homepage` : undefined}\n >\n {defaultLogo && (\n <span className=\"relative block h-8 w-8 shrink-0\">\n {brand.logoLight && (\n <img\n src={brand.logoLight}\n alt={brand.logoAlt}\n className={cmMerge('h-8 w-8 object-contain', brand.logoDark ? 'block dark:hidden' : 'block')}\n />\n )}\n {brand.logoDark && (\n <img\n src={brand.logoDark}\n alt={brand.logoAlt}\n className={cmMerge('h-8 w-8 object-contain', brand.logoLight ? 'hidden dark:block' : 'block')}\n />\n )}\n </span>\n )}\n {!noText && <span className=\"text-xl font-semibold tracking-tight\">{brand.text}</span>}\n </a>\n )\n}\n","import { memo } from 'react'\nimport { nivelAssetUrl } from '../../../shared/assets.js'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\n\nconst iconAssets = {\n github: nivelAssetUrl('brands/github.svg'),\n discord: nivelAssetUrl(`brands/discord.svg`),\n x: nivelAssetUrl(`brands/x.svg`),\n bluesky: nivelAssetUrl(`brands/bluesky.svg`),\n linkedin: nivelAssetUrl('brands/linkedin.svg'),\n}\n\ntype SocialPlatform = keyof typeof iconAssets\n\nconst SocialIconElement = ({ icon, href }: { icon: SocialPlatform; href: string }) => {\n const socialLabel = icon === 'x' ? 'X' : icon.charAt(0).toUpperCase() + icon.slice(1)\n\n return (\n <li className=\"m-0 p-0\">\n {/** biome-ignore lint/a11y/useAnchorContent: not now */}\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex h-8 w-8 items-center justify-center rounded-full border border-base-muted-light bg-base-200\"\n aria-label={`${socialLabel} profile`}\n title={socialLabel}\n >\n <img src={iconAssets[icon]} alt=\"\" aria-hidden=\"true\" className=\"h-3 w-auto opacity-75 dark:invert\" />\n </a>\n </li>\n )\n}\n\nconst SocialIcons = memo(() => {\n const docs = useDocsGlobalContext()\n const socialEntries = Object.entries(docs.social ?? {}).filter(\n (entry): entry is [SocialPlatform, string] =>\n entry[0] in iconAssets && typeof entry[1] === 'string' && entry[1].length > 0,\n )\n\n if (socialEntries.length === 0) {\n return null\n }\n\n return (\n <ul className=\"flex items-center gap-1\">\n {socialEntries.map(([platform, href]) => (\n <SocialIconElement key={platform} icon={platform} href={href} />\n ))}\n </ul>\n )\n})\n\nexport default SocialIcons\n","import { Moon, Sun } from 'lucide-react'\nimport type { DocsThemeConfig } from '../../../docs/types.js'\nimport { useDocsUserSettingsStore } from '../store/settings-store.js'\nimport { resolveThemePreference } from '../theme.js'\n\nexport const ThemeSwitch = ({ theme }: { theme: Required<DocsThemeConfig> }) => {\n const themePreference = useDocsUserSettingsStore((state) => state.themePreference)\n const setThemePreference = useDocsUserSettingsStore((state) => state.setThemePreference)\n const effectiveThemePreference = resolveThemePreference(themePreference, theme)\n\n return (\n <button\n type=\"button\"\n aria-label=\"Toggle theme\"\n onClick={() => setThemePreference(effectiveThemePreference === 'light' ? 'dark' : 'light')}\n className=\"relative flex h-8 w-8 cursor-pointer items-center justify-center rounded-full border border-base-muted-light bg-base-200\"\n >\n <Sun className=\"size-4 dark:hidden\" />\n <Moon className=\"hidden size-4 dark:block\" />\n </button>\n )\n}\n","import { create } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\nimport type { UniversalMdxCodeBlockChoiceStore } from '../../../mdx/components/types.js'\nimport type { ThemePreference } from '../../../docs/types.js'\nimport { readLegacyCodeBlockChoice, USER_SETTINGS_STORAGE_KEY } from './settings-storage.js'\n\ntype DocsUserSettingsState = {\n codeBlockChoices: Record<string, string>\n themePreference: ThemePreference | null\n setCodeBlockChoice: (choiceGroupName: string, choice: string) => void\n setThemePreference: (themePreference: ThemePreference) => void\n}\n\nexport const useDocsUserSettingsStore = create<DocsUserSettingsState>()(\n persist(\n (set) => ({\n codeBlockChoices: {},\n themePreference: null,\n setCodeBlockChoice: (choiceGroupName, choice) =>\n set((state) => ({\n codeBlockChoices: {\n ...state.codeBlockChoices,\n [choiceGroupName]: choice,\n },\n })),\n setThemePreference: (themePreference) => set({ themePreference }),\n }),\n {\n name: USER_SETTINGS_STORAGE_KEY,\n storage: createJSONStorage(() => localStorage),\n partialize: ({ codeBlockChoices, themePreference }) => ({\n codeBlockChoices,\n themePreference,\n }),\n },\n ),\n)\n\nexport const docsCodeBlockChoiceStore: UniversalMdxCodeBlockChoiceStore = {\n subscribe: (listener) => useDocsUserSettingsStore.subscribe(listener),\n getChoice: (choiceGroupName) => useDocsUserSettingsStore.getState().codeBlockChoices[choiceGroupName] ?? null,\n setChoice: (choiceGroupName, choice) =>\n useDocsUserSettingsStore.getState().setCodeBlockChoice(choiceGroupName, choice),\n getLegacyChoice: readLegacyCodeBlockChoice,\n}\n","export const USER_SETTINGS_STORAGE_KEY = 'nivel-user-settings'\nconst LEGACY_CODE_BLOCK_CHOICE_STORAGE_KEY_PREFIX = 'vike-docpress:choice:'\n\nexport const readLegacyCodeBlockChoice = (choiceGroupName: string) => {\n if (typeof window === 'undefined') {\n return null\n }\n\n try {\n const value = window.localStorage.getItem(`${LEGACY_CODE_BLOCK_CHOICE_STORAGE_KEY_PREFIX}${choiceGroupName}`)\n return value || null\n } catch {\n return null\n }\n}\n","import type { DocsThemeConfig, ThemePreference } from '../../docs/types.js'\n\nexport const DEFAULT_THEME_PREFERENCE: ThemePreference = 'light'\nexport const DARK_THEME_MEDIA_QUERY = '(prefers-color-scheme: dark)'\n\nconst getDataTheme = (themePreference: ThemePreference, themeConfig: Required<DocsThemeConfig>) => {\n return themePreference === 'dark' ? themeConfig.dark : themeConfig.light\n}\n\nconst isThemePreference = (value: unknown): value is ThemePreference => {\n return value === 'light' || value === 'dark'\n}\n\nconst getSystemThemePreference = (fallbackThemePreference: ThemePreference): ThemePreference => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return fallbackThemePreference\n }\n\n return window.matchMedia(DARK_THEME_MEDIA_QUERY).matches ? 'dark' : 'light'\n}\n\nexport const resolveThemePreference = (\n themePreference: ThemePreference | null | undefined,\n themeConfig: Required<DocsThemeConfig>,\n) => {\n if (isThemePreference(themePreference)) {\n return themePreference\n }\n\n return getSystemThemePreference(themeConfig.defaultPreference)\n}\n\nexport const applyThemePreference = (\n themePreference: ThemePreference | null | undefined,\n themeConfig: Required<DocsThemeConfig>,\n) => {\n if (typeof document === 'undefined') {\n return\n }\n\n document.documentElement.setAttribute(\n 'data-theme',\n getDataTheme(resolveThemePreference(themePreference, themeConfig), themeConfig),\n )\n}\n","import { useDocsGlobalContext } from '../../docsGlobalContext'\nimport SocialIcons from '../SocialLinks'\nimport { ThemeSwitch } from '../ThemeSwitch'\n\nconst AsideButtons = () => {\n const docs = useDocsGlobalContext()\n\n return (\n <div className=\"flex-1 justify-end gap-2 flex\">\n <div className=\"hidden lg:block\">\n <SocialIcons />\n </div>\n <ThemeSwitch theme={docs.theme} />\n </div>\n )\n}\n\nexport default AsideButtons\n","import cm, { cmMerge } from '@classmatejs/react'\nimport { ChevronDown, Menu, TextSearch } from 'lucide-react'\nimport { useCallback } from 'react'\nimport { getDocsIconMapKey } from '../../../../docs/iconKeys.js'\nimport { withSiteBaseUrl } from '../../../../shared/assets'\nimport { renderInlineMarkdown } from '../../../../shared/renderInlineMarkdown'\nimport { useDocsGlobalContext } from '../../docsGlobalContext'\nimport { Brand } from '../Brand'\nimport AsideButtons from './AsideButtons'\n\nconst StyledNav = cm.nav`\n gap-4\n flex-1 items-center justify-center\n`\n\nconst StyledNavList = cm.ul`\n inline-flex items-center gap-2 font-semibold \n`\n\ninterface LandingPageNavbarProps {\n scheduleMegaMenuClose?: () => void\n scheduleMegaMenuOpen: (id?: string) => void\n openMegaMenu: (id?: string) => void\n toggleSearch: () => void\n closeMegaMenu?: () => void\n hoveredSectionId?: string\n isMegaMenuOpen: boolean\n}\n\nconst LandingPageNavbar = ({\n closeMegaMenu,\n openMegaMenu,\n scheduleMegaMenuOpen,\n scheduleMegaMenuClose,\n toggleSearch,\n hoveredSectionId,\n isMegaMenuOpen,\n}: LandingPageNavbarProps) => {\n const docs = useDocsGlobalContext()\n\n const handleClick = useCallback(() => {\n alert('TODO: Open mobile menu')\n }, [])\n\n return (\n <div className=\"flex flex-1 gap-4 pt-3 justify-between\">\n <div className=\"min-w-40\">\n <Brand brand={docs.brand} />\n </div>\n <StyledNav aria-label=\"Primary\" className=\"flex-1 flex hidden lg:flex\">\n <StyledNavList className=\"justify-end \">\n {docs.navbarItems.map((item) => {\n const ItemIcon = docs.docsIconMap[getDocsIconMapKey('section', item.id)]\n const isMegaMenuItemActive = isMegaMenuOpen && hoveredSectionId === item.id\n\n return (\n <li key={item.id}>\n <a\n href={withSiteBaseUrl(item.href)}\n className={'block'}\n onPointerEnter={() => scheduleMegaMenuOpen(item.id)}\n onPointerLeave={scheduleMegaMenuClose}\n onFocus={() => openMegaMenu(item.id)}\n onBlur={scheduleMegaMenuClose}\n onClick={closeMegaMenu}\n >\n <span\n className={cmMerge(\n 'btn btn-ghost text-base lg:text-lg btn-sm lg:min-w-30 px-2 whitespace-nowrap tracking-tight',\n )}\n >\n {ItemIcon ? <ItemIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n {renderInlineMarkdown(item.title)}\n <ChevronDown\n className={cmMerge(\n 'size-4 shrink-0 transition-transform duration-200',\n isMegaMenuItemActive ? 'rotate-180' : 'rotate-0',\n )}\n />\n </span>\n </a>\n </li>\n )\n })}\n {docs.algolia ? (\n <li>\n <button\n type=\"button\"\n onClick={toggleSearch}\n className=\"btn btn-ghost btn-sm text-base lg:text-lg lg:min-w-30 px-2 whitespace-nowrap tracking-tight\"\n >\n Search\n <TextSearch className=\"size-4\" />\n </button>\n </li>\n ) : null}\n </StyledNavList>\n </StyledNav>\n <div className=\"min-w-40 hidden lg:block\">\n <AsideButtons />\n </div>\n <button type=\"button\" className=\"block lg:hidden\" aria-label=\"Open navigation menu\" onClick={handleClick}>\n <Menu className=\"w-6 h-6\" />\n </button>\n </div>\n )\n}\n\nexport default LandingPageNavbar\n","import { cmMerge } from '@classmatejs/react'\nimport { useEffect, useMemo, useState } from 'react'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport { getDocsIconMapKey } from '../../../../docs/iconKeys.js'\nimport type { ResolvedDocsSection } from '../../../../docs/types.js'\nimport { withSiteBaseUrl } from '../../../../shared/assets.js'\nimport { renderInlineMarkdown } from '../../../../shared/renderInlineMarkdown.js'\nimport { useDocsGlobalContext } from '../../docsGlobalContext.js'\nimport { LayoutComponent } from '../LayoutComponent.js'\n\nconst findActiveItemId = (section: ResolvedDocsSection | undefined, currentHref: string): string | undefined => {\n if (!section) {\n return undefined\n }\n\n for (const item of section.items) {\n if (item.href === currentHref) {\n return item.id\n }\n\n if (item.kind === 'group') {\n for (const child of item.items) {\n if (child.href === currentHref) {\n return child.id\n }\n }\n }\n }\n\n return undefined\n}\n\nexport const MegaMenu = ({\n isActive,\n onOpen,\n onClose,\n sections,\n activeSectionId,\n hoveredSectionId,\n isLandingPage,\n}: {\n isActive: boolean\n onOpen: (sectionId?: string) => void\n onClose: () => void\n sections: ResolvedDocsSection[]\n activeSectionId?: string\n hoveredSectionId?: string\n isLandingPage: boolean\n}) => {\n const docs = useDocsGlobalContext()\n const { urlPathname } = usePageContext()\n const visibleSectionId = hoveredSectionId ?? activeSectionId ?? sections[0]?.id\n const [visibleSectionElement, setVisibleSectionElement] = useState<HTMLDivElement | null>(null)\n const [contentHeight, setContentHeight] = useState(0)\n\n const activeItemId = useMemo(\n () =>\n findActiveItemId(\n sections.find((section) => section.id === visibleSectionId),\n urlPathname,\n ),\n [sections, visibleSectionId, urlPathname],\n )\n\n useEffect(() => {\n if (!isActive || !visibleSectionId || visibleSectionElement === null) {\n return\n }\n\n const updateContentHeight = () => {\n setContentHeight(visibleSectionElement.offsetHeight)\n }\n\n updateContentHeight()\n\n if (typeof ResizeObserver === 'undefined') {\n return\n }\n\n const resizeObserver = new ResizeObserver(() => {\n updateContentHeight()\n })\n\n resizeObserver.observe(visibleSectionElement)\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [visibleSectionElement, visibleSectionId, isActive])\n\n return (\n <div\n className={cmMerge('fixed top-14 left-0 z-3 w-full', isActive ? 'pointer-events-auto' : 'pointer-events-none')}\n onPointerEnter={() => onOpen(visibleSectionId)}\n onPointerLeave={onClose}\n >\n <div\n className={cmMerge(\n isActive ? 'opacity-100' : 'opacity-0',\n 'pointer-events-none absolute top-0 left-0 h-svh w-full bg-linear-to-t from-base-100/60 to-base-100 transition-opacity duration-200 backdrop-blur-md',\n )}\n />\n <div\n className={cmMerge(\n 'relative z-4 overflow-hidden transition-[height] bg-base-100 duration-300 ease-out pointer-events-none',\n isLandingPage && !isActive ? '' : 'pointer-events-auto lg:border-b lg:border-base-muted-light',\n )}\n // biome-ignore lint/nursery/noInlineStyles: needed here\n style={{ height: isActive ? contentHeight : 0 }}\n >\n <LayoutComponent $size=\"sm\">\n <div\n className={cmMerge(\n isActive ? 'translate-y-0 opacity-100' : '-translate-y-10 opacity-0',\n 'relative z-4 transition-all duration-300',\n )}\n >\n {sections.map((section) => (\n <div\n key={section.id}\n ref={section.id === visibleSectionId ? setVisibleSectionElement : undefined}\n className={cmMerge(\n section.id === visibleSectionId ? 'opacity-100' : 'opacity-0 pointer-events-none',\n 'transition-all absolute w-full duration-300',\n )}\n >\n {section.items.length > 0 && (\n <ul className=\"mt-2 flex \">\n {section.items.map((child) => {\n if (child.showInNav === false) {\n return null\n }\n\n const ChildIcon = docs.docsIconMap[getDocsIconMapKey(child.kind, child.id)]\n\n return (\n <li key={child.id} className=\"flex-1 py-3 mb-6 px-4\">\n {child.href ? (\n <a\n className={cmMerge(\n 'mb-4 flex items-center gap-2 text-lg font-semibold tracking-tight',\n activeItemId === child.id && 'text-primary!',\n )}\n href={withSiteBaseUrl(child.href)}\n >\n {ChildIcon ? <ChildIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n <span>{child.title}</span>\n </a>\n ) : (\n <span className=\"mb-4 flex items-center gap-2 text-lg font-semibold tracking-tight\">\n {ChildIcon ? <ChildIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n <span>{child.title}</span>\n </span>\n )}\n {child.kind === 'group' && child.items.length > 0 && (\n <ul className=\"menu border-l border-base-muted-light py-0 w-full\">\n {child.items.map((subChild) => {\n const SubChildIcon = docs.docsIconMap[getDocsIconMapKey(subChild.kind, subChild.id)]\n\n return (\n <li key={subChild.id}>\n {subChild.href ? (\n <a\n className={cmMerge(\n 'text-base-muted hover:text-base-content',\n activeItemId === subChild.id && 'text-primary! font-semibold',\n )}\n href={withSiteBaseUrl(subChild.href)}\n onClick={onClose}\n >\n <span className=\"flex items-center gap-2\">\n {SubChildIcon ? (\n <SubChildIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n ) : null}\n <span>{renderInlineMarkdown(subChild.title)}</span>\n </span>\n </a>\n ) : (\n <span className=\"flex items-center gap-2\">\n {SubChildIcon ? (\n <SubChildIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n ) : null}\n <span>{renderInlineMarkdown(subChild.title)}</span>\n </span>\n )}\n </li>\n )\n })}\n </ul>\n )}\n </li>\n )\n })}\n </ul>\n )}\n </div>\n ))}\n </div>\n </LayoutComponent>\n </div>\n </div>\n )\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport type { ResolvedDocsSection } from '../../../../docs/types'\n\nconst megaMenuOpenDelayMs = 120\nconst megaMenuCloseDelayMs = 140\n\nconst useMegaMenu = ({ activeSectionId, sections }: { activeSectionId?: string; sections: ResolvedDocsSection[] }) => {\n const [isMegaMenuOpen, setIsMegaMenuOpen] = useState(false)\n const megaMenuOpenTimeoutRef = useRef<number | null>(null)\n const megaMenuCloseTimeoutRef = useRef<number | null>(null)\n const [hoveredSectionId, setHoveredSectionId] = useState<string | undefined>(activeSectionId ?? sections[0]?.id)\n\n const clearMegaMenuOpenTimeout = useCallback(() => {\n if (megaMenuOpenTimeoutRef.current === null) {\n return\n }\n\n window.clearTimeout(megaMenuOpenTimeoutRef.current)\n megaMenuOpenTimeoutRef.current = null\n }, [])\n\n const clearMegaMenuCloseTimeout = useCallback(() => {\n if (megaMenuCloseTimeoutRef.current === null) {\n return\n }\n\n window.clearTimeout(megaMenuCloseTimeoutRef.current)\n megaMenuCloseTimeoutRef.current = null\n }, [])\n\n const openMegaMenu = (currentSectionId?: string) => {\n if (currentSectionId !== undefined) {\n setHoveredSectionId(currentSectionId)\n }\n\n clearMegaMenuOpenTimeout()\n clearMegaMenuCloseTimeout()\n setIsMegaMenuOpen(true)\n }\n\n const scheduleMegaMenuOpen = (currentSectionId?: string) => {\n if (currentSectionId !== undefined) {\n setHoveredSectionId(currentSectionId)\n }\n\n clearMegaMenuOpenTimeout()\n clearMegaMenuCloseTimeout()\n\n if (isMegaMenuOpen) {\n setIsMegaMenuOpen(true)\n return\n }\n\n megaMenuOpenTimeoutRef.current = window.setTimeout(() => {\n setIsMegaMenuOpen(true)\n megaMenuOpenTimeoutRef.current = null\n }, megaMenuOpenDelayMs)\n }\n\n const closeMegaMenu = () => {\n clearMegaMenuOpenTimeout()\n clearMegaMenuCloseTimeout()\n setIsMegaMenuOpen(false)\n }\n\n const scheduleMegaMenuClose = () => {\n clearMegaMenuOpenTimeout()\n clearMegaMenuCloseTimeout()\n megaMenuCloseTimeoutRef.current = window.setTimeout(() => {\n setIsMegaMenuOpen(false)\n megaMenuCloseTimeoutRef.current = null\n }, megaMenuCloseDelayMs)\n }\n\n useEffect(() => {\n return () => {\n clearMegaMenuOpenTimeout()\n clearMegaMenuCloseTimeout()\n }\n }, [clearMegaMenuCloseTimeout, clearMegaMenuOpenTimeout])\n\n useEffect(() => {\n setHoveredSectionId(activeSectionId ?? sections[0]?.id)\n }, [activeSectionId, sections])\n\n return {\n isMegaMenuOpen,\n hoveredSectionId,\n openMegaMenu,\n scheduleMegaMenuOpen,\n closeMegaMenu,\n scheduleMegaMenuClose,\n }\n}\n\nexport default useMegaMenu\n","import { useEffect, useMemo } from 'react'\nimport type { DocsConfig } from '../../../docs/types.js'\nimport { useDocsUserSettingsStore } from '../store/settings-store.js'\nimport { applyThemePreference, resolveThemePreference } from '../theme.js'\n\nexport const UserSettingsSync = ({ theme }: { theme?: DocsConfig['theme'] }) => {\n const themePreference = useDocsUserSettingsStore((state) => state.themePreference)\n const lightTheme = theme?.light ?? 'consumer-light'\n const darkTheme = theme?.dark ?? 'consumer-dark'\n const defaultThemePreference = theme?.defaultPreference ?? 'light'\n const resolvedTheme = useMemo(\n () => ({ light: lightTheme, dark: darkTheme, defaultPreference: defaultThemePreference }),\n [darkTheme, defaultThemePreference, lightTheme],\n )\n\n const effectiveThemePreference = resolveThemePreference(themePreference, resolvedTheme)\n\n useEffect(() => {\n applyThemePreference(effectiveThemePreference, resolvedTheme)\n }, [effectiveThemePreference, resolvedTheme])\n\n return null\n}\n","import type { ResolvedDocsHeadConfig } from '../../../../docs/types.js'\n\nexport const FaviconLinks = ({ head }: { head: ResolvedDocsHeadConfig }) => {\n const { appleTouchIcon, faviconIco, faviconSvg } = head\n\n return (\n <>\n {appleTouchIcon && <link rel=\"apple-touch-icon\" href={appleTouchIcon} />}\n {faviconSvg && <link rel=\"icon\" type=\"image/svg+xml\" href={faviconSvg} />}\n {faviconIco && (\n <>\n <link rel=\"shortcut icon\" type=\"image/x-icon\" href={faviconIco} />\n <link rel=\"icon\" type=\"image/x-icon\" href={faviconIco} />\n </>\n )}\n </>\n )\n}\n","import { nivelAssetUrl } from '../../../../shared/assets.js'\nimport type { ResolvedDocsHeadConfig } from '../../../../docs/types.js'\n\nconst defaultInterFontStylesheetHref = nivelAssetUrl('fonts/fonts-inter.css')\n\nconst defaultInterFontCss = `\n@font-face {\n font-display: swap;\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n src: url('${nivelAssetUrl('fonts/inter-v20-latin-regular.woff2')}') format('woff2');\n}\n\n@font-face {\n font-display: swap;\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n src: url('${nivelAssetUrl('fonts/inter-v20-latin-600.woff2')}') format('woff2');\n}\n\n@font-face {\n font-display: swap;\n font-family: 'Inter';\n font-style: normal;\n font-weight: 800;\n src: url('${nivelAssetUrl('fonts/inter-v20-latin-800.woff2')}') format('woff2');\n}\n`\n\nexport const FontLinks = ({ head }: { head: ResolvedDocsHeadConfig }) => {\n const { fontStylesheetHref, fontPreloadHrefs } = head\n const effectivePreloadHrefs = fontPreloadHrefs ?? []\n const shouldInlineDefaultInterFonts = fontStylesheetHref === defaultInterFontStylesheetHref\n\n return (\n <>\n {effectivePreloadHrefs.map((href) => (\n <link key={href} rel=\"preload\" href={href} as=\"font\" type=\"font/woff2\" crossOrigin=\"anonymous\" />\n ))}\n {shouldInlineDefaultInterFonts ? <style dangerouslySetInnerHTML={{ __html: defaultInterFontCss }} /> : null}\n {fontStylesheetHref && !shouldInlineDefaultInterFonts ? (\n <link rel=\"stylesheet\" href={fontStylesheetHref} />\n ) : null}\n </>\n )\n}\n","import type { DocsThemeConfig } from '../../../../docs/types.js'\nimport { USER_SETTINGS_STORAGE_KEY } from '../../store/settings-storage.js'\nimport { DARK_THEME_MEDIA_QUERY } from '../../theme.js'\n\nconst getThemeBootstrapScript = (theme: Required<DocsThemeConfig>) => {\n return `(() => {\n const storageKey = ${JSON.stringify(USER_SETTINGS_STORAGE_KEY)};\n const darkThemeMediaQuery = ${JSON.stringify(DARK_THEME_MEDIA_QUERY)};\n const defaultThemePreference = ${JSON.stringify(theme.defaultPreference)};\n const themes = {\n light: ${JSON.stringify(theme.light)},\n dark: ${JSON.stringify(theme.dark)}\n };\n\n try {\n const persistedValue = window.localStorage.getItem(storageKey);\n const parsedValue = persistedValue ? JSON.parse(persistedValue) : null;\n const storedThemePreference = parsedValue?.state?.themePreference;\n const themePreference =\n storedThemePreference === 'light' || storedThemePreference === 'dark'\n ? storedThemePreference\n : typeof window.matchMedia === 'function'\n ? window.matchMedia(darkThemeMediaQuery).matches\n ? 'dark'\n : 'light'\n : defaultThemePreference;\n\n document.documentElement.setAttribute('data-theme', themes[themePreference]);\n } catch {\n const themePreference =\n typeof window.matchMedia === 'function'\n ? window.matchMedia(darkThemeMediaQuery).matches\n ? 'dark'\n : 'light'\n : defaultThemePreference;\n\n document.documentElement.setAttribute('data-theme', themes[themePreference]);\n }\n})();`\n}\n\nexport const ThemeBootstrap = ({ theme }: { theme: Required<DocsThemeConfig> }) => {\n return (\n <script\n dangerouslySetInnerHTML={{\n __html: getThemeBootstrapScript(theme),\n }}\n />\n )\n}\n","import { useDocsFromPageGlobalContext } from '../../docsGlobalContext.js'\nimport { FaviconLinks } from './FaviconLinks.js'\nimport { FontLinks } from './FontLinks.js'\nimport { ThemeBootstrap } from './ThemeBootstrap.js'\n\nexport const MetaHead = () => {\n const docs = useDocsFromPageGlobalContext()\n const shouldBlockCrawlers = docs.robots === false\n\n return (\n <>\n <ThemeBootstrap theme={docs.theme} />\n <FaviconLinks head={docs.head} />\n <FontLinks head={docs.head} />\n {shouldBlockCrawlers ? <meta name=\"robots\" content=\"noindex, nofollow\" /> : null}\n </>\n )\n}\n","import cm from '@classmatejs/react'\n\n// https://github.com/tailwindlabs/tailwindcss-typography\n// see full styling list in global.css\nexport const ProseContainer = cm.section`\n prose-container\n`\n","import type { ReactNode } from 'react'\nimport { useData } from 'vike-react/useData'\nimport type { DocPageData } from '../../docs/types.js'\nimport { DocsPagination } from './components/DocsPagination.js'\nimport { DocsFooter } from './components/Footer.js'\nimport { HeadingLinkCopy } from './components/HeadingLinkCopy.js'\nimport { LayoutComponent } from './components/LayoutComponent.js'\nimport { Sidebar } from './components/Sidebar.js'\nimport { TableOfContents } from './components/TableOfContents.js'\nimport TableOfContentsMobile from './components/TableOfContentsMobile.js'\nimport { useTableOfContentsState } from './components/useTableOfContentsState.js'\n\ninterface DocsLayoutProps {\n children: ReactNode\n}\n\nexport const DocsLayout = ({ children }: DocsLayoutProps) => {\n const data = useData() as DocPageData\n const { activeHeadingId, effectiveHeadings, setActiveHeadingId } = useTableOfContentsState({\n headings: data.headings,\n })\n\n return (\n <>\n <HeadingLinkCopy />\n <div className=\"absolute top-0 left-0 h-[60svh] w-full bg-radial-[at_65%_-85%] from-primary-muted-light/40 to-65% dark:from-primary-muted-light/60\" />\n <LayoutComponent>\n <div className=\"lg:flex gap-14\">\n <Sidebar currentHref={data.page.href} activeSectionId={data.page.sectionId} />\n <main className=\"min-w-0 flex-1 basis-auto shrink\">\n <TableOfContentsMobile\n headings={effectiveHeadings}\n tableOfContents={data.page.tableOfContents && effectiveHeadings.length > 0}\n pageTitle={data.page.title}\n currentHref={data.page.href}\n activeHeadingId={activeHeadingId}\n setActiveHeadingId={setActiveHeadingId}\n />\n <div className=\"mt-10 min-w-0\">{children}</div>\n <DocsPagination previousPage={data.previousPage} nextPage={data.nextPage} />\n <DocsFooter />\n </main>\n <TableOfContents\n headings={effectiveHeadings}\n tableOfContents={data.page.tableOfContents}\n activeHeadingId={activeHeadingId}\n setActiveHeadingId={setActiveHeadingId}\n />\n </div>\n </LayoutComponent>\n </>\n )\n}\n","import { cmMerge } from '@classmatejs/react'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport type { DocPageData } from '../../../docs/types.js'\nimport { withSiteBaseUrl } from '../../../shared/assets.js'\nimport { renderInlineMarkdown } from '../../../shared/renderInlineMarkdown.js'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\n\ninterface PaginationCardProps {\n item: NonNullable<DocPageData['previousPage']>\n direction: 'previous' | 'next'\n isOffset?: boolean\n}\n\nconst PaginationCard = ({ item, direction, isOffset }: PaginationCardProps) => {\n const isPrevious = direction === 'previous'\n\n return (\n <a\n href={withSiteBaseUrl(item.href)}\n className={cmMerge(\n 'group rounded-box border border-base-muted-light bg-base-100 p-5 no-underline hover:border-primary-muted-medium hover:bg-base-200',\n isPrevious ? 'text-left' : 'text-right',\n isOffset && 'sm:col-start-2',\n )}\n aria-label={`${isPrevious ? 'Previous' : 'Next'}: ${item.title}`}\n >\n <div className=\"flex flex-col justify-between gap-2\">\n <p className=\"text-lg font-semibold text-base-content\">{renderInlineMarkdown(item.title)}</p>\n <div\n className={cmMerge(\n 'flex items-center gap-1 text-base-muted group-hover:text-base-content',\n isPrevious ? 'justify-start' : 'justify-end',\n )}\n >\n {isPrevious && <ChevronLeft className=\"size-4\" />}\n <span>{isPrevious ? 'Previous' : 'Next'}</span>\n {!isPrevious && <ChevronRight className=\"size-4\" />}\n </div>\n </div>\n </a>\n )\n}\n\ninterface DocsPaginationProps {\n previousPage?: DocPageData['previousPage']\n nextPage?: DocPageData['nextPage']\n}\n\nexport const DocsPagination = ({\n previousPage: previousPageProp = null,\n nextPage: nextPageProp = null,\n}: DocsPaginationProps) => {\n const paginationEnabled = useDocsGlobalContext().footer.pagination\n const previousPage = previousPageProp\n const nextPage = nextPageProp\n\n if (!paginationEnabled) {\n return null\n }\n\n if (!previousPage && !nextPage) {\n return null\n }\n\n return (\n <nav className=\"mb-10 mt-16\" aria-label=\"Previous Next\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {previousPage && <PaginationCard item={previousPage} direction=\"previous\" />}\n {nextPage && <PaginationCard isOffset={!previousPage} item={nextPage} direction=\"next\" />}\n </div>\n </nav>\n )\n}\n","import { Bug, Pencil } from 'lucide-react'\nimport { memo } from 'react'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\nimport { Brand } from './Brand.js'\nimport SocialIcons from './SocialLinks.js'\n\nexport const DocsFooter = memo(() => {\n const { brand } = useDocsGlobalContext()\n\n return (\n <footer className=\"mb-8 mt-12 text-sm border-t border-base-muted-light pt-10\">\n <div className=\"mb-16 flex items-center gap-2\">\n <a href=\"edit\" className=\"btn btn-sm btn-primary btn-soft\">\n <Pencil className=\"size-3\" /> Edit this page\n </a>\n <a href=\"edit\" className=\"btn btn-sm btn-primary btn-soft\">\n <Bug className=\"size-3\" /> Report Issue\n </a>\n </div>\n <div className=\"flex justify-between items-center\">\n <SocialIcons />\n <div className=\"flex gap-2 items-center\">{brand && <Brand brand={brand} noText />}</div>\n </div>\n </footer>\n )\n})\n","import { useEffect } from 'react'\n\nconst copyText = async (value: string) => {\n try {\n await navigator.clipboard.writeText(value)\n return\n } catch {\n const textarea = document.createElement('textarea')\n textarea.value = value\n textarea.setAttribute('readonly', 'true')\n textarea.style.position = 'fixed'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n textarea.select()\n document.execCommand('copy')\n document.body.removeChild(textarea)\n }\n}\n\nconst getHeadingLink = (target: EventTarget | null) =>\n target instanceof Element ? target.closest('a[data-copy-heading-link]') : null\n\nexport const HeadingLinkCopy = () => {\n useEffect(() => {\n const handleClick = (event: MouseEvent) => {\n if (event.defaultPrevented || event.button !== 0) {\n return\n }\n\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n return\n }\n\n const link = getHeadingLink(event.target)\n if (!link) {\n return\n }\n\n const href = link.getAttribute('href')\n if (!href) {\n return\n }\n\n const nextUrl = new URL(href, window.location.href)\n if (nextUrl.hash && window.location.hash !== nextUrl.hash) {\n history.replaceState(null, '', nextUrl.hash)\n }\n\n void copyText(nextUrl.href)\n }\n\n document.addEventListener('click', handleClick)\n\n return () => {\n document.removeEventListener('click', handleClick)\n }\n }, [])\n\n return null\n}\n","import { cmMerge } from '@classmatejs/react'\nimport type { LucideIcon } from 'lucide-react'\nimport type { ReactNode } from 'react'\nimport { memo, useEffect, useRef } from 'react'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport { getDocsIconMapKey } from '../../../docs/iconKeys.js'\nimport { getActiveSectionByPathname } from '../../../docs/runtime.js'\nimport type {\n DocsIconMap,\n ResolvedDocsSection,\n ResolvedSidebarGroup,\n ResolvedSidebarNode,\n} from '../../../docs/types.js'\nimport { withSiteBaseUrl } from '../../../shared/assets.js'\nimport { renderInlineMarkdown } from '../../../shared/renderInlineMarkdown.js'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\nimport { useDocsSidebarActions, useDocsSidebarStore } from '../store/runtime-store.js'\nimport {\n containsActiveHref,\n getGroupHref,\n getVisibleGroupItems,\n getVisibleNavItems,\n hasActiveItem,\n} from './docsNavigation.js'\n\nconst useAutoOpenDetails = (nodeId: string, isOpenByDefault: boolean, hasActiveDescendant: boolean) => {\n const storedOpen = useDocsSidebarStore((state) => state.openNodes[nodeId])\n const { setNodeOpen } = useDocsSidebarActions()\n const isOpen = storedOpen === undefined ? isOpenByDefault || hasActiveDescendant : storedOpen || hasActiveDescendant\n\n useEffect(() => {\n if (hasActiveDescendant) {\n setNodeOpen(nodeId, true)\n return\n }\n\n if (storedOpen === undefined && isOpenByDefault) {\n setNodeOpen(nodeId, true)\n }\n }, [hasActiveDescendant, isOpenByDefault, nodeId, setNodeOpen, storedOpen])\n\n return {\n isOpen,\n setIsOpen: (nextOpen: boolean) => setNodeOpen(nodeId, nextOpen),\n }\n}\n\ninterface SidebarPageLinkProps {\n title: string\n href: string\n currentHref: string\n icon?: LucideIcon\n}\n\nconst SidebarPageLink = ({ title, href, currentHref, icon: Icon }: SidebarPageLinkProps) => {\n return (\n <li className=\"rounded-none\">\n <a\n href={withSiteBaseUrl(href)}\n className={cmMerge(\n 'rounded-field py-2 text-base-muted hover:text-base-content justify-start hover:bg-base-200',\n href === currentHref && 'text-primary! font-semibold bg-base-200',\n )}\n >\n <span className=\"flex items-center gap-2\">\n {Icon ? <Icon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n <span>{renderInlineMarkdown(title, { codeClassName: 'text-sm!' })}</span>\n </span>\n </a>\n </li>\n )\n}\n\nconst SidebarGroupDivider = ({ title, icon: Icon }: { title: string; icon?: LucideIcon }) => {\n return (\n <li className=\"ml-3 mt-2 mb-2 border-b border-base-muted-light text-xs text-base-muted-medium pointer-events-none font-semibold\">\n <span className=\"-ml-3 flex items-center gap-2\">\n {Icon ? <Icon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n <span>{renderInlineMarkdown(title, { codeClassName: 'text-sm!' })}</span>\n </span>\n </li>\n )\n}\n\ninterface SidebarGroupTitleProps {\n title?: string\n href?: string\n isActive: boolean\n allowNavigation?: boolean\n icon?: LucideIcon\n}\n\nconst SidebarGroupTitle = ({ title, href, isActive, allowNavigation = false, icon: Icon }: SidebarGroupTitleProps) => {\n const content = (\n <span className=\"flex items-center gap-2\">\n {Icon ? <Icon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n <span\n className={cmMerge(\n allowNavigation ? 'font-medium' : 'font-semibold',\n isActive && allowNavigation && 'text-primary!',\n )}\n >\n {title ? renderInlineMarkdown(title, { codeClassName: 'text-sm!' }) : null}\n </span>\n </span>\n )\n\n if (allowNavigation && href) {\n return (\n <a\n href={withSiteBaseUrl(href)}\n className={cmMerge(\n 'flex items-center gap-2 rounded-field py-2 text-base-muted hover:text-base-content no-underline',\n isActive && 'text-primary! font-semibold',\n )}\n >\n {content}\n </a>\n )\n }\n\n return <span className=\"flex items-center gap-2 rounded-field py-2 text-base-content\">{content}</span>\n}\n\nconst renderSidebarItems = (\n items: ResolvedSidebarNode[],\n currentHref: string,\n docsIconMap: DocsIconMap,\n): ReactNode[] => {\n return items.map((item) => {\n if (item.kind === 'page') {\n return (\n <SidebarPageLink\n key={item.id}\n title={item.navTitle}\n href={item.href}\n currentHref={currentHref}\n icon={docsIconMap[getDocsIconMapKey('page', item.id)]}\n />\n )\n }\n\n return <SidebarNestedGroup key={item.id} group={item} currentHref={currentHref} docsIconMap={docsIconMap} />\n })\n}\n\ninterface SidebarItemListProps {\n items: ResolvedSidebarNode[]\n currentHref: string\n docsIconMap: DocsIconMap\n}\n\nconst SidebarItemList = ({ items, currentHref, docsIconMap }: SidebarItemListProps) => {\n const visibleItems = getVisibleNavItems(items)\n\n return <ul className=\"menu lg:w-[97%]\">{renderSidebarItems(visibleItems, currentHref, docsIconMap)}</ul>\n}\n\ninterface SidebarNestedGroupProps {\n group: ResolvedSidebarGroup\n currentHref: string\n docsIconMap: DocsIconMap\n}\n\nconst SidebarNestedGroup = ({ group, currentHref, docsIconMap }: SidebarNestedGroupProps) => {\n const groupHref = getGroupHref(group)\n const visibleItems = getVisibleGroupItems(group)\n const isCollapsible = group.collapsible !== undefined\n const isOpenByDefault = group.collapsible?.isDefaultOpen ?? true\n const nestedHasActiveItem = groupHref === currentHref || hasActiveItem(group.items, currentHref)\n const { isOpen, setIsOpen } = useAutoOpenDetails(`group:${group.id}`, isOpenByDefault, nestedHasActiveItem)\n const GroupIcon = docsIconMap[getDocsIconMapKey('group', group.id)]\n\n if (!isCollapsible) {\n if (!group.title) {\n return <>{renderSidebarItems(visibleItems, currentHref, docsIconMap)}</>\n }\n\n return (\n <>\n <SidebarGroupDivider title={group.title} icon={GroupIcon} />\n {renderSidebarItems(visibleItems, currentHref, docsIconMap)}\n </>\n )\n }\n\n return (\n <li>\n <details\n open={isOpen}\n onToggle={(event) => {\n setIsOpen(event.currentTarget.open)\n }}\n >\n <summary className=\"rounded-field max-h-9 flex items-center\">\n <SidebarGroupTitle\n title={group.title}\n href={groupHref ?? undefined}\n isActive={nestedHasActiveItem}\n allowNavigation={Boolean(groupHref)}\n icon={GroupIcon}\n />\n </summary>\n {visibleItems.length > 0 ? (\n <SidebarItemList items={visibleItems} currentHref={currentHref} docsIconMap={docsIconMap} />\n ) : null}\n </details>\n </li>\n )\n}\n\ninterface SidebarSectionGroupProps {\n section: ResolvedDocsSection\n currentHref: string\n activeSectionId: string\n}\n\nconst SidebarSectionGroup = ({ section, currentHref, activeSectionId }: SidebarSectionGroupProps) => {\n const docs = useDocsGlobalContext()\n const SectionIcon = docs.docsIconMap[getDocsIconMapKey('section', section.id)]\n const sectionHasActiveItem = section.id === activeSectionId || containsActiveHref(section.items, currentHref)\n const { isOpen, setIsOpen } = useAutoOpenDetails(\n `section:${section.id}`,\n section.id === activeSectionId,\n sectionHasActiveItem,\n )\n\n return (\n <li className=\"pb-1\">\n <details\n open={isOpen}\n onToggle={(event) => {\n setIsOpen(event.currentTarget.open)\n }}\n >\n <summary className=\"rounded-field max-h-9 flex items-center\">\n <SidebarGroupTitle title={section.title} isActive={sectionHasActiveItem} icon={SectionIcon} />\n </summary>\n <SidebarItemList items={section.items} currentHref={currentHref} docsIconMap={docs.docsIconMap} />\n </details>\n </li>\n )\n}\n\ninterface SidebarProps {\n currentHref?: string\n activeSectionId?: string\n}\n\nexport const Sidebar = memo(\n ({ currentHref: currentHrefProp = '', activeSectionId: activeSectionIdProp = '' }: SidebarProps) => {\n const scrollContainerRef = useRef<HTMLDivElement | null>(null)\n const { urlPathname } = usePageContext()\n const currentHref = currentHrefProp || urlPathname\n const docs = useDocsGlobalContext()\n const activeSectionId = activeSectionIdProp || getActiveSectionByPathname(docs, currentHref)?.id || ''\n const { sidebarSections } = docs\n\n return (\n <aside className=\"hidden basis-76 shrink-0 lg:block\">\n <div className=\"-ml-3 sticky top-14\">\n <div className=\"absolute h-full w-px right-0 top-0 bg-linear-to-t to-base-muted-light via-base-muted-light pointer-events-none z-1\" />\n <div\n ref={scrollContainerRef}\n className=\"pr-4 h-[calc(100svh-14*var(--spacing))] overflow-y-scroll relative z-10\"\n >\n <ul className={cmMerge('menu p-0 m-0 w-full px-0 pt-3 li:last-child:border-0')}>\n {sidebarSections.map((section) => (\n <SidebarSectionGroup\n key={section.id}\n section={section}\n currentHref={currentHref}\n activeSectionId={activeSectionId}\n />\n ))}\n </ul>\n </div>\n </div>\n </aside>\n )\n },\n)\n","import type { ResolvedSidebarGroup, ResolvedSidebarNode } from '../../../docs/types.js'\n\nexport const containsActiveHref = (items: ResolvedSidebarNode[], currentHref: string): boolean => {\n return items.some((item) => {\n if (item.kind === 'page') {\n return item.href === currentHref\n }\n\n return item.href === currentHref || containsActiveHref(item.items, currentHref)\n })\n}\n\nexport const hasActiveItem = (items: ResolvedSidebarNode[], activeHref: string) => containsActiveHref(items, activeHref)\n\nexport const getVisibleNavItems = (items: ResolvedSidebarNode[]) => items.filter((item) => item.showInNav)\n\nexport const getVisibleGroupItems = (group: ResolvedSidebarGroup) => {\n const visibleItems = getVisibleNavItems(group.items)\n\n if (!group.href) {\n return visibleItems\n }\n\n return visibleItems.filter((item): item is ResolvedSidebarNode => {\n if (item.kind !== 'page') {\n return true\n }\n\n return item.href !== group.href\n })\n}\n\nexport const getGroupHref = (group: ResolvedSidebarGroup): string | null => group.href ?? null\n","import cm, { cmMerge } from '@classmatejs/react'\nimport { Flame, TableOfContentsIcon } from 'lucide-react'\nimport type { Dispatch, SetStateAction } from 'react'\nimport type { DocHeading, ResolvedDocsPartnersConfig } from '../../../docs/types.js'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\n\ninterface TableOfContentsProps {\n headings?: DocHeading[]\n tableOfContents?: boolean\n activeHeadingId?: string\n setActiveHeadingId?: Dispatch<SetStateAction<string>>\n}\n\nexport const TableOfContents = ({\n headings: headingsProp = [],\n tableOfContents: tableOfContentsProp = false,\n activeHeadingId = '',\n setActiveHeadingId = () => undefined,\n}: TableOfContentsProps) => {\n const { partners } = useDocsGlobalContext()\n const effectiveHeadings = headingsProp\n const effectiveTableOfContents = tableOfContentsProp\n\n return (\n <aside className={cmMerge(effectiveTableOfContents ? 'w-64' : 'w-32', 'hidden shrink-0 xl:block')}>\n <div className=\"sticky top-14\">\n <div className=\"relative h-[calc(100svh-14*var(--spacing))] overflow-y-auto overflow-x-hidden pt-10 pb-8\">\n {effectiveTableOfContents\n ? effectiveHeadings.length > 0 && (\n <>\n <p className=\"mb-4 flex items-center gap-2 text-xs font-semibold uppercase tracking-widest text-base-muted\">\n <TableOfContentsIcon className=\"size-3\" />\n On this page\n </p>\n <nav aria-label=\"On this page\" className=\"mb-12\">\n <ul>\n {effectiveHeadings.map((heading) => (\n <li key={heading.id}>\n <a\n href={`#${heading.id}`}\n aria-current={activeHeadingId === heading.id ? 'location' : undefined}\n onClick={() => setActiveHeadingId(heading.id)}\n className={cmMerge(\n 'cursor-pointer block border-l border-base-muted-light py-1.5 text-sm text-base-muted hover:border-primary-muted hover:text-base-content',\n heading.depth > 2 ? 'pl-6' : 'pl-4',\n activeHeadingId === heading.id\n ? 'border-l-2 border-primary font-semibold text-base-content'\n : '',\n )}\n >\n {heading.title}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n </>\n )\n : null}\n <Adbar partners={partners} />\n </div>\n </div>\n </aside>\n )\n}\n\nconst Adbar = ({ partners }: { partners: ResolvedDocsPartnersConfig }) => {\n if (partners.primary.length === 0 && partners.gold.length === 0) {\n return null\n }\n\n return (\n <aside>\n <p className=\"mb-4 flex items-center gap-2 text-xs font-semibold uppercase tracking-widest text-base-muted\">\n <Flame className=\"size-3\" />\n Partners\n </p>\n <ul className=\"grid grid-cols-[repeat(auto-fit,minmax(5.5rem,1fr))] gap-3 opacity-90\">\n {partners.primary.map((partner) => (\n <AdbarItem key={partner.name} className=\"col-span-full\">\n <AdbarLink href={partner.href} title={partner.name}>\n <PartnerLogo partner={partner} />\n </AdbarLink>\n </AdbarItem>\n ))}\n {partners.gold.map((partner) => (\n <AdbarItem key={partner.name}>\n <AdbarLink href={partner.href} title={partner.name}>\n <PartnerLogo partner={partner} />\n </AdbarLink>\n </AdbarItem>\n ))}\n </ul>\n </aside>\n )\n}\n\nconst PartnerLogo = ({\n partner,\n}: {\n partner: ResolvedDocsPartnersConfig['primary'][number] | ResolvedDocsPartnersConfig['gold'][number]\n}) => {\n return (\n <>\n <Image\n src={partner.logoLight}\n width={200}\n height={200}\n alt={partner.logoAlt}\n className={cmMerge('block', partner.logoDark ? 'dark:hidden' : 'dark:invert')}\n />\n {partner.logoDark ? (\n <Image src={partner.logoDark} width={200} height={200} alt={partner.logoAlt} className=\"hidden dark:block\" />\n ) : null}\n </>\n )\n}\n\nconst AdbarItem = cm.li`\n list-none\n px-5\n py-5\n bg-base-200\n text-center\n flex\n items-center\n justify-center\n rounded-field\n`\n\nconst AdbarLink = cm.a`\n block\n w-full\n transition-opacity\n hover:opacity-100\n focus-visible:opacity-100\n`\n\nconst Image = cm.img`\n mx-auto\n w-24\n h-auto\n`\n","import cm from '@classmatejs/react'\nimport { TableOfContents } from 'lucide-react'\nimport { type Dispatch, type SetStateAction, useId } from 'react'\nimport type { DocHeading } from '../../../docs/types'\nimport BreadcrumbSidebarTrigger from './BreadcrumbSidebarTrigger'\n\ninterface TableOfContentsProps {\n headings?: DocHeading[]\n tableOfContents?: boolean\n pageTitle?: string\n currentHref: string\n activeHeadingId?: string\n setActiveHeadingId?: Dispatch<SetStateAction<string>>\n}\n\nconst TableOfContentsMobile = ({\n headings = [],\n tableOfContents = false,\n pageTitle = 'On this page',\n currentHref,\n activeHeadingId = '',\n setActiveHeadingId = () => undefined,\n}: TableOfContentsProps) => {\n const topOptionValue = '__docs-page-top__'\n const selectId = useId()\n const labelId = `${selectId}-label`\n const selectedValue =\n tableOfContents && headings.some((heading) => heading.id === activeHeadingId) ? activeHeadingId : ''\n\n return (\n <>\n <div className=\"h-12 xl:hidden\"></div>\n <StyledTOC>\n <StyledTOCInner>\n <BreadcrumbSidebarTrigger currentHref={currentHref} />\n <label className=\"select select-sm md:w-80 w-full\" htmlFor={selectId}>\n <span id={labelId} className=\"sr-only\">\n {pageTitle}\n </span>\n <span className=\"label flex\" aria-hidden=\"true\">\n <TableOfContents className=\"size-4\" />\n </span>\n <select\n id={selectId}\n aria-labelledby={labelId}\n value={selectedValue || topOptionValue}\n onChange={(e) => {\n const value = e.target.value\n if (value === topOptionValue) {\n setActiveHeadingId('')\n window.history.replaceState(null, '', `${window.location.pathname}${window.location.search}`)\n window.scrollTo({ top: 0, behavior: 'auto' })\n return\n }\n\n setActiveHeadingId(value)\n window.location.hash = encodeURIComponent(value)\n }}\n >\n <option value={topOptionValue}>{pageTitle}</option>\n {tableOfContents &&\n headings.map((heading) => (\n <option key={heading.id} value={heading.id}>\n {heading.title}\n </option>\n ))}\n </select>\n </label>\n </StyledTOCInner>\n </StyledTOC>\n </>\n )\n}\n\nexport default TableOfContentsMobile\n\nconst StyledTOC = cm.div`\n block xl:hidden\n fixed\n bg-base-100 border-b-base-muted-light\n w-full h-14\n top-14 left-0 border-b z-5\n lg:w-[calc(100svw-80*var(--spacing))]\n lg:left-80\n`\n\nconst StyledTOCInner = cm.div`\n absolute inset-0 flex justify-between items-center\n pr-4\n px-4 lg:pl-14\n`\n","import { ChevronLast, ChevronsRight } from 'lucide-react'\nimport { useCallback } from 'react'\nimport { getActiveSectionByPathname } from '../../../docs/runtime.js'\nimport type { ResolvedSidebarNode } from '../../../docs/types.js'\nimport { renderInlineMarkdown } from '../../../shared/renderInlineMarkdown.js'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\n\ntype BreadcrumbItem = {\n id: string\n title: string\n}\n\nconst dedupeBreadcrumbs = (items: BreadcrumbItem[]) => {\n return items.filter((item, index) => index === 0 || items[index - 1]?.title !== item.title)\n}\n\nconst getSidebarBreadcrumbs = (items: ResolvedSidebarNode[], currentHref: string): BreadcrumbItem[] | null => {\n for (const item of items) {\n if (item.kind === 'page') {\n if (item.href === currentHref) {\n return [{ id: item.id, title: item.navTitle }]\n }\n\n continue\n }\n\n if (item.href === currentHref) {\n return item.title ? [{ id: item.id, title: item.title }] : []\n }\n\n const nestedBreadcrumbs = getSidebarBreadcrumbs(item.items, currentHref)\n\n if (!nestedBreadcrumbs) {\n continue\n }\n\n return dedupeBreadcrumbs(\n item.title ? [{ id: item.id, title: item.title }, ...nestedBreadcrumbs] : nestedBreadcrumbs,\n )\n }\n\n return null\n}\n\nconst BreadcrumbSidebarTrigger = ({ currentHref }: { currentHref: string }) => {\n const docs = useDocsGlobalContext()\n const activeSection = getActiveSectionByPathname(docs, currentHref)\n const breadcrumbItems = dedupeBreadcrumbs([\n ...(activeSection ? [{ id: activeSection.id, title: activeSection.navTitle }] : []),\n ...(activeSection ? (getSidebarBreadcrumbs(activeSection.items, currentHref) ?? []) : []),\n ])\n\n const handleClick = useCallback(() => {\n alert('TODO: Open mobile menu')\n }, [])\n\n return (\n <button className=\"cursor-pointer min-w-0 max-w-full hidden md:block\" type=\"button\" onClick={handleClick}>\n <span className=\"flex items-center gap-1 min-w-0 overflow-hidden lg:hidden\">\n <ChevronLast className=\"size-4 shrink-0 text-primary\" />\n <span className=\"hidden md:flex items-center gap-1\">\n {breadcrumbItems.map((item, index) => (\n <span key={item.id} className=\"contents\">\n {index > 0 ? <ChevronsRight className=\"size-4 shrink-0 text-base-muted-medium\" /> : null}\n <span className={index === 0 ? 'font-semibold truncate' : 'text-sm truncate'}>\n {renderInlineMarkdown(item.title, { codeClassName: 'text-sm!' })}\n </span>\n </span>\n ))}\n </span>\n </span>\n </button>\n )\n}\n\nexport default BreadcrumbSidebarTrigger\n","import type { Dispatch, SetStateAction } from 'react'\nimport { useEffect, useState } from 'react'\nimport { createHeadingSlugger, normalizeHeadingTitle } from '../../../docs/docHeadings.js'\nimport type { DocHeading } from '../../../docs/types.js'\n\nconst getCurrentHash = () => {\n try {\n return decodeURIComponent(window.location.hash)\n } catch {\n return window.location.hash\n }\n}\n\nconst getHeadingElements = () => {\n const root = document.querySelector('[data-doc-content]')\n if (!(root instanceof HTMLElement)) {\n return []\n }\n\n return Array.from(root.querySelectorAll('h2, h3, h4')).filter(\n (element): element is HTMLHeadingElement => element instanceof HTMLHeadingElement,\n )\n}\n\nconst areHeadingsEqual = (left: DocHeading[], right: DocHeading[]) => {\n if (left.length !== right.length) {\n return false\n }\n\n return left.every((heading, index) => {\n const other = right[index]\n return (\n other !== undefined && heading.depth === other.depth && heading.id === other.id && heading.title === other.title\n )\n })\n}\n\nconst syncHeadingsFromDom = (setDomHeadings: Dispatch<SetStateAction<DocHeading[]>>) => {\n const root = document.querySelector('[data-doc-content]')\n if (!(root instanceof HTMLElement)) {\n return\n }\n\n const slugify = createHeadingSlugger()\n const nextHeadings = Array.from(root.querySelectorAll('h2, h3, h4'))\n .map((element) => {\n const title = normalizeHeadingTitle(element.textContent ?? '')\n if (!title) {\n return null\n }\n\n element.classList.add('scroll-mt-32')\n element.classList.add('xl:scroll-mt-22')\n\n const id = element.id || slugify(title)\n if (!element.id) {\n element.id = id\n }\n\n return {\n depth: Number(element.tagName.slice(1)),\n id,\n title,\n } satisfies DocHeading\n })\n .filter((heading): heading is DocHeading => heading !== null)\n\n setDomHeadings((currentHeadings) => {\n if (areHeadingsEqual(currentHeadings, nextHeadings)) {\n return currentHeadings\n }\n\n return nextHeadings\n })\n}\n\nconst updateActiveHeadingFromScroll = (setActiveHeadingId: (value: string) => void) => {\n const headingElements = getHeadingElements()\n if (headingElements.length === 0) {\n return\n }\n\n const activationOffset = 144\n let nextActiveHeadingId = ''\n\n for (const heading of headingElements) {\n if (!heading.id) {\n continue\n }\n\n if (heading.getBoundingClientRect().top <= activationOffset) {\n nextActiveHeadingId = heading.id\n continue\n }\n\n break\n }\n\n const lastHeading = headingElements.at(-1)\n if (lastHeading?.id && window.innerHeight + window.scrollY >= document.documentElement.scrollHeight - 8) {\n nextActiveHeadingId = lastHeading.id\n }\n\n setActiveHeadingId(nextActiveHeadingId)\n}\n\ninterface UseTableOfContentsStateProps {\n headings?: DocHeading[]\n}\n\ninterface UseTableOfContentsStateResult {\n activeHeadingId: string\n effectiveHeadings: DocHeading[]\n setActiveHeadingId: Dispatch<SetStateAction<string>>\n}\n\nexport const useTableOfContentsState = ({\n headings: routeHeadings = [],\n}: UseTableOfContentsStateProps): UseTableOfContentsStateResult => {\n const [activeHeadingId, setActiveHeadingId] = useState('')\n const [domHeadings, setDomHeadings] = useState<DocHeading[]>(routeHeadings)\n const effectiveHeadings = domHeadings.length > 0 ? domHeadings : routeHeadings\n\n useEffect(() => {\n let scrollFrame = 0\n\n const syncActiveHeading = () => {\n if (scrollFrame) {\n return\n }\n\n scrollFrame = window.requestAnimationFrame(() => {\n scrollFrame = 0\n updateActiveHeadingFromScroll(setActiveHeadingId)\n })\n }\n\n const updateHash = () => {\n const currentHash = getCurrentHash().replace(/^#/, '')\n if (currentHash !== '') {\n setActiveHeadingId(currentHash)\n return\n }\n\n syncActiveHeading()\n }\n\n updateHash()\n queueMicrotask(() => {\n syncHeadingsFromDom(setDomHeadings)\n syncActiveHeading()\n })\n\n window.addEventListener('hashchange', updateHash)\n window.addEventListener('scroll', syncActiveHeading, { passive: true })\n window.addEventListener('resize', syncActiveHeading)\n\n return () => {\n if (scrollFrame) {\n window.cancelAnimationFrame(scrollFrame)\n }\n\n window.removeEventListener('hashchange', updateHash)\n window.removeEventListener('scroll', syncActiveHeading)\n window.removeEventListener('resize', syncActiveHeading)\n }\n }, [])\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n setDomHeadings((currentHeadings) => {\n if (areHeadingsEqual(currentHeadings, routeHeadings)) {\n return currentHeadings\n }\n\n return routeHeadings\n })\n setActiveHeadingId('')\n\n queueMicrotask(() => {\n syncHeadingsFromDom(setDomHeadings)\n updateActiveHeadingFromScroll(setActiveHeadingId)\n })\n }, [routeHeadings])\n\n return {\n activeHeadingId,\n effectiveHeadings,\n setActiveHeadingId,\n }\n}\n","import type { ComponentType } from 'react'\nimport { useData } from 'vike-react/useData'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport type { DocPageData } from '../../docs/types.js'\nimport { UniversalMdxProvider } from '../../mdx/components/UniversalMdxProvider.js'\nimport { renderInlineMarkdown } from '../../shared/renderInlineMarkdown.js'\nimport DocsBreadcrumbs from './components/DocsBreadcrumbs.js'\nimport { ProseContainer } from './components/ProseContainer.js'\nimport { useDocsGlobalContext } from './docsGlobalContext.js'\nimport { getMdxRuntimeValue } from './getMdxRuntimeValue.js'\n\ninterface DocsPageProps {\n Content: ComponentType\n}\n\nexport const DocsPage = ({ Content }: DocsPageProps) => {\n const pageContext = usePageContext()\n const docs = useDocsGlobalContext()\n const { page } = useData() as DocPageData\n\n return (\n <UniversalMdxProvider\n value={getMdxRuntimeValue({\n docs,\n currentPathname: pageContext.urlPathname,\n })}\n >\n <ProseContainer data-doc-content=\"\">\n <DocsBreadcrumbs currentHref={page.href} />\n <h1 className=\"scroll-mt-32 xl:scroll-mt-22\">{renderInlineMarkdown(page.title)}</h1>\n <Content />\n </ProseContainer>\n </UniversalMdxProvider>\n )\n}\n","import { ChevronsRight } from 'lucide-react'\nimport { getDocsIconMapKey } from '../../../docs/iconKeys.js'\nimport { getActiveSectionByPathname } from '../../../docs/runtime.js'\nimport type { ResolvedSidebarNode } from '../../../docs/types.js'\nimport { renderInlineMarkdown } from '../../../shared/renderInlineMarkdown.js'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\n\ntype BreadcrumbItem = {\n id: string\n kind: 'group' | 'page'\n title: string\n}\n\nconst dedupeBreadcrumbs = (items: BreadcrumbItem[]) => {\n return items.filter((item, index) => index === 0 || items[index - 1]?.title !== item.title)\n}\n\nconst getSidebarBreadcrumbs = (items: ResolvedSidebarNode[], currentHref: string): BreadcrumbItem[] | null => {\n for (const item of items) {\n if (item.kind === 'page') {\n if (item.href === currentHref) {\n return [{ id: item.id, kind: item.kind, title: item.navTitle }]\n }\n\n continue\n }\n\n if (item.href === currentHref) {\n return item.title ? [{ id: item.id, kind: item.kind, title: item.title }] : []\n }\n\n const nestedBreadcrumbs = getSidebarBreadcrumbs(item.items, currentHref)\n\n if (!nestedBreadcrumbs) {\n continue\n }\n\n return dedupeBreadcrumbs(item.title ? [{ id: item.id, kind: item.kind, title: item.title }] : nestedBreadcrumbs)\n }\n\n return null\n}\n\nconst DocsBreadcrumbs = ({ currentHref }: { currentHref: string }) => {\n const docs = useDocsGlobalContext()\n const activeSection = getActiveSectionByPathname(docs, currentHref)\n const breadcrumbItems = dedupeBreadcrumbs([\n ...(activeSection ? (getSidebarBreadcrumbs(activeSection.items, currentHref) ?? []) : []),\n ])\n\n return (\n <span className=\"hidden lg:flex items-center text-sm gap-1 min-w-0 overflow-hidden mb-3 text-primary\">\n {breadcrumbItems.map((item, index) => {\n const Icon = docs.docsIconMap[getDocsIconMapKey(item.kind, item.id)]\n\n return (\n <span key={item.id} className=\"contents\">\n {index > 0 ? <ChevronsRight className=\"size-4 shrink-0 text-base-muted-medium\" /> : null}\n <span className=\"flex min-w-0 items-center gap-1.5\">\n {Icon ? <Icon className=\"size-3 shrink-0\" aria-hidden=\"true\" /> : null}\n <span className=\"truncate\">{renderInlineMarkdown(item.title, { codeClassName: 'text-sm!' })}</span>\n </span>\n </span>\n )\n })}\n </span>\n )\n}\n\nexport default DocsBreadcrumbs\n","import type {\n UniversalMdxRuntimeValue,\n UniversalResolvedDocLink,\n UniversalResolvedOverviewItem,\n} from '../../mdx/components/types.js'\nimport { withSiteBaseUrl } from '../../shared/assets.js'\nimport type { DocsGlobalContextData } from '../../docs/types.js'\nimport {\n getActiveSectionByPathname,\n getResolvedPageByPathname,\n getResolvedSectionById,\n isSamePagePathname,\n resolveDocsHref,\n} from '../../docs/runtime.js'\nimport { docsCodeBlockChoiceStore } from './store/settings-store.js'\n\nconst isExternalHref = (href: string) => {\n return /^(?:[a-z]+:)?\\/\\//i.test(href) || href.startsWith('mailto:') || href.startsWith('tel:')\n}\n\nconst splitHref = (href: string) => {\n const [pathname, hash = ''] = href.split('#')\n return {\n pathname,\n hash: hash ? `#${hash}` : '',\n }\n}\n\nconst resolveDocLink = (options: {\n docs: DocsGlobalContextData\n currentPathname: string\n href: string\n}): UniversalResolvedDocLink | null => {\n const { currentPathname, href } = options\n if (href.startsWith('#') || isExternalHref(href)) {\n return null\n }\n\n const { pathname, hash } = splitHref(href)\n const docsPathname = resolveDocsHref(options.docs.basePath, pathname)\n\n if (!docsPathname) {\n return null\n }\n\n const page = getResolvedPageByPathname(options.docs, docsPathname)\n if (!page) {\n return null\n }\n\n const section = getResolvedSectionById(options.docs, page.sectionId)\n\n return {\n href: withSiteBaseUrl(`${page.href}${hash}`),\n title: page.title,\n breadcrumb: section ? [section.navTitle] : [],\n isCurrentPage: isSamePagePathname(page, currentPathname),\n }\n}\n\nconst resolveOverviewItem = (options: {\n docs: DocsGlobalContextData\n id: string\n}): UniversalResolvedOverviewItem | null => {\n const page = options.docs.pages.find((candidate) => candidate.id === options.id)\n\n if (!page) {\n return null\n }\n\n return {\n title: page.title,\n href: withSiteBaseUrl(page.href),\n excerpt: page.description ?? null,\n }\n}\n\nexport const getMdxRuntimeValue = (options: {\n docs: DocsGlobalContextData\n currentPathname: string\n}): UniversalMdxRuntimeValue => {\n const { currentPathname, docs } = options\n const activeSection = getActiveSectionByPathname(docs, currentPathname)\n const currentPage = getResolvedPageByPathname(docs, currentPathname)\n\n return {\n locale: 'en',\n codeBlockChoices: docsCodeBlockChoiceStore,\n localizeHref: (href) => {\n if (href.startsWith('#') || isExternalHref(href)) {\n return href\n }\n\n const { pathname, hash } = splitHref(href)\n const docsPathname = resolveDocsHref(docs.basePath, pathname)\n const page = docsPathname ? getResolvedPageByPathname(docs, docsPathname) : null\n\n if (!page) {\n if (docsPathname && !pathname.startsWith('/')) {\n return withSiteBaseUrl(`${docsPathname}${hash}`)\n }\n\n return withSiteBaseUrl(href)\n }\n\n return withSiteBaseUrl(`${page.href}${hash}`)\n },\n resolveDocLink: ({ href }) =>\n resolveDocLink({\n docs,\n currentPathname,\n href,\n }),\n resolveOverviewItem: (id) =>\n resolveOverviewItem({\n docs,\n id,\n }),\n t: (group, key) => {\n if (group === 'docs' && key === 'onThisPage') {\n return 'On this page'\n }\n\n if (group === 'docs' && key === 'previous') {\n return 'Previous'\n }\n\n if (group === 'docs' && key === 'next') {\n return 'Next'\n }\n\n if (group === 'docs' && key === 'currentSection') {\n return activeSection?.navTitle ?? currentPage?.title ?? 'Docs'\n }\n\n return key\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,WAAAA,gBAAe;AAExB,SAAS,kBAAAC,uBAAsB;;;ACF/B,OAAOC,SAAQ;AACf,SAAS,kBAAAC,uBAAsB;;;ACD/B,SAAS,WAAW,gBAAgB;AA0C3B;AApCT,IAAI,2BAA8D;AAElE,IAAM,wBAAwB,MAAM;AAClC,+BAA6B,OAAO,2BAAkB;AACtD,SAAO;AACT;AAEO,IAAM,SAAS,MAAM;AAC1B,QAAM,OAAO,qBAAqB;AAClC,QAAM,SAAS,mBAAmB,CAAC,UAAU,MAAM,MAAM;AACzD,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,SAAmC,IAAI;AAEzF,YAAU,MAAM;AACd,QAAI,CAAC,KAAK,WAAW,CAAC,UAAU,sBAAsB,MAAM;AAC1D;AAAA,IACF;AAEA,QAAI,YAAY;AAEhB,0BAAsB,EAAE,KAAK,CAAC,WAAW;AACvC,UAAI,WAAW;AACb,6BAAqB,MAAM;AAAA,MAC7B;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,KAAK,SAAS,QAAQ,iBAAiB,CAAC;AAE5C,MAAI,CAAC,KAAK,WAAW,sBAAsB,MAAM;AAC/C,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,YAAY,IAAI;AAExB,SAAO,oBAAC,eAAY;AACtB;;;AC3CA,OAAO,MAAM,WAAAC,gBAAe;AAC5B,SAAS,aAAa,MAAM,kBAAkB;AAC9C,SAAS,mBAAmB;;;ACF5B,SAAS,eAAe;AAkBhB,SAEI,OAAAC,MAFJ;AAVD,IAAM,QAAQ,CAAC,EAAE,OAAO,SAAS,MAAM,MAAkB;AAC9D,QAAM,cAAc,MAAM,aAAa,MAAM;AAE7C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,MAAM;AAAA,MACZ,WAAU;AAAA,MACV,cAAY,SAAS,GAAG,MAAM,IAAI,cAAc;AAAA,MAE/C;AAAA,uBACC,qBAAC,UAAK,WAAU,mCACb;AAAA,gBAAM,aACL,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,KAAK,MAAM;AAAA,cACX,KAAK,MAAM;AAAA,cACX,WAAW,QAAQ,0BAA0B,MAAM,WAAW,sBAAsB,OAAO;AAAA;AAAA,UAC7F;AAAA,UAED,MAAM,YACL,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,KAAK,MAAM;AAAA,cACX,KAAK,MAAM;AAAA,cACX,WAAW,QAAQ,0BAA0B,MAAM,YAAY,sBAAsB,OAAO;AAAA;AAAA,UAC9F;AAAA,WAEJ;AAAA,QAED,CAAC,UAAU,gBAAAA,KAAC,UAAK,WAAU,wCAAwC,gBAAM,MAAK;AAAA;AAAA;AAAA,EACjF;AAEJ;;;ACtCA,SAAS,YAAY;AA4Bb,gBAAAC,YAAA;AAxBR,IAAM,aAAa;AAAA,EACjB,QAAQ,cAAc,mBAAmB;AAAA,EACzC,SAAS,cAAc,oBAAoB;AAAA,EAC3C,GAAG,cAAc,cAAc;AAAA,EAC/B,SAAS,cAAc,oBAAoB;AAAA,EAC3C,UAAU,cAAc,qBAAqB;AAC/C;AAIA,IAAM,oBAAoB,CAAC,EAAE,MAAM,KAAK,MAA8C;AACpF,QAAM,cAAc,SAAS,MAAM,MAAM,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC;AAEpF,SACE,gBAAAA,KAAC,QAAG,WAAU,WAEZ,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,QAAO;AAAA,MACP,KAAI;AAAA,MACJ,WAAU;AAAA,MACV,cAAY,GAAG,WAAW;AAAA,MAC1B,OAAO;AAAA,MAEP,0BAAAA,KAAC,SAAI,KAAK,WAAW,IAAI,GAAG,KAAI,IAAG,eAAY,QAAO,WAAU,qCAAoC;AAAA;AAAA,EACtG,GACF;AAEJ;AAEA,IAAM,cAAc,KAAK,MAAM;AAC7B,QAAM,OAAO,qBAAqB;AAClC,QAAM,gBAAgB,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,EAAE;AAAA,IACtD,CAAC,UACC,MAAM,CAAC,KAAK,cAAc,OAAO,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,EAAE,SAAS;AAAA,EAChF;AAEA,MAAI,cAAc,WAAW,GAAG;AAC9B,WAAO;AAAA,EACT;AAEA,SACE,gBAAAA,KAAC,QAAG,WAAU,2BACX,wBAAc,IAAI,CAAC,CAAC,UAAU,IAAI,MACjC,gBAAAA,KAAC,qBAAiC,MAAM,UAAU,QAA1B,QAAsC,CAC/D,GACH;AAEJ,CAAC;AAED,IAAO,sBAAQ;;;ACtDf,SAAS,MAAM,WAAW;;;ACA1B,SAAS,cAAc;AACvB,SAAS,mBAAmB,eAAe;;;ACDpC,IAAM,4BAA4B;AACzC,IAAM,8CAA8C;AAE7C,IAAM,4BAA4B,CAAC,oBAA4B;AACpE,MAAI,OAAO,WAAW,aAAa;AACjC,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,QAAQ,OAAO,aAAa,QAAQ,GAAG,2CAA2C,GAAG,eAAe,EAAE;AAC5G,WAAO,SAAS;AAAA,EAClB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;ADDO,IAAM,2BAA2B,OAA8B;AAAA,EACpE;AAAA,IACE,CAAC,SAAS;AAAA,MACR,kBAAkB,CAAC;AAAA,MACnB,iBAAiB;AAAA,MACjB,oBAAoB,CAAC,iBAAiB,WACpC,IAAI,CAAC,WAAW;AAAA,QACd,kBAAkB;AAAA,UAChB,GAAG,MAAM;AAAA,UACT,CAAC,eAAe,GAAG;AAAA,QACrB;AAAA,MACF,EAAE;AAAA,MACJ,oBAAoB,CAAC,oBAAoB,IAAI,EAAE,gBAAgB,CAAC;AAAA,IAClE;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS,kBAAkB,MAAM,YAAY;AAAA,MAC7C,YAAY,CAAC,EAAE,kBAAkB,gBAAgB,OAAO;AAAA,QACtD;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,2BAA6D;AAAA,EACxE,WAAW,CAAC,aAAa,yBAAyB,UAAU,QAAQ;AAAA,EACpE,WAAW,CAAC,oBAAoB,yBAAyB,SAAS,EAAE,iBAAiB,eAAe,KAAK;AAAA,EACzG,WAAW,CAAC,iBAAiB,WAC3B,yBAAyB,SAAS,EAAE,mBAAmB,iBAAiB,MAAM;AAAA,EAChF,iBAAiB;AACnB;;;AE1CO,IAAM,2BAA4C;AAClD,IAAM,yBAAyB;AAEtC,IAAM,eAAe,CAAC,iBAAkC,gBAA2C;AACjG,SAAO,oBAAoB,SAAS,YAAY,OAAO,YAAY;AACrE;AAEA,IAAM,oBAAoB,CAAC,UAA6C;AACtE,SAAO,UAAU,WAAW,UAAU;AACxC;AAEA,IAAM,2BAA2B,CAAC,4BAA8D;AAC9F,MAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,YAAY;AAC5E,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,WAAW,sBAAsB,EAAE,UAAU,SAAS;AACtE;AAEO,IAAM,yBAAyB,CACpC,iBACA,gBACG;AACH,MAAI,kBAAkB,eAAe,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,SAAO,yBAAyB,YAAY,iBAAiB;AAC/D;AAEO,IAAM,uBAAuB,CAClC,iBACA,gBACG;AACH,MAAI,OAAO,aAAa,aAAa;AACnC;AAAA,EACF;AAEA,WAAS,gBAAgB;AAAA,IACvB;AAAA,IACA,aAAa,uBAAuB,iBAAiB,WAAW,GAAG,WAAW;AAAA,EAChF;AACF;;;AHjCI,SAME,OAAAC,MANF,QAAAC,aAAA;AANG,IAAM,cAAc,CAAC,EAAE,MAAM,MAA4C;AAC9E,QAAM,kBAAkB,yBAAyB,CAAC,UAAU,MAAM,eAAe;AACjF,QAAM,qBAAqB,yBAAyB,CAAC,UAAU,MAAM,kBAAkB;AACvF,QAAM,2BAA2B,uBAAuB,iBAAiB,KAAK;AAE9E,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAW;AAAA,MACX,SAAS,MAAM,mBAAmB,6BAA6B,UAAU,SAAS,OAAO;AAAA,MACzF,WAAU;AAAA,MAEV;AAAA,wBAAAD,KAAC,OAAI,WAAU,sBAAqB;AAAA,QACpC,gBAAAA,KAAC,QAAK,WAAU,4BAA2B;AAAA;AAAA;AAAA,EAC7C;AAEJ;;;AIbI,SAEI,OAAAE,MAFJ,QAAAC,aAAA;AAJJ,IAAM,eAAe,MAAM;AACzB,QAAM,OAAO,qBAAqB;AAElC,SACE,gBAAAA,MAAC,SAAI,WAAU,iCACb;AAAA,oBAAAD,KAAC,SAAI,WAAU,mBACb,0BAAAA,KAAC,uBAAY,GACf;AAAA,IACA,gBAAAA,KAAC,eAAY,OAAO,KAAK,OAAO;AAAA,KAClC;AAEJ;AAEA,IAAO,uBAAQ;;;APkCP,gBAAAE,MAmBU,QAAAC,aAnBV;AAxCR,IAAM,YAAY,GAAG;AAAA;AAAA;AAAA;AAAA;AAMrB,IAAM,gBAAgB,GAAG;AAAA;AAAA;AAezB,IAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAuB;AACrB,QAAM,OAAO,qBAAqB;AAElC,QAAM,cAAc,YAAY,MAAM;AACpC,UAAM,wBAAwB;AAAA,EAChC,GAAG,CAAC,CAAC;AAEL,SACE,gBAAAA,MAAC,SAAI,WAAU,0CACb;AAAA,oBAAAD,KAAC,SAAI,WAAU,0BACb,0BAAAA,KAAC,SAAM,OAAO,KAAK,OAAO,GAC5B;AAAA,IACA,gBAAAA,KAAC,aAAU,cAAW,WACpB,0BAAAC,MAAC,iBAAc,WAAU,IACtB;AAAA,WAAK,YAAY,IAAI,CAAC,SAAS;AAC9B,cAAM,WAAW,KAAK,YAAY,kBAAkB,WAAW,KAAK,EAAE,CAAC;AACvE,cAAM,uBAAuB,kBAAkB,qBAAqB,KAAK;AAEzE,eACE,gBAAAD,KAAC,QACC,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM,gBAAgB,KAAK,IAAI;AAAA,YAC/B,WAAW;AAAA,YACX,gBAAgB,MAAM,qBAAqB,KAAK,EAAE;AAAA,YAClD,gBAAgB;AAAA,YAChB,SAAS,MAAM,aAAa,KAAK,EAAE;AAAA,YACnC,QAAQ;AAAA,YACR,SAAS;AAAA,YAET,0BAAAC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAWC;AAAA,kBACT;AAAA,kBACA,eAAe,OAAO,KAAK,KAAK,yBAAyB;AAAA,gBAC3D;AAAA,gBAEC;AAAA,6BAAW,gBAAAF,KAAC,YAAS,WAAU,mBAAkB,eAAY,QAAO,IAAK;AAAA,kBACzE,qBAAqB,KAAK,KAAK;AAAA,kBAChC,gBAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAWE;AAAA,wBACT;AAAA,wBACA,uBAAuB,eAAe;AAAA,sBACxC;AAAA;AAAA,kBACF;AAAA;AAAA;AAAA,YACF;AAAA;AAAA,QACF,KAzBO,KAAK,EA0Bd;AAAA,MAEJ,CAAC;AAAA,MACA,KAAK,UACJ,gBAAAF,KAAC,QACC,0BAAAC;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS;AAAA,UACT,WAAU;AAAA,UACX;AAAA;AAAA,YAEC,gBAAAD,KAAC,cAAW,WAAU,UAAS;AAAA;AAAA;AAAA,MACjC,GACF,IACE;AAAA,OACN,GACF;AAAA,IACA,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,mBAAkB,cAAW,wBAAuB,SAAS,aAC3F,0BAAAA,KAAC,QAAK,WAAU,WAAU,GAC5B;AAAA,IACA,gBAAAA,KAAC,SAAI,WAAU,+BACb,0BAAAA,KAAC,wBAAa,GAChB;AAAA,KACF;AAEJ;AAEA,IAAO,qBAAQ;;;AQjHf,OAAOG,OAAM,WAAAC,gBAAe;AAC5B,SAAS,eAAAC,cAAa,QAAAC,OAAM,cAAAC,mBAAkB;AAC9C,SAAS,eAAAC,oBAAmB;AA6CpB,gBAAAC,MAmBU,QAAAC,aAnBV;AArCR,IAAMC,aAAYC,IAAG;AAAA;AAAA;AAAA;AAKrB,IAAMC,iBAAgBD,IAAG;AAAA;AAAA;AAczB,IAAM,oBAAoB,CAAC;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA8B;AAC5B,QAAM,OAAO,qBAAqB;AAElC,QAAM,cAAcE,aAAY,MAAM;AACpC,UAAM,wBAAwB;AAAA,EAChC,GAAG,CAAC,CAAC;AAEL,SACE,gBAAAJ,MAAC,SAAI,WAAU,0CACb;AAAA,oBAAAD,KAAC,SAAI,WAAU,YACb,0BAAAA,KAAC,SAAM,OAAO,KAAK,OAAO,GAC5B;AAAA,IACA,gBAAAA,KAACE,YAAA,EAAU,cAAW,WAAU,WAAU,8BACxC,0BAAAD,MAACG,gBAAA,EAAc,WAAU,gBACtB;AAAA,WAAK,YAAY,IAAI,CAAC,SAAS;AAC9B,cAAM,WAAW,KAAK,YAAY,kBAAkB,WAAW,KAAK,EAAE,CAAC;AACvE,cAAM,uBAAuB,kBAAkB,qBAAqB,KAAK;AAEzE,eACE,gBAAAJ,KAAC,QACC,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM,gBAAgB,KAAK,IAAI;AAAA,YAC/B,WAAW;AAAA,YACX,gBAAgB,MAAM,qBAAqB,KAAK,EAAE;AAAA,YAClD,gBAAgB;AAAA,YAChB,SAAS,MAAM,aAAa,KAAK,EAAE;AAAA,YACnC,QAAQ;AAAA,YACR,SAAS;AAAA,YAET,0BAAAC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAWK;AAAA,kBACT;AAAA,gBACF;AAAA,gBAEC;AAAA,6BAAW,gBAAAN,KAAC,YAAS,WAAU,mBAAkB,eAAY,QAAO,IAAK;AAAA,kBACzE,qBAAqB,KAAK,KAAK;AAAA,kBAChC,gBAAAA;AAAA,oBAACO;AAAA,oBAAA;AAAA,sBACC,WAAWD;AAAA,wBACT;AAAA,wBACA,uBAAuB,eAAe;AAAA,sBACxC;AAAA;AAAA,kBACF;AAAA;AAAA;AAAA,YACF;AAAA;AAAA,QACF,KAxBO,KAAK,EAyBd;AAAA,MAEJ,CAAC;AAAA,MACA,KAAK,UACJ,gBAAAN,KAAC,QACC,0BAAAC;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS;AAAA,UACT,WAAU;AAAA,UACX;AAAA;AAAA,YAEC,gBAAAD,KAACQ,aAAA,EAAW,WAAU,UAAS;AAAA;AAAA;AAAA,MACjC,GACF,IACE;AAAA,OACN,GACF;AAAA,IACA,gBAAAR,KAAC,SAAI,WAAU,4BACb,0BAAAA,KAAC,wBAAa,GAChB;AAAA,IACA,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,mBAAkB,cAAW,wBAAuB,SAAS,aAC3F,0BAAAA,KAACS,OAAA,EAAK,WAAU,WAAU,GAC5B;AAAA,KACF;AAEJ;AAEA,IAAO,4BAAQ;;;AC5Gf,SAAS,WAAAC,gBAAe;AACxB,SAAS,aAAAC,YAAW,SAAS,YAAAC,iBAAgB;AAC7C,SAAS,sBAAsB;AA8FzB,gBAAAC,MA0CsB,QAAAC,aA1CtB;AAtFN,IAAM,mBAAmB,CAAC,SAA0C,gBAA4C;AAC9G,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,aAAW,QAAQ,QAAQ,OAAO;AAChC,QAAI,KAAK,SAAS,aAAa;AAC7B,aAAO,KAAK;AAAA,IACd;AAEA,QAAI,KAAK,SAAS,SAAS;AACzB,iBAAW,SAAS,KAAK,OAAO;AAC9B,YAAI,MAAM,SAAS,aAAa;AAC9B,iBAAO,MAAM;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAQM;AACJ,QAAM,OAAO,qBAAqB;AAClC,QAAM,EAAE,YAAY,IAAI,eAAe;AACvC,QAAM,mBAAmB,oBAAoB,mBAAmB,SAAS,CAAC,GAAG;AAC7E,QAAM,CAAC,uBAAuB,wBAAwB,IAAIC,UAAgC,IAAI;AAC9F,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAS,CAAC;AAEpD,QAAM,eAAe;AAAA,IACnB,MACE;AAAA,MACE,SAAS,KAAK,CAAC,YAAY,QAAQ,OAAO,gBAAgB;AAAA,MAC1D;AAAA,IACF;AAAA,IACF,CAAC,UAAU,kBAAkB,WAAW;AAAA,EAC1C;AAEA,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,YAAY,CAAC,oBAAoB,0BAA0B,MAAM;AACpE;AAAA,IACF;AAEA,UAAM,sBAAsB,MAAM;AAChC,uBAAiB,sBAAsB,YAAY;AAAA,IACrD;AAEA,wBAAoB;AAEpB,QAAI,OAAO,mBAAmB,aAAa;AACzC;AAAA,IACF;AAEA,UAAM,iBAAiB,IAAI,eAAe,MAAM;AAC9C,0BAAoB;AAAA,IACtB,CAAC;AAED,mBAAe,QAAQ,qBAAqB;AAE5C,WAAO,MAAM;AACX,qBAAe,WAAW;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,uBAAuB,kBAAkB,QAAQ,CAAC;AAEtD,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,WAAWG,SAAQ,kCAAkC,WAAW,wBAAwB,qBAAqB;AAAA,MAC7G,gBAAgB,MAAM,OAAO,gBAAgB;AAAA,MAC7C,gBAAgB;AAAA,MAEhB;AAAA,wBAAAJ;AAAA,UAAC;AAAA;AAAA,YACC,WAAWI;AAAA,cACT,WAAW,gBAAgB;AAAA,cAC3B;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QACA,gBAAAJ;AAAA,UAAC;AAAA;AAAA,YACC,WAAWI;AAAA,cACT;AAAA,cACA,iBAAiB,CAAC,WAAW,KAAK;AAAA,YACpC;AAAA,YAEA,OAAO,EAAE,QAAQ,WAAW,gBAAgB,EAAE;AAAA,YAE9C,0BAAAJ,KAAC,mBAAgB,OAAM,MACrB,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAWI;AAAA,kBACT,WAAW,8BAA8B;AAAA,kBACzC;AAAA,gBACF;AAAA,gBAEC,mBAAS,IAAI,CAAC,YACb,gBAAAJ;AAAA,kBAAC;AAAA;AAAA,oBAEC,KAAK,QAAQ,OAAO,mBAAmB,2BAA2B;AAAA,oBAClE,WAAWI;AAAA,sBACT,QAAQ,OAAO,mBAAmB,gBAAgB;AAAA,sBAClD;AAAA,oBACF;AAAA,oBAEC,kBAAQ,MAAM,SAAS,KACtB,gBAAAJ,KAAC,QAAG,WAAU,cACX,kBAAQ,MAAM,IAAI,CAAC,UAAU;AAC5B,0BAAI,MAAM,cAAc,OAAO;AAC7B,+BAAO;AAAA,sBACT;AAEA,4BAAM,YAAY,KAAK,YAAY,kBAAkB,MAAM,MAAM,MAAM,EAAE,CAAC;AAE1E,6BACE,gBAAAC,MAAC,QAAkB,WAAU,yBAC1B;AAAA,8BAAM,OACL,gBAAAA;AAAA,0BAAC;AAAA;AAAA,4BACC,WAAWG;AAAA,8BACT;AAAA,8BACA,iBAAiB,MAAM,MAAM;AAAA,4BAC/B;AAAA,4BACA,MAAM,gBAAgB,MAAM,IAAI;AAAA,4BAE/B;AAAA,0CAAY,gBAAAJ,KAAC,aAAU,WAAU,mBAAkB,eAAY,QAAO,IAAK;AAAA,8BAC5E,gBAAAA,KAAC,UAAM,gBAAM,OAAM;AAAA;AAAA;AAAA,wBACrB,IAEA,gBAAAC,MAAC,UAAK,WAAU,qEACb;AAAA,sCAAY,gBAAAD,KAAC,aAAU,WAAU,mBAAkB,eAAY,QAAO,IAAK;AAAA,0BAC5E,gBAAAA,KAAC,UAAM,gBAAM,OAAM;AAAA,2BACrB;AAAA,wBAED,MAAM,SAAS,WAAW,MAAM,MAAM,SAAS,KAC9C,gBAAAA,KAAC,QAAG,WAAU,qDACX,gBAAM,MAAM,IAAI,CAAC,aAAa;AAC7B,gCAAM,eAAe,KAAK,YAAY,kBAAkB,SAAS,MAAM,SAAS,EAAE,CAAC;AAEnF,iCACE,gBAAAA,KAAC,QACE,mBAAS,OACR,gBAAAA;AAAA,4BAAC;AAAA;AAAA,8BACC,WAAWI;AAAA,gCACT;AAAA,gCACA,iBAAiB,SAAS,MAAM;AAAA,8BAClC;AAAA,8BACA,MAAM,gBAAgB,SAAS,IAAI;AAAA,8BACnC,SAAS;AAAA,8BAET,0BAAAH,MAAC,UAAK,WAAU,2BACb;AAAA,+CACC,gBAAAD,KAAC,gBAAa,WAAU,mBAAkB,eAAY,QAAO,IAC3D;AAAA,gCACJ,gBAAAA,KAAC,UAAM,+BAAqB,SAAS,KAAK,GAAE;AAAA,iCAC9C;AAAA;AAAA,0BACF,IAEA,gBAAAC,MAAC,UAAK,WAAU,2BACb;AAAA,2CACC,gBAAAD,KAAC,gBAAa,WAAU,mBAAkB,eAAY,QAAO,IAC3D;AAAA,4BACJ,gBAAAA,KAAC,UAAM,+BAAqB,SAAS,KAAK,GAAE;AAAA,6BAC9C,KAvBK,SAAS,EAyBlB;AAAA,wBAEJ,CAAC,GACH;AAAA,2BApDK,MAAM,EAsDf;AAAA,oBAEJ,CAAC,GACH;AAAA;AAAA,kBA1EG,QAAQ;AAAA,gBA4Ef,CACD;AAAA;AAAA,YACH,GACF;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF;AAEJ;;;AC1MA,SAAS,eAAAK,cAAa,aAAAC,YAAW,QAAQ,YAAAC,iBAAgB;AAGzD,IAAM,sBAAsB;AAC5B,IAAM,uBAAuB;AAE7B,IAAM,cAAc,CAAC,EAAE,iBAAiB,SAAS,MAAqE;AACpH,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAS,KAAK;AAC1D,QAAM,yBAAyB,OAAsB,IAAI;AACzD,QAAM,0BAA0B,OAAsB,IAAI;AAC1D,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,UAA6B,mBAAmB,SAAS,CAAC,GAAG,EAAE;AAE/G,QAAM,2BAA2BF,aAAY,MAAM;AACjD,QAAI,uBAAuB,YAAY,MAAM;AAC3C;AAAA,IACF;AAEA,WAAO,aAAa,uBAAuB,OAAO;AAClD,2BAAuB,UAAU;AAAA,EACnC,GAAG,CAAC,CAAC;AAEL,QAAM,4BAA4BA,aAAY,MAAM;AAClD,QAAI,wBAAwB,YAAY,MAAM;AAC5C;AAAA,IACF;AAEA,WAAO,aAAa,wBAAwB,OAAO;AACnD,4BAAwB,UAAU;AAAA,EACpC,GAAG,CAAC,CAAC;AAEL,QAAM,eAAe,CAAC,qBAA8B;AAClD,QAAI,qBAAqB,QAAW;AAClC,0BAAoB,gBAAgB;AAAA,IACtC;AAEA,6BAAyB;AACzB,8BAA0B;AAC1B,sBAAkB,IAAI;AAAA,EACxB;AAEA,QAAM,uBAAuB,CAAC,qBAA8B;AAC1D,QAAI,qBAAqB,QAAW;AAClC,0BAAoB,gBAAgB;AAAA,IACtC;AAEA,6BAAyB;AACzB,8BAA0B;AAE1B,QAAI,gBAAgB;AAClB,wBAAkB,IAAI;AACtB;AAAA,IACF;AAEA,2BAAuB,UAAU,OAAO,WAAW,MAAM;AACvD,wBAAkB,IAAI;AACtB,6BAAuB,UAAU;AAAA,IACnC,GAAG,mBAAmB;AAAA,EACxB;AAEA,QAAM,gBAAgB,MAAM;AAC1B,6BAAyB;AACzB,8BAA0B;AAC1B,sBAAkB,KAAK;AAAA,EACzB;AAEA,QAAM,wBAAwB,MAAM;AAClC,6BAAyB;AACzB,8BAA0B;AAC1B,4BAAwB,UAAU,OAAO,WAAW,MAAM;AACxD,wBAAkB,KAAK;AACvB,8BAAwB,UAAU;AAAA,IACpC,GAAG,oBAAoB;AAAA,EACzB;AAEA,EAAAC,WAAU,MAAM;AACd,WAAO,MAAM;AACX,+BAAyB;AACzB,gCAA0B;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,2BAA2B,wBAAwB,CAAC;AAExD,EAAAA,WAAU,MAAM;AACd,wBAAoB,mBAAmB,SAAS,CAAC,GAAG,EAAE;AAAA,EACxD,GAAG,CAAC,iBAAiB,QAAQ,CAAC;AAE9B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAO,sBAAQ;;;AZpEX,SAGM,OAAAE,MAHN,QAAAC,aAAA;AAfJ,IAAM,YAAY,MAAM;AACtB,QAAM,OAAO,qBAAqB;AAClC,QAAM,EAAE,aAAa,UAAU,IAAIC,gBAAe;AAClD,QAAM,gBAAgB,UAAU,aAAa;AAC7C,QAAM,WAAW,KAAK;AACtB,QAAM,gBAAgB,2BAA2B,MAAM,WAAW;AAClE,QAAM,EAAE,QAAQ,aAAa,IAAI,qBAAqB;AAEtD,QAAM,EAAE,eAAe,kBAAkB,gBAAgB,cAAc,sBAAsB,sBAAsB,IACjH,oBAAY;AAAA,IACV,iBAAiB,eAAe;AAAA,IAChC;AAAA,EACF,CAAC;AAEH,SACE,gBAAAD,MAAC,gBAAa,SAAS,eACrB;AAAA,oBAAAD,KAAC,mBACE,0BACC,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF,IAEA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF,GAEJ;AAAA,IACA,gBAAAA,KAAC,UAAO;AAAA,IACR,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,iBAAiB,eAAe;AAAA,QAChC;AAAA,QACA,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,QACT;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEA,IAAO,iBAAQ;AAEf,IAAM,eAAeG,IAAG;AAAA;AAAA;AAAA,IAGpB,CAAC,EAAE,QAAQ,MAAO,UAAU,aAAa,OAAQ;AAAA;;;AavErD,SAAS,aAAAC,YAAW,WAAAC,gBAAe;AAK5B,IAAM,mBAAmB,CAAC,EAAE,MAAM,MAAuC;AAC9E,QAAM,kBAAkB,yBAAyB,CAAC,UAAU,MAAM,eAAe;AACjF,QAAM,aAAa,OAAO,SAAS;AACnC,QAAM,YAAY,OAAO,QAAQ;AACjC,QAAM,yBAAyB,OAAO,qBAAqB;AAC3D,QAAM,gBAAgBC;AAAA,IACpB,OAAO,EAAE,OAAO,YAAY,MAAM,WAAW,mBAAmB,uBAAuB;AAAA,IACvF,CAAC,WAAW,wBAAwB,UAAU;AAAA,EAChD;AAEA,QAAM,2BAA2B,uBAAuB,iBAAiB,aAAa;AAEtF,EAAAC,WAAU,MAAM;AACd,yBAAqB,0BAA0B,aAAa;AAAA,EAC9D,GAAG,CAAC,0BAA0B,aAAa,CAAC;AAE5C,SAAO;AACT;;;AdGQ,gBAAAC,OACA,QAAAC,aADA;AAZR,IAAM,eAAe,uBAAuB;AAErC,IAAM,YAAY,CAAC,EAAE,UAAU,OAAO,MAAsB;AACjE,QAAM,EAAE,YAAY,IAAIC,gBAAe;AACvC,QAAM,cAAcA,gBAAe;AAEnC,QAAM,OAAO,yBAAyB,WAA8B;AACpE,QAAM,gBAAgB,gBAAgB;AAEtC,SACE,gBAAAF,MAAC,4BAAyB,OAAO,cAC/B,0BAAAC,MAAC,6BAA0B,MACzB;AAAA,oBAAAD,MAAC,oBAAiB,OAAO,KAAK,OAAO;AAAA,IACrC,gBAAAC,MAAC,SAAI,WAAU,8CACZ;AAAA,gBAAU,gBAAAD,MAAC,kBAAU;AAAA,MACtB,gBAAAA,MAAC,SAAI,WAAWG,SAAQ,gBAAgB,KAAK,OAAO,GAAI,UAAS;AAAA,OACnE;AAAA,KACF,GACF;AAEJ;;;Ae1ByB,SAGjB,UAHiB,OAAAC,OAGjB,QAAAC,aAHiB;AALlB,IAAM,eAAe,CAAC,EAAE,KAAK,MAAwC;AAC1E,QAAM,EAAE,gBAAgB,YAAY,WAAW,IAAI;AAEnD,SACE,gBAAAA,MAAA,YACG;AAAA,sBAAkB,gBAAAD,MAAC,UAAK,KAAI,oBAAmB,MAAM,gBAAgB;AAAA,IACrE,cAAc,gBAAAA,MAAC,UAAK,KAAI,QAAO,MAAK,iBAAgB,MAAM,YAAY;AAAA,IACtE,cACC,gBAAAC,MAAA,YACE;AAAA,sBAAAD,MAAC,UAAK,KAAI,iBAAgB,MAAK,gBAAe,MAAM,YAAY;AAAA,MAChE,gBAAAA,MAAC,UAAK,KAAI,QAAO,MAAK,gBAAe,MAAM,YAAY;AAAA,OACzD;AAAA,KAEJ;AAEJ;;;ACoBI,qBAAAE,WAEI,OAAAC,OAFJ,QAAAC,cAAA;AAlCJ,IAAM,iCAAiC,cAAc,uBAAuB;AAE5E,IAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMd,cAAc,qCAAqC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQpD,cAAc,iCAAiC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQhD,cAAc,iCAAiC,CAAC;AAAA;AAAA;AAIvD,IAAM,YAAY,CAAC,EAAE,KAAK,MAAwC;AACvE,QAAM,EAAE,oBAAoB,iBAAiB,IAAI;AACjD,QAAM,wBAAwB,oBAAoB,CAAC;AACnD,QAAM,gCAAgC,uBAAuB;AAE7D,SACE,gBAAAA,OAAAF,WAAA,EACG;AAAA,0BAAsB,IAAI,CAAC,SAC1B,gBAAAC,MAAC,UAAgB,KAAI,WAAU,MAAY,IAAG,QAAO,MAAK,cAAa,aAAY,eAAxE,IAAoF,CAChG;AAAA,IACA,gCAAgC,gBAAAA,MAAC,WAAM,yBAAyB,EAAE,QAAQ,oBAAoB,GAAG,IAAK;AAAA,IACtG,sBAAsB,CAAC,gCACtB,gBAAAA,MAAC,UAAK,KAAI,cAAa,MAAM,oBAAoB,IAC/C;AAAA,KACN;AAEJ;;;ACJI,gBAAAE,aAAA;AAvCJ,IAAM,0BAA0B,CAAC,UAAqC;AACpE,SAAO;AAAA,uBACc,KAAK,UAAU,yBAAyB,CAAC;AAAA,gCAChC,KAAK,UAAU,sBAAsB,CAAC;AAAA,mCACnC,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAAA;AAAA,aAE7D,KAAK,UAAU,MAAM,KAAK,CAAC;AAAA,YAC5B,KAAK,UAAU,MAAM,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BtC;AAEO,IAAM,iBAAiB,CAAC,EAAE,MAAM,MAA4C;AACjF,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,yBAAyB;AAAA,QACvB,QAAQ,wBAAwB,KAAK;AAAA,MACvC;AAAA;AAAA,EACF;AAEJ;;;ACvCI,qBAAAC,WACE,OAAAC,OADF,QAAAC,cAAA;AALG,IAAM,WAAW,MAAM;AAC5B,QAAM,OAAO,6BAA6B;AAC1C,QAAM,sBAAsB,KAAK,WAAW;AAE5C,SACE,gBAAAA,OAAAF,WAAA,EACE;AAAA,oBAAAC,MAAC,kBAAe,OAAO,KAAK,OAAO;AAAA,IACnC,gBAAAA,MAAC,gBAAa,MAAM,KAAK,MAAM;AAAA,IAC/B,gBAAAA,MAAC,aAAU,MAAM,KAAK,MAAM;AAAA,IAC3B,sBAAsB,gBAAAA,MAAC,UAAK,MAAK,UAAS,SAAQ,qBAAoB,IAAK;AAAA,KAC9E;AAEJ;;;ACjBA,OAAOE,SAAQ;AAIR,IAAM,iBAAiBA,IAAG;AAAA;AAAA;;;ACHjC,SAAS,eAAe;;;ACDxB,SAAS,WAAAC,gBAAe;AACxB,SAAS,aAAa,oBAAoB;AA0BlC,gBAAAC,OACA,QAAAC,cADA;AAdR,IAAM,iBAAiB,CAAC,EAAE,MAAM,WAAW,SAAS,MAA2B;AAC7E,QAAM,aAAa,cAAc;AAEjC,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,gBAAgB,KAAK,IAAI;AAAA,MAC/B,WAAWE;AAAA,QACT;AAAA,QACA,aAAa,cAAc;AAAA,QAC3B,YAAY;AAAA,MACd;AAAA,MACA,cAAY,GAAG,aAAa,aAAa,MAAM,KAAK,KAAK,KAAK;AAAA,MAE9D,0BAAAD,OAAC,SAAI,WAAU,uCACb;AAAA,wBAAAD,MAAC,OAAE,WAAU,2CAA2C,+BAAqB,KAAK,KAAK,GAAE;AAAA,QACzF,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAWC;AAAA,cACT;AAAA,cACA,aAAa,kBAAkB;AAAA,YACjC;AAAA,YAEC;AAAA,4BAAc,gBAAAF,MAAC,eAAY,WAAU,UAAS;AAAA,cAC/C,gBAAAA,MAAC,UAAM,uBAAa,aAAa,QAAO;AAAA,cACvC,CAAC,cAAc,gBAAAA,MAAC,gBAAa,WAAU,UAAS;AAAA;AAAA;AAAA,QACnD;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;AAOO,IAAM,iBAAiB,CAAC;AAAA,EAC7B,cAAc,mBAAmB;AAAA,EACjC,UAAU,eAAe;AAC3B,MAA2B;AACzB,QAAM,oBAAoB,qBAAqB,EAAE,OAAO;AACxD,QAAM,eAAe;AACrB,QAAM,WAAW;AAEjB,MAAI,CAAC,mBAAmB;AACtB,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,gBAAgB,CAAC,UAAU;AAC9B,WAAO;AAAA,EACT;AAEA,SACE,gBAAAA,MAAC,SAAI,WAAU,eAAc,cAAW,iBACtC,0BAAAC,OAAC,SAAI,WAAU,6BACZ;AAAA,oBAAgB,gBAAAD,MAAC,kBAAe,MAAM,cAAc,WAAU,YAAW;AAAA,IACzE,YAAY,gBAAAA,MAAC,kBAAe,UAAU,CAAC,cAAc,MAAM,UAAU,WAAU,QAAO;AAAA,KACzF,GACF;AAEJ;;;ACxEA,SAAS,KAAK,cAAc;AAC5B,SAAS,QAAAG,aAAY;AAWb,SACE,OAAAC,OADF,QAAAC,cAAA;AAND,IAAM,aAAaC,MAAK,MAAM;AACnC,QAAM,EAAE,MAAM,IAAI,qBAAqB;AAEvC,SACE,gBAAAD,OAAC,YAAO,WAAU,6DAChB;AAAA,oBAAAA,OAAC,SAAI,WAAU,iCACb;AAAA,sBAAAA,OAAC,OAAE,MAAK,QAAO,WAAU,mCACvB;AAAA,wBAAAD,MAAC,UAAO,WAAU,UAAS;AAAA,QAAE;AAAA,SAC/B;AAAA,MACA,gBAAAC,OAAC,OAAE,MAAK,QAAO,WAAU,mCACvB;AAAA,wBAAAD,MAAC,OAAI,WAAU,UAAS;AAAA,QAAE;AAAA,SAC5B;AAAA,OACF;AAAA,IACA,gBAAAC,OAAC,SAAI,WAAU,qCACb;AAAA,sBAAAD,MAAC,uBAAY;AAAA,MACb,gBAAAA,MAAC,SAAI,WAAU,2BAA2B,mBAAS,gBAAAA,MAAC,SAAM,OAAc,QAAM,MAAC,GAAG;AAAA,OACpF;AAAA,KACF;AAEJ,CAAC;;;ACzBD,SAAS,aAAAG,kBAAiB;AAE1B,IAAM,WAAW,OAAO,UAAkB;AACxC,MAAI;AACF,UAAM,UAAU,UAAU,UAAU,KAAK;AACzC;AAAA,EACF,QAAQ;AACN,UAAM,WAAW,SAAS,cAAc,UAAU;AAClD,aAAS,QAAQ;AACjB,aAAS,aAAa,YAAY,MAAM;AACxC,aAAS,MAAM,WAAW;AAC1B,aAAS,MAAM,UAAU;AACzB,aAAS,KAAK,YAAY,QAAQ;AAClC,aAAS,OAAO;AAChB,aAAS,YAAY,MAAM;AAC3B,aAAS,KAAK,YAAY,QAAQ;AAAA,EACpC;AACF;AAEA,IAAM,iBAAiB,CAAC,WACtB,kBAAkB,UAAU,OAAO,QAAQ,2BAA2B,IAAI;AAErE,IAAM,kBAAkB,MAAM;AACnC,EAAAA,WAAU,MAAM;AACd,UAAM,cAAc,CAAC,UAAsB;AACzC,UAAI,MAAM,oBAAoB,MAAM,WAAW,GAAG;AAChD;AAAA,MACF;AAEA,UAAI,MAAM,WAAW,MAAM,WAAW,MAAM,YAAY,MAAM,QAAQ;AACpE;AAAA,MACF;AAEA,YAAM,OAAO,eAAe,MAAM,MAAM;AACxC,UAAI,CAAC,MAAM;AACT;AAAA,MACF;AAEA,YAAM,OAAO,KAAK,aAAa,MAAM;AACrC,UAAI,CAAC,MAAM;AACT;AAAA,MACF;AAEA,YAAM,UAAU,IAAI,IAAI,MAAM,OAAO,SAAS,IAAI;AAClD,UAAI,QAAQ,QAAQ,OAAO,SAAS,SAAS,QAAQ,MAAM;AACzD,gBAAQ,aAAa,MAAM,IAAI,QAAQ,IAAI;AAAA,MAC7C;AAEA,WAAK,SAAS,QAAQ,IAAI;AAAA,IAC5B;AAEA,aAAS,iBAAiB,SAAS,WAAW;AAE9C,WAAO,MAAM;AACX,eAAS,oBAAoB,SAAS,WAAW;AAAA,IACnD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;;;AC3DA,SAAS,WAAAC,gBAAe;AAGxB,SAAS,QAAAC,OAAM,aAAAC,YAAW,UAAAC,eAAc;AACxC,SAAS,kBAAAC,uBAAsB;;;ACFxB,IAAM,qBAAqB,CAAC,OAA8B,gBAAiC;AAChG,SAAO,MAAM,KAAK,CAAC,SAAS;AAC1B,QAAI,KAAK,SAAS,QAAQ;AACxB,aAAO,KAAK,SAAS;AAAA,IACvB;AAEA,WAAO,KAAK,SAAS,eAAe,mBAAmB,KAAK,OAAO,WAAW;AAAA,EAChF,CAAC;AACH;AAEO,IAAM,gBAAgB,CAAC,OAA8B,eAAuB,mBAAmB,OAAO,UAAU;AAEhH,IAAM,qBAAqB,CAAC,UAAiC,MAAM,OAAO,CAAC,SAAS,KAAK,SAAS;AAElG,IAAM,uBAAuB,CAAC,UAAgC;AACnE,QAAM,eAAe,mBAAmB,MAAM,KAAK;AAEnD,MAAI,CAAC,MAAM,MAAM;AACf,WAAO;AAAA,EACT;AAEA,SAAO,aAAa,OAAO,CAAC,SAAsC;AAChE,QAAI,KAAK,SAAS,QAAQ;AACxB,aAAO;AAAA,IACT;AAEA,WAAO,KAAK,SAAS,MAAM;AAAA,EAC7B,CAAC;AACH;AAEO,IAAM,eAAe,CAAC,UAA+C,MAAM,QAAQ;;;ADgClF,SA+GK,YAAAC,WA9GK,OAAAC,OADV,QAAAC,cAAA;AAvCR,IAAM,qBAAqB,CAAC,QAAgB,iBAA0B,wBAAiC;AACrG,QAAM,aAAa,oBAAoB,CAAC,UAAU,MAAM,UAAU,MAAM,CAAC;AACzE,QAAM,EAAE,YAAY,IAAI,sBAAsB;AAC9C,QAAM,SAAS,eAAe,SAAY,mBAAmB,sBAAsB,cAAc;AAEjG,EAAAC,WAAU,MAAM;AACd,QAAI,qBAAqB;AACvB,kBAAY,QAAQ,IAAI;AACxB;AAAA,IACF;AAEA,QAAI,eAAe,UAAa,iBAAiB;AAC/C,kBAAY,QAAQ,IAAI;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,qBAAqB,iBAAiB,QAAQ,aAAa,UAAU,CAAC;AAE1E,SAAO;AAAA,IACL;AAAA,IACA,WAAW,CAAC,aAAsB,YAAY,QAAQ,QAAQ;AAAA,EAChE;AACF;AASA,IAAM,kBAAkB,CAAC,EAAE,OAAO,MAAM,aAAa,MAAM,KAAK,MAA4B;AAC1F,SACE,gBAAAF,MAAC,QAAG,WAAU,gBACZ,0BAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,gBAAgB,IAAI;AAAA,MAC1B,WAAWG;AAAA,QACT;AAAA,QACA,SAAS,eAAe;AAAA,MAC1B;AAAA,MAEA,0BAAAF,OAAC,UAAK,WAAU,2BACb;AAAA,eAAO,gBAAAD,MAAC,QAAK,WAAU,mBAAkB,eAAY,QAAO,IAAK;AAAA,QAClE,gBAAAA,MAAC,UAAM,+BAAqB,OAAO,EAAE,eAAe,WAAW,CAAC,GAAE;AAAA,SACpE;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,IAAM,sBAAsB,CAAC,EAAE,OAAO,MAAM,KAAK,MAA4C;AAC3F,SACE,gBAAAA,MAAC,QAAG,WAAU,oHACZ,0BAAAC,OAAC,UAAK,WAAU,iCACb;AAAA,WAAO,gBAAAD,MAAC,QAAK,WAAU,mBAAkB,eAAY,QAAO,IAAK;AAAA,IAClE,gBAAAA,MAAC,UAAM,+BAAqB,OAAO,EAAE,eAAe,WAAW,CAAC,GAAE;AAAA,KACpE,GACF;AAEJ;AAUA,IAAM,oBAAoB,CAAC,EAAE,OAAO,MAAM,UAAU,kBAAkB,OAAO,MAAM,KAAK,MAA8B;AACpH,QAAM,UACJ,gBAAAC,OAAC,UAAK,WAAU,2BACb;AAAA,WAAO,gBAAAD,MAAC,QAAK,WAAU,mBAAkB,eAAY,QAAO,IAAK;AAAA,IAClE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAWG;AAAA,UACT,kBAAkB,gBAAgB;AAAA,UAClC,YAAY,mBAAmB;AAAA,QACjC;AAAA,QAEC,kBAAQ,qBAAqB,OAAO,EAAE,eAAe,WAAW,CAAC,IAAI;AAAA;AAAA,IACxE;AAAA,KACF;AAGF,MAAI,mBAAmB,MAAM;AAC3B,WACE,gBAAAH;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,gBAAgB,IAAI;AAAA,QAC1B,WAAWG;AAAA,UACT;AAAA,UACA,YAAY;AAAA,QACd;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,EAEJ;AAEA,SAAO,gBAAAH,MAAC,UAAK,WAAU,iEAAiE,mBAAQ;AAClG;AAEA,IAAM,qBAAqB,CACzB,OACA,aACA,gBACgB;AAChB,SAAO,MAAM,IAAI,CAAC,SAAS;AACzB,QAAI,KAAK,SAAS,QAAQ;AACxB,aACE,gBAAAA;AAAA,QAAC;AAAA;AAAA,UAEC,OAAO,KAAK;AAAA,UACZ,MAAM,KAAK;AAAA,UACX;AAAA,UACA,MAAM,YAAY,kBAAkB,QAAQ,KAAK,EAAE,CAAC;AAAA;AAAA,QAJ/C,KAAK;AAAA,MAKZ;AAAA,IAEJ;AAEA,WAAO,gBAAAA,MAAC,sBAAiC,OAAO,MAAM,aAA0B,eAAhD,KAAK,EAAqE;AAAA,EAC5G,CAAC;AACH;AAQA,IAAM,kBAAkB,CAAC,EAAE,OAAO,aAAa,YAAY,MAA4B;AACrF,QAAM,eAAe,mBAAmB,KAAK;AAE7C,SAAO,gBAAAA,MAAC,QAAG,WAAU,mBAAmB,6BAAmB,cAAc,aAAa,WAAW,GAAE;AACrG;AAQA,IAAM,qBAAqB,CAAC,EAAE,OAAO,aAAa,YAAY,MAA+B;AAC3F,QAAM,YAAY,aAAa,KAAK;AACpC,QAAM,eAAe,qBAAqB,KAAK;AAC/C,QAAM,gBAAgB,MAAM,gBAAgB;AAC5C,QAAM,kBAAkB,MAAM,aAAa,iBAAiB;AAC5D,QAAM,sBAAsB,cAAc,eAAe,cAAc,MAAM,OAAO,WAAW;AAC/F,QAAM,EAAE,QAAQ,UAAU,IAAI,mBAAmB,SAAS,MAAM,EAAE,IAAI,iBAAiB,mBAAmB;AAC1G,QAAM,YAAY,YAAY,kBAAkB,SAAS,MAAM,EAAE,CAAC;AAElE,MAAI,CAAC,eAAe;AAClB,QAAI,CAAC,MAAM,OAAO;AAChB,aAAO,gBAAAA,MAAAD,WAAA,EAAG,6BAAmB,cAAc,aAAa,WAAW,GAAE;AAAA,IACvE;AAEA,WACE,gBAAAE,OAAAF,WAAA,EACE;AAAA,sBAAAC,MAAC,uBAAoB,OAAO,MAAM,OAAO,MAAM,WAAW;AAAA,MACzD,mBAAmB,cAAc,aAAa,WAAW;AAAA,OAC5D;AAAA,EAEJ;AAEA,SACE,gBAAAA,MAAC,QACC,0BAAAC;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN,UAAU,CAAC,UAAU;AACnB,kBAAU,MAAM,cAAc,IAAI;AAAA,MACpC;AAAA,MAEA;AAAA,wBAAAD,MAAC,aAAQ,WAAU,2CACjB,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,MAAM;AAAA,YACb,MAAM,aAAa;AAAA,YACnB,UAAU;AAAA,YACV,iBAAiB,QAAQ,SAAS;AAAA,YAClC,MAAM;AAAA;AAAA,QACR,GACF;AAAA,QACC,aAAa,SAAS,IACrB,gBAAAA,MAAC,mBAAgB,OAAO,cAAc,aAA0B,aAA0B,IACxF;AAAA;AAAA;AAAA,EACN,GACF;AAEJ;AAQA,IAAM,sBAAsB,CAAC,EAAE,SAAS,aAAa,gBAAgB,MAAgC;AACnG,QAAM,OAAO,qBAAqB;AAClC,QAAM,cAAc,KAAK,YAAY,kBAAkB,WAAW,QAAQ,EAAE,CAAC;AAC7E,QAAM,uBAAuB,QAAQ,OAAO,mBAAmB,mBAAmB,QAAQ,OAAO,WAAW;AAC5G,QAAM,EAAE,QAAQ,UAAU,IAAI;AAAA,IAC5B,WAAW,QAAQ,EAAE;AAAA,IACrB,QAAQ,OAAO;AAAA,IACf;AAAA,EACF;AAEA,SACE,gBAAAA,MAAC,QAAG,WAAU,QACZ,0BAAAC;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN,UAAU,CAAC,UAAU;AACnB,kBAAU,MAAM,cAAc,IAAI;AAAA,MACpC;AAAA,MAEA;AAAA,wBAAAD,MAAC,aAAQ,WAAU,2CACjB,0BAAAA,MAAC,qBAAkB,OAAO,QAAQ,OAAO,UAAU,sBAAsB,MAAM,aAAa,GAC9F;AAAA,QACA,gBAAAA,MAAC,mBAAgB,OAAO,QAAQ,OAAO,aAA0B,aAAa,KAAK,aAAa;AAAA;AAAA;AAAA,EAClG,GACF;AAEJ;AAOO,IAAM,UAAUI;AAAA,EACrB,CAAC,EAAE,aAAa,kBAAkB,IAAI,iBAAiB,sBAAsB,GAAG,MAAoB;AAClG,UAAM,qBAAqBC,QAA8B,IAAI;AAC7D,UAAM,EAAE,YAAY,IAAIC,gBAAe;AACvC,UAAM,cAAc,mBAAmB;AACvC,UAAM,OAAO,qBAAqB;AAClC,UAAM,kBAAkB,uBAAuB,2BAA2B,MAAM,WAAW,GAAG,MAAM;AACpG,UAAM,EAAE,gBAAgB,IAAI;AAE5B,WACE,gBAAAN,MAAC,WAAM,WAAU,qCACf,0BAAAC,OAAC,SAAI,WAAU,uBACb;AAAA,sBAAAD,MAAC,SAAI,WAAU,sHAAqH;AAAA,MACpI,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,WAAU;AAAA,UAEV,0BAAAA,MAAC,QAAG,WAAWG,SAAQ,sDAAsD,GAC1E,0BAAgB,IAAI,CAAC,YACpB,gBAAAH;AAAA,YAAC;AAAA;AAAA,cAEC;AAAA,cACA;AAAA,cACA;AAAA;AAAA,YAHK,QAAQ;AAAA,UAIf,CACD,GACH;AAAA;AAAA,MACF;AAAA,OACF,GACF;AAAA,EAEJ;AACF;;;AEzRA,OAAOO,OAAM,WAAAC,gBAAe;AAC5B,SAAS,OAAO,2BAA2B;AA4B3B,qBAAAC,WAEI,OAAAC,OADF,QAAAC,cADF;AAhBT,IAAM,kBAAkB,CAAC;AAAA,EAC9B,UAAU,eAAe,CAAC;AAAA,EAC1B,iBAAiB,sBAAsB;AAAA,EACvC,kBAAkB;AAAA,EAClB,qBAAqB,MAAM;AAC7B,MAA4B;AAC1B,QAAM,EAAE,SAAS,IAAI,qBAAqB;AAC1C,QAAM,oBAAoB;AAC1B,QAAM,2BAA2B;AAEjC,SACE,gBAAAD,MAAC,WAAM,WAAWE,SAAQ,2BAA2B,SAAS,QAAQ,0BAA0B,GAC9F,0BAAAF,MAAC,SAAI,WAAU,iBACb,0BAAAC,OAAC,SAAI,WAAU,4FACZ;AAAA,+BACG,kBAAkB,SAAS,KACzB,gBAAAA,OAAAF,WAAA,EACE;AAAA,sBAAAE,OAAC,OAAE,WAAU,gGACX;AAAA,wBAAAD,MAAC,uBAAoB,WAAU,UAAS;AAAA,QAAE;AAAA,SAE5C;AAAA,MACA,gBAAAA,MAAC,SAAI,cAAW,gBAAe,WAAU,SACvC,0BAAAA,MAAC,QACE,4BAAkB,IAAI,CAAC,YACtB,gBAAAA,MAAC,QACC,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,IAAI,QAAQ,EAAE;AAAA,UACpB,gBAAc,oBAAoB,QAAQ,KAAK,aAAa;AAAA,UAC5D,SAAS,MAAM,mBAAmB,QAAQ,EAAE;AAAA,UAC5C,WAAWE;AAAA,YACT;AAAA,YACA,QAAQ,QAAQ,IAAI,SAAS;AAAA,YAC7B,oBAAoB,QAAQ,KACxB,8DACA;AAAA,UACN;AAAA,UAEC,kBAAQ;AAAA;AAAA,MACX,KAdO,QAAQ,EAejB,CACD,GACH,GACF;AAAA,OACF,IAEF;AAAA,IACJ,gBAAAF,MAAC,SAAM,UAAoB;AAAA,KAC7B,GACF,GACF;AAEJ;AAEA,IAAM,QAAQ,CAAC,EAAE,SAAS,MAAgD;AACxE,MAAI,SAAS,QAAQ,WAAW,KAAK,SAAS,KAAK,WAAW,GAAG;AAC/D,WAAO;AAAA,EACT;AAEA,SACE,gBAAAC,OAAC,WACC;AAAA,oBAAAA,OAAC,OAAE,WAAU,gGACX;AAAA,sBAAAD,MAAC,SAAM,WAAU,UAAS;AAAA,MAAE;AAAA,OAE9B;AAAA,IACA,gBAAAC,OAAC,QAAG,WAAU,yEACX;AAAA,eAAS,QAAQ,IAAI,CAAC,YACrB,gBAAAD,MAAC,aAA6B,WAAU,iBACtC,0BAAAA,MAAC,aAAU,MAAM,QAAQ,MAAM,OAAO,QAAQ,MAC5C,0BAAAA,MAAC,eAAY,SAAkB,GACjC,KAHc,QAAQ,IAIxB,CACD;AAAA,MACA,SAAS,KAAK,IAAI,CAAC,YAClB,gBAAAA,MAAC,aACC,0BAAAA,MAAC,aAAU,MAAM,QAAQ,MAAM,OAAO,QAAQ,MAC5C,0BAAAA,MAAC,eAAY,SAAkB,GACjC,KAHc,QAAQ,IAIxB,CACD;AAAA,OACH;AAAA,KACF;AAEJ;AAEA,IAAM,cAAc,CAAC;AAAA,EACnB;AACF,MAEM;AACJ,SACE,gBAAAC,OAAAF,WAAA,EACE;AAAA,oBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,KAAK,QAAQ;AAAA,QACb,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,KAAK,QAAQ;AAAA,QACb,WAAWE,SAAQ,SAAS,QAAQ,WAAW,gBAAgB,aAAa;AAAA;AAAA,IAC9E;AAAA,IACC,QAAQ,WACP,gBAAAF,MAAC,SAAM,KAAK,QAAQ,UAAU,OAAO,KAAK,QAAQ,KAAK,KAAK,QAAQ,SAAS,WAAU,qBAAoB,IACzG;AAAA,KACN;AAEJ;AAEA,IAAM,YAAYG,IAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYrB,IAAM,YAAYA,IAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQrB,IAAM,QAAQA,IAAG;AAAA;AAAA;AAAA;AAAA;;;AC1IjB,OAAOC,SAAQ;AACf,SAAS,mBAAAC,wBAAuB;AAChC,SAA6C,aAAa;;;ACF1D,SAAS,aAAa,qBAAqB;AAC3C,SAAS,eAAAC,oBAAmB;AA0DpB,gBAAAC,OAGI,QAAAC,cAHJ;AA/CR,IAAM,oBAAoB,CAAC,UAA4B;AACrD,SAAO,MAAM,OAAO,CAAC,MAAM,UAAU,UAAU,KAAK,MAAM,QAAQ,CAAC,GAAG,UAAU,KAAK,KAAK;AAC5F;AAEA,IAAM,wBAAwB,CAAC,OAA8B,gBAAiD;AAC5G,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,SAAS,QAAQ;AACxB,UAAI,KAAK,SAAS,aAAa;AAC7B,eAAO,CAAC,EAAE,IAAI,KAAK,IAAI,OAAO,KAAK,SAAS,CAAC;AAAA,MAC/C;AAEA;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,aAAa;AAC7B,aAAO,KAAK,QAAQ,CAAC,EAAE,IAAI,KAAK,IAAI,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC;AAAA,IAC9D;AAEA,UAAM,oBAAoB,sBAAsB,KAAK,OAAO,WAAW;AAEvE,QAAI,CAAC,mBAAmB;AACtB;AAAA,IACF;AAEA,WAAO;AAAA,MACL,KAAK,QAAQ,CAAC,EAAE,IAAI,KAAK,IAAI,OAAO,KAAK,MAAM,GAAG,GAAG,iBAAiB,IAAI;AAAA,IAC5E;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,2BAA2B,CAAC,EAAE,YAAY,MAA+B;AAC7E,QAAM,OAAO,qBAAqB;AAClC,QAAM,gBAAgB,2BAA2B,MAAM,WAAW;AAClE,QAAM,kBAAkB,kBAAkB;AAAA,IACxC,GAAI,gBAAgB,CAAC,EAAE,IAAI,cAAc,IAAI,OAAO,cAAc,SAAS,CAAC,IAAI,CAAC;AAAA,IACjF,GAAI,gBAAiB,sBAAsB,cAAc,OAAO,WAAW,KAAK,CAAC,IAAK,CAAC;AAAA,EACzF,CAAC;AAED,QAAM,cAAcC,aAAY,MAAM;AACpC,UAAM,wBAAwB;AAAA,EAChC,GAAG,CAAC,CAAC;AAEL,SACE,gBAAAF,MAAC,YAAO,WAAU,qDAAoD,MAAK,UAAS,SAAS,aAC3F,0BAAAC,OAAC,UAAK,WAAU,6DACd;AAAA,oBAAAD,MAAC,eAAY,WAAU,gCAA+B;AAAA,IACtD,gBAAAA,MAAC,UAAK,WAAU,qCACb,0BAAgB,IAAI,CAAC,MAAM,UAC1B,gBAAAC,OAAC,UAAmB,WAAU,YAC3B;AAAA,cAAQ,IAAI,gBAAAD,MAAC,iBAAc,WAAU,0CAAyC,IAAK;AAAA,MACpF,gBAAAA,MAAC,UAAK,WAAW,UAAU,IAAI,2BAA2B,oBACvD,+BAAqB,KAAK,OAAO,EAAE,eAAe,WAAW,CAAC,GACjE;AAAA,SAJS,KAAK,EAKhB,CACD,GACH;AAAA,KACF,GACF;AAEJ;AAEA,IAAO,mCAAQ;;;AD7CX,qBAAAG,WACE,OAAAC,OAWM,QAAAC,cAZR;AAfJ,IAAM,wBAAwB,CAAC;AAAA,EAC7B,WAAW,CAAC;AAAA,EACZ,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ;AAAA,EACA,kBAAkB;AAAA,EAClB,qBAAqB,MAAM;AAC7B,MAA4B;AAC1B,QAAM,iBAAiB;AACvB,QAAM,WAAW,MAAM;AACvB,QAAM,UAAU,GAAG,QAAQ;AAC3B,QAAM,gBACJ,mBAAmB,SAAS,KAAK,CAAC,YAAY,QAAQ,OAAO,eAAe,IAAI,kBAAkB;AAEpG,SACE,gBAAAA,OAAAF,WAAA,EACE;AAAA,oBAAAC,MAAC,SAAI,WAAU,kBAAiB;AAAA,IAChC,gBAAAA,MAAC,aACC,0BAAAC,OAAC,kBACC;AAAA,sBAAAD,MAAC,oCAAyB,aAA0B;AAAA,MACpD,gBAAAC,OAAC,WAAM,WAAU,mCAAkC,SAAS,UAC1D;AAAA,wBAAAD,MAAC,UAAK,IAAI,SAAS,WAAU,WAC1B,qBACH;AAAA,QACA,gBAAAA,MAAC,UAAK,WAAU,cAAa,eAAY,QACvC,0BAAAA,MAACE,kBAAA,EAAgB,WAAU,UAAS,GACtC;AAAA,QACA,gBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,mBAAiB;AAAA,YACjB,OAAO,iBAAiB;AAAA,YACxB,UAAU,CAAC,MAAM;AACf,oBAAM,QAAQ,EAAE,OAAO;AACvB,kBAAI,UAAU,gBAAgB;AAC5B,mCAAmB,EAAE;AACrB,uBAAO,QAAQ,aAAa,MAAM,IAAI,GAAG,OAAO,SAAS,QAAQ,GAAG,OAAO,SAAS,MAAM,EAAE;AAC5F,uBAAO,SAAS,EAAE,KAAK,GAAG,UAAU,OAAO,CAAC;AAC5C;AAAA,cACF;AAEA,iCAAmB,KAAK;AACxB,qBAAO,SAAS,OAAO,mBAAmB,KAAK;AAAA,YACjD;AAAA,YAEA;AAAA,8BAAAD,MAAC,YAAO,OAAO,gBAAiB,qBAAU;AAAA,cACzC,mBACC,SAAS,IAAI,CAAC,YACZ,gBAAAA,MAAC,YAAwB,OAAO,QAAQ,IACrC,kBAAQ,SADE,QAAQ,EAErB,CACD;AAAA;AAAA;AAAA,QACL;AAAA,SACF;AAAA,OACF,GACF;AAAA,KACF;AAEJ;AAEA,IAAO,gCAAQ;AAEf,IAAM,YAAYG,IAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUrB,IAAM,iBAAiBA,IAAG;AAAA;AAAA;AAAA;AAAA;;;AErF1B,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;AAIpC,IAAM,iBAAiB,MAAM;AAC3B,MAAI;AACF,WAAO,mBAAmB,OAAO,SAAS,IAAI;AAAA,EAChD,QAAQ;AACN,WAAO,OAAO,SAAS;AAAA,EACzB;AACF;AAEA,IAAM,qBAAqB,MAAM;AAC/B,QAAM,OAAO,SAAS,cAAc,oBAAoB;AACxD,MAAI,EAAE,gBAAgB,cAAc;AAClC,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,MAAM,KAAK,KAAK,iBAAiB,YAAY,CAAC,EAAE;AAAA,IACrD,CAAC,YAA2C,mBAAmB;AAAA,EACjE;AACF;AAEA,IAAM,mBAAmB,CAAC,MAAoB,UAAwB;AACpE,MAAI,KAAK,WAAW,MAAM,QAAQ;AAChC,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,MAAM,CAAC,SAAS,UAAU;AACpC,UAAM,QAAQ,MAAM,KAAK;AACzB,WACE,UAAU,UAAa,QAAQ,UAAU,MAAM,SAAS,QAAQ,OAAO,MAAM,MAAM,QAAQ,UAAU,MAAM;AAAA,EAE/G,CAAC;AACH;AAEA,IAAM,sBAAsB,CAAC,mBAA2D;AACtF,QAAM,OAAO,SAAS,cAAc,oBAAoB;AACxD,MAAI,EAAE,gBAAgB,cAAc;AAClC;AAAA,EACF;AAEA,QAAM,UAAU,qBAAqB;AACrC,QAAM,eAAe,MAAM,KAAK,KAAK,iBAAiB,YAAY,CAAC,EAChE,IAAI,CAAC,YAAY;AAChB,UAAM,QAAQ,sBAAsB,QAAQ,eAAe,EAAE;AAC7D,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAEA,YAAQ,UAAU,IAAI,cAAc;AACpC,YAAQ,UAAU,IAAI,iBAAiB;AAEvC,UAAM,KAAK,QAAQ,MAAM,QAAQ,KAAK;AACtC,QAAI,CAAC,QAAQ,IAAI;AACf,cAAQ,KAAK;AAAA,IACf;AAEA,WAAO;AAAA,MACL,OAAO,OAAO,QAAQ,QAAQ,MAAM,CAAC,CAAC;AAAA,MACtC;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC,EACA,OAAO,CAAC,YAAmC,YAAY,IAAI;AAE9D,iBAAe,CAAC,oBAAoB;AAClC,QAAI,iBAAiB,iBAAiB,YAAY,GAAG;AACnD,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,CAAC;AACH;AAEA,IAAM,gCAAgC,CAAC,uBAAgD;AACrF,QAAM,kBAAkB,mBAAmB;AAC3C,MAAI,gBAAgB,WAAW,GAAG;AAChC;AAAA,EACF;AAEA,QAAM,mBAAmB;AACzB,MAAI,sBAAsB;AAE1B,aAAW,WAAW,iBAAiB;AACrC,QAAI,CAAC,QAAQ,IAAI;AACf;AAAA,IACF;AAEA,QAAI,QAAQ,sBAAsB,EAAE,OAAO,kBAAkB;AAC3D,4BAAsB,QAAQ;AAC9B;AAAA,IACF;AAEA;AAAA,EACF;AAEA,QAAM,cAAc,gBAAgB,GAAG,EAAE;AACzC,MAAI,aAAa,MAAM,OAAO,cAAc,OAAO,WAAW,SAAS,gBAAgB,eAAe,GAAG;AACvG,0BAAsB,YAAY;AAAA,EACpC;AAEA,qBAAmB,mBAAmB;AACxC;AAYO,IAAM,0BAA0B,CAAC;AAAA,EACtC,UAAU,gBAAgB,CAAC;AAC7B,MAAmE;AACjE,QAAM,CAAC,iBAAiB,kBAAkB,IAAIC,UAAS,EAAE;AACzD,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAuB,aAAa;AAC1E,QAAM,oBAAoB,YAAY,SAAS,IAAI,cAAc;AAEjE,EAAAC,WAAU,MAAM;AACd,QAAI,cAAc;AAElB,UAAM,oBAAoB,MAAM;AAC9B,UAAI,aAAa;AACf;AAAA,MACF;AAEA,oBAAc,OAAO,sBAAsB,MAAM;AAC/C,sBAAc;AACd,sCAA8B,kBAAkB;AAAA,MAClD,CAAC;AAAA,IACH;AAEA,UAAM,aAAa,MAAM;AACvB,YAAM,cAAc,eAAe,EAAE,QAAQ,MAAM,EAAE;AACrD,UAAI,gBAAgB,IAAI;AACtB,2BAAmB,WAAW;AAC9B;AAAA,MACF;AAEA,wBAAkB;AAAA,IACpB;AAEA,eAAW;AACX,mBAAe,MAAM;AACnB,0BAAoB,cAAc;AAClC,wBAAkB;AAAA,IACpB,CAAC;AAED,WAAO,iBAAiB,cAAc,UAAU;AAChD,WAAO,iBAAiB,UAAU,mBAAmB,EAAE,SAAS,KAAK,CAAC;AACtE,WAAO,iBAAiB,UAAU,iBAAiB;AAEnD,WAAO,MAAM;AACX,UAAI,aAAa;AACf,eAAO,qBAAqB,WAAW;AAAA,MACzC;AAEA,aAAO,oBAAoB,cAAc,UAAU;AACnD,aAAO,oBAAoB,UAAU,iBAAiB;AACtD,aAAO,oBAAoB,UAAU,iBAAiB;AAAA,IACxD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,EAAAA,WAAU,MAAM;AACd,QAAI,OAAO,WAAW,aAAa;AACjC;AAAA,IACF;AAEA,mBAAe,CAAC,oBAAoB;AAClC,UAAI,iBAAiB,iBAAiB,aAAa,GAAG;AACpD,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT,CAAC;AACD,uBAAmB,EAAE;AAErB,mBAAe,MAAM;AACnB,0BAAoB,cAAc;AAClC,oCAA8B,kBAAkB;AAAA,IAClD,CAAC;AAAA,EACH,GAAG,CAAC,aAAa,CAAC;AAElB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AT1KI,qBAAAC,WACE,OAAAC,OAKI,QAAAC,cANN;AAPG,IAAM,aAAa,CAAC,EAAE,SAAS,MAAuB;AAC3D,QAAM,OAAO,QAAQ;AACrB,QAAM,EAAE,iBAAiB,mBAAmB,mBAAmB,IAAI,wBAAwB;AAAA,IACzF,UAAU,KAAK;AAAA,EACjB,CAAC;AAED,SACE,gBAAAA,OAAAF,WAAA,EACE;AAAA,oBAAAC,MAAC,mBAAgB;AAAA,IACjB,gBAAAA,MAAC,SAAI,WAAU,sIAAqI;AAAA,IACpJ,gBAAAA,MAAC,mBACC,0BAAAC,OAAC,SAAI,WAAU,kBACb;AAAA,sBAAAD,MAAC,WAAQ,aAAa,KAAK,KAAK,MAAM,iBAAiB,KAAK,KAAK,WAAW;AAAA,MAC5E,gBAAAC,OAAC,UAAK,WAAU,oCACd;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,UAAU;AAAA,YACV,iBAAiB,KAAK,KAAK,mBAAmB,kBAAkB,SAAS;AAAA,YACzE,WAAW,KAAK,KAAK;AAAA,YACrB,aAAa,KAAK,KAAK;AAAA,YACvB;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QACA,gBAAAA,MAAC,SAAI,WAAU,iBAAiB,UAAS;AAAA,QACzC,gBAAAA,MAAC,kBAAe,cAAc,KAAK,cAAc,UAAU,KAAK,UAAU;AAAA,QAC1E,gBAAAA,MAAC,cAAW;AAAA,SACd;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,UAAU;AAAA,UACV,iBAAiB,KAAK,KAAK;AAAA,UAC3B;AAAA,UACA;AAAA;AAAA,MACF;AAAA,OACF,GACF;AAAA,KACF;AAEJ;;;AUnDA,SAAS,WAAAE,gBAAe;AACxB,SAAS,kBAAAC,uBAAsB;;;ACF/B,SAAS,iBAAAC,sBAAqB;AAyDL,gBAAAC,OACb,QAAAC,cADa;AA5CzB,IAAMC,qBAAoB,CAAC,UAA4B;AACrD,SAAO,MAAM,OAAO,CAAC,MAAM,UAAU,UAAU,KAAK,MAAM,QAAQ,CAAC,GAAG,UAAU,KAAK,KAAK;AAC5F;AAEA,IAAMC,yBAAwB,CAAC,OAA8B,gBAAiD;AAC5G,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,SAAS,QAAQ;AACxB,UAAI,KAAK,SAAS,aAAa;AAC7B,eAAO,CAAC,EAAE,IAAI,KAAK,IAAI,MAAM,KAAK,MAAM,OAAO,KAAK,SAAS,CAAC;AAAA,MAChE;AAEA;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,aAAa;AAC7B,aAAO,KAAK,QAAQ,CAAC,EAAE,IAAI,KAAK,IAAI,MAAM,KAAK,MAAM,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC;AAAA,IAC/E;AAEA,UAAM,oBAAoBA,uBAAsB,KAAK,OAAO,WAAW;AAEvE,QAAI,CAAC,mBAAmB;AACtB;AAAA,IACF;AAEA,WAAOD,mBAAkB,KAAK,QAAQ,CAAC,EAAE,IAAI,KAAK,IAAI,MAAM,KAAK,MAAM,OAAO,KAAK,MAAM,CAAC,IAAI,iBAAiB;AAAA,EACjH;AAEA,SAAO;AACT;AAEA,IAAM,kBAAkB,CAAC,EAAE,YAAY,MAA+B;AACpE,QAAM,OAAO,qBAAqB;AAClC,QAAM,gBAAgB,2BAA2B,MAAM,WAAW;AAClE,QAAM,kBAAkBA,mBAAkB;AAAA,IACxC,GAAI,gBAAiBC,uBAAsB,cAAc,OAAO,WAAW,KAAK,CAAC,IAAK,CAAC;AAAA,EACzF,CAAC;AAED,SACE,gBAAAH,MAAC,UAAK,WAAU,uFACb,0BAAgB,IAAI,CAAC,MAAM,UAAU;AACpC,UAAM,OAAO,KAAK,YAAY,kBAAkB,KAAK,MAAM,KAAK,EAAE,CAAC;AAEnE,WACE,gBAAAC,OAAC,UAAmB,WAAU,YAC3B;AAAA,cAAQ,IAAI,gBAAAD,MAACI,gBAAA,EAAc,WAAU,0CAAyC,IAAK;AAAA,MACpF,gBAAAH,OAAC,UAAK,WAAU,qCACb;AAAA,eAAO,gBAAAD,MAAC,QAAK,WAAU,mBAAkB,eAAY,QAAO,IAAK;AAAA,QAClE,gBAAAA,MAAC,UAAK,WAAU,YAAY,+BAAqB,KAAK,OAAO,EAAE,eAAe,WAAW,CAAC,GAAE;AAAA,SAC9F;AAAA,SALS,KAAK,EAMhB;AAAA,EAEJ,CAAC,GACH;AAEJ;AAEA,IAAO,0BAAQ;;;ACrDf,IAAM,iBAAiB,CAAC,SAAiB;AACvC,SAAO,qBAAqB,KAAK,IAAI,KAAK,KAAK,WAAW,SAAS,KAAK,KAAK,WAAW,MAAM;AAChG;AAEA,IAAM,YAAY,CAAC,SAAiB;AAClC,QAAM,CAAC,UAAU,OAAO,EAAE,IAAI,KAAK,MAAM,GAAG;AAC5C,SAAO;AAAA,IACL;AAAA,IACA,MAAM,OAAO,IAAI,IAAI,KAAK;AAAA,EAC5B;AACF;AAEA,IAAM,iBAAiB,CAAC,YAIe;AACrC,QAAM,EAAE,iBAAiB,KAAK,IAAI;AAClC,MAAI,KAAK,WAAW,GAAG,KAAK,eAAe,IAAI,GAAG;AAChD,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,UAAU,KAAK,IAAI,UAAU,IAAI;AACzC,QAAM,eAAe,gBAAgB,QAAQ,KAAK,UAAU,QAAQ;AAEpE,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,0BAA0B,QAAQ,MAAM,YAAY;AACjE,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,uBAAuB,QAAQ,MAAM,KAAK,SAAS;AAEnE,SAAO;AAAA,IACL,MAAM,gBAAgB,GAAG,KAAK,IAAI,GAAG,IAAI,EAAE;AAAA,IAC3C,OAAO,KAAK;AAAA,IACZ,YAAY,UAAU,CAAC,QAAQ,QAAQ,IAAI,CAAC;AAAA,IAC5C,eAAe,mBAAmB,MAAM,eAAe;AAAA,EACzD;AACF;AAEA,IAAM,sBAAsB,CAAC,YAGe;AAC1C,QAAM,OAAO,QAAQ,KAAK,MAAM,KAAK,CAAC,cAAc,UAAU,OAAO,QAAQ,EAAE;AAE/E,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,OAAO,KAAK;AAAA,IACZ,MAAM,gBAAgB,KAAK,IAAI;AAAA,IAC/B,SAAS,KAAK,eAAe;AAAA,EAC/B;AACF;AAEO,IAAM,qBAAqB,CAAC,YAGH;AAC9B,QAAM,EAAE,iBAAiB,KAAK,IAAI;AAClC,QAAM,gBAAgB,2BAA2B,MAAM,eAAe;AACtE,QAAM,cAAc,0BAA0B,MAAM,eAAe;AAEnE,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,cAAc,CAAC,SAAS;AACtB,UAAI,KAAK,WAAW,GAAG,KAAK,eAAe,IAAI,GAAG;AAChD,eAAO;AAAA,MACT;AAEA,YAAM,EAAE,UAAU,KAAK,IAAI,UAAU,IAAI;AACzC,YAAM,eAAe,gBAAgB,KAAK,UAAU,QAAQ;AAC5D,YAAM,OAAO,eAAe,0BAA0B,MAAM,YAAY,IAAI;AAE5E,UAAI,CAAC,MAAM;AACT,YAAI,gBAAgB,CAAC,SAAS,WAAW,GAAG,GAAG;AAC7C,iBAAO,gBAAgB,GAAG,YAAY,GAAG,IAAI,EAAE;AAAA,QACjD;AAEA,eAAO,gBAAgB,IAAI;AAAA,MAC7B;AAEA,aAAO,gBAAgB,GAAG,KAAK,IAAI,GAAG,IAAI,EAAE;AAAA,IAC9C;AAAA,IACA,gBAAgB,CAAC,EAAE,KAAK,MACtB,eAAe;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,qBAAqB,CAAC,OACpB,oBAAoB;AAAA,MAClB;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,GAAG,CAAC,OAAO,QAAQ;AACjB,UAAI,UAAU,UAAU,QAAQ,cAAc;AAC5C,eAAO;AAAA,MACT;AAEA,UAAI,UAAU,UAAU,QAAQ,YAAY;AAC1C,eAAO;AAAA,MACT;AAEA,UAAI,UAAU,UAAU,QAAQ,QAAQ;AACtC,eAAO;AAAA,MACT;AAEA,UAAI,UAAU,UAAU,QAAQ,kBAAkB;AAChD,eAAO,eAAe,YAAY,aAAa,SAAS;AAAA,MAC1D;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AF/GM,SACE,OAAAK,OADF,QAAAC,cAAA;AAZC,IAAM,WAAW,CAAC,EAAE,QAAQ,MAAqB;AACtD,QAAM,cAAcC,gBAAe;AACnC,QAAM,OAAO,qBAAqB;AAClC,QAAM,EAAE,KAAK,IAAIC,SAAQ;AAEzB,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,mBAAmB;AAAA,QACxB;AAAA,QACA,iBAAiB,YAAY;AAAA,MAC/B,CAAC;AAAA,MAED,0BAAAC,OAAC,kBAAe,oBAAiB,IAC/B;AAAA,wBAAAD,MAAC,2BAAgB,aAAa,KAAK,MAAM;AAAA,QACzC,gBAAAA,MAAC,QAAG,WAAU,gCAAgC,+BAAqB,KAAK,KAAK,GAAE;AAAA,QAC/E,gBAAAA,MAAC,WAAQ;AAAA,SACX;AAAA;AAAA,EACF;AAEJ;","names":["cmMerge","usePageContext","cm","usePageContext","cmMerge","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","cmMerge","cm","cmMerge","ChevronDown","Menu","TextSearch","useCallback","jsx","jsxs","StyledNav","cm","StyledNavList","useCallback","cmMerge","ChevronDown","TextSearch","Menu","cmMerge","useEffect","useState","jsx","jsxs","useState","useEffect","cmMerge","useCallback","useEffect","useState","jsx","jsxs","usePageContext","cm","useEffect","useMemo","useMemo","useEffect","jsx","jsxs","usePageContext","cmMerge","jsx","jsxs","Fragment","jsx","jsxs","jsx","Fragment","jsx","jsxs","cm","cmMerge","jsx","jsxs","cmMerge","memo","jsx","jsxs","memo","useEffect","cmMerge","memo","useEffect","useRef","usePageContext","Fragment","jsx","jsxs","useEffect","cmMerge","memo","useRef","usePageContext","cm","cmMerge","Fragment","jsx","jsxs","cmMerge","cm","cm","TableOfContents","useCallback","jsx","jsxs","useCallback","Fragment","jsx","jsxs","TableOfContents","cm","useEffect","useState","useState","useEffect","Fragment","jsx","jsxs","useData","usePageContext","ChevronsRight","jsx","jsxs","dedupeBreadcrumbs","getSidebarBreadcrumbs","ChevronsRight","jsx","jsxs","usePageContext","useData"]}
1
+ {"version":3,"sources":["../src/runtime/client/AppLayout.tsx","../src/runtime/client/components/Navbar/index.tsx","../src/runtime/client/components/Search.tsx","../src/runtime/client/components/Navbar/DocsNavbar.tsx","../src/runtime/client/components/Brand.tsx","../src/runtime/client/components/SocialLinks.tsx","../src/runtime/client/components/ThemeSwitch.tsx","../src/runtime/client/store/settings-store.ts","../src/runtime/client/store/settings-storage.ts","../src/runtime/client/theme.ts","../src/runtime/client/components/Navbar/AsideButtons.tsx","../src/runtime/client/components/Navbar/LandingPageNavbar.tsx","../src/runtime/client/components/Navbar/MegaMenu.tsx","../src/runtime/client/components/Navbar/useMegaMenu.ts","../src/runtime/client/components/UserSettingsSync.tsx","../src/runtime/client/components/MetaHead/FaviconLinks.tsx","../src/runtime/client/components/MetaHead/FontLinks.tsx","../src/runtime/client/components/MetaHead/ThemeBootstrap.tsx","../src/runtime/client/components/MetaHead/index.tsx","../src/runtime/client/components/ProseContainer.tsx","../src/runtime/client/DocsLayout.tsx","../src/runtime/client/components/DocsPagination.tsx","../src/runtime/client/components/Footer.tsx","../src/runtime/client/components/HeadingLinkCopy.tsx","../src/runtime/client/components/Sidebar.tsx","../src/runtime/client/components/docsNavigation.ts","../src/runtime/client/components/TableOfContents.tsx","../src/runtime/client/components/TableOfContentsMobile.tsx","../src/runtime/client/components/BreadcrumbSidebarTrigger.tsx","../src/runtime/client/components/useTableOfContentsState.ts","../src/runtime/client/DocsPage.tsx","../src/runtime/client/components/DocsBreadcrumbs.tsx","../src/runtime/client/getMdxRuntimeValue.tsx"],"sourcesContent":["import { cmMerge } from '@classmatejs/react'\nimport type { ReactNode } from 'react'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport NavbarNew from './components/Navbar/index.js'\nimport { UserSettingsSync } from './components/UserSettingsSync.js'\nimport { DocsGlobalContextProvider, type DocsPageContext, getDocsFromGlobalContext } from './docsGlobalContext.js'\nimport { createDocsRuntimeStore, DocsRuntimeStoreProvider } from './store/runtime-store.js'\n\ninterface AppLayoutProps {\n children: ReactNode\n header?: ReactNode\n}\n\nconst runtimeStore = createDocsRuntimeStore()\n\nexport const AppLayout = ({ children, header }: AppLayoutProps) => {\n const { urlPathname } = usePageContext()\n const pageContext = usePageContext()\n\n const docs = getDocsFromGlobalContext(pageContext as DocsPageContext)\n const isLandingPage = urlPathname === '/'\n\n return (\n <DocsRuntimeStoreProvider store={runtimeStore}>\n <DocsGlobalContextProvider docs={docs}>\n <UserSettingsSync theme={docs.theme} />\n <div className=\"min-h-screen bg-base-100 text-base-content\">\n {header ?? <NavbarNew />}\n <div className={cmMerge(isLandingPage ? '' : 'pt-14')}>{children}</div>\n </div>\n </DocsGlobalContextProvider>\n </DocsRuntimeStoreProvider>\n )\n}\n","import cm from '@classmatejs/react'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport { getActiveSectionByPathname } from '../../../../docs/runtime'\nimport { useDocsGlobalContext } from '../../docsGlobalContext'\nimport { useDocsSearchActions } from '../../store/runtime-store'\nimport { LayoutComponent } from '../LayoutComponent'\nimport { Search } from '../Search'\nimport DocsNavbar from './DocsNavbar'\nimport LandingPageNavbar from './LandingPageNavbar'\nimport { MegaMenu } from './MegaMenu'\nimport useMegaMenu from './useMegaMenu'\n\nconst NavbarNew = () => {\n const docs = useDocsGlobalContext()\n const { urlPathname, urlParsed } = usePageContext()\n const isLandingPage = urlParsed.pathname === '/'\n const sections = docs.sidebarSections\n const activeSection = getActiveSectionByPathname(docs, urlPathname)\n const { toggle: toggleSearch } = useDocsSearchActions()\n\n const { closeMegaMenu, hoveredSectionId, isMegaMenuOpen, openMegaMenu, scheduleMegaMenuOpen, scheduleMegaMenuClose } =\n useMegaMenu({\n activeSectionId: activeSection?.id,\n sections,\n })\n\n return (\n <StyledNavbar $border={isLandingPage}>\n <LayoutComponent>\n {isLandingPage ? (\n <LandingPageNavbar\n openMegaMenu={openMegaMenu}\n scheduleMegaMenuOpen={scheduleMegaMenuOpen}\n scheduleMegaMenuClose={scheduleMegaMenuClose}\n toggleSearch={toggleSearch}\n closeMegaMenu={closeMegaMenu}\n hoveredSectionId={hoveredSectionId}\n isMegaMenuOpen={isMegaMenuOpen}\n />\n ) : (\n <DocsNavbar\n openMegaMenu={openMegaMenu}\n scheduleMegaMenuOpen={scheduleMegaMenuOpen}\n scheduleMegaMenuClose={scheduleMegaMenuClose}\n toggleSearch={toggleSearch}\n closeMegaMenu={closeMegaMenu}\n activeSection={activeSection}\n hoveredSectionId={hoveredSectionId}\n isMegaMenuOpen={isMegaMenuOpen}\n />\n )}\n </LayoutComponent>\n <Search />\n <MegaMenu\n sections={sections}\n activeSectionId={activeSection?.id}\n hoveredSectionId={hoveredSectionId}\n isActive={isMegaMenuOpen}\n onOpen={openMegaMenu}\n onClose={scheduleMegaMenuClose}\n isLandingPage={isLandingPage}\n />\n </StyledNavbar>\n )\n}\n\nexport default NavbarNew\n\nconst StyledNavbar = cm.header<{ $border: boolean }>`\n top-0 left-0 z-20 w-full bg-base-100\n pt-0 h-14\n ${({ $border }) => ($border ? 'relative' : 'fixed')}\n`\n","import { useEffect, useState } from 'react'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\nimport { useDocsSearchStore } from '../store/runtime-store.js'\n\ntype SearchModalModule = typeof import('./SearchModal.js')\n\nlet searchModalModulePromise: Promise<SearchModalModule> | null = null\n\nconst loadSearchModalModule = () => {\n searchModalModulePromise ??= import('./SearchModal.js')\n return searchModalModulePromise\n}\n\nexport const Search = () => {\n const docs = useDocsGlobalContext()\n const isOpen = useDocsSearchStore((state) => state.isOpen)\n const [searchModalModule, setSearchModalModule] = useState<SearchModalModule | null>(null)\n\n useEffect(() => {\n if (!docs.algolia || !isOpen || searchModalModule !== null) {\n return\n }\n\n let isMounted = true\n\n loadSearchModalModule().then((module) => {\n if (isMounted) {\n setSearchModalModule(module)\n }\n })\n\n return () => {\n isMounted = false\n }\n }, [docs.algolia, isOpen, searchModalModule])\n\n if (!docs.algolia || searchModalModule === null) {\n return null\n }\n\n const { SearchModal } = searchModalModule\n\n return <SearchModal />\n}\n","import cm, { cmMerge } from '@classmatejs/react'\nimport { ChevronDown, Menu, TextSearch } from 'lucide-react'\nimport { useCallback } from 'react'\nimport { getDocsIconMapKey } from '../../../../docs/iconKeys.js'\nimport type { ResolvedDocsSection } from '../../../../docs/types'\nimport { withSiteBaseUrl } from '../../../../shared/assets'\nimport { renderInlineMarkdown } from '../../../../shared/renderInlineMarkdown'\nimport { useDocsGlobalContext } from '../../docsGlobalContext'\nimport { Brand } from '../Brand'\nimport AsideButtons from './AsideButtons'\n\nconst StyledNav = cm.nav`\n gap-4\n flex-1 pl-10 items-center justify-end lg:justify-start \n hidden lg:flex\n`\n\nconst StyledNavList = cm.ul`\n inline-flex items-center gap-2 font-semibold \n`\n\ninterface DocsNavbarProps {\n scheduleMegaMenuClose?: () => void\n scheduleMegaMenuOpen: (id?: string) => void\n openMegaMenu: (id?: string) => void\n toggleSearch: () => void\n closeMegaMenu?: () => void\n activeSection?: ResolvedDocsSection | null\n hoveredSectionId?: string\n isMegaMenuOpen: boolean\n}\n\nconst DocsNavbar = ({\n closeMegaMenu,\n openMegaMenu,\n scheduleMegaMenuOpen,\n scheduleMegaMenuClose,\n toggleSearch,\n activeSection,\n hoveredSectionId,\n isMegaMenuOpen,\n}: DocsNavbarProps) => {\n const docs = useDocsGlobalContext()\n\n const handleClick = useCallback(() => {\n alert('TODO: Open mobile menu')\n }, [])\n\n return (\n <div className=\"flex flex-1 gap-4 pt-3 justify-between\">\n <div className=\"lg:min-w-76 min-w-none\">\n <Brand brand={docs.brand} />\n </div>\n <StyledNav aria-label=\"Primary\">\n <StyledNavList className=\"\">\n {docs.navbarItems.map((item) => {\n const ItemIcon = docs.docsIconMap[getDocsIconMapKey('section', item.id)]\n const isMegaMenuItemActive = isMegaMenuOpen && hoveredSectionId === item.id\n\n return (\n <li key={item.id}>\n <a\n href={withSiteBaseUrl(item.href)}\n className={'block'}\n onPointerEnter={() => scheduleMegaMenuOpen(item.id)}\n onPointerLeave={scheduleMegaMenuClose}\n onFocus={() => openMegaMenu(item.id)}\n onBlur={scheduleMegaMenuClose}\n onClick={closeMegaMenu}\n >\n <span\n className={cmMerge(\n 'btn text-base btn-sm md:min-w-30 px-2 whitespace-nowrap tracking-tight',\n activeSection?.id === item.id ? 'btn-primary btn-soft' : 'btn-ghost ',\n )}\n >\n {ItemIcon ? <ItemIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n {renderInlineMarkdown(item.title)}\n <ChevronDown\n className={cmMerge(\n 'size-4 shrink-0 transition-transform duration-200',\n isMegaMenuItemActive ? 'rotate-180' : 'rotate-0',\n )}\n />\n </span>\n </a>\n </li>\n )\n })}\n {docs.algolia ? (\n <li>\n <button\n type=\"button\"\n onClick={toggleSearch}\n className=\"btn btn-ghost btn-sm text-base md:min-w-30 px-2 whitespace-nowrap tracking-tight\"\n >\n Search\n <TextSearch className=\"size-4\" />\n </button>\n </li>\n ) : null}\n </StyledNavList>\n </StyledNav>\n <button type=\"button\" className=\"block lg:hidden\" aria-label=\"Open navigation menu\" onClick={handleClick}>\n <Menu className=\"w-6 h-6\" />\n </button>\n <div className=\"lg:min-w-40 hidden lg:block\">\n <AsideButtons />\n </div>\n </div>\n )\n}\n\nexport default DocsNavbar\n","import { cmMerge } from '@classmatejs/react'\nimport type { ResolvedDocsBrandConfig } from '../../../docs/types.js'\n\ninterface BrandProps {\n brand: ResolvedDocsBrandConfig\n noText?: boolean\n}\n\nexport const Brand = ({ brand, noText = false }: BrandProps) => {\n const defaultLogo = brand.logoLight ?? brand.logoDark\n\n return (\n <a\n href={brand.href}\n className=\"flex items-center gap-3 text-base-content no-underline\"\n aria-label={noText ? `${brand.text} homepage` : undefined}\n >\n {defaultLogo && (\n <span className=\"relative block h-8 w-8 shrink-0\">\n {brand.logoLight && (\n <img\n src={brand.logoLight}\n alt={brand.logoAlt}\n className={cmMerge('h-8 w-8 object-contain', brand.logoDark ? 'block dark:hidden' : 'block')}\n />\n )}\n {brand.logoDark && (\n <img\n src={brand.logoDark}\n alt={brand.logoAlt}\n className={cmMerge('h-8 w-8 object-contain', brand.logoLight ? 'hidden dark:block' : 'block')}\n />\n )}\n </span>\n )}\n {!noText && <span className=\"text-xl font-semibold tracking-tight\">{brand.text}</span>}\n </a>\n )\n}\n","import { memo } from 'react'\nimport { nivelAssetUrl } from '../../../shared/assets.js'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\n\nconst iconAssets = {\n github: nivelAssetUrl('brands/github.svg'),\n discord: nivelAssetUrl(`brands/discord.svg`),\n x: nivelAssetUrl(`brands/x.svg`),\n bluesky: nivelAssetUrl(`brands/bluesky.svg`),\n linkedin: nivelAssetUrl('brands/linkedin.svg'),\n}\n\ntype SocialPlatform = keyof typeof iconAssets\n\nconst SocialIconElement = ({ icon, href }: { icon: SocialPlatform; href: string }) => {\n const socialLabel = icon === 'x' ? 'X' : icon.charAt(0).toUpperCase() + icon.slice(1)\n\n return (\n <li className=\"m-0 p-0\">\n {/** biome-ignore lint/a11y/useAnchorContent: not now */}\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex h-8 w-8 items-center justify-center rounded-full border border-base-muted-light bg-base-200\"\n aria-label={`${socialLabel} profile`}\n title={socialLabel}\n >\n <img src={iconAssets[icon]} alt=\"\" aria-hidden=\"true\" className=\"h-3 w-auto opacity-75 dark:invert\" />\n </a>\n </li>\n )\n}\n\nconst SocialIcons = memo(() => {\n const docs = useDocsGlobalContext()\n const socialEntries = Object.entries(docs.social ?? {}).filter(\n (entry): entry is [SocialPlatform, string] =>\n entry[0] in iconAssets && typeof entry[1] === 'string' && entry[1].length > 0,\n )\n\n if (socialEntries.length === 0) {\n return null\n }\n\n return (\n <ul className=\"flex items-center gap-1\">\n {socialEntries.map(([platform, href]) => (\n <SocialIconElement key={platform} icon={platform} href={href} />\n ))}\n </ul>\n )\n})\n\nexport default SocialIcons\n","import { Moon, Sun } from 'lucide-react'\nimport type { DocsThemeConfig } from '../../../docs/types.js'\nimport { useDocsUserSettingsStore } from '../store/settings-store.js'\nimport { resolveThemePreference } from '../theme.js'\n\nexport const ThemeSwitch = ({ theme }: { theme: Required<DocsThemeConfig> }) => {\n const themePreference = useDocsUserSettingsStore((state) => state.themePreference)\n const setThemePreference = useDocsUserSettingsStore((state) => state.setThemePreference)\n const effectiveThemePreference = resolveThemePreference(themePreference, theme)\n\n return (\n <button\n type=\"button\"\n aria-label=\"Toggle theme\"\n onClick={() => setThemePreference(effectiveThemePreference === 'light' ? 'dark' : 'light')}\n className=\"relative flex h-8 w-8 cursor-pointer items-center justify-center rounded-full border border-base-muted-light bg-base-200\"\n >\n <Sun className=\"size-4 dark:hidden\" />\n <Moon className=\"hidden size-4 dark:block\" />\n </button>\n )\n}\n","import { create } from 'zustand'\nimport { createJSONStorage, persist } from 'zustand/middleware'\nimport type { UniversalMdxCodeBlockChoiceStore } from '../../../mdx/components/types.js'\nimport type { ThemePreference } from '../../../docs/types.js'\nimport { readLegacyCodeBlockChoice, USER_SETTINGS_STORAGE_KEY } from './settings-storage.js'\n\ntype DocsUserSettingsState = {\n codeBlockChoices: Record<string, string>\n themePreference: ThemePreference | null\n setCodeBlockChoice: (choiceGroupName: string, choice: string) => void\n setThemePreference: (themePreference: ThemePreference) => void\n}\n\nexport const useDocsUserSettingsStore = create<DocsUserSettingsState>()(\n persist(\n (set) => ({\n codeBlockChoices: {},\n themePreference: null,\n setCodeBlockChoice: (choiceGroupName, choice) =>\n set((state) => ({\n codeBlockChoices: {\n ...state.codeBlockChoices,\n [choiceGroupName]: choice,\n },\n })),\n setThemePreference: (themePreference) => set({ themePreference }),\n }),\n {\n name: USER_SETTINGS_STORAGE_KEY,\n storage: createJSONStorage(() => localStorage),\n partialize: ({ codeBlockChoices, themePreference }) => ({\n codeBlockChoices,\n themePreference,\n }),\n },\n ),\n)\n\nexport const docsCodeBlockChoiceStore: UniversalMdxCodeBlockChoiceStore = {\n subscribe: (listener) => useDocsUserSettingsStore.subscribe(listener),\n getChoice: (choiceGroupName) => useDocsUserSettingsStore.getState().codeBlockChoices[choiceGroupName] ?? null,\n setChoice: (choiceGroupName, choice) =>\n useDocsUserSettingsStore.getState().setCodeBlockChoice(choiceGroupName, choice),\n getLegacyChoice: readLegacyCodeBlockChoice,\n}\n","export const USER_SETTINGS_STORAGE_KEY = 'nivel-user-settings'\nconst LEGACY_CODE_BLOCK_CHOICE_STORAGE_KEY_PREFIX = 'vike-docpress:choice:'\n\nexport const readLegacyCodeBlockChoice = (choiceGroupName: string) => {\n if (typeof window === 'undefined') {\n return null\n }\n\n try {\n const value = window.localStorage.getItem(`${LEGACY_CODE_BLOCK_CHOICE_STORAGE_KEY_PREFIX}${choiceGroupName}`)\n return value || null\n } catch {\n return null\n }\n}\n","import type { DocsThemeConfig, ThemePreference } from '../../docs/types.js'\n\nexport const DEFAULT_THEME_PREFERENCE: ThemePreference = 'light'\nexport const DARK_THEME_MEDIA_QUERY = '(prefers-color-scheme: dark)'\n\nconst getDataTheme = (themePreference: ThemePreference, themeConfig: Required<DocsThemeConfig>) => {\n return themePreference === 'dark' ? themeConfig.dark : themeConfig.light\n}\n\nconst isThemePreference = (value: unknown): value is ThemePreference => {\n return value === 'light' || value === 'dark'\n}\n\nconst getSystemThemePreference = (fallbackThemePreference: ThemePreference): ThemePreference => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return fallbackThemePreference\n }\n\n return window.matchMedia(DARK_THEME_MEDIA_QUERY).matches ? 'dark' : 'light'\n}\n\nexport const resolveThemePreference = (\n themePreference: ThemePreference | null | undefined,\n themeConfig: Required<DocsThemeConfig>,\n) => {\n if (isThemePreference(themePreference)) {\n return themePreference\n }\n\n return getSystemThemePreference(themeConfig.defaultPreference)\n}\n\nexport const applyThemePreference = (\n themePreference: ThemePreference | null | undefined,\n themeConfig: Required<DocsThemeConfig>,\n) => {\n if (typeof document === 'undefined') {\n return\n }\n\n document.documentElement.setAttribute(\n 'data-theme',\n getDataTheme(resolveThemePreference(themePreference, themeConfig), themeConfig),\n )\n}\n","import { useDocsGlobalContext } from '../../docsGlobalContext'\nimport SocialIcons from '../SocialLinks'\nimport { ThemeSwitch } from '../ThemeSwitch'\n\nconst AsideButtons = () => {\n const docs = useDocsGlobalContext()\n\n return (\n <div className=\"flex-1 justify-end gap-2 flex\">\n <div className=\"hidden lg:block\">\n <SocialIcons />\n </div>\n <ThemeSwitch theme={docs.theme} />\n </div>\n )\n}\n\nexport default AsideButtons\n","import cm, { cmMerge } from '@classmatejs/react'\nimport { ChevronDown, Menu, TextSearch } from 'lucide-react'\nimport { useCallback } from 'react'\nimport { getDocsIconMapKey } from '../../../../docs/iconKeys.js'\nimport { withSiteBaseUrl } from '../../../../shared/assets'\nimport { renderInlineMarkdown } from '../../../../shared/renderInlineMarkdown'\nimport { useDocsGlobalContext } from '../../docsGlobalContext'\nimport { Brand } from '../Brand'\nimport AsideButtons from './AsideButtons'\n\nconst StyledNav = cm.nav`\n gap-4\n flex-1 items-center justify-center\n`\n\nconst StyledNavList = cm.ul`\n inline-flex items-center gap-2 font-semibold \n`\n\ninterface LandingPageNavbarProps {\n scheduleMegaMenuClose?: () => void\n scheduleMegaMenuOpen: (id?: string) => void\n openMegaMenu: (id?: string) => void\n toggleSearch: () => void\n closeMegaMenu?: () => void\n hoveredSectionId?: string\n isMegaMenuOpen: boolean\n}\n\nconst LandingPageNavbar = ({\n closeMegaMenu,\n openMegaMenu,\n scheduleMegaMenuOpen,\n scheduleMegaMenuClose,\n toggleSearch,\n hoveredSectionId,\n isMegaMenuOpen,\n}: LandingPageNavbarProps) => {\n const docs = useDocsGlobalContext()\n\n const handleClick = useCallback(() => {\n alert('TODO: Open mobile menu')\n }, [])\n\n return (\n <div className=\"flex flex-1 gap-4 pt-3 justify-between\">\n <div className=\"min-w-40\">\n <Brand brand={docs.brand} />\n </div>\n <StyledNav aria-label=\"Primary\" className=\"flex-1 flex hidden lg:flex\">\n <StyledNavList className=\"justify-end \">\n {docs.navbarItems.map((item) => {\n const ItemIcon = docs.docsIconMap[getDocsIconMapKey('section', item.id)]\n const isMegaMenuItemActive = isMegaMenuOpen && hoveredSectionId === item.id\n\n return (\n <li key={item.id}>\n <a\n href={withSiteBaseUrl(item.href)}\n className={'block'}\n onPointerEnter={() => scheduleMegaMenuOpen(item.id)}\n onPointerLeave={scheduleMegaMenuClose}\n onFocus={() => openMegaMenu(item.id)}\n onBlur={scheduleMegaMenuClose}\n onClick={closeMegaMenu}\n >\n <span\n className={cmMerge(\n 'btn btn-ghost text-base lg:text-lg btn-sm lg:min-w-30 px-2 whitespace-nowrap tracking-tight',\n )}\n >\n {ItemIcon ? <ItemIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n {renderInlineMarkdown(item.title)}\n <ChevronDown\n className={cmMerge(\n 'size-4 shrink-0 transition-transform duration-200',\n isMegaMenuItemActive ? 'rotate-180' : 'rotate-0',\n )}\n />\n </span>\n </a>\n </li>\n )\n })}\n {docs.algolia ? (\n <li>\n <button\n type=\"button\"\n onClick={toggleSearch}\n className=\"btn btn-ghost btn-sm text-base lg:text-lg lg:min-w-30 px-2 whitespace-nowrap tracking-tight\"\n >\n Search\n <TextSearch className=\"size-4\" />\n </button>\n </li>\n ) : null}\n </StyledNavList>\n </StyledNav>\n <div className=\"min-w-40 hidden lg:block\">\n <AsideButtons />\n </div>\n <button type=\"button\" className=\"block lg:hidden\" aria-label=\"Open navigation menu\" onClick={handleClick}>\n <Menu className=\"w-6 h-6\" />\n </button>\n </div>\n )\n}\n\nexport default LandingPageNavbar\n","import { cmMerge } from '@classmatejs/react'\nimport { useEffect, useMemo, useState } from 'react'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport { getDocsIconMapKey } from '../../../../docs/iconKeys.js'\nimport type { ResolvedDocsSection } from '../../../../docs/types.js'\nimport { withSiteBaseUrl } from '../../../../shared/assets.js'\nimport { renderInlineMarkdown } from '../../../../shared/renderInlineMarkdown.js'\nimport { useDocsGlobalContext } from '../../docsGlobalContext.js'\nimport { LayoutComponent } from '../LayoutComponent.js'\n\nconst findActiveItemId = (section: ResolvedDocsSection | undefined, currentHref: string): string | undefined => {\n if (!section) {\n return undefined\n }\n\n for (const item of section.items) {\n if (item.href === currentHref) {\n return item.id\n }\n\n if (item.kind === 'group') {\n for (const child of item.items) {\n if (child.href === currentHref) {\n return child.id\n }\n }\n }\n }\n\n return undefined\n}\n\nexport const MegaMenu = ({\n isActive,\n onOpen,\n onClose,\n sections,\n activeSectionId,\n hoveredSectionId,\n isLandingPage,\n}: {\n isActive: boolean\n onOpen: (sectionId?: string) => void\n onClose: () => void\n sections: ResolvedDocsSection[]\n activeSectionId?: string\n hoveredSectionId?: string\n isLandingPage: boolean\n}) => {\n const docs = useDocsGlobalContext()\n const { urlPathname } = usePageContext()\n const visibleSectionId = hoveredSectionId ?? activeSectionId ?? sections[0]?.id\n const [visibleSectionElement, setVisibleSectionElement] = useState<HTMLDivElement | null>(null)\n const [contentHeight, setContentHeight] = useState(0)\n\n const activeItemId = useMemo(\n () =>\n findActiveItemId(\n sections.find((section) => section.id === visibleSectionId),\n urlPathname,\n ),\n [sections, visibleSectionId, urlPathname],\n )\n\n useEffect(() => {\n if (!isActive || !visibleSectionId || visibleSectionElement === null) {\n return\n }\n\n const updateContentHeight = () => {\n setContentHeight(visibleSectionElement.offsetHeight)\n }\n\n updateContentHeight()\n\n if (typeof ResizeObserver === 'undefined') {\n return\n }\n\n const resizeObserver = new ResizeObserver(() => {\n updateContentHeight()\n })\n\n resizeObserver.observe(visibleSectionElement)\n\n return () => {\n resizeObserver.disconnect()\n }\n }, [visibleSectionElement, visibleSectionId, isActive])\n\n return (\n <div\n className={cmMerge('fixed top-14 left-0 z-3 w-full', isActive ? 'pointer-events-auto' : 'pointer-events-none')}\n onPointerEnter={() => onOpen(visibleSectionId)}\n onPointerLeave={onClose}\n >\n <div\n className={cmMerge(\n isActive ? 'opacity-100' : 'opacity-0',\n 'pointer-events-none absolute top-0 left-0 h-svh w-full bg-linear-to-t from-base-100/60 to-base-100 transition-opacity duration-200 backdrop-blur-md',\n )}\n />\n <div\n className={cmMerge(\n 'relative z-4 overflow-hidden transition-[height] bg-base-100 duration-300 ease-out pointer-events-none',\n isLandingPage && !isActive ? '' : 'pointer-events-auto lg:border-b lg:border-base-muted-light',\n )}\n // biome-ignore lint/nursery/noInlineStyles: needed here\n style={{ height: isActive ? contentHeight : 0 }}\n >\n <LayoutComponent $size=\"sm\">\n <div\n className={cmMerge(\n isActive ? 'translate-y-0 opacity-100' : '-translate-y-10 opacity-0',\n 'relative z-4 transition-all duration-300',\n )}\n >\n {sections.map((section) => (\n <div\n key={section.id}\n ref={section.id === visibleSectionId ? setVisibleSectionElement : undefined}\n className={cmMerge(\n section.id === visibleSectionId ? 'opacity-100' : 'opacity-0 pointer-events-none',\n 'transition-all absolute w-full duration-300',\n )}\n >\n {section.items.length > 0 && (\n <ul className=\"mt-2 flex \">\n {section.items.map((child) => {\n if (child.showInNav === false) {\n return null\n }\n\n const ChildIcon = docs.docsIconMap[getDocsIconMapKey(child.kind, child.id)]\n\n return (\n <li key={child.id} className=\"flex-1 py-3 mb-6 px-4\">\n {child.href ? (\n <a\n className={cmMerge(\n 'mb-4 flex items-center gap-2 text-lg font-semibold tracking-tight',\n activeItemId === child.id && 'text-primary!',\n )}\n href={withSiteBaseUrl(child.href)}\n >\n {ChildIcon ? <ChildIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n <span>{child.title}</span>\n </a>\n ) : (\n <span className=\"mb-4 flex items-center gap-2 text-lg font-semibold tracking-tight\">\n {ChildIcon ? <ChildIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n <span>{child.title}</span>\n </span>\n )}\n {child.kind === 'group' && child.items.length > 0 && (\n <ul className=\"menu border-l border-base-muted-light py-0 w-full\">\n {child.items.map((subChild) => {\n const SubChildIcon = docs.docsIconMap[getDocsIconMapKey(subChild.kind, subChild.id)]\n\n return (\n <li key={subChild.id}>\n {subChild.href ? (\n <a\n className={cmMerge(\n 'text-base-muted hover:text-base-content',\n activeItemId === subChild.id && 'text-primary! font-semibold',\n )}\n href={withSiteBaseUrl(subChild.href)}\n onClick={onClose}\n >\n <span className=\"flex items-center gap-2\">\n {SubChildIcon ? (\n <SubChildIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n ) : null}\n <span>{renderInlineMarkdown(subChild.title)}</span>\n </span>\n </a>\n ) : (\n <span className=\"flex items-center gap-2\">\n {SubChildIcon ? (\n <SubChildIcon className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n ) : null}\n <span>{renderInlineMarkdown(subChild.title)}</span>\n </span>\n )}\n </li>\n )\n })}\n </ul>\n )}\n </li>\n )\n })}\n </ul>\n )}\n </div>\n ))}\n </div>\n </LayoutComponent>\n </div>\n </div>\n )\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport type { ResolvedDocsSection } from '../../../../docs/types'\n\nconst megaMenuOpenDelayMs = 120\nconst megaMenuCloseDelayMs = 140\n\nconst useMegaMenu = ({ activeSectionId, sections }: { activeSectionId?: string; sections: ResolvedDocsSection[] }) => {\n const [isMegaMenuOpen, setIsMegaMenuOpen] = useState(false)\n const megaMenuOpenTimeoutRef = useRef<number | null>(null)\n const megaMenuCloseTimeoutRef = useRef<number | null>(null)\n const [hoveredSectionId, setHoveredSectionId] = useState<string | undefined>(activeSectionId ?? sections[0]?.id)\n\n const clearMegaMenuOpenTimeout = useCallback(() => {\n if (megaMenuOpenTimeoutRef.current === null) {\n return\n }\n\n window.clearTimeout(megaMenuOpenTimeoutRef.current)\n megaMenuOpenTimeoutRef.current = null\n }, [])\n\n const clearMegaMenuCloseTimeout = useCallback(() => {\n if (megaMenuCloseTimeoutRef.current === null) {\n return\n }\n\n window.clearTimeout(megaMenuCloseTimeoutRef.current)\n megaMenuCloseTimeoutRef.current = null\n }, [])\n\n const openMegaMenu = (currentSectionId?: string) => {\n if (currentSectionId !== undefined) {\n setHoveredSectionId(currentSectionId)\n }\n\n clearMegaMenuOpenTimeout()\n clearMegaMenuCloseTimeout()\n setIsMegaMenuOpen(true)\n }\n\n const scheduleMegaMenuOpen = (currentSectionId?: string) => {\n if (currentSectionId !== undefined) {\n setHoveredSectionId(currentSectionId)\n }\n\n clearMegaMenuOpenTimeout()\n clearMegaMenuCloseTimeout()\n\n if (isMegaMenuOpen) {\n setIsMegaMenuOpen(true)\n return\n }\n\n megaMenuOpenTimeoutRef.current = window.setTimeout(() => {\n setIsMegaMenuOpen(true)\n megaMenuOpenTimeoutRef.current = null\n }, megaMenuOpenDelayMs)\n }\n\n const closeMegaMenu = () => {\n clearMegaMenuOpenTimeout()\n clearMegaMenuCloseTimeout()\n setIsMegaMenuOpen(false)\n }\n\n const scheduleMegaMenuClose = () => {\n clearMegaMenuOpenTimeout()\n clearMegaMenuCloseTimeout()\n megaMenuCloseTimeoutRef.current = window.setTimeout(() => {\n setIsMegaMenuOpen(false)\n megaMenuCloseTimeoutRef.current = null\n }, megaMenuCloseDelayMs)\n }\n\n useEffect(() => {\n return () => {\n clearMegaMenuOpenTimeout()\n clearMegaMenuCloseTimeout()\n }\n }, [clearMegaMenuCloseTimeout, clearMegaMenuOpenTimeout])\n\n useEffect(() => {\n setHoveredSectionId(activeSectionId ?? sections[0]?.id)\n }, [activeSectionId, sections])\n\n return {\n isMegaMenuOpen,\n hoveredSectionId,\n openMegaMenu,\n scheduleMegaMenuOpen,\n closeMegaMenu,\n scheduleMegaMenuClose,\n }\n}\n\nexport default useMegaMenu\n","import { useEffect, useMemo } from 'react'\nimport type { DocsConfig } from '../../../docs/types.js'\nimport { useDocsUserSettingsStore } from '../store/settings-store.js'\nimport { applyThemePreference, resolveThemePreference } from '../theme.js'\n\nexport const UserSettingsSync = ({ theme }: { theme?: DocsConfig['theme'] }) => {\n const themePreference = useDocsUserSettingsStore((state) => state.themePreference)\n const lightTheme = theme?.light ?? 'consumer-light'\n const darkTheme = theme?.dark ?? 'consumer-dark'\n const defaultThemePreference = theme?.defaultPreference ?? 'light'\n const resolvedTheme = useMemo(\n () => ({ light: lightTheme, dark: darkTheme, defaultPreference: defaultThemePreference }),\n [darkTheme, defaultThemePreference, lightTheme],\n )\n\n const effectiveThemePreference = resolveThemePreference(themePreference, resolvedTheme)\n\n useEffect(() => {\n applyThemePreference(effectiveThemePreference, resolvedTheme)\n }, [effectiveThemePreference, resolvedTheme])\n\n return null\n}\n","import type { ResolvedDocsHeadConfig } from '../../../../docs/types.js'\n\nexport const FaviconLinks = ({ head }: { head: ResolvedDocsHeadConfig }) => {\n const { appleTouchIcon, faviconIco, faviconSvg } = head\n\n return (\n <>\n {appleTouchIcon && <link rel=\"apple-touch-icon\" href={appleTouchIcon} />}\n {faviconSvg && <link rel=\"icon\" type=\"image/svg+xml\" href={faviconSvg} />}\n {faviconIco && (\n <>\n <link rel=\"shortcut icon\" type=\"image/x-icon\" href={faviconIco} />\n <link rel=\"icon\" type=\"image/x-icon\" href={faviconIco} />\n </>\n )}\n </>\n )\n}\n","import { nivelAssetUrl } from '../../../../shared/assets.js'\nimport type { ResolvedDocsHeadConfig } from '../../../../docs/types.js'\n\nconst defaultInterFontStylesheetHref = nivelAssetUrl('fonts/fonts-inter.css')\n\nconst defaultInterFontCss = `\n@font-face {\n font-display: swap;\n font-family: 'Inter';\n font-style: normal;\n font-weight: 400;\n src: url('${nivelAssetUrl('fonts/inter-v20-latin-regular.woff2')}') format('woff2');\n}\n\n@font-face {\n font-display: swap;\n font-family: 'Inter';\n font-style: normal;\n font-weight: 600;\n src: url('${nivelAssetUrl('fonts/inter-v20-latin-600.woff2')}') format('woff2');\n}\n\n@font-face {\n font-display: swap;\n font-family: 'Inter';\n font-style: normal;\n font-weight: 800;\n src: url('${nivelAssetUrl('fonts/inter-v20-latin-800.woff2')}') format('woff2');\n}\n`\n\nexport const FontLinks = ({ head }: { head: ResolvedDocsHeadConfig }) => {\n const { fontStylesheetHref, fontPreloadHrefs } = head\n const effectivePreloadHrefs = fontPreloadHrefs ?? []\n const shouldInlineDefaultInterFonts = fontStylesheetHref === defaultInterFontStylesheetHref\n\n return (\n <>\n {effectivePreloadHrefs.map((href) => (\n <link key={href} rel=\"preload\" href={href} as=\"font\" type=\"font/woff2\" crossOrigin=\"anonymous\" />\n ))}\n {shouldInlineDefaultInterFonts ? <style dangerouslySetInnerHTML={{ __html: defaultInterFontCss }} /> : null}\n {fontStylesheetHref && !shouldInlineDefaultInterFonts ? (\n <link rel=\"stylesheet\" href={fontStylesheetHref} />\n ) : null}\n </>\n )\n}\n","import type { DocsThemeConfig } from '../../../../docs/types.js'\nimport { USER_SETTINGS_STORAGE_KEY } from '../../store/settings-storage.js'\nimport { DARK_THEME_MEDIA_QUERY } from '../../theme.js'\n\nconst getThemeBootstrapScript = (theme: Required<DocsThemeConfig>) => {\n return `(() => {\n const storageKey = ${JSON.stringify(USER_SETTINGS_STORAGE_KEY)};\n const darkThemeMediaQuery = ${JSON.stringify(DARK_THEME_MEDIA_QUERY)};\n const defaultThemePreference = ${JSON.stringify(theme.defaultPreference)};\n const themes = {\n light: ${JSON.stringify(theme.light)},\n dark: ${JSON.stringify(theme.dark)}\n };\n\n try {\n const persistedValue = window.localStorage.getItem(storageKey);\n const parsedValue = persistedValue ? JSON.parse(persistedValue) : null;\n const storedThemePreference = parsedValue?.state?.themePreference;\n const themePreference =\n storedThemePreference === 'light' || storedThemePreference === 'dark'\n ? storedThemePreference\n : typeof window.matchMedia === 'function'\n ? window.matchMedia(darkThemeMediaQuery).matches\n ? 'dark'\n : 'light'\n : defaultThemePreference;\n\n document.documentElement.setAttribute('data-theme', themes[themePreference]);\n } catch {\n const themePreference =\n typeof window.matchMedia === 'function'\n ? window.matchMedia(darkThemeMediaQuery).matches\n ? 'dark'\n : 'light'\n : defaultThemePreference;\n\n document.documentElement.setAttribute('data-theme', themes[themePreference]);\n }\n})();`\n}\n\nexport const ThemeBootstrap = ({ theme }: { theme: Required<DocsThemeConfig> }) => {\n return (\n <script\n dangerouslySetInnerHTML={{\n __html: getThemeBootstrapScript(theme),\n }}\n />\n )\n}\n","import { useDocsFromPageGlobalContext } from '../../docsGlobalContext.js'\nimport { FaviconLinks } from './FaviconLinks.js'\nimport { FontLinks } from './FontLinks.js'\nimport { ThemeBootstrap } from './ThemeBootstrap.js'\n\nexport const MetaHead = () => {\n const docs = useDocsFromPageGlobalContext()\n const shouldBlockCrawlers = docs.robots === false\n\n return (\n <>\n <ThemeBootstrap theme={docs.theme} />\n <FaviconLinks head={docs.head} />\n <FontLinks head={docs.head} />\n {shouldBlockCrawlers ? <meta name=\"robots\" content=\"noindex, nofollow\" /> : null}\n </>\n )\n}\n","import cm from '@classmatejs/react'\n\n// https://github.com/tailwindlabs/tailwindcss-typography\n// see full styling list in global.css\nexport const ProseContainer = cm.section`\n prose-container\n`\n","import type { ReactNode } from 'react'\nimport { useData } from 'vike-react/useData'\nimport type { DocPageData } from '../../docs/types.js'\nimport { DocsPagination } from './components/DocsPagination.js'\nimport { DocsFooter } from './components/Footer.js'\nimport { HeadingLinkCopy } from './components/HeadingLinkCopy.js'\nimport { LayoutComponent } from './components/LayoutComponent.js'\nimport { Sidebar } from './components/Sidebar.js'\nimport { TableOfContents } from './components/TableOfContents.js'\nimport TableOfContentsMobile from './components/TableOfContentsMobile.js'\nimport { useTableOfContentsState } from './components/useTableOfContentsState.js'\n\ninterface DocsLayoutProps {\n children: ReactNode\n}\n\nexport const DocsLayout = ({ children }: DocsLayoutProps) => {\n const data = useData() as DocPageData\n const { activeHeadingId, effectiveHeadings, setActiveHeadingId } = useTableOfContentsState({\n headings: data.headings,\n })\n\n return (\n <>\n <HeadingLinkCopy />\n <div className=\"absolute top-0 left-0 h-[60svh] w-full bg-radial-[at_65%_-85%] from-primary-muted-light/40 to-65% dark:from-primary-muted-light/60\" />\n <LayoutComponent>\n <div className=\"lg:flex gap-14\">\n <Sidebar currentHref={data.page.href} activeSectionId={data.page.sectionId} />\n <main className=\"min-w-0 flex-1 basis-auto shrink\">\n <TableOfContentsMobile\n headings={effectiveHeadings}\n tableOfContents={data.page.tableOfContents && effectiveHeadings.length > 0}\n pageTitle={data.page.title}\n currentHref={data.page.href}\n activeHeadingId={activeHeadingId}\n setActiveHeadingId={setActiveHeadingId}\n />\n <div className=\"mt-10 min-w-0\">{children}</div>\n <DocsPagination previousPage={data.previousPage} nextPage={data.nextPage} />\n <DocsFooter />\n </main>\n <TableOfContents\n headings={effectiveHeadings}\n tableOfContents={data.page.tableOfContents}\n activeHeadingId={activeHeadingId}\n setActiveHeadingId={setActiveHeadingId}\n />\n </div>\n </LayoutComponent>\n </>\n )\n}\n","import { cmMerge } from '@classmatejs/react'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport type { DocPageData } from '../../../docs/types.js'\nimport { withSiteBaseUrl } from '../../../shared/assets.js'\nimport { renderInlineMarkdown } from '../../../shared/renderInlineMarkdown.js'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\n\ninterface PaginationCardProps {\n item: NonNullable<DocPageData['previousPage']>\n direction: 'previous' | 'next'\n isOffset?: boolean\n}\n\nconst PaginationCard = ({ item, direction, isOffset }: PaginationCardProps) => {\n const isPrevious = direction === 'previous'\n\n return (\n <a\n href={withSiteBaseUrl(item.href)}\n className={cmMerge(\n 'group rounded-box border border-base-muted-light bg-base-100 p-5 no-underline hover:border-primary-muted-medium hover:bg-base-200',\n isPrevious ? 'text-left' : 'text-right',\n isOffset && 'sm:col-start-2',\n )}\n aria-label={`${isPrevious ? 'Previous' : 'Next'}: ${item.title}`}\n >\n <div className=\"flex flex-col justify-between gap-2\">\n <p className=\"text-lg font-semibold text-base-content\">{renderInlineMarkdown(item.title)}</p>\n <div\n className={cmMerge(\n 'flex items-center gap-1 text-base-muted group-hover:text-base-content',\n isPrevious ? 'justify-start' : 'justify-end',\n )}\n >\n {isPrevious && <ChevronLeft className=\"size-4\" />}\n <span>{isPrevious ? 'Previous' : 'Next'}</span>\n {!isPrevious && <ChevronRight className=\"size-4\" />}\n </div>\n </div>\n </a>\n )\n}\n\ninterface DocsPaginationProps {\n previousPage?: DocPageData['previousPage']\n nextPage?: DocPageData['nextPage']\n}\n\nexport const DocsPagination = ({\n previousPage: previousPageProp = null,\n nextPage: nextPageProp = null,\n}: DocsPaginationProps) => {\n const paginationEnabled = useDocsGlobalContext().footer.pagination\n const previousPage = previousPageProp\n const nextPage = nextPageProp\n\n if (!paginationEnabled) {\n return null\n }\n\n if (!previousPage && !nextPage) {\n return null\n }\n\n return (\n <nav className=\"mb-10 mt-16\" aria-label=\"Previous Next\">\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {previousPage && <PaginationCard item={previousPage} direction=\"previous\" />}\n {nextPage && <PaginationCard isOffset={!previousPage} item={nextPage} direction=\"next\" />}\n </div>\n </nav>\n )\n}\n","import { Bug, Pencil } from 'lucide-react'\nimport { memo } from 'react'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\nimport { Brand } from './Brand.js'\nimport SocialIcons from './SocialLinks.js'\n\nexport const DocsFooter = memo(() => {\n const { brand } = useDocsGlobalContext()\n\n return (\n <footer className=\"mb-8 mt-12 text-sm border-t border-base-muted-light pt-10\">\n <div className=\"mb-16 flex items-center gap-2\">\n <a href=\"edit\" className=\"btn btn-sm btn-primary btn-soft\">\n <Pencil className=\"size-3\" /> Edit this page\n </a>\n <a href=\"edit\" className=\"btn btn-sm btn-primary btn-soft\">\n <Bug className=\"size-3\" /> Report Issue\n </a>\n </div>\n <div className=\"flex justify-between items-center\">\n <SocialIcons />\n <div className=\"flex gap-2 items-center\">{brand && <Brand brand={brand} noText />}</div>\n </div>\n </footer>\n )\n})\n","import { useEffect } from 'react'\n\nconst copyText = async (value: string) => {\n try {\n await navigator.clipboard.writeText(value)\n return\n } catch {\n const textarea = document.createElement('textarea')\n textarea.value = value\n textarea.setAttribute('readonly', 'true')\n textarea.style.position = 'fixed'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n textarea.select()\n document.execCommand('copy')\n document.body.removeChild(textarea)\n }\n}\n\nconst getHeadingLink = (target: EventTarget | null) =>\n target instanceof Element ? target.closest('a[data-copy-heading-link]') : null\n\nexport const HeadingLinkCopy = () => {\n useEffect(() => {\n const handleClick = (event: MouseEvent) => {\n if (event.defaultPrevented || event.button !== 0) {\n return\n }\n\n if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n return\n }\n\n const link = getHeadingLink(event.target)\n if (!link) {\n return\n }\n\n const href = link.getAttribute('href')\n if (!href) {\n return\n }\n\n const nextUrl = new URL(href, window.location.href)\n if (nextUrl.hash && window.location.hash !== nextUrl.hash) {\n history.replaceState(null, '', nextUrl.hash)\n }\n\n void copyText(nextUrl.href)\n }\n\n document.addEventListener('click', handleClick)\n\n return () => {\n document.removeEventListener('click', handleClick)\n }\n }, [])\n\n return null\n}\n","import { cmMerge } from '@classmatejs/react'\nimport type { LucideIcon } from 'lucide-react'\nimport type { ReactNode } from 'react'\nimport { memo, useEffect, useRef } from 'react'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport { getDocsIconMapKey } from '../../../docs/iconKeys.js'\nimport { getActiveSectionByPathname } from '../../../docs/runtime.js'\nimport type {\n DocsIconMap,\n ResolvedDocsSection,\n ResolvedSidebarGroup,\n ResolvedSidebarNode,\n} from '../../../docs/types.js'\nimport { withSiteBaseUrl } from '../../../shared/assets.js'\nimport { renderInlineMarkdown } from '../../../shared/renderInlineMarkdown.js'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\nimport { useDocsSidebarActions, useDocsSidebarStore } from '../store/runtime-store.js'\nimport {\n containsActiveHref,\n getGroupHref,\n getVisibleGroupItems,\n getVisibleNavItems,\n hasActiveItem,\n} from './docsNavigation.js'\n\nconst useAutoOpenDetails = (nodeId: string, isOpenByDefault: boolean, hasActiveDescendant: boolean) => {\n const storedOpen = useDocsSidebarStore((state) => state.openNodes[nodeId])\n const { setNodeOpen } = useDocsSidebarActions()\n const isOpen = storedOpen === undefined ? isOpenByDefault || hasActiveDescendant : storedOpen || hasActiveDescendant\n\n useEffect(() => {\n if (hasActiveDescendant) {\n setNodeOpen(nodeId, true)\n return\n }\n\n if (storedOpen === undefined && isOpenByDefault) {\n setNodeOpen(nodeId, true)\n }\n }, [hasActiveDescendant, isOpenByDefault, nodeId, setNodeOpen, storedOpen])\n\n return {\n isOpen,\n setIsOpen: (nextOpen: boolean) => setNodeOpen(nodeId, nextOpen),\n }\n}\n\ninterface SidebarPageLinkProps {\n title: string\n href: string\n currentHref: string\n icon?: LucideIcon\n}\n\nconst SidebarPageLink = ({ title, href, currentHref, icon: Icon }: SidebarPageLinkProps) => {\n return (\n <li className=\"rounded-none\">\n <a\n href={withSiteBaseUrl(href)}\n className={cmMerge(\n 'rounded-field py-2 text-base-muted hover:text-base-content justify-start hover:bg-base-200',\n href === currentHref && 'text-primary! font-semibold bg-base-200',\n )}\n >\n <span className=\"flex items-center gap-2\">\n {Icon ? <Icon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n <span>{renderInlineMarkdown(title, { codeClassName: 'text-sm!' })}</span>\n </span>\n </a>\n </li>\n )\n}\n\nconst SidebarGroupDivider = ({ title, icon: Icon }: { title: string; icon?: LucideIcon }) => {\n return (\n <li className=\"ml-3 mt-2 mb-2 border-b border-base-muted-light text-xs text-base-muted-medium pointer-events-none font-semibold\">\n <span className=\"-ml-3 flex items-center gap-2\">\n {Icon ? <Icon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n <span>{renderInlineMarkdown(title, { codeClassName: 'text-sm!' })}</span>\n </span>\n </li>\n )\n}\n\ninterface SidebarGroupTitleProps {\n title?: string\n href?: string\n isActive: boolean\n allowNavigation?: boolean\n icon?: LucideIcon\n}\n\nconst SidebarGroupTitle = ({ title, href, isActive, allowNavigation = false, icon: Icon }: SidebarGroupTitleProps) => {\n const content = (\n <span className=\"flex items-center gap-2\">\n {Icon ? <Icon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n <span\n className={cmMerge(\n allowNavigation ? 'font-medium' : 'font-semibold',\n isActive && allowNavigation && 'text-primary!',\n )}\n >\n {title ? renderInlineMarkdown(title, { codeClassName: 'text-sm!' }) : null}\n </span>\n </span>\n )\n\n if (allowNavigation && href) {\n return (\n <a\n href={withSiteBaseUrl(href)}\n className={cmMerge(\n 'flex items-center gap-2 rounded-field py-2 text-base-muted hover:text-base-content no-underline',\n isActive && 'text-primary! font-semibold',\n )}\n >\n {content}\n </a>\n )\n }\n\n return <span className=\"flex items-center gap-2 rounded-field py-2 text-base-content\">{content}</span>\n}\n\nconst renderSidebarItems = (\n items: ResolvedSidebarNode[],\n currentHref: string,\n docsIconMap: DocsIconMap,\n): ReactNode[] => {\n return items.map((item) => {\n if (item.kind === 'page') {\n return (\n <SidebarPageLink\n key={item.id}\n title={item.navTitle}\n href={item.href}\n currentHref={currentHref}\n icon={docsIconMap[getDocsIconMapKey('page', item.id)]}\n />\n )\n }\n\n return <SidebarNestedGroup key={item.id} group={item} currentHref={currentHref} docsIconMap={docsIconMap} />\n })\n}\n\ninterface SidebarItemListProps {\n items: ResolvedSidebarNode[]\n currentHref: string\n docsIconMap: DocsIconMap\n}\n\nconst SidebarItemList = ({ items, currentHref, docsIconMap }: SidebarItemListProps) => {\n const visibleItems = getVisibleNavItems(items)\n\n return <ul className=\"menu lg:w-[97%]\">{renderSidebarItems(visibleItems, currentHref, docsIconMap)}</ul>\n}\n\ninterface SidebarNestedGroupProps {\n group: ResolvedSidebarGroup\n currentHref: string\n docsIconMap: DocsIconMap\n}\n\nconst SidebarNestedGroup = ({ group, currentHref, docsIconMap }: SidebarNestedGroupProps) => {\n const groupHref = getGroupHref(group)\n const visibleItems = getVisibleGroupItems(group)\n const isCollapsible = group.collapsible !== undefined\n const isOpenByDefault = group.collapsible?.isDefaultOpen ?? true\n const nestedHasActiveItem = groupHref === currentHref || hasActiveItem(group.items, currentHref)\n const { isOpen, setIsOpen } = useAutoOpenDetails(`group:${group.id}`, isOpenByDefault, nestedHasActiveItem)\n const GroupIcon = docsIconMap[getDocsIconMapKey('group', group.id)]\n\n if (!isCollapsible) {\n if (!group.title) {\n return <>{renderSidebarItems(visibleItems, currentHref, docsIconMap)}</>\n }\n\n return (\n <>\n <SidebarGroupDivider title={group.title} icon={GroupIcon} />\n {renderSidebarItems(visibleItems, currentHref, docsIconMap)}\n </>\n )\n }\n\n return (\n <li>\n <details\n open={isOpen}\n onToggle={(event) => {\n setIsOpen(event.currentTarget.open)\n }}\n >\n <summary className=\"rounded-field max-h-9 flex items-center\">\n <SidebarGroupTitle\n title={group.title}\n href={groupHref ?? undefined}\n isActive={nestedHasActiveItem}\n allowNavigation={Boolean(groupHref)}\n icon={GroupIcon}\n />\n </summary>\n {visibleItems.length > 0 ? (\n <SidebarItemList items={visibleItems} currentHref={currentHref} docsIconMap={docsIconMap} />\n ) : null}\n </details>\n </li>\n )\n}\n\ninterface SidebarSectionGroupProps {\n section: ResolvedDocsSection\n currentHref: string\n activeSectionId: string\n}\n\nconst SidebarSectionGroup = ({ section, currentHref, activeSectionId }: SidebarSectionGroupProps) => {\n const docs = useDocsGlobalContext()\n const SectionIcon = docs.docsIconMap[getDocsIconMapKey('section', section.id)]\n const sectionHasActiveItem = section.id === activeSectionId || containsActiveHref(section.items, currentHref)\n const { isOpen, setIsOpen } = useAutoOpenDetails(\n `section:${section.id}`,\n section.id === activeSectionId,\n sectionHasActiveItem,\n )\n\n return (\n <li className=\"pb-1\">\n <details\n open={isOpen}\n onToggle={(event) => {\n setIsOpen(event.currentTarget.open)\n }}\n >\n <summary className=\"rounded-field max-h-9 flex items-center\">\n <SidebarGroupTitle title={section.title} isActive={sectionHasActiveItem} icon={SectionIcon} />\n </summary>\n <SidebarItemList items={section.items} currentHref={currentHref} docsIconMap={docs.docsIconMap} />\n </details>\n </li>\n )\n}\n\ninterface SidebarProps {\n currentHref?: string\n activeSectionId?: string\n}\n\nexport const Sidebar = memo(\n ({ currentHref: currentHrefProp = '', activeSectionId: activeSectionIdProp = '' }: SidebarProps) => {\n const scrollContainerRef = useRef<HTMLDivElement | null>(null)\n const { urlPathname } = usePageContext()\n const currentHref = currentHrefProp || urlPathname\n const docs = useDocsGlobalContext()\n const activeSectionId = activeSectionIdProp || getActiveSectionByPathname(docs, currentHref)?.id || ''\n const { sidebarSections } = docs\n\n return (\n <aside className=\"hidden basis-76 shrink-0 lg:block\">\n <div className=\"-ml-3 sticky top-14\">\n <div className=\"absolute h-full w-px right-0 top-0 bg-linear-to-t to-base-muted-light via-base-muted-light pointer-events-none z-1\" />\n <div\n ref={scrollContainerRef}\n className=\"pr-4 h-[calc(100svh-14*var(--spacing))] overflow-y-scroll relative z-10\"\n >\n <ul className={cmMerge('menu p-0 m-0 w-full px-0 pt-3 li:last-child:border-0')}>\n {sidebarSections.map((section) => (\n <SidebarSectionGroup\n key={section.id}\n section={section}\n currentHref={currentHref}\n activeSectionId={activeSectionId}\n />\n ))}\n </ul>\n </div>\n </div>\n </aside>\n )\n },\n)\n","import type { ResolvedSidebarGroup, ResolvedSidebarNode } from '../../../docs/types.js'\n\nexport const containsActiveHref = (items: ResolvedSidebarNode[], currentHref: string): boolean => {\n return items.some((item) => {\n if (item.kind === 'page') {\n return item.href === currentHref\n }\n\n return item.href === currentHref || containsActiveHref(item.items, currentHref)\n })\n}\n\nexport const hasActiveItem = (items: ResolvedSidebarNode[], activeHref: string) => containsActiveHref(items, activeHref)\n\nexport const getVisibleNavItems = (items: ResolvedSidebarNode[]) => items.filter((item) => item.showInNav)\n\nexport const getVisibleGroupItems = (group: ResolvedSidebarGroup) => {\n const visibleItems = getVisibleNavItems(group.items)\n\n if (!group.href) {\n return visibleItems\n }\n\n return visibleItems.filter((item): item is ResolvedSidebarNode => {\n if (item.kind !== 'page') {\n return true\n }\n\n return item.href !== group.href\n })\n}\n\nexport const getGroupHref = (group: ResolvedSidebarGroup): string | null => group.href ?? null\n","import cm, { cmMerge } from '@classmatejs/react'\nimport { Flame, TableOfContentsIcon } from 'lucide-react'\nimport type { Dispatch, SetStateAction } from 'react'\nimport type { DocHeading, ResolvedDocsPartnersConfig } from '../../../docs/types.js'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\n\ninterface TableOfContentsProps {\n headings?: DocHeading[]\n tableOfContents?: boolean\n activeHeadingId?: string\n setActiveHeadingId?: Dispatch<SetStateAction<string>>\n}\n\nexport const TableOfContents = ({\n headings: headingsProp = [],\n tableOfContents: tableOfContentsProp = false,\n activeHeadingId = '',\n setActiveHeadingId = () => undefined,\n}: TableOfContentsProps) => {\n const { partners } = useDocsGlobalContext()\n const effectiveHeadings = headingsProp\n const effectiveTableOfContents = tableOfContentsProp\n\n return (\n <aside className={cmMerge(effectiveTableOfContents ? 'w-64' : 'w-32', 'hidden shrink-0 xl:block')}>\n <div className=\"sticky top-14\">\n <div className=\"relative h-[calc(100svh-14*var(--spacing))] overflow-y-auto overflow-x-hidden pt-10 pb-8\">\n {effectiveTableOfContents\n ? effectiveHeadings.length > 0 && (\n <>\n <p className=\"mb-4 flex items-center gap-2 text-xs font-semibold uppercase tracking-widest text-base-muted\">\n <TableOfContentsIcon className=\"size-3\" />\n On this page\n </p>\n <nav aria-label=\"On this page\" className=\"mb-12\">\n <ul>\n {effectiveHeadings.map((heading) => (\n <li key={heading.id}>\n <a\n href={`#${heading.id}`}\n aria-current={activeHeadingId === heading.id ? 'location' : undefined}\n onClick={() => setActiveHeadingId(heading.id)}\n className={cmMerge(\n 'cursor-pointer block border-l border-base-muted-light py-1.5 text-sm text-base-muted hover:border-primary-muted hover:text-base-content',\n heading.depth > 2 ? 'pl-6' : 'pl-4',\n activeHeadingId === heading.id\n ? 'border-l-2 border-primary font-semibold text-base-content'\n : '',\n )}\n >\n {heading.title}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n </>\n )\n : null}\n <Adbar partners={partners} />\n </div>\n </div>\n </aside>\n )\n}\n\nconst Adbar = ({ partners }: { partners: ResolvedDocsPartnersConfig }) => {\n if (partners.primary.length === 0 && partners.gold.length === 0) {\n return null\n }\n\n return (\n <aside>\n <p className=\"mb-4 flex items-center gap-2 text-xs font-semibold uppercase tracking-widest text-base-muted\">\n <Flame className=\"size-3\" />\n Partners\n </p>\n <ul className=\"grid grid-cols-[repeat(auto-fit,minmax(5.5rem,1fr))] gap-3 opacity-90\">\n {partners.primary.map((partner) => (\n <AdbarItem key={partner.name} className=\"col-span-full\">\n <AdbarLink href={partner.href} title={partner.name}>\n <PartnerLogo partner={partner} />\n </AdbarLink>\n </AdbarItem>\n ))}\n {partners.gold.map((partner) => (\n <AdbarItem key={partner.name}>\n <AdbarLink href={partner.href} title={partner.name}>\n <PartnerLogo partner={partner} />\n </AdbarLink>\n </AdbarItem>\n ))}\n </ul>\n </aside>\n )\n}\n\nconst PartnerLogo = ({\n partner,\n}: {\n partner: ResolvedDocsPartnersConfig['primary'][number] | ResolvedDocsPartnersConfig['gold'][number]\n}) => {\n return (\n <>\n <Image\n src={partner.logoLight}\n width={200}\n height={200}\n alt={partner.logoAlt}\n className={cmMerge('block', partner.logoDark ? 'dark:hidden' : 'dark:invert')}\n />\n {partner.logoDark ? (\n <Image src={partner.logoDark} width={200} height={200} alt={partner.logoAlt} className=\"hidden dark:block\" />\n ) : null}\n </>\n )\n}\n\nconst AdbarItem = cm.li`\n list-none\n px-5\n py-5\n bg-base-200\n text-center\n flex\n items-center\n justify-center\n rounded-field\n`\n\nconst AdbarLink = cm.a`\n block\n w-full\n transition-opacity\n hover:opacity-100\n focus-visible:opacity-100\n`\n\nconst Image = cm.img`\n mx-auto\n w-24\n h-auto\n`\n","import cm from '@classmatejs/react'\nimport { TableOfContents } from 'lucide-react'\nimport { type Dispatch, type SetStateAction, useId } from 'react'\nimport type { DocHeading } from '../../../docs/types'\nimport BreadcrumbSidebarTrigger from './BreadcrumbSidebarTrigger'\n\ninterface TableOfContentsProps {\n headings?: DocHeading[]\n tableOfContents?: boolean\n pageTitle?: string\n currentHref: string\n activeHeadingId?: string\n setActiveHeadingId?: Dispatch<SetStateAction<string>>\n}\n\nconst TableOfContentsMobile = ({\n headings = [],\n tableOfContents = false,\n pageTitle = 'On this page',\n currentHref,\n activeHeadingId = '',\n setActiveHeadingId = () => undefined,\n}: TableOfContentsProps) => {\n const topOptionValue = '__docs-page-top__'\n const selectId = useId()\n const labelId = `${selectId}-label`\n const selectedValue =\n tableOfContents && headings.some((heading) => heading.id === activeHeadingId) ? activeHeadingId : ''\n\n return (\n <>\n <div className=\"h-12 xl:hidden\"></div>\n <StyledTOC>\n <StyledTOCInner>\n <BreadcrumbSidebarTrigger currentHref={currentHref} />\n <label className=\"select select-sm md:w-80 w-full\" htmlFor={selectId}>\n <span id={labelId} className=\"sr-only\">\n {pageTitle}\n </span>\n <span className=\"label flex\" aria-hidden=\"true\">\n <TableOfContents className=\"size-4\" />\n </span>\n <select\n id={selectId}\n aria-labelledby={labelId}\n value={selectedValue || topOptionValue}\n onChange={(e) => {\n const value = e.target.value\n if (value === topOptionValue) {\n setActiveHeadingId('')\n window.history.replaceState(null, '', `${window.location.pathname}${window.location.search}`)\n window.scrollTo({ top: 0, behavior: 'auto' })\n return\n }\n\n setActiveHeadingId(value)\n window.location.hash = encodeURIComponent(value)\n }}\n >\n <option value={topOptionValue}>{pageTitle}</option>\n {tableOfContents &&\n headings.map((heading) => (\n <option key={heading.id} value={heading.id}>\n {heading.title}\n </option>\n ))}\n </select>\n </label>\n </StyledTOCInner>\n </StyledTOC>\n </>\n )\n}\n\nexport default TableOfContentsMobile\n\nconst StyledTOC = cm.div`\n block xl:hidden\n fixed\n bg-base-100 border-b-base-muted-light\n w-full h-14\n top-14 left-0 border-b z-5\n lg:w-[calc(100svw-80*var(--spacing))]\n lg:left-80\n`\n\nconst StyledTOCInner = cm.div`\n absolute inset-0 flex justify-between items-center\n pr-4\n px-4 lg:pl-14\n`\n","import { ChevronLast, ChevronsRight } from 'lucide-react'\nimport { useCallback } from 'react'\nimport { getActiveSectionByPathname } from '../../../docs/runtime.js'\nimport type { ResolvedSidebarNode } from '../../../docs/types.js'\nimport { renderInlineMarkdown } from '../../../shared/renderInlineMarkdown.js'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\n\ntype BreadcrumbItem = {\n id: string\n title: string\n}\n\nconst dedupeBreadcrumbs = (items: BreadcrumbItem[]) => {\n return items.filter((item, index) => index === 0 || items[index - 1]?.title !== item.title)\n}\n\nconst getSidebarBreadcrumbs = (items: ResolvedSidebarNode[], currentHref: string): BreadcrumbItem[] | null => {\n for (const item of items) {\n if (item.kind === 'page') {\n if (item.href === currentHref) {\n return [{ id: item.id, title: item.navTitle }]\n }\n\n continue\n }\n\n if (item.href === currentHref) {\n return item.title ? [{ id: item.id, title: item.title }] : []\n }\n\n const nestedBreadcrumbs = getSidebarBreadcrumbs(item.items, currentHref)\n\n if (!nestedBreadcrumbs) {\n continue\n }\n\n return dedupeBreadcrumbs(\n item.title ? [{ id: item.id, title: item.title }, ...nestedBreadcrumbs] : nestedBreadcrumbs,\n )\n }\n\n return null\n}\n\nconst BreadcrumbSidebarTrigger = ({ currentHref }: { currentHref: string }) => {\n const docs = useDocsGlobalContext()\n const activeSection = getActiveSectionByPathname(docs, currentHref)\n const breadcrumbItems = dedupeBreadcrumbs([\n ...(activeSection ? [{ id: activeSection.id, title: activeSection.navTitle }] : []),\n ...(activeSection ? (getSidebarBreadcrumbs(activeSection.items, currentHref) ?? []) : []),\n ])\n\n const handleClick = useCallback(() => {\n alert('TODO: Open mobile menu')\n }, [])\n\n return (\n <button className=\"cursor-pointer min-w-0 max-w-full hidden md:block\" type=\"button\" onClick={handleClick}>\n <span className=\"flex items-center gap-1 min-w-0 overflow-hidden lg:hidden\">\n <ChevronLast className=\"size-4 shrink-0 text-primary\" />\n <span className=\"hidden md:flex items-center gap-1\">\n {breadcrumbItems.map((item, index) => (\n <span key={item.id} className=\"contents\">\n {index > 0 ? <ChevronsRight className=\"size-4 shrink-0 text-base-muted-medium\" /> : null}\n <span className={index === 0 ? 'font-semibold truncate' : 'text-sm truncate'}>\n {renderInlineMarkdown(item.title, { codeClassName: 'text-sm!' })}\n </span>\n </span>\n ))}\n </span>\n </span>\n </button>\n )\n}\n\nexport default BreadcrumbSidebarTrigger\n","import type { Dispatch, SetStateAction } from 'react'\nimport { useEffect, useState } from 'react'\nimport { createHeadingSlugger, normalizeHeadingTitle } from '../../../docs/docHeadings.js'\nimport type { DocHeading } from '../../../docs/types.js'\n\nconst getCurrentHash = () => {\n try {\n return decodeURIComponent(window.location.hash)\n } catch {\n return window.location.hash\n }\n}\n\nconst getHeadingElements = () => {\n const root = document.querySelector('[data-doc-content]')\n if (!(root instanceof HTMLElement)) {\n return []\n }\n\n return Array.from(root.querySelectorAll('h2, h3, h4')).filter(\n (element): element is HTMLHeadingElement => element instanceof HTMLHeadingElement,\n )\n}\n\nconst areHeadingsEqual = (left: DocHeading[], right: DocHeading[]) => {\n if (left.length !== right.length) {\n return false\n }\n\n return left.every((heading, index) => {\n const other = right[index]\n return (\n other !== undefined && heading.depth === other.depth && heading.id === other.id && heading.title === other.title\n )\n })\n}\n\nconst syncHeadingsFromDom = (setDomHeadings: Dispatch<SetStateAction<DocHeading[]>>) => {\n const root = document.querySelector('[data-doc-content]')\n if (!(root instanceof HTMLElement)) {\n return\n }\n\n const slugify = createHeadingSlugger()\n const nextHeadings = Array.from(root.querySelectorAll('h2, h3, h4'))\n .map((element) => {\n const title = normalizeHeadingTitle(element.textContent ?? '')\n if (!title) {\n return null\n }\n\n element.classList.add('scroll-mt-32')\n element.classList.add('xl:scroll-mt-22')\n\n const id = element.id || slugify(title)\n if (!element.id) {\n element.id = id\n }\n\n return {\n depth: Number(element.tagName.slice(1)),\n id,\n title,\n } satisfies DocHeading\n })\n .filter((heading): heading is DocHeading => heading !== null)\n\n setDomHeadings((currentHeadings) => {\n if (areHeadingsEqual(currentHeadings, nextHeadings)) {\n return currentHeadings\n }\n\n return nextHeadings\n })\n}\n\nconst updateActiveHeadingFromScroll = (setActiveHeadingId: (value: string) => void) => {\n const headingElements = getHeadingElements()\n if (headingElements.length === 0) {\n return\n }\n\n const activationOffset = 144\n let nextActiveHeadingId = ''\n\n for (const heading of headingElements) {\n if (!heading.id) {\n continue\n }\n\n if (heading.getBoundingClientRect().top <= activationOffset) {\n nextActiveHeadingId = heading.id\n continue\n }\n\n break\n }\n\n const lastHeading = headingElements.at(-1)\n if (lastHeading?.id && window.innerHeight + window.scrollY >= document.documentElement.scrollHeight - 8) {\n nextActiveHeadingId = lastHeading.id\n }\n\n setActiveHeadingId(nextActiveHeadingId)\n}\n\ninterface UseTableOfContentsStateProps {\n headings?: DocHeading[]\n}\n\ninterface UseTableOfContentsStateResult {\n activeHeadingId: string\n effectiveHeadings: DocHeading[]\n setActiveHeadingId: Dispatch<SetStateAction<string>>\n}\n\nexport const useTableOfContentsState = ({\n headings: routeHeadings = [],\n}: UseTableOfContentsStateProps): UseTableOfContentsStateResult => {\n const [activeHeadingId, setActiveHeadingId] = useState('')\n const [domHeadings, setDomHeadings] = useState<DocHeading[]>(routeHeadings)\n const effectiveHeadings = domHeadings.length > 0 ? domHeadings : routeHeadings\n\n useEffect(() => {\n let scrollFrame = 0\n\n const syncActiveHeading = () => {\n if (scrollFrame) {\n return\n }\n\n scrollFrame = window.requestAnimationFrame(() => {\n scrollFrame = 0\n updateActiveHeadingFromScroll(setActiveHeadingId)\n })\n }\n\n const updateHash = () => {\n const currentHash = getCurrentHash().replace(/^#/, '')\n if (currentHash !== '') {\n setActiveHeadingId(currentHash)\n return\n }\n\n syncActiveHeading()\n }\n\n updateHash()\n queueMicrotask(() => {\n syncHeadingsFromDom(setDomHeadings)\n syncActiveHeading()\n })\n\n window.addEventListener('hashchange', updateHash)\n window.addEventListener('scroll', syncActiveHeading, { passive: true })\n window.addEventListener('resize', syncActiveHeading)\n\n return () => {\n if (scrollFrame) {\n window.cancelAnimationFrame(scrollFrame)\n }\n\n window.removeEventListener('hashchange', updateHash)\n window.removeEventListener('scroll', syncActiveHeading)\n window.removeEventListener('resize', syncActiveHeading)\n }\n }, [])\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return\n }\n\n setDomHeadings((currentHeadings) => {\n if (areHeadingsEqual(currentHeadings, routeHeadings)) {\n return currentHeadings\n }\n\n return routeHeadings\n })\n setActiveHeadingId('')\n\n queueMicrotask(() => {\n syncHeadingsFromDom(setDomHeadings)\n updateActiveHeadingFromScroll(setActiveHeadingId)\n })\n }, [routeHeadings])\n\n return {\n activeHeadingId,\n effectiveHeadings,\n setActiveHeadingId,\n }\n}\n","import type { ComponentType } from 'react'\nimport { useData } from 'vike-react/useData'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport type { DocPageData } from '../../docs/types.js'\nimport { UniversalMdxProvider } from '../../mdx/components/UniversalMdxProvider.js'\nimport { renderInlineMarkdown } from '../../shared/renderInlineMarkdown.js'\nimport DocsBreadcrumbs from './components/DocsBreadcrumbs.js'\nimport { ProseContainer } from './components/ProseContainer.js'\nimport { useDocsGlobalContext } from './docsGlobalContext.js'\nimport { getMdxRuntimeValue } from './getMdxRuntimeValue.js'\n\ninterface DocsPageProps {\n Content: ComponentType\n}\n\nexport const DocsPage = ({ Content }: DocsPageProps) => {\n const pageContext = usePageContext()\n const docs = useDocsGlobalContext()\n const { page } = useData() as DocPageData\n\n return (\n <UniversalMdxProvider\n value={getMdxRuntimeValue({\n docs,\n currentPathname: pageContext.urlPathname,\n })}\n >\n <ProseContainer data-doc-content=\"\">\n <DocsBreadcrumbs currentHref={page.href} />\n <h1 className=\"scroll-mt-32 xl:scroll-mt-22\">{renderInlineMarkdown(page.title)}</h1>\n <Content />\n </ProseContainer>\n </UniversalMdxProvider>\n )\n}\n","import { ChevronsRight } from 'lucide-react'\nimport { getDocsIconMapKey } from '../../../docs/iconKeys.js'\nimport { getActiveSectionByPathname } from '../../../docs/runtime.js'\nimport type { ResolvedSidebarNode } from '../../../docs/types.js'\nimport { renderInlineMarkdown } from '../../../shared/renderInlineMarkdown.js'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\n\ntype BreadcrumbItem = {\n id: string\n kind: 'group' | 'page'\n title: string\n}\n\nconst dedupeBreadcrumbs = (items: BreadcrumbItem[]) => {\n return items.filter((item, index) => index === 0 || items[index - 1]?.title !== item.title)\n}\n\nconst getSidebarBreadcrumbs = (items: ResolvedSidebarNode[], currentHref: string): BreadcrumbItem[] | null => {\n for (const item of items) {\n if (item.kind === 'page') {\n if (item.href === currentHref) {\n return [{ id: item.id, kind: item.kind, title: item.navTitle }]\n }\n\n continue\n }\n\n if (item.href === currentHref) {\n return item.title ? [{ id: item.id, kind: item.kind, title: item.title }] : []\n }\n\n const nestedBreadcrumbs = getSidebarBreadcrumbs(item.items, currentHref)\n\n if (!nestedBreadcrumbs) {\n continue\n }\n\n return dedupeBreadcrumbs(item.title ? [{ id: item.id, kind: item.kind, title: item.title }] : nestedBreadcrumbs)\n }\n\n return null\n}\n\nconst DocsBreadcrumbs = ({ currentHref }: { currentHref: string }) => {\n const docs = useDocsGlobalContext()\n const activeSection = getActiveSectionByPathname(docs, currentHref)\n const breadcrumbItems = dedupeBreadcrumbs([\n ...(activeSection ? (getSidebarBreadcrumbs(activeSection.items, currentHref) ?? []) : []),\n ])\n\n return (\n <span className=\"hidden lg:flex items-center text-sm gap-1 min-w-0 overflow-hidden mb-3 text-primary\">\n {breadcrumbItems.map((item, index) => {\n const Icon = docs.docsIconMap[getDocsIconMapKey(item.kind, item.id)]\n\n return (\n <span key={item.id} className=\"contents\">\n {index > 0 ? <ChevronsRight className=\"size-4 shrink-0 text-base-muted-medium\" /> : null}\n <span className=\"flex min-w-0 items-center gap-1.5\">\n {Icon ? <Icon className=\"size-3 shrink-0\" aria-hidden=\"true\" /> : null}\n <span className=\"truncate\">{renderInlineMarkdown(item.title, { codeClassName: 'text-sm!' })}</span>\n </span>\n </span>\n )\n })}\n </span>\n )\n}\n\nexport default DocsBreadcrumbs\n","import type {\n UniversalMdxRuntimeValue,\n UniversalResolvedDocLink,\n UniversalResolvedOverviewItem,\n} from '../../mdx/components/types.js'\nimport { withSiteBaseUrl } from '../../shared/assets.js'\nimport type { DocsGlobalContextData } from '../../docs/types.js'\nimport {\n getActiveSectionByPathname,\n getResolvedPageByPathname,\n getResolvedSectionById,\n isSamePagePathname,\n resolveDocsHref,\n} from '../../docs/runtime.js'\nimport { docsCodeBlockChoiceStore } from './store/settings-store.js'\n\nconst isExternalHref = (href: string) => {\n return /^(?:[a-z]+:)?\\/\\//i.test(href) || href.startsWith('mailto:') || href.startsWith('tel:')\n}\n\nconst splitHref = (href: string) => {\n const [pathname, hash = ''] = href.split('#')\n return {\n pathname,\n hash: hash ? `#${hash}` : '',\n }\n}\n\nconst resolveDocLink = (options: {\n docs: DocsGlobalContextData\n currentPathname: string\n href: string\n}): UniversalResolvedDocLink | null => {\n const { currentPathname, href } = options\n if (href.startsWith('#') || isExternalHref(href)) {\n return null\n }\n\n const { pathname, hash } = splitHref(href)\n const docsPathname = resolveDocsHref(options.docs.basePath, pathname)\n\n if (!docsPathname) {\n return null\n }\n\n const page = getResolvedPageByPathname(options.docs, docsPathname)\n if (!page) {\n return null\n }\n\n const section = getResolvedSectionById(options.docs, page.sectionId)\n\n return {\n href: withSiteBaseUrl(`${page.href}${hash}`),\n title: page.title,\n breadcrumb: section ? [section.navTitle] : [],\n isCurrentPage: isSamePagePathname(page, currentPathname),\n }\n}\n\nconst resolveOverviewItem = (options: {\n docs: DocsGlobalContextData\n id: string\n}): UniversalResolvedOverviewItem | null => {\n const page = options.docs.pages.find((candidate) => candidate.id === options.id)\n\n if (!page) {\n return null\n }\n\n return {\n title: page.title,\n href: withSiteBaseUrl(page.href),\n excerpt: page.description ?? null,\n }\n}\n\nexport const getMdxRuntimeValue = (options: {\n docs: DocsGlobalContextData\n currentPathname: string\n}): UniversalMdxRuntimeValue => {\n const { currentPathname, docs } = options\n const activeSection = getActiveSectionByPathname(docs, currentPathname)\n const currentPage = getResolvedPageByPathname(docs, currentPathname)\n\n return {\n locale: 'en',\n codeBlockChoices: docsCodeBlockChoiceStore,\n localizeHref: (href) => {\n if (href.startsWith('#') || isExternalHref(href)) {\n return href\n }\n\n const { pathname, hash } = splitHref(href)\n const docsPathname = resolveDocsHref(docs.basePath, pathname)\n const page = docsPathname ? getResolvedPageByPathname(docs, docsPathname) : null\n\n if (!page) {\n if (docsPathname && !pathname.startsWith('/')) {\n return withSiteBaseUrl(`${docsPathname}${hash}`)\n }\n\n return withSiteBaseUrl(href)\n }\n\n return withSiteBaseUrl(`${page.href}${hash}`)\n },\n resolveDocLink: ({ href }) =>\n resolveDocLink({\n docs,\n currentPathname,\n href,\n }),\n resolveOverviewItem: (id) =>\n resolveOverviewItem({\n docs,\n id,\n }),\n t: (group, key) => {\n if (group === 'docs' && key === 'onThisPage') {\n return 'On this page'\n }\n\n if (group === 'docs' && key === 'previous') {\n return 'Previous'\n }\n\n if (group === 'docs' && key === 'next') {\n return 'Next'\n }\n\n if (group === 'docs' && key === 'currentSection') {\n return activeSection?.navTitle ?? currentPage?.title ?? 'Docs'\n }\n\n return key\n },\n }\n}\n"],"mappings":"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","names":["cmMerge","usePageContext","cm","usePageContext","cmMerge","jsx","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","cmMerge","cm","cmMerge","ChevronDown","Menu","TextSearch","useCallback","jsx","jsxs","StyledNav","cm","StyledNavList","useCallback","cmMerge","ChevronDown","TextSearch","Menu","cmMerge","useEffect","useState","jsx","jsxs","useState","useEffect","cmMerge","useCallback","useEffect","useState","jsx","jsxs","usePageContext","cm","useEffect","useMemo","useMemo","useEffect","jsx","jsxs","usePageContext","cmMerge","jsx","jsxs","Fragment","jsx","jsxs","jsx","Fragment","jsx","jsxs","cm","cmMerge","jsx","jsxs","cmMerge","memo","jsx","jsxs","memo","useEffect","cmMerge","memo","useEffect","useRef","usePageContext","Fragment","jsx","jsxs","useEffect","cmMerge","memo","useRef","usePageContext","cm","cmMerge","Fragment","jsx","jsxs","cmMerge","cm","cm","TableOfContents","useCallback","jsx","jsxs","useCallback","Fragment","jsx","jsxs","TableOfContents","cm","useEffect","useState","useState","useEffect","Fragment","jsx","jsxs","useData","usePageContext","ChevronsRight","jsx","jsxs","dedupeBreadcrumbs","getSidebarBreadcrumbs","ChevronsRight","jsx","jsxs","usePageContext","useData"]}
@@ -150,36 +150,6 @@ var useDocsSidebarActions = () => {
150
150
  return useDocsRuntimeStore((state) => state.sidebarActions);
151
151
  };
152
152
 
153
- // src/runtime/client/components/LayoutComponent.tsx
154
- import cm from "@classmatejs/react";
155
- var LayoutSize = {
156
- xxs: "xxs",
157
- xs: "xs",
158
- sm: "sm",
159
- md: "md",
160
- lg: "lg",
161
- xl: "xl",
162
- full: "full"
163
- };
164
- var layoutComponentSizeMapping = {
165
- xxs: "max-w-[480px]",
166
- xs: "max-w-[768px]",
167
- sm: "max-w-5xl",
168
- md: "max-w-6xl",
169
- lg: "max-w-7xl",
170
- xl: "max-w-[1440px]",
171
- full: "max-w-full"
172
- };
173
- var LayoutComponent = cm.div.variants({
174
- base: ({ $noGrow }) => `px-4 ${$noGrow ? "" : "mx-auto w-full"} relative`,
175
- variants: {
176
- $size: layoutComponentSizeMapping
177
- },
178
- defaultVariants: {
179
- $size: LayoutSize.xl
180
- }
181
- });
182
-
183
153
  export {
184
154
  getDocsFromGlobalContext,
185
155
  DocsGlobalContextProvider,
@@ -190,7 +160,6 @@ export {
190
160
  useDocsSearchStore,
191
161
  useDocsSearchActions,
192
162
  useDocsSidebarStore,
193
- useDocsSidebarActions,
194
- LayoutComponent
163
+ useDocsSidebarActions
195
164
  };
196
- //# sourceMappingURL=chunk-ESAHWFDZ.js.map
165
+ //# sourceMappingURL=chunk-US7NPQZ6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/client/docsGlobalContext.ts","../src/runtime/client/store/runtime-store.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { createContext, createElement, useContext } from 'react'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport type { DocsGlobalContextData } from '../../docs/types.js'\n\nexport type DocsPageContext = {\n globalContext?: {\n docs?: DocsGlobalContextData\n }\n}\n\nconst DocsGlobalContext = createContext<DocsGlobalContextData | null>(null)\n\nexport const getDocsFromGlobalContext = (pageContext: DocsPageContext) => {\n const docs = pageContext.globalContext?.docs\n\n if (!docs) {\n throw new Error('Missing docs global context data.')\n }\n\n return docs\n}\n\nexport const DocsGlobalContextProvider = ({ children, docs }: { children: ReactNode; docs: DocsGlobalContextData }) => {\n return createElement(DocsGlobalContext.Provider, { value: docs }, children)\n}\n\nexport const useDocsGlobalContext = () => {\n const docs = useContext(DocsGlobalContext)\n\n if (!docs) {\n throw new Error('Missing docs global context provider.')\n }\n\n return docs\n}\n\nexport const useDocsFromPageGlobalContext = () => {\n return getDocsFromGlobalContext(usePageContext() as DocsPageContext)\n}\n","import type { ReactNode } from 'react'\nimport { createContext, useContext } from 'react'\nimport { useStore } from 'zustand'\nimport { createStore } from 'zustand/vanilla'\nimport type {\n DocsSearchActions,\n DocsSearchSlice,\n DocsSearchState,\n DocsSidebarActions,\n DocsSidebarSlice,\n DocsSidebarState,\n} from './types.js'\n\ntype DocsRuntimeStoreState = {\n searchActions: DocsSearchActions\n searchState: DocsSearchState\n sidebarActions: DocsSidebarActions\n sidebarState: DocsSidebarState\n}\n\ntype DocsRuntimeStoreApi = ReturnType<typeof createDocsRuntimeStore>\n\nconst defaultDocsSearchState: DocsSearchState = {\n isOpen: false,\n query: '',\n}\n\nconst defaultDocsSidebarState: DocsSidebarState = {\n openNodes: {},\n}\n\nexport const createDocsRuntimeStore = () => {\n return createStore<DocsRuntimeStoreState>()((set) => {\n const searchActions: DocsSearchActions = {\n open: () =>\n set((state) => {\n if (state.searchState.isOpen) {\n return state\n }\n\n return {\n searchState: {\n ...state.searchState,\n isOpen: true,\n },\n }\n }),\n close: () =>\n set((state) => {\n if (!state.searchState.isOpen) {\n return state\n }\n\n return {\n searchState: {\n ...state.searchState,\n isOpen: false,\n },\n }\n }),\n toggle: () =>\n set((state) => ({\n searchState: {\n ...state.searchState,\n isOpen: !state.searchState.isOpen,\n },\n })),\n setQuery: (query) =>\n set((state) => {\n if (state.searchState.query === query) {\n return state\n }\n\n return {\n searchState: {\n ...state.searchState,\n query,\n },\n }\n }),\n clearQuery: () =>\n set((state) => {\n if (state.searchState.query === '') {\n return state\n }\n\n return {\n searchState: {\n ...state.searchState,\n query: '',\n },\n }\n }),\n }\n\n const sidebarActions: DocsSidebarActions = {\n setNodeOpen: (nodeId, isOpen) =>\n set((state) => {\n if (state.sidebarState.openNodes[nodeId] === isOpen) {\n return state\n }\n\n return {\n sidebarState: {\n ...state.sidebarState,\n openNodes: {\n ...state.sidebarState.openNodes,\n [nodeId]: isOpen,\n },\n },\n }\n }),\n }\n\n return {\n searchActions,\n searchState: defaultDocsSearchState,\n sidebarActions,\n sidebarState: defaultDocsSidebarState,\n }\n })\n}\n\nconst DocsRuntimeStoreContext = createContext<DocsRuntimeStoreApi | null>(null)\n\nexport const DocsRuntimeStoreProvider = ({ children, store }: { children: ReactNode; store: DocsRuntimeStoreApi }) => {\n return <DocsRuntimeStoreContext.Provider value={store}>{children}</DocsRuntimeStoreContext.Provider>\n}\n\nconst useDocsRuntimeStoreApi = () => {\n const store = useContext(DocsRuntimeStoreContext)\n\n if (store === null) {\n throw new Error('Missing docs runtime store provider.')\n }\n\n return store\n}\n\nconst useDocsRuntimeStore = <Selected,>(selector: (state: DocsRuntimeStoreState) => Selected) => {\n return useStore(useDocsRuntimeStoreApi(), selector)\n}\n\nexport const useDocsSearchStore = <Selected,>(selector: (state: DocsSearchSlice) => Selected) => {\n return useDocsRuntimeStore((state) =>\n selector({\n ...state.searchState,\n ...state.searchActions,\n }),\n )\n}\n\nexport const useDocsSearchActions = () => {\n return useDocsRuntimeStore((state) => state.searchActions)\n}\n\nexport const useDocsSidebarStore = <Selected,>(selector: (state: DocsSidebarSlice) => Selected) => {\n return useDocsRuntimeStore((state) =>\n selector({\n ...state.sidebarState,\n ...state.sidebarActions,\n }),\n )\n}\n\nexport const useDocsSidebarActions = () => {\n return useDocsRuntimeStore((state) => state.sidebarActions)\n}\n"],"mappings":"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","names":["createContext","useContext"]}
package/dist/client.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as react from 'react';
3
3
  import { ReactNode, ComponentType } from 'react';
4
+ export { L as LayoutComponent } from './LayoutComponent-DPqs0YEs.js';
4
5
  import * as _classmatejs_react from '@classmatejs/react';
5
6
  import { D as DocsConfig, T as ThemePreference, b as DocsThemeConfig } from './types-C9WEqIOF.js';
6
7
  import * as zustand_middleware from 'zustand/middleware';
@@ -13,22 +14,6 @@ interface AppLayoutProps {
13
14
  }
14
15
  declare const AppLayout: ({ children, header }: AppLayoutProps) => react_jsx_runtime.JSX.Element;
15
16
 
16
- declare const LayoutSize: {
17
- readonly xxs: "xxs";
18
- readonly xs: "xs";
19
- readonly sm: "sm";
20
- readonly md: "md";
21
- readonly lg: "lg";
22
- readonly xl: "xl";
23
- readonly full: "full";
24
- };
25
- type LayoutSize = (typeof LayoutSize)[keyof typeof LayoutSize];
26
- interface LayoutComponentProps {
27
- $size?: LayoutSize;
28
- $noGrow?: boolean;
29
- }
30
- declare const LayoutComponent: _classmatejs_react.CmBaseComponent<react.ClassAttributes<HTMLDivElement> & react.HTMLAttributes<HTMLDivElement> & LayoutComponentProps & Partial<LayoutComponentProps>>;
31
-
32
17
  declare const MetaHead: () => react_jsx_runtime.JSX.Element;
33
18
 
34
19
  declare const ProseContainer: _classmatejs_react.CmBaseComponent<react.ClassAttributes<HTMLElement> & react.HTMLAttributes<HTMLElement> & object>;
@@ -95,4 +80,4 @@ declare const useDocsUserSettingsStore: zustand.UseBoundStore<Omit<zustand.Store
95
80
  declare const DEFAULT_THEME_PREFERENCE: ThemePreference;
96
81
  declare const applyThemePreference: (themePreference: ThemePreference | null | undefined, themeConfig: Required<DocsThemeConfig>) => void;
97
82
 
98
- export { AppLayout, DEFAULT_THEME_PREFERENCE, DocsPage, DocsLayout as DocsRouteLayout, type DocsSearchActions, type DocsSearchSlice, type DocsSearchState, type DocsSidebarActions, type DocsSidebarSlice, type DocsSidebarState, LayoutComponent, MetaHead, ProseContainer, UserSettingsSync, applyThemePreference, useDocsSearchActions, useDocsSearchStore, useDocsSidebarActions, useDocsSidebarStore, useDocsUserSettingsStore };
83
+ export { AppLayout, DEFAULT_THEME_PREFERENCE, DocsPage, DocsLayout as DocsRouteLayout, type DocsSearchActions, type DocsSearchSlice, type DocsSearchState, type DocsSidebarActions, type DocsSidebarSlice, type DocsSidebarState, MetaHead, ProseContainer, UserSettingsSync, applyThemePreference, useDocsSearchActions, useDocsSearchStore, useDocsSidebarActions, useDocsSidebarStore, useDocsUserSettingsStore };
package/dist/client.js CHANGED
@@ -8,16 +8,18 @@ import {
8
8
  UserSettingsSync,
9
9
  applyThemePreference,
10
10
  useDocsUserSettingsStore
11
- } from "./chunk-PBYVWITH.js";
11
+ } from "./chunk-GAPREBCU.js";
12
12
  import {
13
- LayoutComponent,
14
13
  useDocsSearchActions,
15
14
  useDocsSearchStore,
16
15
  useDocsSidebarActions,
17
16
  useDocsSidebarStore
18
- } from "./chunk-ESAHWFDZ.js";
17
+ } from "./chunk-US7NPQZ6.js";
19
18
  import "./chunk-AT4O3RRN.js";
20
19
  import "./chunk-WMHFKLPG.js";
20
+ import {
21
+ LayoutComponent
22
+ } from "./chunk-7MAISHRP.js";
21
23
  import "./chunk-PYYPYIBD.js";
22
24
  export {
23
25
  AppLayout,
package/dist/index.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  export { c as DocHeading, d as DocPageData, e as DocPageLinkData, f as DocsAlgoliaConfig, g as DocsAlgoliaFieldsConfig, h as DocsBrandConfig, i as DocsCollapsible, D as DocsConfig, j as DocsFooterConfig, k as DocsGlobalContextData, l as DocsGlobalContextSerializableData, m as DocsGraph, n as DocsGroupNode, o as DocsHeadConfig, p as DocsIconMap, q as DocsIconName, r as DocsPageNode, s as DocsPartnerConfig, t as DocsPartnersConfig, u as DocsSectionNode, v as DocsSidebarNode, b as DocsThemeConfig, J as JsonPrimitive, w as JsonValue, x as ResolvedDocsAlgoliaConfig, y as ResolvedDocsAlgoliaFieldsConfig, z as ResolvedDocsBrandConfig, a as ResolvedDocsConfig, A as ResolvedDocsPartnerConfig, B as ResolvedDocsPartnersConfig, C as ResolvedDocsSection, T as ThemePreference } from './types-C9WEqIOF.js';
2
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
  import { ReactNode, ComponentPropsWithoutRef, PropsWithChildren } from 'react';
4
+ export { L as LayoutComponent } from './LayoutComponent-DPqs0YEs.js';
4
5
  import 'lucide-react';
6
+ import '@classmatejs/react';
5
7
 
6
8
  type ChoiceGroupDescriptor = {
7
9
  default: string;
package/dist/index.js CHANGED
@@ -9,12 +9,15 @@ import {
9
9
  Pre,
10
10
  RepoLink,
11
11
  Table
12
- } from "./chunk-C724XH47.js";
12
+ } from "./chunk-EP67BY43.js";
13
13
  import {
14
14
  UniversalMdxProvider,
15
15
  renderInlineMarkdown,
16
16
  useUniversalMdxRuntime
17
17
  } from "./chunk-WMHFKLPG.js";
18
+ import {
19
+ LayoutComponent
20
+ } from "./chunk-7MAISHRP.js";
18
21
  import {
19
22
  baseAssets,
20
23
  nivelAssetUrl,
@@ -26,6 +29,7 @@ export {
26
29
  CodeBlockTransformer,
27
30
  FileAdded,
28
31
  FileRemoved,
32
+ LayoutComponent,
29
33
  Link,
30
34
  Overview,
31
35
  Pre,
package/dist/mdx.js CHANGED
@@ -9,8 +9,9 @@ import {
9
9
  Pre,
10
10
  RepoLink,
11
11
  Table
12
- } from "./chunk-C724XH47.js";
12
+ } from "./chunk-EP67BY43.js";
13
13
  import "./chunk-WMHFKLPG.js";
14
+ import "./chunk-7MAISHRP.js";
14
15
  import "./chunk-PYYPYIBD.js";
15
16
 
16
17
  // src/mdx/index.ts
package/dist/mdx.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mdx/index.ts"],"sourcesContent":["import {\n Alert,\n ChoiceGroup,\n CodeBlockTransformer,\n FileAdded,\n FileRemoved,\n Link,\n Overview,\n Pre,\n RepoLink,\n Table,\n} from '../index.js'\n\ntype MdxComponents = Record<string, unknown>\n\nexport const useMDXComponents = (components?: MdxComponents): MdxComponents => {\n return {\n Alert,\n Link,\n RepoLink,\n Table,\n Overview,\n ChoiceGroup,\n CodeBlockTransformer,\n FileAdded,\n FileRemoved,\n pre: Pre,\n ...components,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAeO,IAAM,mBAAmB,CAAC,eAA8C;AAC7E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL,GAAG;AAAA,EACL;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/mdx/index.ts"],"sourcesContent":["import {\n Alert,\n ChoiceGroup,\n CodeBlockTransformer,\n FileAdded,\n FileRemoved,\n Link,\n Overview,\n Pre,\n RepoLink,\n Table,\n} from '../index.js'\n\ntype MdxComponents = Record<string, unknown>\n\nexport const useMDXComponents = (components?: MdxComponents): MdxComponents => {\n return {\n Alert,\n Link,\n RepoLink,\n Table,\n Overview,\n ChoiceGroup,\n CodeBlockTransformer,\n FileAdded,\n FileRemoved,\n pre: Pre,\n ...components,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAeO,IAAM,mBAAmB,CAAC,eAA8C;AAC7E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL,GAAG;AAAA,EACL;AACF;","names":[]}
@@ -1,4 +1,5 @@
1
- export { AppLayout, DEFAULT_THEME_PREFERENCE, DocsPage, DocsRouteLayout, DocsSearchActions, DocsSearchSlice, DocsSearchState, DocsSidebarActions, DocsSidebarSlice, DocsSidebarState, LayoutComponent, MetaHead, ProseContainer, UserSettingsSync, applyThemePreference, useDocsSearchActions, useDocsSearchStore, useDocsSidebarActions, useDocsSidebarStore, useDocsUserSettingsStore } from '../client.js';
1
+ export { AppLayout, DEFAULT_THEME_PREFERENCE, DocsPage, DocsRouteLayout, DocsSearchActions, DocsSearchSlice, DocsSearchState, DocsSidebarActions, DocsSidebarSlice, DocsSidebarState, MetaHead, ProseContainer, UserSettingsSync, applyThemePreference, useDocsSearchActions, useDocsSearchStore, useDocsSidebarActions, useDocsSidebarStore, useDocsUserSettingsStore } from '../client.js';
2
+ export { L as LayoutComponent } from '../LayoutComponent-DPqs0YEs.js';
2
3
  import 'react/jsx-runtime';
3
4
  import 'react';
4
5
  import '@classmatejs/react';
@@ -8,16 +8,18 @@ import {
8
8
  UserSettingsSync,
9
9
  applyThemePreference,
10
10
  useDocsUserSettingsStore
11
- } from "../chunk-PBYVWITH.js";
11
+ } from "../chunk-GAPREBCU.js";
12
12
  import {
13
- LayoutComponent,
14
13
  useDocsSearchActions,
15
14
  useDocsSearchStore,
16
15
  useDocsSidebarActions,
17
16
  useDocsSidebarStore
18
- } from "../chunk-ESAHWFDZ.js";
17
+ } from "../chunk-US7NPQZ6.js";
19
18
  import "../chunk-AT4O3RRN.js";
20
19
  import "../chunk-WMHFKLPG.js";
20
+ import {
21
+ LayoutComponent
22
+ } from "../chunk-7MAISHRP.js";
21
23
  import "../chunk-PYYPYIBD.js";
22
24
  export {
23
25
  AppLayout,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unterberg/nivel",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "repository": {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/runtime/client/docsGlobalContext.ts","../src/runtime/client/store/runtime-store.tsx","../src/runtime/client/components/LayoutComponent.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\nimport { createContext, createElement, useContext } from 'react'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport type { DocsGlobalContextData } from '../../docs/types.js'\n\nexport type DocsPageContext = {\n globalContext?: {\n docs?: DocsGlobalContextData\n }\n}\n\nconst DocsGlobalContext = createContext<DocsGlobalContextData | null>(null)\n\nexport const getDocsFromGlobalContext = (pageContext: DocsPageContext) => {\n const docs = pageContext.globalContext?.docs\n\n if (!docs) {\n throw new Error('Missing docs global context data.')\n }\n\n return docs\n}\n\nexport const DocsGlobalContextProvider = ({ children, docs }: { children: ReactNode; docs: DocsGlobalContextData }) => {\n return createElement(DocsGlobalContext.Provider, { value: docs }, children)\n}\n\nexport const useDocsGlobalContext = () => {\n const docs = useContext(DocsGlobalContext)\n\n if (!docs) {\n throw new Error('Missing docs global context provider.')\n }\n\n return docs\n}\n\nexport const useDocsFromPageGlobalContext = () => {\n return getDocsFromGlobalContext(usePageContext() as DocsPageContext)\n}\n","import type { ReactNode } from 'react'\nimport { createContext, useContext } from 'react'\nimport { useStore } from 'zustand'\nimport { createStore } from 'zustand/vanilla'\nimport type {\n DocsSearchActions,\n DocsSearchSlice,\n DocsSearchState,\n DocsSidebarActions,\n DocsSidebarSlice,\n DocsSidebarState,\n} from './types.js'\n\ntype DocsRuntimeStoreState = {\n searchActions: DocsSearchActions\n searchState: DocsSearchState\n sidebarActions: DocsSidebarActions\n sidebarState: DocsSidebarState\n}\n\ntype DocsRuntimeStoreApi = ReturnType<typeof createDocsRuntimeStore>\n\nconst defaultDocsSearchState: DocsSearchState = {\n isOpen: false,\n query: '',\n}\n\nconst defaultDocsSidebarState: DocsSidebarState = {\n openNodes: {},\n}\n\nexport const createDocsRuntimeStore = () => {\n return createStore<DocsRuntimeStoreState>()((set) => {\n const searchActions: DocsSearchActions = {\n open: () =>\n set((state) => {\n if (state.searchState.isOpen) {\n return state\n }\n\n return {\n searchState: {\n ...state.searchState,\n isOpen: true,\n },\n }\n }),\n close: () =>\n set((state) => {\n if (!state.searchState.isOpen) {\n return state\n }\n\n return {\n searchState: {\n ...state.searchState,\n isOpen: false,\n },\n }\n }),\n toggle: () =>\n set((state) => ({\n searchState: {\n ...state.searchState,\n isOpen: !state.searchState.isOpen,\n },\n })),\n setQuery: (query) =>\n set((state) => {\n if (state.searchState.query === query) {\n return state\n }\n\n return {\n searchState: {\n ...state.searchState,\n query,\n },\n }\n }),\n clearQuery: () =>\n set((state) => {\n if (state.searchState.query === '') {\n return state\n }\n\n return {\n searchState: {\n ...state.searchState,\n query: '',\n },\n }\n }),\n }\n\n const sidebarActions: DocsSidebarActions = {\n setNodeOpen: (nodeId, isOpen) =>\n set((state) => {\n if (state.sidebarState.openNodes[nodeId] === isOpen) {\n return state\n }\n\n return {\n sidebarState: {\n ...state.sidebarState,\n openNodes: {\n ...state.sidebarState.openNodes,\n [nodeId]: isOpen,\n },\n },\n }\n }),\n }\n\n return {\n searchActions,\n searchState: defaultDocsSearchState,\n sidebarActions,\n sidebarState: defaultDocsSidebarState,\n }\n })\n}\n\nconst DocsRuntimeStoreContext = createContext<DocsRuntimeStoreApi | null>(null)\n\nexport const DocsRuntimeStoreProvider = ({ children, store }: { children: ReactNode; store: DocsRuntimeStoreApi }) => {\n return <DocsRuntimeStoreContext.Provider value={store}>{children}</DocsRuntimeStoreContext.Provider>\n}\n\nconst useDocsRuntimeStoreApi = () => {\n const store = useContext(DocsRuntimeStoreContext)\n\n if (store === null) {\n throw new Error('Missing docs runtime store provider.')\n }\n\n return store\n}\n\nconst useDocsRuntimeStore = <Selected,>(selector: (state: DocsRuntimeStoreState) => Selected) => {\n return useStore(useDocsRuntimeStoreApi(), selector)\n}\n\nexport const useDocsSearchStore = <Selected,>(selector: (state: DocsSearchSlice) => Selected) => {\n return useDocsRuntimeStore((state) =>\n selector({\n ...state.searchState,\n ...state.searchActions,\n }),\n )\n}\n\nexport const useDocsSearchActions = () => {\n return useDocsRuntimeStore((state) => state.searchActions)\n}\n\nexport const useDocsSidebarStore = <Selected,>(selector: (state: DocsSidebarSlice) => Selected) => {\n return useDocsRuntimeStore((state) =>\n selector({\n ...state.sidebarState,\n ...state.sidebarActions,\n }),\n )\n}\n\nexport const useDocsSidebarActions = () => {\n return useDocsRuntimeStore((state) => state.sidebarActions)\n}\n","import cm from '@classmatejs/react'\n\nconst LayoutSize = {\n xxs: 'xxs',\n xs: 'xs',\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n xl: 'xl',\n full: 'full',\n} as const\ntype LayoutSize = (typeof LayoutSize)[keyof typeof LayoutSize]\n\nconst layoutComponentSizeMapping: { [key in LayoutSize]: string } = {\n xxs: 'max-w-[480px]',\n xs: 'max-w-[768px]',\n sm: 'max-w-5xl',\n md: 'max-w-6xl',\n lg: 'max-w-7xl',\n xl: 'max-w-[1440px]',\n full: 'max-w-full',\n} as const\n\ninterface LayoutComponentProps {\n $size?: LayoutSize\n $noGrow?: boolean\n}\n\nexport const LayoutComponent = cm.div.variants<LayoutComponentProps>({\n base: ({ $noGrow }) => `px-4 ${$noGrow ? '' : 'mx-auto w-full'} relative`,\n variants: {\n $size: layoutComponentSizeMapping,\n },\n defaultVariants: {\n $size: LayoutSize.xl,\n },\n})\n"],"mappings":"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","names":["createContext","useContext"]}