reroute-js 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +142 -0
- package/_/basic/package.json +4 -4
- package/_/basic/src/client/index.html +1 -1
- package/_/basic/src/index.ts +1 -3
- package/_/blog/package.json +4 -4
- package/_/blog/src/client/App.tsx +1 -0
- package/_/blog/src/client/index.html +1 -1
- package/_/blog/src/client/routes/blog/content/1-hello-world.tsx +1 -1
- package/_/blog/src/client/routes/blog/content/3-markdown-with-syntax-highlighting.mdx +213 -0
- package/_/blog/src/client/routes/blog/content/4-content-in-markdown.md +143 -0
- package/_/blog/src/client/routes/blog/content/5-mdx-with-components.mdx +267 -0
- package/_/blog/src/client/routes/blog/index.tsx +59 -0
- package/_/blog/src/client/routes/client.tsx +564 -0
- package/_/blog/src/client/routes/docs.tsx +670 -0
- package/_/blog/src/client/routes/index.tsx +37 -0
- package/_/blog/src/client/routes/markdown-demo.md +169 -0
- package/_/blog/src/client/routes/markdown.tsx +160 -0
- package/_/blog/src/index.ts +5 -2
- package/_/store/package.json +4 -4
- package/_/store/src/client/index.html +1 -1
- package/_/store/src/index.ts +1 -1
- package/cli/bin.d.ts +1 -1
- package/cli/bin.js +1313 -74
- package/cli/bin.js.map +13 -7
- package/cli/index.d.ts +1 -1
- package/cli/index.js +428 -17
- package/cli/index.js.map +6 -3
- package/cli/src/cli.d.ts +1 -1
- package/cli/src/commands/boot.d.ts +1 -1
- package/cli/src/commands/build.d.ts +19 -0
- package/cli/src/commands/build.d.ts.map +1 -0
- package/cli/src/commands/dev.d.ts +18 -0
- package/cli/src/commands/dev.d.ts.map +1 -0
- package/cli/src/commands/gen.d.ts +1 -1
- package/cli/src/commands/gen.d.ts.map +1 -1
- package/cli/src/commands/init.d.ts +1 -1
- package/cli/src/commands/start.d.ts +19 -0
- package/cli/src/commands/start.d.ts.map +1 -0
- package/cli/src/libs/index.d.ts +4 -1
- package/cli/src/libs/index.d.ts.map +1 -1
- package/cli/src/libs/log.d.ts +46 -0
- package/cli/src/libs/log.d.ts.map +1 -0
- package/cli/src/libs/markdown-processor.d.ts +59 -0
- package/cli/src/libs/markdown-processor.d.ts.map +1 -0
- package/cli/src/libs/markdown.d.ts +33 -0
- package/cli/src/libs/markdown.d.ts.map +1 -0
- package/cli/src/libs/tailwind.d.ts +1 -1
- package/cli/src/libs/version.d.ts +1 -1
- package/core/index.d.ts +1 -1
- package/core/index.js +4 -4
- package/core/index.js.map +2 -2
- package/core/src/bundler/hash.d.ts +1 -1
- package/core/src/bundler/index.d.ts +1 -1
- package/core/src/bundler/transpile.d.ts +1 -1
- package/core/src/content/discovery.d.ts +1 -1
- package/core/src/content/index.d.ts +1 -1
- package/core/src/content/metadata.d.ts +1 -1
- package/core/src/content/registry.d.ts +1 -1
- package/core/src/index.d.ts +1 -1
- package/core/src/ssr/data.d.ts +1 -1
- package/core/src/ssr/index.d.ts +1 -1
- package/core/src/ssr/modules.d.ts +1 -1
- package/core/src/ssr/render.d.ts +1 -1
- package/core/src/ssr/seed.d.ts +1 -1
- package/core/src/template/html.d.ts +1 -1
- package/core/src/template/index.d.ts +1 -1
- package/core/src/types.d.ts +1 -1
- package/core/src/utils/cache.d.ts +1 -1
- package/core/src/utils/compression.d.ts +1 -1
- package/core/src/utils/index.d.ts +1 -1
- package/core/src/utils/mime.d.ts +1 -1
- package/core/src/utils/path.d.ts +1 -1
- package/elysia/index.d.ts +1 -1
- package/elysia/index.js +4 -4
- package/elysia/index.js.map +2 -2
- package/elysia/src/index.d.ts +1 -1
- package/elysia/src/libs/http.d.ts +1 -1
- package/elysia/src/libs/image.d.ts +1 -1
- package/elysia/src/plugin.d.ts +1 -1
- package/elysia/src/routes/artifacts.d.ts +1 -1
- package/elysia/src/routes/content.d.ts +1 -1
- package/elysia/src/routes/dev.d.ts +1 -1
- package/elysia/src/routes/image.d.ts +1 -1
- package/elysia/src/routes/ssr.d.ts +1 -1
- package/elysia/src/routes/static.d.ts +1 -1
- package/elysia/src/types.d.ts +1 -1
- package/package.json +22 -9
- package/react/index.d.ts +1 -1
- package/react/index.js +141 -36
- package/react/index.js.map +7 -6
- package/react/src/components/ClientOnly.d.ts +1 -1
- package/react/src/components/ContentRoute.d.ts +1 -1
- package/react/src/components/ContentRoute.d.ts.map +1 -1
- package/react/src/components/Image.d.ts +1 -1
- package/react/src/components/Link.d.ts +1 -1
- package/react/src/components/Link.d.ts.map +1 -1
- package/react/src/components/Markdown.d.ts +89 -0
- package/react/src/components/Markdown.d.ts.map +1 -0
- package/react/src/components/Outlet.d.ts +1 -1
- package/react/src/components/index.d.ts +2 -1
- package/react/src/components/index.d.ts.map +1 -1
- package/react/src/hooks/index.d.ts +1 -1
- package/react/src/hooks/useContent.d.ts +1 -1
- package/react/src/hooks/useData.d.ts +1 -1
- package/react/src/hooks/useNavigate.d.ts +1 -1
- package/react/src/hooks/useParams.d.ts +1 -1
- package/react/src/hooks/useRouter.d.ts +1 -1
- package/react/src/hooks/useSearchParams.d.ts +1 -1
- package/react/src/index.d.ts +1 -1
- package/react/src/providers/ContentProvider.d.ts +1 -1
- package/react/src/providers/RerouteProvider.d.ts +1 -1
- package/react/src/providers/RouterProvider.d.ts +1 -1
- package/react/src/providers/RouterProvider.d.ts.map +1 -1
- package/react/src/providers/index.d.ts +1 -1
- package/react/src/types/any.d.ts +1 -1
- package/react/src/types/index.d.ts +1 -1
- package/react/src/types/router.d.ts +1 -1
- package/react/src/utils/content.d.ts +1 -1
- package/react/src/utils/head.d.ts +1 -1
- package/react/src/utils/index.d.ts +1 -1
- package/_/blog/src/client/components/Counter.tsx +0 -14
package/react/index.js.map
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../packages/react/src/components/ClientOnly.tsx", "../../packages/react/src/components/ContentRoute.tsx", "../../packages/react/src/hooks/useContent.ts", "../../packages/react/src/providers/ContentProvider.tsx", "../../packages/react/src/utils/content.ts", "../../packages/react/src/hooks/useData.ts", "../../packages/react/src/hooks/useRouter.tsx", "../../packages/react/src/providers/RouterProvider.tsx", "../../packages/react/src/utils/head.ts", "../../packages/react/src/providers/RerouteProvider.tsx", "../../packages/react/src/hooks/useNavigate.tsx", "../../packages/react/src/hooks/useParams.tsx", "../../packages/react/src/hooks/useSearchParams.tsx", "../../packages/react/src/components/Image.tsx", "../../packages/react/src/components/Link.tsx", "../../packages/react/src/components/Outlet.tsx"],
|
|
3
|
+
"sources": ["../../packages/react/src/components/ClientOnly.tsx", "../../packages/react/src/components/ContentRoute.tsx", "../../packages/react/src/hooks/useContent.ts", "../../packages/react/src/providers/ContentProvider.tsx", "../../packages/react/src/utils/content.ts", "../../packages/react/src/hooks/useData.ts", "../../packages/react/src/hooks/useRouter.tsx", "../../packages/react/src/providers/RouterProvider.tsx", "../../packages/react/src/utils/head.ts", "../../packages/react/src/providers/RerouteProvider.tsx", "../../packages/react/src/hooks/useNavigate.tsx", "../../packages/react/src/hooks/useParams.tsx", "../../packages/react/src/hooks/useSearchParams.tsx", "../../packages/react/src/components/Image.tsx", "../../packages/react/src/components/Link.tsx", "../../packages/react/src/components/Markdown.tsx", "../../packages/react/src/components/Outlet.tsx"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { ReactNode } from 'react';\nimport { useEffect, useState } from 'react';\n\ninterface ClientOnlyProps {\n\tchildren: ReactNode;\n\tfallback?: ReactNode;\n}\n\n/**\n * ClientOnly component that only renders its children on the client-side.\n * Useful for components that cause hydration mismatches due to:\n * - Using Date.now(), Math.random(), or other dynamic values\n * - Browser-specific APIs (localStorage, window, etc.)\n * - Time-sensitive data that changes between server and client render\n *\n * @example\n * ```tsx\n * <ClientOnly fallback={<div>Loading...</div>}>\n * <CountdownTimer />\n * </ClientOnly>\n * ```\n */\nfunction ClientOnly({ children, fallback = null }: ClientOnlyProps) {\n\tconst [mounted, setMounted] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetMounted(true);\n\t}, []);\n\n\tif (!mounted) {\n\t\treturn <>{fallback}</>;\n\t}\n\n\treturn <>{children}</>;\n}\n\nexport { ClientOnly };\n",
|
|
6
|
-
"import {\n\ttype ComponentType,\n\tisValidElement,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n} from 'react';\nimport { useParams, useRouter } from '../hooks';\nimport {\n\tuseContentGetEntry,\n\tuseContentIndex,\n} from '../providers/ContentProvider';\nimport type { Any } from '../types/any';\nimport { applyLang, applyPageMeta, applySsrHead } from '../utils/head';\n\ntype RerouteGetEntry = (\n\tcollection: string,\n\tname: string,\n) => { module?: string; component?: Any; meta?: Any } | undefined;\n\nfunction toComponent(x: Any): ComponentType {\n\tif (typeof x === 'function') return x as ComponentType;\n\tif (isValidElement(x)) return () => x as Any;\n\treturn () => null;\n}\n\nfunction ContentRoute({\n\tcollection,\n\tname,\n\tgetEntry,\n}: {\n\tcollection: string;\n\tname?: string;\n\tgetEntry?: RerouteGetEntry;\n}) {\n\tconst params = useParams<Record<string, string>>();\n\tconst { pathname, notFoundResolver } = useRouter() as Any;\n\tconst inferredName =\n\t\tname ||\n\t\tparams.slug ||\n\t\tparams.name ||\n\t\t(() => {\n\t\t\ttry {\n\t\t\t\tconst parts = String(pathname || '')\n\t\t\t\t\t.split('/')\n\t\t\t\t\t.filter(Boolean);\n\t\t\t\treturn parts.length >= 2 ? parts[1] : undefined;\n\t\t\t} catch {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t})();\n\tconst key = inferredName ? `${collection}:${inferredName}` : `${collection}:`;\n\tconst ctxGetEntry = useContentGetEntry();\n\tconst idx = useContentIndex();\n\tconst resolveEntry: RerouteGetEntry | undefined =\n\t\tgetEntry ||\n\t\tctxGetEntry ||\n\t\t((c, n) => {\n\t\t\ttry {\n\t\t\t\tconst list = (idx as Any)?.[c] as Any[] | undefined;\n\t\t\t\tif (!Array.isArray(list)) return undefined;\n\t\t\t\tconst found = list.find((e: Any) => e?.name === n);\n\t\t\t\tif (!found) return undefined;\n\t\t\t\treturn { module: found.module, meta: found.meta } as Any;\n\t\t\t} catch {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t});\n\tconst entry =\n\t\tinferredName && resolveEntry\n\t\t\t? resolveEntry(collection, inferredName)\n\t\t\t: undefined;\n\n\t// Do not auto-load the whole collection for a single content page.\n\t// Rely on SSR-seeded module and import-by-module when available.\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: That's fine\n\tconst initialComp = useMemo<ComponentType>(() => {\n\t\ttry {\n\t\t\tconst g: Any = globalThis as Any;\n\t\t\tconst C = g.__REROUTE_SSR_MODULES__?.[key];\n\t\t\tif (C) return toComponent(C);\n\t\t} catch {}\n\t\tif (typeof window !== 'undefined') {\n\t\t\tconst store = (window as Any).__REROUTE_MODULES__ || {};\n\t\t\tif (store[key]) return toComponent(store[key]);\n\t\t}\n\t\tif ((entry as Any)?.component) return toComponent((entry as Any).component);\n\t\t// Fallback to the nearest NotFound component if provided by router\n\t\ttry {\n\t\t\tconst nf =\n\t\t\t\ttypeof notFoundResolver === 'function'\n\t\t\t\t\t? notFoundResolver(pathname)\n\t\t\t\t\t: undefined;\n\t\t\tif (nf) return toComponent(nf);\n\t\t} catch {}\n\t\treturn () => null;\n\t}, [key, entry]);\n\n\tconst [Comp, setComp] = useState<ComponentType>(() => initialComp);\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tif (entry?.module && typeof window !== 'undefined') {\n\t\t\timport(/* @vite-ignore */ entry.module)\n\t\t\t\t.then((m) => {\n\t\t\t\t\tif (cancelled) return;\n\t\t\t\t\tconst C = (m as Any).default || (m as Any);\n\t\t\t\t\tconst K = toComponent(C);\n\t\t\t\t\tsetComp(() => K);\n\t\t\t\t\tconst w = window as Any;\n\t\t\t\t\tw.__REROUTE_MODULES__ ||= {};\n\t\t\t\t\tw.__REROUTE_MODULES__[key] = C;\n\n\t\t\t\t\t// Update head from module exports if available\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst meta = (m as Any).meta || (m as Any).frontmatter;\n\t\t\t\t\t\tif (meta) applyPageMeta(meta);\n\t\t\t\t\t} catch {}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst ssr = (m as Any).ssr;\n\t\t\t\t\t\tif (ssr?.head) applySsrHead(ssr.head);\n\t\t\t\t\t\tif (ssr?.lang) applyLang(ssr.lang);\n\t\t\t\t\t} catch {}\n\t\t\t\t})\n\t\t\t\t.catch(() => {});\n\t\t}\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\t// Clear previously injected head items from ssr.head\n\t\t\tapplySsrHead(undefined);\n\t\t};\n\t}, [entry?.module, key]);\n\n\t// Apply title/description early based on registry meta\n\tuseEffect(() => {\n\t\ttry {\n\t\t\tif (entry && (entry as Any).meta) applyPageMeta((entry as Any).meta);\n\t\t} catch {}\n\t}, [entry]);\n\n\treturn <Comp
|
|
6
|
+
"import {\n\ttype ComponentType,\n\tisValidElement,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport { useParams, useRouter } from '../hooks';\nimport {\n\tuseContentGetEntry,\n\tuseContentIndex,\n\tuseContentLoadCollection,\n} from '../providers/ContentProvider';\nimport type { Any } from '../types/any';\nimport { applyLang, applyPageMeta, applySsrHead } from '../utils/head';\n\ntype RerouteGetEntry = (\n\tcollection: string,\n\tname: string,\n) => { module?: string; component?: Any; meta?: Any } | undefined;\n\nfunction toComponent(x: Any): ComponentType {\n\tif (typeof x === 'function') return x as ComponentType;\n\tif (isValidElement(x)) return () => x as Any;\n\treturn () => null;\n}\n\nfunction ContentRoute({\n\tcollection,\n\tname,\n\tgetEntry,\n}: {\n\tcollection: string;\n\tname?: string;\n\tgetEntry?: RerouteGetEntry;\n}) {\n\tconst params = useParams<Record<string, string>>();\n\tconst { pathname, notFoundResolver } = useRouter() as Any;\n\tconst inferredName =\n\t\tname ||\n\t\tparams.slug ||\n\t\tparams.name ||\n\t\t(() => {\n\t\t\ttry {\n\t\t\t\tconst parts = String(pathname || '')\n\t\t\t\t\t.split('/')\n\t\t\t\t\t.filter(Boolean);\n\t\t\t\treturn parts.length >= 2 ? parts[1] : undefined;\n\t\t\t} catch {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t})();\n\tconst key = inferredName ? `${collection}:${inferredName}` : `${collection}:`;\n\tconst ctxGetEntry = useContentGetEntry();\n\tconst idx = useContentIndex();\n\tconst ensureCollection = useContentLoadCollection();\n\tconst resolveEntry: RerouteGetEntry | undefined =\n\t\tgetEntry ||\n\t\tctxGetEntry ||\n\t\t((c, n) => {\n\t\t\ttry {\n\t\t\t\tconst list = (idx as Any)?.[c] as Any[] | undefined;\n\t\t\t\tif (!Array.isArray(list)) return undefined;\n\t\t\t\tconst found = list.find((e: Any) => e?.name === n);\n\t\t\t\tif (!found) return undefined;\n\t\t\t\treturn { module: found.module, meta: found.meta } as Any;\n\t\t\t} catch {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t});\n\tconst entry =\n\t\tinferredName && resolveEntry\n\t\t\t? resolveEntry(collection, inferredName)\n\t\t\t: undefined;\n\n\t// Do not auto-load the whole collection for a single content page.\n\t// Rely on SSR-seeded module and import-by-module when available.\n\n\t// biome-ignore lint/correctness/useExhaustiveDependencies: That's fine\n\tconst initialComp = useMemo<ComponentType>(() => {\n\t\ttry {\n\t\t\tconst g: Any = globalThis as Any;\n\t\t\tconst C = g.__REROUTE_SSR_MODULES__?.[key];\n\t\t\tif (C) return toComponent(C);\n\t\t} catch {}\n\t\tif (typeof window !== 'undefined') {\n\t\t\tconst store = (window as Any).__REROUTE_MODULES__ || {};\n\t\t\tif (store[key]) return toComponent(store[key]);\n\t\t}\n\t\tif ((entry as Any)?.component) return toComponent((entry as Any).component);\n\t\t// Fallback to the nearest NotFound component if provided by router\n\t\ttry {\n\t\t\tconst nf =\n\t\t\t\ttypeof notFoundResolver === 'function'\n\t\t\t\t\t? notFoundResolver(pathname)\n\t\t\t\t\t: undefined;\n\t\t\tif (nf) return toComponent(nf);\n\t\t} catch {}\n\t\treturn () => null;\n\t}, [key, entry]);\n\n\tconst [Comp, setComp] = useState<ComponentType>(() => initialComp);\n\tconst containerRef = useRef<HTMLDivElement | null>(null);\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tif (entry?.module && typeof window !== 'undefined') {\n\t\t\timport(/* @vite-ignore */ entry.module)\n\t\t\t\t.then((m) => {\n\t\t\t\t\tif (cancelled) return;\n\t\t\t\t\tconst C = (m as Any).default || (m as Any);\n\t\t\t\t\tconst K = toComponent(C);\n\t\t\t\t\tsetComp(() => K);\n\t\t\t\t\tconst w = window as Any;\n\t\t\t\t\tw.__REROUTE_MODULES__ ||= {};\n\t\t\t\t\tw.__REROUTE_MODULES__[key] = C;\n\n\t\t\t\t\t// Update head from module exports if available\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst meta = (m as Any).meta || (m as Any).frontmatter;\n\t\t\t\t\t\tif (meta) applyPageMeta(meta);\n\t\t\t\t\t} catch {}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst ssr = (m as Any).ssr;\n\t\t\t\t\t\tif (ssr?.head) applySsrHead(ssr.head);\n\t\t\t\t\t\tif (ssr?.lang) applyLang(ssr.lang);\n\t\t\t\t\t} catch {}\n\t\t\t\t})\n\t\t\t\t.catch(() => {});\n\t\t}\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\t// Clear previously injected head items from ssr.head\n\t\t\tapplySsrHead(undefined);\n\t\t};\n\t}, [entry?.module, key]);\n\n\t// If entry info wasn't available yet (e.g., on SPA nav without SSR-seeded index),\n\t// proactively load the collection index so we can resolve the module URL and import it.\n\tuseEffect(() => {\n\t\tif (typeof window === 'undefined') return;\n\t\tif (entry || !collection) return;\n\t\ttry {\n\t\t\tif (typeof ensureCollection === 'function') {\n\t\t\t\t// Fire-and-forget; ContentProvider will update idx and entry will resolve on next render\n\t\t\t\tvoid ensureCollection(collection);\n\t\t\t}\n\t\t} catch {}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [collection, ensureCollection, entry]);\n\n\t// Apply title/description early based on registry meta\n\tuseEffect(() => {\n\t\ttry {\n\t\t\tif (entry && (entry as Any).meta) applyPageMeta((entry as Any).meta);\n\t\t} catch {}\n\t}, [entry]);\n\n\t// Dev-only hydration diagnostic: detect nested <p> within <p> and print shallow tree\n\tuseEffect(() => {\n\t\ttry {\n\t\t\tif (typeof window === 'undefined') return;\n\t\t\tconst isDev =\n\t\t\t\t(typeof process !== 'undefined' &&\n\t\t\t\t\t((process.env?.NODE_ENV as Any) ?? 'development') !== 'production') ||\n\t\t\t\t(typeof document !== 'undefined' &&\n\t\t\t\t\t/^localhost|^127\\.0\\.0\\.1/.test(window.location.hostname));\n\n\t\t\tif (!isDev) return;\n\t\t\tconst root = containerRef.current;\n\t\t\tif (!root) return;\n\n\t\t\t// eslint-disable-next-line no-console\n\t\t\t// console.info(`[Reroute] ContentRoute root children (${key}):`, direct);\n\n\t\t\tconst nested = root.querySelectorAll('p p');\n\t\t\tif (!nested.length) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Log each occurrence with helpful snippets\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.groupCollapsed(\n\t\t\t\t`[Reroute] DOM check: nested <p> found in ContentRoute (${key})`,\n\t\t\t);\n\t\t\tnested.forEach((inner, idx) => {\n\t\t\t\tconst outer = inner.closest('p');\n\t\t\t\tconst snippet = (el: Element | null) =>\n\t\t\t\t\t(el?.textContent || '').replace(/\\s+/g, ' ').trim().slice(0, 160);\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`Case ${idx + 1}:`, {\n\t\t\t\t\touterSnippet: snippet(outer),\n\t\t\t\t\tinnerSnippet: snippet(inner),\n\t\t\t\t});\n\t\t\t});\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.groupEnd();\n\t\t} catch {}\n\t}, [key]);\n\n\treturn (\n\t\t<div data-reroute='content' ref={containerRef}>\n\t\t\t<Comp />\n\t\t</div>\n\t);\n}\n\nexport { ContentRoute };\n",
|
|
7
7
|
"import { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n\tuseContentIndex,\n\tuseContentLoadCollection,\n} from '../providers/ContentProvider';\nimport type { Any } from '../types/any';\n\ntype ContentMeta = Record<string, Any> | undefined;\n\ntype ContentListEntry = {\n\tcollection: string;\n\tname: string;\n\tslug?: string;\n\thref: string;\n\tmodule?: string;\n\tmeta?: ContentMeta;\n} & Record<string, Any>;\n\ntype UseContentCollectionParams = {\n\tcollection: string;\n\tsort?:\n\t\t| { date: 'asc' | 'desc' }\n\t\t| ((a: ContentListEntry, b: ContentListEntry) => number)\n\t\t| false;\n\t/** Optional limit for items returned and shipped by SSR */\n\tlimit?: number;\n};\n\ntype UseContentCollectionResult = {\n\titems: ContentListEntry[];\n\tprefetch: (\n\t\tentry: Pick<ContentListEntry, 'collection' | 'name' | 'module'>,\n\t) => void;\n};\n\nfunction sortByDate(\n\torder: 'asc' | 'desc',\n): (a: ContentListEntry, b: ContentListEntry) => number {\n\treturn (a: ContentListEntry, b: ContentListEntry) => {\n\t\tconst da =\n\t\t\ta?.meta && (a.meta as Any)?.date\n\t\t\t\t? Date.parse(String((a.meta as Any).date))\n\t\t\t\t: 0;\n\t\tconst db =\n\t\t\tb?.meta && (b.meta as Any)?.date\n\t\t\t\t? Date.parse(String((b.meta as Any).date))\n\t\t\t\t: 0;\n\t\treturn order === 'asc' ? da - db : db - da;\n\t};\n}\n\nexport function prefetchContent(\n\tentry: Pick<ContentListEntry, 'collection' | 'name' | 'module'>,\n): void {\n\tif (typeof window === 'undefined') return;\n\tconst modUrl = (entry as Any)?.module as string | undefined;\n\tif (!modUrl || typeof modUrl !== 'string') return;\n\ttry {\n\t\tconst key = `${entry.collection}:${entry.name}`;\n\t\tconst w = window as Any;\n\t\tif (!w.__REROUTE_MODULES__) w.__REROUTE_MODULES__ = {};\n\t\tconst store: Any = w.__REROUTE_MODULES__;\n\t\tif (store[key]) return;\n\t\timport(/* @vite-ignore */ modUrl)\n\t\t\t.then((m) => {\n\t\t\t\tconst C = (m as Any).default || (m as Any);\n\t\t\t\tstore[key] = C;\n\t\t\t})\n\t\t\t.catch(() => {});\n\t} catch {}\n}\n\nexport function useContent(\n\tparams: UseContentCollectionParams,\n): UseContentCollectionResult {\n\tconst { collection, sort = { date: 'desc' }, limit } = params;\n\t// During SSR, record that this collection was accessed so the server can\n\t// inline only the necessary lists in the HTML payload.\n\ttry {\n\t\tif (typeof window === 'undefined') {\n\t\t\tconst g = globalThis as Any;\n\t\t\tif (!g.__REROUTE_SSR_ACCESSED__) {\n\t\t\t\tg.__REROUTE_SSR_ACCESSED__ = {};\n\t\t\t}\n\t\t\tconst rec: Any = g.__REROUTE_SSR_ACCESSED__;\n\t\t\tconst existing: Any = rec[collection] || {};\n\t\t\tconst isCustomSort = typeof sort === 'function';\n\t\t\tconst sortKey = isCustomSort\n\t\t\t\t? 'custom'\n\t\t\t\t: sort === false\n\t\t\t\t\t? 'none'\n\t\t\t\t\t: typeof sort === 'string'\n\t\t\t\t\t\t? sort === 'date-asc'\n\t\t\t\t\t\t\t? 'date-asc'\n\t\t\t\t\t\t\t: 'date-desc'\n\t\t\t\t\t\t: typeof sort === 'object' && sort && (sort as Any).date === 'asc'\n\t\t\t\t\t\t\t? 'date-asc'\n\t\t\t\t\t\t\t: 'date-desc';\n\t\t\t// If mixed sorts are seen for the same collection, fall back to 'custom'\n\t\t\texisting.sort =\n\t\t\t\texisting.sort && existing.sort !== sortKey\n\t\t\t\t\t? 'custom'\n\t\t\t\t\t: existing.sort || sortKey;\n\t\t\tconst requested =\n\t\t\t\ttypeof limit === 'number' && limit > 0 ? limit : Infinity;\n\t\t\texisting.limit = Math.max(existing.limit || 0, requested);\n\t\t\trec[collection] = existing;\n\t\t}\n\t} catch {}\n\tconst index = useContentIndex();\n\tconst loadCollection = useContentLoadCollection();\n\tconst [_ready, setReady] = useState(false);\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tasync function ensure() {\n\t\t\ttry {\n\t\t\t\tconst have = (index as Any)?.[collection] as Any[] | undefined;\n\t\t\t\t// In hydration, a subset may be inlined. If limit is undefined (caller expects full list)\n\t\t\t\t// or requested limit exceeds current subset size, try loading the full collection.\n\t\t\t\tconst w: Any | undefined =\n\t\t\t\t\ttypeof window !== 'undefined' ? (window as Any) : undefined;\n\t\t\t\tconst partial: boolean = Boolean(\n\t\t\t\t\tw?.__REROUTE_COLLECTIONS_PARTIAL__?.[collection],\n\t\t\t\t);\n\t\t\t\tif (\n\t\t\t\t\t!have ||\n\t\t\t\t\t(partial &&\n\t\t\t\t\t\t(!limit || (typeof limit === 'number' && have.length < limit)))\n\t\t\t\t) {\n\t\t\t\t\tif (loadCollection) await loadCollection(collection);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (!cancelled) setReady(true);\n\t\t\t}\n\t\t}\n\t\tensure();\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t};\n\t}, [collection, index, loadCollection, limit]);\n\n\tconst items = useMemo<ContentListEntry[]>(() => {\n\t\tconst source = index || {};\n\t\tconst list = (source as Any)?.[collection] as\n\t\t\t| ContentListEntry[]\n\t\t\t| undefined;\n\t\tif (!Array.isArray(list) || list.length === 0)\n\t\t\treturn [] as ContentListEntry[];\n\t\tlet cloned = [...list];\n\t\tif (typeof sort === 'function') cloned = cloned.sort(sort);\n\t\telse if (typeof sort === 'string') {\n\t\t\tcloned = cloned.sort(sortByDate(sort === 'date-asc' ? 'asc' : 'desc'));\n\t\t} else if (sort && typeof sort === 'object' && (sort as Any).date) {\n\t\t\tcloned = cloned.sort(\n\t\t\t\tsortByDate((sort as Any).date === 'asc' ? 'asc' : 'desc'),\n\t\t\t);\n\t\t}\n\t\t// sort === false -> leave as-is\n\t\tif (typeof limit === 'number' && limit >= 0)\n\t\t\tcloned = cloned.slice(0, limit);\n\t\treturn cloned;\n\t}, [index, collection, sort, limit]);\n\n\tconst prefetch = useCallback(\n\t\t(entry: Pick<ContentListEntry, 'collection' | 'name' | 'module'>) =>\n\t\t\tprefetchContent(entry),\n\t\t[],\n\t);\n\n\treturn { items, prefetch };\n}\n\nexport type {\n\tContentListEntry,\n\tUseContentCollectionParams,\n\tUseContentCollectionResult,\n};\n",
|
|
8
8
|
"import {\n\tcreateContext,\n\ttype ReactNode,\n\tuseCallback,\n\tuseContext,\n\tuseMemo,\n\tuseState,\n} from 'react';\nimport type { Any } from '../types/any';\nimport { createResolverFromGetEntry, parseContentHref } from '../utils/content';\n\ntype ContentRef =\n\t| { collection: string; name: string; module?: string }\n\t| undefined;\n\ntype ContentResolver = (href: string) => ContentRef;\n\nconst ContentRegistryContext = createContext<ContentResolver | null>(null);\nconst ContentIndexContext = createContext<Record<string, Any[]> | null>(null);\nconst ContentGetEntryContext = createContext<\n\t((collection: string, name: string) => Any | undefined) | null\n>(null);\nconst ContentLoadCollectionContext = createContext<\n\t((collection: string) => Promise<Any[] | undefined>) | null\n>(null);\n\ntype ContentProviderProps = {\n\tchildren?: ReactNode;\n\t/**\n\t * Resolve a content link target to a content reference.\n\t * Return collection + name + module (if known) for optimal prefetching.\n\t */\n\tresolveByHref?: ContentResolver;\n\t/** Optional access to the app's content registry getter (e.g., .reroute/content#getContentEntry) */\n\tgetEntry?: (collection: string, name: string) => Any | undefined;\n\t/** Optional prebuilt byCollection index (e.g., from .reroute/content) */\n\tbyCollection?: Record<string, Any[]> | null;\n\t/** Optional lazy loader that loads a single collection at a time */\n\tloadCollection?: (collection: string) => Promise<{ items: Any[] } | Any>;\n};\n\nfunction ContentProvider({\n\tchildren,\n\tresolveByHref,\n\tgetEntry,\n\tbyCollection,\n\tloadCollection,\n}: ContentProviderProps) {\n\tconst [idx, setIdx] = useState<Record<string, Any[]>>(() => {\n\t\tconst seededClient: Record<string, Any[]> = (() => {\n\t\t\ttry {\n\t\t\t\tif (typeof window !== 'undefined') {\n\t\t\t\t\tconst w = window as Any;\n\t\t\t\t\treturn (w.__REROUTE_COLLECTIONS__ as Record<string, Any[]>) || {};\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t\treturn {};\n\t\t})();\n\t\tconst seededServer: Record<string, Any[]> = (() => {\n\t\t\ttry {\n\t\t\t\tif (typeof window === 'undefined') {\n\t\t\t\t\tconst g = globalThis as Any;\n\t\t\t\t\treturn (g.__REROUTE_COLLECTIONS__ as Record<string, Any[]>) || {};\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t\treturn {};\n\t\t})();\n\t\treturn {\n\t\t\t...(byCollection || {}),\n\t\t\t...seededServer,\n\t\t\t...seededClient,\n\t\t} as Record<string, Any[]>;\n\t});\n\tconst entryFn = getEntry || null;\n\n\tconst resolver = useMemo<ContentResolver | null>(() => {\n\t\tif (typeof resolveByHref === 'function') return resolveByHref;\n\t\tif (typeof getEntry === 'function')\n\t\t\treturn createResolverFromGetEntry(getEntry);\n\t\t// Fallback: resolve from in-memory index when available (no bundling)\n\t\treturn (href: string) => {\n\t\t\tconst parsed = parseContentHref(href);\n\t\t\tif (!parsed) return undefined;\n\t\t\ttry {\n\t\t\t\tconst list = (idx as Any)?.[parsed.collection] as Any[] | undefined;\n\t\t\t\tif (Array.isArray(list)) {\n\t\t\t\t\tconst found = list.find((e: Any) => e?.name === parsed.name) as\n\t\t\t\t\t\t| Any\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tif (found && typeof found.module === 'string') {\n\t\t\t\t\t\treturn { ...parsed, module: found.module };\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t\treturn parsed;\n\t\t};\n\t}, [resolveByHref, getEntry, idx]);\n\n\tconst ensureCollection = useCallback(\n\t\tasync (collection: string): Promise<Any[] | undefined> => {\n\t\t\ttry {\n\t\t\t\tconst existing = (idx as Any)[collection];\n\t\t\t\tif (Array.isArray(existing) && existing.length) return existing;\n\t\t\t\tif (!loadCollection) return existing;\n\t\t\t\tconst mod = await loadCollection(collection);\n\t\t\t\tconst items = ((mod as Any).items || (mod as Any).list || []) as Any[];\n\t\t\t\tif (Array.isArray(items)) {\n\t\t\t\t\tsetIdx((prev) => ({ ...(prev || {}), [collection]: items }));\n\t\t\t\t\treturn items;\n\t\t\t\t}\n\t\t\t\treturn existing;\n\t\t\t} catch {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t},\n\t\t[idx, loadCollection],\n\t);\n\n\treturn (\n\t\t<ContentRegistryContext.Provider value={resolver}>\n\t\t\t<ContentIndexContext.Provider value={idx}>\n\t\t\t\t<ContentGetEntryContext.Provider value={entryFn}>\n\t\t\t\t\t<ContentLoadCollectionContext.Provider value={ensureCollection}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</ContentLoadCollectionContext.Provider>\n\t\t\t\t</ContentGetEntryContext.Provider>\n\t\t\t</ContentIndexContext.Provider>\n\t\t</ContentRegistryContext.Provider>\n\t);\n}\n\nfunction useContentResolver(): ContentResolver | null {\n\treturn useContext(ContentRegistryContext);\n}\n\nexport { ContentProvider, useContentResolver };\nfunction useContentIndex(): Record<string, Any[]> | null {\n\treturn useContext(ContentIndexContext);\n}\n\nexport { useContentIndex };\nexport type { ContentRef, ContentResolver };\n\nfunction useContentGetEntry():\n\t| ((collection: string, name: string) => Any | undefined)\n\t| null {\n\treturn useContext(ContentGetEntryContext);\n}\n\nexport { useContentGetEntry };\n\nfunction useContentLoadCollection():\n\t| ((collection: string) => Promise<Any[] | undefined>)\n\t| null {\n\treturn useContext(ContentLoadCollectionContext);\n}\n\nexport { useContentLoadCollection };\n",
|
|
9
9
|
"import type { ContentRef, ContentResolver } from '../providers/ContentProvider';\nimport type { Any } from '../types/any';\n\nexport function parseContentHref(\n\thref: string,\n): { collection: string; name: string } | undefined {\n\ttry {\n\t\tconst url = new URL(href, 'http://local');\n\t\tconst [collection, name] = url.pathname.split('/').filter(Boolean);\n\t\tif (!collection || !name) return undefined;\n\t\treturn { collection, name };\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function createResolverFromGetEntry(\n\tgetEntry: (collection: string, name: string) => Any | undefined,\n): ContentResolver {\n\treturn (href: string): ContentRef => {\n\t\tconst parsed = parseContentHref(href);\n\t\tif (!parsed) return undefined;\n\t\ttry {\n\t\t\tconst entry = getEntry(parsed.collection, parsed.name) as Any;\n\t\t\tif (!entry) return parsed;\n\t\t\tconst moduleUrl = (entry as Any)?.module as string | undefined;\n\t\t\treturn moduleUrl ? { ...parsed, module: moduleUrl } : parsed;\n\t\t} catch {\n\t\t\treturn parsed;\n\t\t}\n\t};\n}\n",
|
|
10
10
|
"import { useEffect, useMemo, useState } from 'react';\nimport type { Any } from '../types/any';\nimport { useRouter } from './useRouter';\n\n/**\n * Read SSR-seeded route data without loaders.\n * - On server: reads from globalThis.__REROUTE_DATA__\n * - On client: reads from window.__REROUTE_DATA__\n *\n * By default uses the current pathname as the key. You may pass a custom key\n * when seeding multiple entries.\n */\nexport function useData<T = unknown>(key?: string): T | undefined {\n\tconst { pathname } = useRouter();\n\tconst k = key || pathname;\n\tconst [_tick, setTick] = useState(0);\n\n\tuseEffect(() => {\n\t\tif (typeof window === 'undefined') return;\n\t\tconst handler = (e: Event) => {\n\t\t\ttry {\n\t\t\t\tconst detail = (e as CustomEvent).detail as Any;\n\t\t\t\tif (detail?.key && detail.key !== k) return;\n\t\t\t\tsetTick((x) => x + 1);\n\t\t\t} catch {}\n\t\t};\n\t\twindow.addEventListener('__reroute_data__' as Any, handler as Any);\n\t\treturn () => {\n\t\t\ttry {\n\t\t\t\twindow.removeEventListener('__reroute_data__' as Any, handler as Any);\n\t\t\t} catch {}\n\t\t};\n\t}, [k]);\n\n\t// Client fallback: if there is no seeded data for this key after SPA navigation,\n\t// lazily fetch it from the server once. This covers static routes that still\n\t// export ssr.data (e.g., home page) without requiring link-time prefetch.\n\tuseEffect(() => {\n\t\tif (typeof window === 'undefined') return;\n\t\ttry {\n\t\t\tconst w = window as Any;\n\t\t\tw.__REROUTE_DATA__ = w.__REROUTE_DATA__ || {};\n\t\t\tif ((w.__REROUTE_DATA__ as Any)[k] !== undefined) return;\n\n\t\t\t// Deduplicate concurrent fetches for the same key\n\t\t\tw.__REROUTE_DATA_PENDING__ = w.__REROUTE_DATA_PENDING__ || ({} as Any);\n\t\t\tconst pending = w.__REROUTE_DATA_PENDING__;\n\t\t\tif (pending[k]) return;\n\t\t\tpending[k] = true;\n\n\t\t\tfetch(`/__reroute_data?path=${encodeURIComponent(k)}`, {\n\t\t\t\theaders: { Accept: 'application/json' },\n\t\t\t\tcredentials: 'same-origin',\n\t\t\t})\n\t\t\t\t.then((r) => (r.ok ? r.json() : null))\n\t\t\t\t.then((j) => {\n\t\t\t\t\tif (!j) return;\n\t\t\t\t\t(w.__REROUTE_DATA__ as Any)[k] = j.data ?? j;\n\t\t\t\t\t// Force a local re-render even if event listeners aren't attached yet\n\t\t\t\t\ttry {\n\t\t\t\t\t\tsetTick((x) => x + 1);\n\t\t\t\t\t} catch {}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tw.dispatchEvent(\n\t\t\t\t\t\t\tnew CustomEvent('__reroute_data__', {\n\t\t\t\t\t\t\t\tdetail: { key: k },\n\t\t\t\t\t\t\t}) as Any,\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch {}\n\t\t\t\t})\n\t\t\t\t.catch(() => {})\n\t\t\t\t.finally(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tdelete (w.__REROUTE_DATA_PENDING__ as Any)[k];\n\t\t\t\t\t} catch {}\n\t\t\t\t});\n\t\t} catch {}\n\t}, [k]);\n\n\treturn useMemo(() => {\n\t\ttry {\n\t\t\t_tick;\n\t\t\tif (typeof window === 'undefined') {\n\t\t\t\tconst g = globalThis as Any;\n\t\t\t\treturn (g.__REROUTE_DATA__ as Record<string, T> | undefined)?.[k];\n\t\t\t}\n\t\t\tconst w = window as Any;\n\t\t\treturn (w.__REROUTE_DATA__ as Record<string, T> | undefined)?.[k];\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}, [k, _tick]);\n}\n",
|
|
11
11
|
"import { useContext } from 'react';\nimport { RouterContext } from '../providers';\nimport type { RouterContextFactory } from '../types/router';\n\n/**\n * Hook to access the router context.\n * Must be used within a RouterProvider.\n */\nexport function useRouter(): RouterContextFactory {\n\tconst context = useContext(RouterContext);\n\tif (!context) {\n\t\tthrow new Error('useRouter must be used within a RouterProvider');\n\t}\n\treturn context;\n}\n",
|
|
12
|
-
"import type { ReactNode } from 'react';\nimport React, {\n\tcreateContext,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseSyncExternalStore,\n} from 'react';\nimport { flushSync } from 'react-dom';\nimport type { Any } from '../types/any';\nimport type {\n\tNavigateOptions,\n\tRouteMatch,\n\tRouterContextFactory,\n} from '../types/router';\nimport { applyLang, applyPageMeta, applyRouteHead } from '../utils/head';\n\n// Check if we're in a browser environment\nconst isBrowser =\n\ttypeof window !== 'undefined' && typeof window.document !== 'undefined';\n\nconst OutletContext = createContext<ReactNode>(null);\nconst RouterContext = createContext<RouterContextFactory | null>(null);\n\n// Create a simple store for location changes\nlet listeners: Array<() => void> = [];\nlet currentLocation = isBrowser\n\t? {\n\t\t\tpathname: window.location.pathname,\n\t\t\tsearch: window.location.search,\n\t\t\thash: window.location.hash,\n\t\t}\n\t: { pathname: '/', search: '', hash: '' };\n\ninterface RouterProviderProps {\n\tchildren?: ReactNode;\n\tlayouts?: readonly Any[];\n\tmatchRoute: (pathname: string) => RouteMatch | null;\n\tnotFoundRoutes?: readonly Any[];\n\tnotFound?: React.ComponentType;\n\tpathname?: string;\n\tviewTransitions?: boolean;\n\tscrollRestoration?: boolean;\n}\n\nfunction subscribe(listener: () => void) {\n\tif (!isBrowser) return () => {};\n\tlisteners.push(listener);\n\treturn () => {\n\t\tlisteners = listeners.filter((l) => l !== listener);\n\t};\n}\n\nfunction getSnapshot() {\n\treturn currentLocation;\n}\n\nfunction emitChange() {\n\tfor (const listener of listeners) {\n\t\tlistener();\n\t}\n}\n\n// Helper to check if view transitions are supported\nconst supportsViewTransitions =\n\ttypeof document !== 'undefined' && 'startViewTransition' in document;\n\n// Global flag to track if view transitions are enabled\nlet viewTransitionsEnabled = false;\n\nfunction setViewTransitionsEnabled(enabled: boolean) {\n\tviewTransitionsEnabled = enabled && supportsViewTransitions;\n}\n\n// Global flag to track if scroll restoration is enabled\nlet scrollRestorationEnabled = true;\n\nfunction setScrollRestorationEnabled(enabled: boolean) {\n\tscrollRestorationEnabled = enabled;\n}\n\n// Store scroll positions for each path for restoration on back/forward\nconst scrollPositions = new Map<string, { x: number; y: number }>();\n\nfunction navigateInternal(to: string, options: NavigateOptions = {}) {\n\tif (!isBrowser) return;\n\n\tconst url = new URL(to, window.location.origin);\n\n\tif (url.origin !== window.location.origin) {\n\t\t// External link\n\t\twindow.location.href = to;\n\t\treturn;\n\t}\n\n\tconst newPath = url.pathname + url.search + url.hash;\n\tconst currentPath =\n\t\twindow.location.pathname + window.location.search + window.location.hash;\n\n\tif (newPath === currentPath) return;\n\n\t// Save current scroll position before navigating away\n\tif (scrollRestorationEnabled) {\n\t\tscrollPositions.set(currentPath, {\n\t\t\tx: window.scrollX,\n\t\t\ty: window.scrollY,\n\t\t});\n\t}\n\n\tif (options.replace) {\n\t\twindow.history.replaceState(options.state || null, '', to);\n\t} else {\n\t\twindow.history.pushState(options.state || null, '', to);\n\t}\n\n\tconst updateState = () => {\n\t\tcurrentLocation = {\n\t\t\tpathname: url.pathname,\n\t\t\tsearch: url.search,\n\t\t\thash: url.hash,\n\t\t};\n\t\temitChange();\n\t};\n\n\tif (viewTransitionsEnabled) {\n\t\tdocument.startViewTransition(() => {\n\t\t\tflushSync(() => {\n\t\t\t\tupdateState();\n\t\t\t});\n\t\t});\n\t} else {\n\t\tupdateState();\n\t}\n\n\t// Scroll to top or hash (forward navigation always scrolls to top)\n\t// Delay to allow the new route component to render first\n\tif (url.hash) {\n\t\t// Try to scroll to the fragment with retries for slow-rendering components\n\t\tlet attempts = 0;\n\t\tconst maxAttempts = 10;\n\t\tconst tryScroll = () => {\n\t\t\tconst element = document.querySelector(url.hash);\n\t\t\tif (element) {\n\t\t\t\telement.scrollIntoView({ behavior: 'smooth', block: 'start' });\n\t\t\t} else if (attempts < maxAttempts) {\n\t\t\t\tattempts++;\n\t\t\t\tsetTimeout(tryScroll, 50);\n\t\t\t}\n\t\t};\n\t\tsetTimeout(tryScroll, viewTransitionsEnabled ? 100 : 50);\n\t} else {\n\t\tsetTimeout(\n\t\t\t() => {\n\t\t\t\twindow.scrollTo({ top: 0, behavior: 'instant' });\n\t\t\t},\n\t\t\tviewTransitionsEnabled ? 100 : 50,\n\t\t);\n\t}\n}\n\n/**\n * RouterProvider component that manages client-side routing with SSR support.\n * Uses React's useSyncExternalStore for proper hydration without mismatches.\n */\nfunction RouterProvider({\n\tchildren,\n\tlayouts = [],\n\tmatchRoute,\n\tnotFoundRoutes = [],\n\tnotFound: NotFound,\n\tpathname = '/',\n\tviewTransitions = true,\n\tscrollRestoration = true,\n}: RouterProviderProps) {\n\t// Set global view transitions and scroll restoration flags\n\tuseEffect(() => {\n\t\tsetViewTransitionsEnabled(viewTransitions);\n\t\tsetScrollRestorationEnabled(scrollRestoration);\n\t}, [viewTransitions, scrollRestoration]);\n\t// Create stable server snapshot reference that never changes\n\tconst serverSnapshotRef = React.useRef<{\n\t\tpathname: string;\n\t\tsearch: string;\n\t\thash: string;\n\t} | null>(null);\n\n\tif (!serverSnapshotRef.current) {\n\t\tif (isBrowser) {\n\t\t\t// During hydration, point to the exact same object reference\n\t\t\t// that getSnapshot() returns so useSyncExternalStore doesn't\n\t\t\t// detect a mismatch and trigger a second render.\n\t\t\tserverSnapshotRef.current = currentLocation;\n\t\t} else {\n\t\t\t// During pure SSR, use the pathname from props\n\t\t\tserverSnapshotRef.current = { pathname, search: '', hash: '' };\n\t\t}\n\t}\n\n\t// Return the same cached snapshot object every time\n\tconst getServerSnapshot = useCallback(() => serverSnapshotRef.current, []);\n\n\t// Use useSyncExternalStore for proper SSR hydration\n\tconst location =\n\t\tuseSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) ||\n\t\tcurrentLocation;\n\n\t// Initialize location on mount (client-side only)\n\t// Avoid emitting a change if nothing actually changed to prevent a redundant re-render after hydration\n\tuseEffect(() => {\n\t\tif (!isBrowser) return;\n\t\tconst next = {\n\t\t\tpathname: window.location.pathname,\n\t\t\tsearch: window.location.search,\n\t\t\thash: window.location.hash,\n\t\t};\n\t\tif (\n\t\t\tcurrentLocation.pathname !== next.pathname ||\n\t\t\tcurrentLocation.search !== next.search ||\n\t\t\tcurrentLocation.hash !== next.hash\n\t\t) {\n\t\t\tcurrentLocation = next;\n\t\t\temitChange();\n\t\t}\n\t}, []);\n\n\tconst target = useMemo(\n\t\t() => matchRoute(location.pathname),\n\t\t[location.pathname, matchRoute],\n\t);\n\n\tconst params = target?.params || {};\n\tconst searchParams = useMemo(\n\t\t() => new URLSearchParams(location.search),\n\t\t[location.search],\n\t);\n\n\tconst navigate = useCallback((to: string, options: NavigateOptions = {}) => {\n\t\tnavigateInternal(to, options);\n\t}, []);\n\n\t// Handle browser back/forward\n\tuseEffect(() => {\n\t\tif (!isBrowser) return;\n\n\t\tconst handlePopState = () => {\n\t\t\tconst next = {\n\t\t\t\tpathname: window.location.pathname,\n\t\t\t\tsearch: window.location.search,\n\t\t\t\thash: window.location.hash,\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst w = window as Any;\n\t\t\t\tw.__REROUTE_DATA__ = w.__REROUTE_DATA__ || {};\n\t\t\t\tconst have = (w.__REROUTE_DATA__ as Any)[next.pathname];\n\t\t\t\t// Only prefetch for dynamic routes; static/content pages don't need it\n\t\t\t\tconst isDynamic = !!matchRoute?.(next.pathname)?.route?.isDynamic;\n\t\t\t\tif (isDynamic && have === undefined) {\n\t\t\t\t\tlet updated = false;\n\t\t\t\t\tconst fallback = setTimeout(() => {\n\t\t\t\t\t\tif (updated) return;\n\t\t\t\t\t\tupdated = true;\n\t\t\t\t\t\tcurrentLocation = next;\n\t\t\t\t\t\temitChange();\n\t\t\t\t\t}, 250);\n\t\t\t\t\tfetch(`/__reroute_data?path=${encodeURIComponent(next.pathname)}`, {\n\t\t\t\t\t\theaders: { Accept: 'application/json' },\n\t\t\t\t\t\tcredentials: 'same-origin',\n\t\t\t\t\t})\n\t\t\t\t\t\t.then((r) => (r.ok ? r.json() : null))\n\t\t\t\t\t\t.then((j) => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst payload = j ? (j.data ?? j) : undefined;\n\t\t\t\t\t\t\t\tif (payload !== undefined)\n\t\t\t\t\t\t\t\t\t(w.__REROUTE_DATA__ as Any)[next.pathname] = payload;\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tw.dispatchEvent(\n\t\t\t\t\t\t\t\t\t\tnew CustomEvent('__reroute_data__', {\n\t\t\t\t\t\t\t\t\t\t\tdetail: { key: next.pathname },\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {})\n\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\tif (!updated) {\n\t\t\t\t\t\t\t\tclearTimeout(fallback);\n\t\t\t\t\t\t\t\tupdated = true;\n\t\t\t\t\t\t\t\tcurrentLocation = next;\n\t\t\t\t\t\t\t\temitChange();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\treturn; // we'll update after prefetch or fallback timer\n\t\t\t\t}\n\t\t\t} catch {}\n\n\t\t\tconst updateState = () => {\n\t\t\t\tcurrentLocation = next;\n\t\t\t\temitChange();\n\t\t\t};\n\n\t\t\tif (viewTransitionsEnabled) {\n\t\t\t\t(document as Any).startViewTransition(() => {\n\t\t\t\t\tflushSync(() => {\n\t\t\t\t\t\tupdateState();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tupdateState();\n\t\t\t}\n\n\t\t\t// Restore scroll position for back/forward navigation\n\t\t\tif (scrollRestorationEnabled) {\n\t\t\t\tconst nextPath = next.pathname + next.search + next.hash;\n\t\t\t\tconst savedPosition = scrollPositions.get(nextPath);\n\n\t\t\t\t// Small delay to let the DOM settle and view transition complete\n\t\t\t\tsetTimeout(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tif (next.hash) {\n\t\t\t\t\t\t\t// Handle hash navigation\n\t\t\t\t\t\t\tconst element = document.querySelector(next.hash);\n\t\t\t\t\t\t\tif (element) {\n\t\t\t\t\t\t\t\telement.scrollIntoView({ behavior: 'smooth' });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (savedPosition) {\n\t\t\t\t\t\t\t// Restore saved scroll position\n\t\t\t\t\t\t\twindow.scrollTo({\n\t\t\t\t\t\t\t\ttop: savedPosition.y,\n\t\t\t\t\t\t\t\tleft: savedPosition.x,\n\t\t\t\t\t\t\t\tbehavior: 'instant',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// If no saved position and no hash, keep current scroll (don't reset to top)\n\t\t\t\t\t},\n\t\t\t\t\tviewTransitionsEnabled ? 50 : 0,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener('popstate', handlePopState);\n\t\treturn () => window.removeEventListener('popstate', handlePopState);\n\t}, [matchRoute]);\n\n\t// Intercept link clicks\n\tuseEffect(() => {\n\t\tif (!isBrowser) return;\n\n\t\tconst handleClick = (e: MouseEvent) => {\n\t\t\tconst target = (e.target as HTMLElement).closest('a');\n\t\t\tif (!target) return;\n\n\t\t\tconst href = target.getAttribute('href');\n\t\t\tif (!href) return;\n\n\t\t\t// Skip if:\n\t\t\t// - External link\n\t\t\t// - Download link\n\t\t\t// - Opens in new tab\n\t\t\t// - Modified click (ctrl/cmd/shift)\n\t\t\tif (\n\t\t\t\ttarget.target === '_blank' ||\n\t\t\t\ttarget.hasAttribute('download') ||\n\t\t\t\te.ctrlKey ||\n\t\t\t\te.metaKey ||\n\t\t\t\te.shiftKey ||\n\t\t\t\te.altKey\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst url = new URL(href, window.location.origin);\n\t\t\tif (url.origin !== window.location.origin) return;\n\n\t\t\t// Check if it's a route we handle\n\t\t\tconst match = matchRoute(url.pathname);\n\t\t\tif (!match) return;\n\n\t\t\te.preventDefault();\n\t\t\tnavigate(href);\n\t\t};\n\n\t\tdocument.addEventListener('click', handleClick);\n\t\treturn () => document.removeEventListener('click', handleClick);\n\t}, [navigate, matchRoute]);\n\n\t// Apply route-level meta/ssr if exported by the route module (non-content pages)\n\tuseEffect(() => {\n\t\tconst route: Any = target?.route as Any;\n\t\tif (!route) return;\n\t\ttry {\n\t\t\tif (route.meta) applyPageMeta(route.meta);\n\t\t} catch {}\n\t\ttry {\n\t\t\tconst ssr = route.ssr;\n\t\t\tif (ssr?.head) applyRouteHead(ssr.head);\n\t\t\tif (ssr?.lang) applyLang(ssr.lang);\n\t\t} catch {}\n\t\treturn () => {\n\t\t\t// Clear previously injected route-level head items\n\t\t\tapplyRouteHead(undefined);\n\t\t};\n\t}, [target]);\n\n\tconst notFoundResolver = useCallback(\n\t\t(pathname: string) => {\n\t\t\ttry {\n\t\t\t\t// Choose the most specific notFound whose pattern is a prefix of pathname\n\t\t\t\tconst list = Array.isArray(notFoundRoutes)\n\t\t\t\t\t? (notFoundRoutes as Any[])\n\t\t\t\t\t: [];\n\t\t\t\tlet chosen: Any | undefined;\n\t\t\t\tlet bestLen = -1;\n\t\t\t\tfor (const nf of list) {\n\t\t\t\t\tconst pat = String(nf?.pattern || '/');\n\t\t\t\t\tif (!pathname.startsWith(pat)) continue;\n\t\t\t\t\tconst len = pat.split('/').filter(Boolean).length;\n\t\t\t\t\tif (len >= bestLen) {\n\t\t\t\t\t\tbestLen = len;\n\t\t\t\t\t\tchosen = nf;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn chosen?.component as Any | undefined;\n\t\t\t} catch {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t},\n\t\t[notFoundRoutes],\n\t);\n\n\tconst contextValue = useMemo<RouterContextFactory>(\n\t\t() =>\n\t\t\t({\n\t\t\t\tpathname: location.pathname,\n\t\t\t\tparams,\n\t\t\t\tsearchParams,\n\t\t\t\tnavigate,\n\t\t\t\ttarget,\n\t\t\t\tmatchRoute,\n\t\t\t\tnotFoundResolver,\n\t\t\t}) as Any,\n\t\t[\n\t\t\tlocation.pathname,\n\t\t\tparams,\n\t\t\tsearchParams,\n\t\t\tnavigate,\n\t\t\ttarget,\n\t\t\tmatchRoute,\n\t\t\tnotFoundResolver,\n\t\t],\n\t);\n\n\t// Find matching layouts for the current pathname\n\tconst matchingLayouts = useMemo(() => {\n\t\treturn layouts\n\t\t\t.filter((layout: Any) => {\n\t\t\t\t// Layout matches if the current path starts with the layout's path\n\t\t\t\tif (layout.pattern === '/') return true;\n\t\t\t\treturn location.pathname.startsWith(layout.pattern);\n\t\t\t})\n\t\t\t.sort((a: Any, b: Any) => {\n\t\t\t\t// Sort by depth (more specific paths first)\n\t\t\t\treturn b.pattern.split('/').length - a.pattern.split('/').length;\n\t\t\t});\n\t}, [layouts, location.pathname]);\n\n\tlet content: ReactNode;\n\n\tif (target) {\n\t\tconst Component = target.route.component;\n\t\tlet outletContent: ReactNode = <Component />;\n\n\t\t// Build layout hierarchy from innermost to outermost\n\t\tfor (let i = matchingLayouts.length - 1; i >= 0; i--) {\n\t\t\tconst Layout = matchingLayouts[i].component;\n\t\t\tconst currentOutlet = outletContent;\n\t\t\toutletContent = (\n\t\t\t\t<OutletContext.Provider value={currentOutlet}>\n\t\t\t\t\t<Layout />\n\t\t\t\t</OutletContext.Provider>\n\t\t\t);\n\t\t}\n\n\t\tcontent = outletContent;\n\t} else {\n\t\tconst Fallback = (notFoundResolver(location.pathname) as Any) || NotFound;\n\t\tif (Fallback) {\n\t\t\tcontent = <Fallback />;\n\t\t} else {\n\t\t\tcontent = (\n\t\t\t\t<div style={{ padding: '2rem', textAlign: 'center' }}>\n\t\t\t\t\t<h1>404 - Page Not Found</h1>\n\t\t\t\t\t<p>The page {location.pathname} could not be found.</p>\n\t\t\t\t\t<a href='/'>Go Home</a>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t}\n\n\treturn (\n\t\t<RouterContext.Provider value={contextValue}>\n\t\t\t{children || content}\n\t\t</RouterContext.Provider>\n\t);\n}\n\nexport { OutletContext, RouterContext, RouterProvider };\n",
|
|
12
|
+
"import type { ReactNode } from 'react';\nimport React, {\n\tcreateContext,\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseSyncExternalStore,\n} from 'react';\nimport { flushSync } from 'react-dom';\nimport type { Any } from '../types/any';\nimport type {\n\tNavigateOptions,\n\tRouteMatch,\n\tRouterContextFactory,\n} from '../types/router';\nimport { applyLang, applyPageMeta, applyRouteHead } from '../utils/head';\n\n// Check if we're in a browser environment\nconst isBrowser =\n\ttypeof window !== 'undefined' && typeof window.document !== 'undefined';\n\nconst OutletContext = createContext<ReactNode>(null);\nconst RouterContext = createContext<RouterContextFactory | null>(null);\n\n// Create a simple store for location changes\nlet listeners: Array<() => void> = [];\nlet currentLocation = isBrowser\n\t? {\n\t\t\tpathname: window.location.pathname,\n\t\t\tsearch: window.location.search,\n\t\t\thash: window.location.hash,\n\t\t}\n\t: { pathname: '/', search: '', hash: '' };\n\ninterface RouterProviderProps {\n\tchildren?: ReactNode;\n\tlayouts?: readonly Any[];\n\tmatchRoute: (pathname: string) => RouteMatch | null;\n\tnotFoundRoutes?: readonly Any[];\n\tnotFound?: React.ComponentType;\n\tpathname?: string;\n\tviewTransitions?: boolean;\n\tscrollRestoration?: boolean;\n}\n\nfunction subscribe(listener: () => void) {\n\tif (!isBrowser) return () => {};\n\tlisteners.push(listener);\n\treturn () => {\n\t\tlisteners = listeners.filter((l) => l !== listener);\n\t};\n}\n\nfunction getSnapshot() {\n\treturn currentLocation;\n}\n\nfunction emitChange() {\n\tfor (const listener of listeners) {\n\t\tlistener();\n\t}\n}\n\n// Helper to check if view transitions are supported\nconst supportsViewTransitions =\n\ttypeof document !== 'undefined' && 'startViewTransition' in document;\n\n// Global flag to track if view transitions are enabled\nlet viewTransitionsEnabled = false;\n\nfunction setViewTransitionsEnabled(enabled: boolean) {\n\tviewTransitionsEnabled = enabled && supportsViewTransitions;\n}\n\n// Global flag to track if scroll restoration is enabled\nlet scrollRestorationEnabled = true;\n\nfunction setScrollRestorationEnabled(enabled: boolean) {\n\tscrollRestorationEnabled = enabled;\n}\n\n// Store scroll positions for each path for restoration on back/forward\nconst scrollPositions = new Map<string, { x: number; y: number }>();\n\n// Helper to check if page has named view transition elements\nfunction hasViewTransitionNames(): boolean {\n\tif (!isBrowser) return false;\n\ttry {\n\t\t// Check if any element has view-transition-name set (including via CSS)\n\t\tconst allElements = document.querySelectorAll('*');\n\t\tfor (const el of allElements) {\n\t\t\tconst computedStyle = window.getComputedStyle(el);\n\t\t\tconst transitionName = computedStyle.viewTransitionName;\n\t\t\tif (transitionName && transitionName !== 'none') {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction navigateInternal(to: string, options: NavigateOptions = {}) {\n\tif (!isBrowser) return;\n\n\tconst url = new URL(to, window.location.origin);\n\n\tif (url.origin !== window.location.origin) {\n\t\t// External link\n\t\twindow.location.href = to;\n\t\treturn;\n\t}\n\n\tconst newPath = url.pathname + url.search + url.hash;\n\tconst currentPath =\n\t\twindow.location.pathname + window.location.search + window.location.hash;\n\n\tif (newPath === currentPath) return;\n\n\t// Save current scroll position before navigating away\n\tif (scrollRestorationEnabled) {\n\t\tscrollPositions.set(currentPath, {\n\t\t\tx: window.scrollX,\n\t\t\ty: window.scrollY,\n\t\t});\n\t}\n\n\tif (options.replace) {\n\t\twindow.history.replaceState(options.state || null, '', to);\n\t} else {\n\t\twindow.history.pushState(options.state || null, '', to);\n\t}\n\n\tconst updateState = () => {\n\t\tcurrentLocation = {\n\t\t\tpathname: url.pathname,\n\t\t\tsearch: url.search,\n\t\t\thash: url.hash,\n\t\t};\n\t\temitChange();\n\t};\n\n\t// Only use view transitions if enabled AND page has named transition elements\n\tconst shouldUseViewTransition =\n\t\tviewTransitionsEnabled && hasViewTransitionNames();\n\n\tif (shouldUseViewTransition) {\n\t\tdocument.startViewTransition(() => {\n\t\t\tflushSync(() => {\n\t\t\t\tupdateState();\n\t\t\t});\n\t\t});\n\t} else {\n\t\tupdateState();\n\t}\n\n\t// Handle scrolling after the DOM updates\n\trequestAnimationFrame(() => {\n\t\tif (url.hash) {\n\t\t\t// Try to scroll to the fragment with retries for slow-rendering components\n\t\t\tlet attempts = 0;\n\t\t\tconst maxAttempts = 10;\n\t\t\tconst tryScroll = () => {\n\t\t\t\tconst element = document.querySelector(url.hash);\n\t\t\t\tif (element) {\n\t\t\t\t\telement.scrollIntoView({ behavior: 'smooth', block: 'start' });\n\t\t\t\t} else if (attempts < maxAttempts) {\n\t\t\t\t\tattempts++;\n\t\t\t\t\trequestAnimationFrame(tryScroll);\n\t\t\t\t}\n\t\t\t};\n\t\t\ttryScroll();\n\t\t} else {\n\t\t\t// Scroll to top for forward navigation - happens after new page renders\n\t\t\twindow.scrollTo({ top: 0, left: 0, behavior: 'instant' });\n\t\t}\n\t});\n}\n\n/**\n * RouterProvider component that manages client-side routing with SSR support.\n * Uses React's useSyncExternalStore for proper hydration without mismatches.\n */\nfunction RouterProvider({\n\tchildren,\n\tlayouts = [],\n\tmatchRoute,\n\tnotFoundRoutes = [],\n\tnotFound: NotFound,\n\tpathname = '/',\n\tviewTransitions = true,\n\tscrollRestoration = true,\n}: RouterProviderProps) {\n\t// Set global view transitions and scroll restoration flags\n\tuseEffect(() => {\n\t\tsetViewTransitionsEnabled(viewTransitions);\n\t\tsetScrollRestorationEnabled(scrollRestoration);\n\t}, [viewTransitions, scrollRestoration]);\n\t// Create stable server snapshot reference that never changes\n\tconst serverSnapshotRef = React.useRef<{\n\t\tpathname: string;\n\t\tsearch: string;\n\t\thash: string;\n\t} | null>(null);\n\n\tif (!serverSnapshotRef.current) {\n\t\tif (isBrowser) {\n\t\t\t// During hydration, point to the exact same object reference\n\t\t\t// that getSnapshot() returns so useSyncExternalStore doesn't\n\t\t\t// detect a mismatch and trigger a second render.\n\t\t\tserverSnapshotRef.current = currentLocation;\n\t\t} else {\n\t\t\t// During pure SSR, use the pathname from props\n\t\t\tserverSnapshotRef.current = { pathname, search: '', hash: '' };\n\t\t}\n\t}\n\n\t// Return the same cached snapshot object every time\n\tconst getServerSnapshot = useCallback(() => serverSnapshotRef.current, []);\n\n\t// Use useSyncExternalStore for proper SSR hydration\n\tconst location =\n\t\tuseSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) ||\n\t\tcurrentLocation;\n\n\t// Initialize location on mount (client-side only)\n\t// Avoid emitting a change if nothing actually changed to prevent a redundant re-render after hydration\n\tuseEffect(() => {\n\t\tif (!isBrowser) return;\n\t\tconst next = {\n\t\t\tpathname: window.location.pathname,\n\t\t\tsearch: window.location.search,\n\t\t\thash: window.location.hash,\n\t\t};\n\t\tif (\n\t\t\tcurrentLocation.pathname !== next.pathname ||\n\t\t\tcurrentLocation.search !== next.search ||\n\t\t\tcurrentLocation.hash !== next.hash\n\t\t) {\n\t\t\tcurrentLocation = next;\n\t\t\temitChange();\n\t\t}\n\t}, []);\n\n\tconst target = useMemo(\n\t\t() => matchRoute(location.pathname),\n\t\t[location.pathname, matchRoute],\n\t);\n\n\tconst params = target?.params || {};\n\tconst searchParams = useMemo(\n\t\t() => new URLSearchParams(location.search),\n\t\t[location.search],\n\t);\n\n\tconst navigate = useCallback((to: string, options: NavigateOptions = {}) => {\n\t\tnavigateInternal(to, options);\n\t}, []);\n\n\t// Handle browser back/forward\n\tuseEffect(() => {\n\t\tif (!isBrowser) return;\n\n\t\tconst handlePopState = () => {\n\t\t\tconst next = {\n\t\t\t\tpathname: window.location.pathname,\n\t\t\t\tsearch: window.location.search,\n\t\t\t\thash: window.location.hash,\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst w = window as Any;\n\t\t\t\tw.__REROUTE_DATA__ = w.__REROUTE_DATA__ || {};\n\t\t\t\tconst have = (w.__REROUTE_DATA__ as Any)[next.pathname];\n\t\t\t\t// Only prefetch for dynamic routes; static/content pages don't need it\n\t\t\t\tconst isDynamic = !!matchRoute?.(next.pathname)?.route?.isDynamic;\n\t\t\t\tif (isDynamic && have === undefined) {\n\t\t\t\t\tlet updated = false;\n\t\t\t\t\tconst fallback = setTimeout(() => {\n\t\t\t\t\t\tif (updated) return;\n\t\t\t\t\t\tupdated = true;\n\t\t\t\t\t\tcurrentLocation = next;\n\t\t\t\t\t\temitChange();\n\t\t\t\t\t}, 250);\n\t\t\t\t\tfetch(`/__reroute_data?path=${encodeURIComponent(next.pathname)}`, {\n\t\t\t\t\t\theaders: { Accept: 'application/json' },\n\t\t\t\t\t\tcredentials: 'same-origin',\n\t\t\t\t\t})\n\t\t\t\t\t\t.then((r) => (r.ok ? r.json() : null))\n\t\t\t\t\t\t.then((j) => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst payload = j ? (j.data ?? j) : undefined;\n\t\t\t\t\t\t\t\tif (payload !== undefined)\n\t\t\t\t\t\t\t\t\t(w.__REROUTE_DATA__ as Any)[next.pathname] = payload;\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tw.dispatchEvent(\n\t\t\t\t\t\t\t\t\t\tnew CustomEvent('__reroute_data__', {\n\t\t\t\t\t\t\t\t\t\t\tdetail: { key: next.pathname },\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {})\n\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\tif (!updated) {\n\t\t\t\t\t\t\t\tclearTimeout(fallback);\n\t\t\t\t\t\t\t\tupdated = true;\n\t\t\t\t\t\t\t\tcurrentLocation = next;\n\t\t\t\t\t\t\t\temitChange();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\treturn; // we'll update after prefetch or fallback timer\n\t\t\t\t}\n\t\t\t} catch {}\n\n\t\t\tconst updateState = () => {\n\t\t\t\tcurrentLocation = next;\n\t\t\t\temitChange();\n\t\t\t};\n\n\t\t\t// Only use view transitions if enabled AND page has named transition elements\n\t\t\tconst shouldUseViewTransition =\n\t\t\t\tviewTransitionsEnabled && hasViewTransitionNames();\n\n\t\t\tif (shouldUseViewTransition) {\n\t\t\t\t(document as Any).startViewTransition(() => {\n\t\t\t\t\tflushSync(() => {\n\t\t\t\t\t\tupdateState();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tupdateState();\n\t\t\t}\n\n\t\t\t// Restore scroll position for back/forward navigation\n\t\t\tif (scrollRestorationEnabled) {\n\t\t\t\tconst nextPath = next.pathname + next.search + next.hash;\n\t\t\t\tconst savedPosition = scrollPositions.get(nextPath);\n\n\t\t\t\t// Wait for DOM to settle and view transition to complete\n\t\t\t\tconst restoreScroll = () => {\n\t\t\t\t\tif (next.hash) {\n\t\t\t\t\t\t// Handle hash navigation\n\t\t\t\t\t\tconst element = document.querySelector(next.hash);\n\t\t\t\t\t\tif (element) {\n\t\t\t\t\t\t\telement.scrollIntoView({ behavior: 'smooth' });\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (savedPosition) {\n\t\t\t\t\t\t// Restore saved scroll position\n\t\t\t\t\t\twindow.scrollTo({\n\t\t\t\t\t\t\ttop: savedPosition.y,\n\t\t\t\t\t\t\tleft: savedPosition.x,\n\t\t\t\t\t\t\tbehavior: 'instant',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t// If no saved position and no hash, keep current scroll (don't reset to top)\n\t\t\t\t};\n\n\t\t\t\tif (shouldUseViewTransition) {\n\t\t\t\t\t// Double rAF to ensure view transition has started rendering\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\trequestAnimationFrame(restoreScroll);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\trequestAnimationFrame(restoreScroll);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener('popstate', handlePopState);\n\t\treturn () => window.removeEventListener('popstate', handlePopState);\n\t}, [matchRoute]);\n\n\t// Intercept link clicks\n\tuseEffect(() => {\n\t\tif (!isBrowser) return;\n\n\t\tconst handleClick = (e: MouseEvent) => {\n\t\t\tconst target = (e.target as HTMLElement).closest('a');\n\t\t\tif (!target) return;\n\n\t\t\tconst href = target.getAttribute('href');\n\t\t\tif (!href) return;\n\n\t\t\t// Skip if:\n\t\t\t// - External link\n\t\t\t// - Download link\n\t\t\t// - Opens in new tab\n\t\t\t// - Modified click (ctrl/cmd/shift)\n\t\t\tif (\n\t\t\t\ttarget.target === '_blank' ||\n\t\t\t\ttarget.hasAttribute('download') ||\n\t\t\t\te.ctrlKey ||\n\t\t\t\te.metaKey ||\n\t\t\t\te.shiftKey ||\n\t\t\t\te.altKey\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst url = new URL(href, window.location.origin);\n\t\t\tif (url.origin !== window.location.origin) return;\n\n\t\t\t// Check if it's a route we handle\n\t\t\tconst match = matchRoute(url.pathname);\n\t\t\tif (!match) return;\n\n\t\t\te.preventDefault();\n\t\t\tnavigate(href);\n\t\t};\n\n\t\tdocument.addEventListener('click', handleClick);\n\t\treturn () => document.removeEventListener('click', handleClick);\n\t}, [navigate, matchRoute]);\n\n\t// Apply route-level meta/ssr if exported by the route module (non-content pages)\n\tuseEffect(() => {\n\t\tconst route: Any = target?.route as Any;\n\t\tif (!route) return;\n\t\ttry {\n\t\t\tif (route.meta) applyPageMeta(route.meta);\n\t\t} catch {}\n\t\ttry {\n\t\t\tconst ssr = route.ssr;\n\t\t\tif (ssr?.head) applyRouteHead(ssr.head);\n\t\t\tif (ssr?.lang) applyLang(ssr.lang);\n\t\t} catch {}\n\t\treturn () => {\n\t\t\t// Clear previously injected route-level head items\n\t\t\tapplyRouteHead(undefined);\n\t\t};\n\t}, [target]);\n\n\tconst notFoundResolver = useCallback(\n\t\t(pathname: string) => {\n\t\t\ttry {\n\t\t\t\t// Choose the most specific notFound whose pattern is a prefix of pathname\n\t\t\t\tconst list = Array.isArray(notFoundRoutes)\n\t\t\t\t\t? (notFoundRoutes as Any[])\n\t\t\t\t\t: [];\n\t\t\t\tlet chosen: Any | undefined;\n\t\t\t\tlet bestLen = -1;\n\t\t\t\tfor (const nf of list) {\n\t\t\t\t\tconst pat = String(nf?.pattern || '/');\n\t\t\t\t\tif (!pathname.startsWith(pat)) continue;\n\t\t\t\t\tconst len = pat.split('/').filter(Boolean).length;\n\t\t\t\t\tif (len >= bestLen) {\n\t\t\t\t\t\tbestLen = len;\n\t\t\t\t\t\tchosen = nf;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn chosen?.component as Any | undefined;\n\t\t\t} catch {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t},\n\t\t[notFoundRoutes],\n\t);\n\n\tconst contextValue = useMemo<RouterContextFactory>(\n\t\t() =>\n\t\t\t({\n\t\t\t\tpathname: location.pathname,\n\t\t\t\tparams,\n\t\t\t\tsearchParams,\n\t\t\t\tnavigate,\n\t\t\t\ttarget,\n\t\t\t\tmatchRoute,\n\t\t\t\tnotFoundResolver,\n\t\t\t}) as Any,\n\t\t[\n\t\t\tlocation.pathname,\n\t\t\tparams,\n\t\t\tsearchParams,\n\t\t\tnavigate,\n\t\t\ttarget,\n\t\t\tmatchRoute,\n\t\t\tnotFoundResolver,\n\t\t],\n\t);\n\n\t// Find matching layouts for the current pathname\n\tconst matchingLayouts = useMemo(() => {\n\t\treturn layouts\n\t\t\t.filter((layout: Any) => {\n\t\t\t\t// Layout matches if the current path starts with the layout's path\n\t\t\t\tif (layout.pattern === '/') return true;\n\t\t\t\treturn location.pathname.startsWith(layout.pattern);\n\t\t\t})\n\t\t\t.sort((a: Any, b: Any) => {\n\t\t\t\t// Sort by depth (more specific paths first)\n\t\t\t\treturn b.pattern.split('/').length - a.pattern.split('/').length;\n\t\t\t});\n\t}, [layouts, location.pathname]);\n\n\tlet content: ReactNode;\n\n\tif (target) {\n\t\tconst Component = target.route.component;\n\t\tlet outletContent: ReactNode = <Component />;\n\n\t\t// Build layout hierarchy from innermost to outermost\n\t\tfor (let i = matchingLayouts.length - 1; i >= 0; i--) {\n\t\t\tconst Layout = matchingLayouts[i].component;\n\t\t\tconst currentOutlet = outletContent;\n\t\t\toutletContent = (\n\t\t\t\t<OutletContext.Provider value={currentOutlet}>\n\t\t\t\t\t<Layout />\n\t\t\t\t</OutletContext.Provider>\n\t\t\t);\n\t\t}\n\n\t\tcontent = outletContent;\n\t} else {\n\t\tconst Fallback = (notFoundResolver(location.pathname) as Any) || NotFound;\n\t\tif (Fallback) {\n\t\t\tcontent = <Fallback />;\n\t\t} else {\n\t\t\tcontent = (\n\t\t\t\t<div style={{ padding: '2rem', textAlign: 'center' }}>\n\t\t\t\t\t<h1>404 - Page Not Found</h1>\n\t\t\t\t\t<p>The page {location.pathname} could not be found.</p>\n\t\t\t\t\t<a href='/'>Go Home</a>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t}\n\n\treturn (\n\t\t<RouterContext.Provider value={contextValue}>\n\t\t\t{children || content}\n\t\t</RouterContext.Provider>\n\t);\n}\n\nexport { OutletContext, RouterContext, RouterProvider };\n",
|
|
13
13
|
"import type { Any } from '../types/any';\n\nconst HEAD_ATTR = 'data-reroute-ssr-head';\nconst HEAD_ATTR_ROUTE = 'data-reroute-route-head';\n\nfunction isBrowser(): boolean {\n\treturn typeof document !== 'undefined' && typeof window !== 'undefined';\n}\n\nexport function applyPageMeta(meta: Any | undefined): void {\n\tif (!isBrowser() || !meta || typeof meta !== 'object') return;\n\ttry {\n\t\tconst title = typeof meta.title === 'string' ? meta.title : undefined;\n\t\tconst description =\n\t\t\ttypeof (meta as Any).description === 'string'\n\t\t\t\t? (meta as Any).description\n\t\t\t\t: typeof (meta as Any).excerpt === 'string'\n\t\t\t\t\t? (meta as Any).excerpt\n\t\t\t\t\t: undefined;\n\n\t\tif (title) document.title = title;\n\n\t\tif (description) {\n\t\t\tlet tag = document.head.querySelector(\n\t\t\t\t'meta[name=\"description\"]',\n\t\t\t) as HTMLMetaElement | null;\n\t\t\tif (!tag) {\n\t\t\t\ttag = document.createElement('meta');\n\t\t\t\ttag.setAttribute('name', 'description');\n\t\t\t\tdocument.head.appendChild(tag);\n\t\t\t}\n\t\t\ttag.setAttribute('content', description);\n\t\t}\n\t} catch {}\n}\n\nexport function applyLang(lang: Any | undefined): void {\n\tif (!isBrowser()) return;\n\tif (typeof lang === 'string' && lang.trim()) {\n\t\ttry {\n\t\t\tdocument.documentElement.lang = lang.trim();\n\t\t} catch {}\n\t}\n}\n\nexport function applySsrHead(head: Any | undefined): void {\n\tif (!isBrowser()) return;\n\ttry {\n\t\t// Remove previous injected nodes\n\t\tdocument.querySelectorAll(`[${HEAD_ATTR}]`).forEach((n) => {\n\t\t\tn.parentElement?.removeChild(n);\n\t\t});\n\n\t\tif (!head) return;\n\n\t\tconst parts: string[] = Array.isArray(head)\n\t\t\t? (head as Any[]).map((x) => String(x))\n\t\t\t: [String(head)];\n\t\tconst html = parts\n\t\t\t.map((p) => (typeof p === 'string' ? p : String(p)))\n\t\t\t.join('\\n');\n\t\tif (!html.trim()) return;\n\n\t\tconst tpl = document.createElement('template');\n\t\ttpl.innerHTML = html;\n\t\tconst nodes = Array.from(tpl.content.childNodes);\n\t\tfor (const node of nodes) {\n\t\t\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\t\t\t(node as Element).setAttribute(HEAD_ATTR, '');\n\t\t\t\tdocument.head.appendChild(node);\n\t\t\t}\n\t\t}\n\t} catch {}\n}\n\nexport function applyRouteHead(head: Any | undefined): void {\n\tif (!isBrowser()) return;\n\ttry {\n\t\t// Remove previous injected nodes for route-level head\n\t\tdocument.querySelectorAll(`[${HEAD_ATTR_ROUTE}]`).forEach((n) => {\n\t\t\tn.parentElement?.removeChild(n);\n\t\t});\n\n\t\tif (!head) return;\n\n\t\tconst parts: string[] = Array.isArray(head)\n\t\t\t? (head as Any[]).map((x) => String(x))\n\t\t\t: [String(head)];\n\t\tconst html = parts\n\t\t\t.map((p) => (typeof p === 'string' ? p : String(p)))\n\t\t\t.join('\\n');\n\t\tif (!html.trim()) return;\n\n\t\tconst tpl = document.createElement('template');\n\t\ttpl.innerHTML = html;\n\t\tconst nodes = Array.from(tpl.content.childNodes);\n\t\tfor (const node of nodes) {\n\t\t\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\t\t\t(node as Element).setAttribute(HEAD_ATTR_ROUTE, '');\n\t\t\t\tdocument.head.appendChild(node);\n\t\t\t}\n\t\t}\n\t} catch {}\n}\n",
|
|
14
14
|
"import type { ReactNode } from 'react';\nimport type { Any } from '../types/any';\nimport { ContentProvider } from './ContentProvider';\nimport { RouterProvider } from './RouterProvider';\n\ntype RerouteParams = {\n\tbyCollection?: Record<string, Any[]> | null;\n\tgetContentEntry?: (collection: string, name: string) => Any | undefined;\n\tloadContent?: () => Promise<{\n\t\tbyCollection: Record<string, Any[]>;\n\t\tgetContentEntry: (collection: string, name: string) => Any | undefined;\n\t}>;\n\tcontentBaseUrl?: string;\n\tlayouts?: readonly Any[];\n\tmatchRoute: (pathname: string) => Any;\n\tnotFoundRoutes?: readonly Any[];\n\tnotFound?: React.ComponentType;\n\tpathname?: string;\n\tviewTransitions?: boolean;\n\tscrollRestoration?: boolean;\n};\n\nfunction RerouteProvider({\n\tfrom,\n\tchildren,\n}: {\n\tfrom: RerouteParams;\n\tchildren?: ReactNode;\n}) {\n\tconst {\n\t\tbyCollection,\n\t\tgetContentEntry,\n\t\tloadContent,\n\t\tcontentBaseUrl,\n\t\tlayouts = [],\n\t\tmatchRoute,\n\t\tnotFoundRoutes,\n\t\tnotFound,\n\t\tpathname,\n\t\tviewTransitions,\n\t\tscrollRestoration,\n\t} = from;\n\tconst loader =\n\t\tloadContent ||\n\t\t(contentBaseUrl\n\t\t\t? (((c?: string) =>\n\t\t\t\t\timport(/* @vite-ignore */ `${contentBaseUrl}/${c}.js`)) as Any)\n\t\t\t: undefined);\n\n\treturn (\n\t\t<ContentProvider\n\t\t\tgetEntry={getContentEntry}\n\t\t\tbyCollection={byCollection || null}\n\t\t\tloadCollection={loader as Any}\n\t\t>\n\t\t\t<RouterProvider\n\t\t\t\tlayouts={layouts as Any[]}\n\t\t\t\tmatchRoute={matchRoute as Any}\n\t\t\t\tnotFoundRoutes={notFoundRoutes as Any}\n\t\t\t\tnotFound={notFound}\n\t\t\t\tpathname={pathname}\n\t\t\t\tviewTransitions={viewTransitions}\n\t\t\t\tscrollRestoration={scrollRestoration}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</RouterProvider>\n\t\t</ContentProvider>\n\t);\n}\n\nexport { RerouteProvider };\nexport type { RerouteParams };\n",
|
|
15
15
|
"import { useRouter } from './useRouter';\n\n/**\n * Hook to access the navigate function.\n * Must be used within a RouterProvider.\n */\nexport function useNavigate() {\n\tconst { navigate } = useRouter();\n\treturn navigate;\n}\n",
|
|
16
16
|
"import { useRouter } from './useRouter';\n\n/**\n * Hook to access URL parameters.\n * Must be used within a RouterProvider.\n */\nexport function useParams<\n\tT extends Record<string, string> = Record<string, string>,\n>(): T {\n\tconst { params } = useRouter();\n\treturn params as T;\n}\n",
|
|
17
17
|
"import { useRouter } from './useRouter';\n\n/**\n * Hook to access URL search parameters.\n * Must be used within a RouterProvider.\n */\nexport function useSearchParams(): URLSearchParams {\n\tconst { searchParams } = useRouter();\n\treturn searchParams;\n}\n",
|
|
18
18
|
"import {\n\ttype CSSProperties,\n\ttype ImgHTMLAttributes,\n\tuseEffect,\n\tuseRef,\n\tuseState,\n} from 'react';\n\nexport interface ImageProps\n\textends Omit<\n\t\tImgHTMLAttributes<HTMLImageElement>,\n\t\t'src' | 'srcSet' | 'width' | 'height'\n\t> {\n\t/** Source path of the image */\n\tsrc: string;\n\t/** Width in pixels */\n\twidth?: number;\n\t/** Height in pixels */\n\theight?: number;\n\t/** Image quality (1-100, default: 75) */\n\tquality?: number;\n\t/** Output format (default: auto-detect based on browser support) */\n\tformat?: 'auto' | 'webp' | 'avif' | 'jpeg' | 'png';\n\t/** Sizes attribute for responsive images */\n\tsizes?: string;\n\t/** Priority loading (disables lazy loading) */\n\tpriority?: boolean;\n\t/** Blur placeholder data URL */\n\tplaceholder?: 'blur' | 'empty';\n\t/** Blur data URL (when placeholder='blur') */\n\tblurDataURL?: string;\n\t/** Show loading spinner (default: true) */\n\tshowSpinner?: boolean;\n\t/** Custom spinner component to show while image loads */\n\tspinner?: React.ReactNode;\n\t/** Spinner size in pixels (default: 40) */\n\tspinnerSize?: number;\n\t/** Spinner color (default: 'rgba(0, 0, 0, 0.4)') */\n\tspinnerColor?: string;\n\t/** Spinner background color (default: 'rgba(0, 0, 0, 0.03)') */\n\tspinnerBackground?: string;\n\t/** Custom loader function */\n\tloader?: (params: {\n\t\tsrc: string;\n\t\twidth: number;\n\t\tquality?: number;\n\t\tformat?: string;\n\t}) => string;\n\t/** Callback when image loads */\n\tonLoad?: () => void;\n\t/** Callback when image errors */\n\tonError?: () => void;\n}\n\n// Default device sizes for responsive images (based on common breakpoints)\nconst DEFAULT_DEVICE_SIZES = [640, 750, 828, 1080, 1200, 1920, 2048, 3840];\n\n// Generate srcset from device sizes\nfunction generateSrcSet(\n\tsrc: string,\n\twidth: number | undefined,\n\tquality: number,\n\tformat: string,\n\tloader: ImageProps['loader'],\n): string {\n\tconst sizes = width\n\t\t? DEFAULT_DEVICE_SIZES.filter((size) => size <= width * 2)\n\t\t: DEFAULT_DEVICE_SIZES;\n\n\tif (sizes.length === 0 || !width) {\n\t\treturn '';\n\t}\n\n\treturn sizes\n\t\t.map((size) => {\n\t\t\tconst url = loader\n\t\t\t\t? loader({ src, width: size, quality, format })\n\t\t\t\t: defaultLoader({ src, width: size, quality, format });\n\t\t\treturn `${url} ${size}w`;\n\t\t})\n\t\t.join(', ');\n}\n\n// Default loader that generates reroute image optimization URLs\nfunction defaultLoader({\n\tsrc,\n\twidth,\n\tquality = 75,\n\tformat,\n}: {\n\tsrc: string;\n\twidth: number;\n\tquality?: number;\n\tformat?: string;\n}): string {\n\tconst params = new URLSearchParams();\n\tparams.set('url', src);\n\tparams.set('w', width.toString());\n\tparams.set('q', quality.toString());\n\tif (format && format !== 'auto') {\n\t\tparams.set('f', format);\n\t}\n\treturn `/_reroute_image?${params.toString()}`;\n}\n\n// Check if native lazy loading is supported\nfunction supportsNativeLazyLoading(): boolean {\n\tif (typeof HTMLImageElement === 'undefined') {\n\t\treturn true; // Assume support during SSR (99% of modern browsers support it)\n\t}\n\treturn 'loading' in HTMLImageElement.prototype;\n}\n\nexport function Image({\n\tsrc,\n\twidth,\n\theight,\n\tquality = 75,\n\tformat = 'auto',\n\tsizes,\n\tpriority = false,\n\tplaceholder = 'empty',\n\tblurDataURL,\n\tshowSpinner = true,\n\tspinner,\n\tspinnerSize = 40,\n\tspinnerColor = 'rgba(0, 0, 0, 0.4)',\n\tspinnerBackground = 'rgba(0, 0, 0, 0.03)',\n\tloader,\n\talt,\n\tonLoad: onLoadProp,\n\tonError: onErrorProp,\n\tstyle,\n\tclassName,\n\t...props\n}: ImageProps) {\n\tconst [isLoaded, setIsLoaded] = useState(false);\n\tconst [hasError, setHasError] = useState(false);\n\tconst imgRef = useRef<HTMLImageElement>(null);\n\n\t// Generate image URL\n\t// Don't pass resolved format to defaultLoader - let server negotiate via Accept header\n\tconst imageUrl = loader\n\t\t? loader({ src, width: width || 0, quality, format })\n\t\t: width\n\t\t\t? defaultLoader({ src, width, quality, format })\n\t\t\t: src;\n\n\t// Check if image is already loaded (e.g., from browser cache)\n\tuseEffect(() => {\n\t\tconst img = imgRef.current;\n\t\tif (img?.complete && img.naturalWidth > 0) {\n\t\t\tsetIsLoaded(true);\n\t\t}\n\t}, []);\n\n\t// Generate srcset for responsive images\n\tconst srcSet = width\n\t\t? generateSrcSet(src, width, quality, format, loader)\n\t\t: undefined;\n\n\t// Handle image load\n\tconst handleLoad = () => {\n\t\tsetIsLoaded(true);\n\t\tonLoadProp?.();\n\t};\n\n\t// Handle image error\n\tconst handleError = () => {\n\t\tsetHasError(true);\n\t\tonErrorProp?.();\n\t};\n\n\t// Intersection observer for lazy loading\n\tuseEffect(() => {\n\t\tif (priority || typeof window === 'undefined') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst img = imgRef.current;\n\t\tif (!img) return;\n\n\t\t// Use native lazy loading if available\n\t\tif (supportsNativeLazyLoading()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to intersection observer\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tentries.forEach((entry) => {\n\t\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\t\tconst lazyImg = entry.target as HTMLImageElement;\n\t\t\t\t\t\tconst dataSrc = lazyImg.getAttribute('data-src');\n\t\t\t\t\t\tconst dataSrcSet = lazyImg.getAttribute('data-srcset');\n\n\t\t\t\t\t\tif (dataSrc) {\n\t\t\t\t\t\t\tlazyImg.src = dataSrc;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (dataSrcSet) {\n\t\t\t\t\t\t\tlazyImg.srcset = dataSrcSet;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tobserver.unobserve(lazyImg);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t{\n\t\t\t\trootMargin: '50px',\n\t\t\t},\n\t\t);\n\n\t\tobserver.observe(img);\n\n\t\treturn () => {\n\t\t\tif (img) {\n\t\t\t\tobserver.unobserve(img);\n\t\t\t}\n\t\t};\n\t}, [priority]);\n\n\t// Compute styles\n\tconst imgStyle: CSSProperties = {\n\t\t...style,\n\t\t...(width && height ? { aspectRatio: `${width} / ${height}` } : {}),\n\t\t...(placeholder === 'blur' && !isLoaded && !hasError\n\t\t\t? {\n\t\t\t\t\tfilter: 'blur(20px)',\n\t\t\t\t\ttransform: 'scale(1.1)',\n\t\t\t\t\ttransition: 'filter 0.3s ease, transform 0.3s ease',\n\t\t\t\t}\n\t\t\t: isLoaded\n\t\t\t\t? {\n\t\t\t\t\t\tfilter: 'none',\n\t\t\t\t\t\ttransform: 'scale(1)',\n\t\t\t\t\t\ttransition: 'filter 0.3s ease, transform 0.3s ease',\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t};\n\n\t// Determine loading strategy\n\tconst loadingAttr = priority ? 'eager' : 'lazy';\n\n\t// Use blur placeholder if provided\n\tconst placeholderSrc =\n\t\tplaceholder === 'blur' && blurDataURL ? blurDataURL : undefined;\n\n\treturn (\n\t\t<span\n\t\t\tstyle={{\n\t\t\t\tposition: 'relative',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\talignItems: 'center',\n\t\t\t\tjustifyContent: 'center',\n\t\t\t\twidth: '100%',\n\t\t\t\theight: '100%',\n\t\t\t}}\n\t\t>\n\t\t\t{/* Loading spinner */}\n\t\t\t{showSpinner && !isLoaded && !hasError && (\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\tbackgroundColor: spinnerBackground,\n\t\t\t\t\t\tzIndex: 1,\n\t\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{spinner || (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: `${spinnerSize}px`,\n\t\t\t\t\t\t\t\theight: `${spinnerSize}px`,\n\t\t\t\t\t\t\t\tborder: `${Math.max(2, spinnerSize / 13)}px solid transparent`,\n\t\t\t\t\t\t\t\tborderTopColor: spinnerColor,\n\t\t\t\t\t\t\t\tborderRadius: '50%',\n\t\t\t\t\t\t\t\tanimation: 'reroute-spin 0.8s linear infinite',\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{placeholder === 'blur' && placeholderSrc && !isLoaded && !hasError && (\n\t\t\t\t<img\n\t\t\t\t\tsrc={placeholderSrc}\n\t\t\t\t\talt=''\n\t\t\t\t\taria-hidden='true'\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\tobjectFit: style?.objectFit || 'cover',\n\t\t\t\t\t\tfilter: 'blur(20px)',\n\t\t\t\t\t\ttransform: 'scale(1.1)',\n\t\t\t\t\t\tzIndex: -1,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<img\n\t\t\t\tref={imgRef}\n\t\t\t\tsrc={priority || supportsNativeLazyLoading() ? imageUrl : undefined}\n\t\t\t\tdata-src={\n\t\t\t\t\t!priority && !supportsNativeLazyLoading() ? imageUrl : undefined\n\t\t\t\t}\n\t\t\t\tsrcSet={priority || supportsNativeLazyLoading() ? srcSet : undefined}\n\t\t\t\tdata-srcset={\n\t\t\t\t\t!priority && !supportsNativeLazyLoading() ? srcSet : undefined\n\t\t\t\t}\n\t\t\t\tsizes={sizes}\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\talt={alt || ''}\n\t\t\t\tloading={loadingAttr}\n\t\t\t\tfetchPriority={priority ? 'high' : undefined}\n\t\t\t\tonLoad={handleLoad}\n\t\t\t\tonError={handleError}\n\t\t\t\tstyle={imgStyle}\n\t\t\t\tclassName={className}\n\t\t\t\t{...props}\n\t\t\t/>\n\n\t\t\t{/* Keyframes for spinner animation */}\n\t\t\t{showSpinner && !isLoaded && (\n\t\t\t\t<style>\n\t\t\t\t\t{`\n\t\t\t\t\t\t@keyframes reroute-spin {\n\t\t\t\t\t\t\t0% { transform: rotate(0deg); }\n\t\t\t\t\t\t\t100% { transform: rotate(360deg); }\n\t\t\t\t\t\t}\n\t\t\t\t\t`}\n\t\t\t\t</style>\n\t\t\t)}\n\t\t</span>\n\t);\n}\n",
|
|
19
|
-
"import { useCallback, useMemo } from 'react';\nimport { useRouter } from '../hooks';\nimport { prefetchContent } from '../hooks/useContent';\nimport {\n\tuseContentIndex,\n\tuseContentLoadCollection,\n\tuseContentResolver,\n} from '../providers/ContentProvider';\nimport type { Any } from '../types/any';\nimport type { LinkProps } from '../types/router';\n\n/**\n * Link component for client-side navigation.\n * Automatically prevents default behavior and uses the router's navigate function.\n */\nfunction Link({\n\tto,\n\treplace,\n\tstate,\n\tprefetch = true,\n\tfragment,\n\tonClick,\n\tonMouseEnter,\n\tonFocus,\n\t...props\n}: LinkProps) {\n\tconst { navigate, matchRoute } = useRouter();\n\tconst resolver = useContentResolver();\n\tconst contentIndex = useContentIndex();\n\tconst ensureCollection = useContentLoadCollection();\n\tconst inferred = useMemo(\n\t\t() => (resolver ? resolver(String(to)) : undefined),\n\t\t[resolver, to],\n\t);\n\n\tconst handleClick = useCallback(\n\t\tasync (e: React.MouseEvent<HTMLAnchorElement>) => {\n\t\t\tif (onClick) {\n\t\t\t\tonClick(e);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\te.defaultPrevented ||\n\t\t\t\te.button !== 0 ||\n\t\t\t\te.ctrlKey ||\n\t\t\t\te.metaKey ||\n\t\t\t\te.shiftKey ||\n\t\t\t\te.altKey ||\n\t\t\t\tprops.target === '_blank'\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t\t// Prefetch data for dynamic routes only; static/content pages don't need it\n\t\t\tif (prefetch) {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof window !== 'undefined') {\n\t\t\t\t\t\tconst url = new URL(String(to), window.location.origin);\n\t\t\t\t\t\tif (url.origin === window.location.origin) {\n\t\t\t\t\t\t\tconst path = url.pathname;\n\t\t\t\t\t\t\tconst isDynamic = !!matchRoute?.(path)?.route?.isDynamic;\n\t\t\t\t\t\t\tconst w = window as Any;\n\t\t\t\t\t\t\tw.__REROUTE_DATA__ = w.__REROUTE_DATA__ || {};\n\t\t\t\t\t\t\t// Skip for content links (inferred) and non-dynamic routes\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tisDynamic &&\n\t\t\t\t\t\t\t\t(!inferred || !inferred.module) &&\n\t\t\t\t\t\t\t\tw.__REROUTE_DATA__[path] === undefined\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconst ctl = new AbortController();\n\t\t\t\t\t\t\t\tconst timer = setTimeout(() => ctl.abort(), 350);\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst r = await fetch(\n\t\t\t\t\t\t\t\t\t\t`/__reroute_data?path=${encodeURIComponent(path)}`,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\theaders: { Accept: 'application/json' },\n\t\t\t\t\t\t\t\t\t\t\tcredentials: 'same-origin',\n\t\t\t\t\t\t\t\t\t\t\tsignal: ctl.signal,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t).catch(() => null);\n\t\t\t\t\t\t\t\t\tif (r?.ok) {\n\t\t\t\t\t\t\t\t\t\tconst j = await r.json().catch(() => null);\n\t\t\t\t\t\t\t\t\t\tif (j) {\n\t\t\t\t\t\t\t\t\t\t\t(w.__REROUTE_DATA__ as Any)[path] = j.data ?? j;\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tw.dispatchEvent(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew CustomEvent('__reroute_data__', {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdetail: { key: path },\n\t\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t\t// Build the URL with fragment if provided\n\t\t\tconst targetUrl = fragment ? `${to}#${fragment}` : to;\n\t\t\tnavigate(targetUrl, { replace, state });\n\t\t},\n\t\t[\n\t\t\tnavigate,\n\t\t\tto,\n\t\t\treplace,\n\t\t\tstate,\n\t\t\tonClick,\n\t\t\tprops.target,\n\t\t\tprefetch,\n\t\t\tinferred,\n\t\t\tmatchRoute,\n\t\t\tfragment,\n\t\t],\n\t);\n\n\tconst handleMouseEnter = useCallback<\n\t\tNonNullable<React.AnchorHTMLAttributes<HTMLAnchorElement>['onMouseEnter']>\n\t>(\n\t\t(e) => {\n\t\t\tif (prefetch && inferred && inferred.module) prefetchContent(inferred);\n\t\t\telse if (prefetch) {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof window !== 'undefined') {\n\t\t\t\t\t\tconst url = new URL(String(to), window.location.origin);\n\t\t\t\t\t\tif (url.origin === window.location.origin) {\n\t\t\t\t\t\t\tconst path = url.pathname;\n\t\t\t\t\t\t\tconst isDynamic = !!matchRoute?.(path)?.route?.isDynamic;\n\t\t\t\t\t\t\t// Fallback for content links without module: load collection then prefetch\n\t\t\t\t\t\t\t// Only try to load collections we already know exist (avoid 404s like /products)\n\t\t\t\t\t\t\tconst known = !!(\n\t\t\t\t\t\t\t\tcontentIndex &&\n\t\t\t\t\t\t\t\tinferred &&\n\t\t\t\t\t\t\t\tinferred.collection in (contentIndex as Any)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (inferred && !inferred.module && ensureCollection && known) {\n\t\t\t\t\t\t\t\t(async () => {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tconst items: Any[] | undefined = await ensureCollection(\n\t\t\t\t\t\t\t\t\t\t\tinferred.collection,\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\tconst found = (items || []).find(\n\t\t\t\t\t\t\t\t\t\t\t(e: Any) => e?.name === inferred.name,\n\t\t\t\t\t\t\t\t\t\t) as Any | undefined;\n\t\t\t\t\t\t\t\t\t\tconst mod = (found as Any)?.module as string | undefined;\n\t\t\t\t\t\t\t\t\t\tif (mod) prefetchContent({ ...inferred, module: mod });\n\t\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t\t})();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst w = window as Any;\n\t\t\t\t\t\t\tw.__REROUTE_DATA__ = w.__REROUTE_DATA__ || {};\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tisDynamic &&\n\t\t\t\t\t\t\t\t(!inferred || !inferred.module) &&\n\t\t\t\t\t\t\t\tw.__REROUTE_DATA__[path] === undefined\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tfetch(`/__reroute_data?path=${encodeURIComponent(path)}`, {\n\t\t\t\t\t\t\t\t\theaders: { Accept: 'application/json' },\n\t\t\t\t\t\t\t\t\tcredentials: 'same-origin',\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.then((r) => (r.ok ? r.json() : null))\n\t\t\t\t\t\t\t\t\t.then((j) => {\n\t\t\t\t\t\t\t\t\t\tif (!j) return;\n\t\t\t\t\t\t\t\t\t\tw.__REROUTE_DATA__[path] = j.data ?? j;\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tw.dispatchEvent(\n\t\t\t\t\t\t\t\t\t\t\t\tnew CustomEvent('__reroute_data__', {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdetail: { key: path },\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.catch(() => {});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t\tif (onMouseEnter) onMouseEnter(e);\n\t\t},\n\t\t[\n\t\t\tprefetch,\n\t\t\tinferred,\n\t\t\tonMouseEnter,\n\t\t\tto,\n\t\t\tcontentIndex,\n\t\t\tensureCollection,\n\t\t\tmatchRoute,\n\t\t],\n\t);\n\n\tconst handleFocus = useCallback<\n\t\tNonNullable<React.AnchorHTMLAttributes<HTMLAnchorElement>['onFocus']>\n\t>(\n\t\t(e) => {\n\t\t\tif (prefetch && inferred && inferred.module) prefetchContent(inferred);\n\t\t\telse if (prefetch) {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof window !== 'undefined') {\n\t\t\t\t\t\tconst url = new URL(String(to), window.location.origin);\n\t\t\t\t\t\tif (url.origin === window.location.origin) {\n\t\t\t\t\t\t\tconst path = url.pathname;\n\t\t\t\t\t\t\tconst isDynamic = !!matchRoute?.(path)?.route?.isDynamic;\n\t\t\t\t\t\t\tconst known2 = !!(\n\t\t\t\t\t\t\t\tcontentIndex &&\n\t\t\t\t\t\t\t\tinferred &&\n\t\t\t\t\t\t\t\tinferred.collection in (contentIndex as Any)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (inferred && !inferred.module && ensureCollection && known2) {\n\t\t\t\t\t\t\t\t(async () => {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tconst items: Any[] | undefined = await ensureCollection(\n\t\t\t\t\t\t\t\t\t\t\tinferred.collection,\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\tconst found = (items || []).find(\n\t\t\t\t\t\t\t\t\t\t\t(e: Any) => e?.name === inferred.name,\n\t\t\t\t\t\t\t\t\t\t) as Any | undefined;\n\t\t\t\t\t\t\t\t\t\tconst mod = (found as Any)?.module as string | undefined;\n\t\t\t\t\t\t\t\t\t\tif (mod) prefetchContent({ ...inferred, module: mod });\n\t\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t\t})();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst w = window as Any;\n\t\t\t\t\t\t\tw.__REROUTE_DATA__ = w.__REROUTE_DATA__ || {};\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tisDynamic &&\n\t\t\t\t\t\t\t\t(!inferred || !inferred.module) &&\n\t\t\t\t\t\t\t\tw.__REROUTE_DATA__[path] === undefined\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tfetch(`/__reroute_data?path=${encodeURIComponent(path)}`, {\n\t\t\t\t\t\t\t\t\theaders: { Accept: 'application/json' },\n\t\t\t\t\t\t\t\t\tcredentials: 'same-origin',\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.then((r) => (r.ok ? r.json() : null))\n\t\t\t\t\t\t\t\t\t.then((j) => {\n\t\t\t\t\t\t\t\t\t\tif (!j) return;\n\t\t\t\t\t\t\t\t\t\tw.__REROUTE_DATA__[path] = j.data ?? j;\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tw.dispatchEvent(\n\t\t\t\t\t\t\t\t\t\t\t\tnew CustomEvent('__reroute_data__', {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdetail: { key: path },\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.catch(() => {});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t\tif (onFocus) onFocus(e);\n\t\t},\n\t\t[\n\t\t\tprefetch,\n\t\t\tinferred,\n\t\t\tonFocus,\n\t\t\tto,\n\t\t\tcontentIndex,\n\t\t\tensureCollection,\n\t\t\tmatchRoute,\n\t\t],\n\t);\n\n\t// Build href with fragment if provided\n\tconst href = fragment ? `${to}#${fragment}` : to;\n\n\treturn (\n\t\t<a\n\t\t\thref={href}\n\t\t\tonClick={handleClick}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonFocus={handleFocus}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Link };\n",
|
|
19
|
+
"import { useCallback, useContext, useMemo } from 'react';\nimport { useRouter } from '../hooks';\nimport { prefetchContent } from '../hooks/useContent';\nimport {\n\tuseContentIndex,\n\tuseContentLoadCollection,\n\tuseContentResolver,\n} from '../providers/ContentProvider';\nimport { RouterContext } from '../providers/RouterProvider';\nimport type { Any } from '../types/any';\nimport type { LinkProps } from '../types/router';\n\n/**\n * Link component for client-side navigation.\n * Automatically prevents default behavior and uses the router's navigate function.\n */\nfunction Link({\n\tto,\n\treplace,\n\tstate,\n\tprefetch = true,\n\tfragment,\n\tonClick,\n\tonMouseEnter,\n\tonFocus,\n\t...props\n}: LinkProps) {\n\t// Always call hooks unconditionally (Rules of Hooks)\n\tconst routerContext = useContext(RouterContext);\n\tconst router = useRouter();\n\tconst resolver = useContentResolver();\n\tconst contentIndex = useContentIndex();\n\tconst ensureCollection = useContentLoadCollection();\n\n\t// Check if we have router context (SSR-safe)\n\tconst hasRouter = !!routerContext;\n\n\tconst { navigate, matchRoute } = router || {\n\t\tnavigate: () => {},\n\t\tmatchRoute: () => null,\n\t};\n\n\tconst inferred = useMemo(\n\t\t() => (resolver ? resolver(String(to)) : undefined),\n\t\t[resolver, to],\n\t);\n\n\tconst handleClick = useCallback(\n\t\tasync (e: React.MouseEvent<HTMLAnchorElement>) => {\n\t\t\tif (onClick) {\n\t\t\t\tonClick(e);\n\t\t\t}\n\n\t\t\t// If no router context (SSR), allow default navigation\n\t\t\tif (!hasRouter) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\te.defaultPrevented ||\n\t\t\t\te.button !== 0 ||\n\t\t\t\te.ctrlKey ||\n\t\t\t\te.metaKey ||\n\t\t\t\te.shiftKey ||\n\t\t\t\te.altKey ||\n\t\t\t\tprops.target === '_blank'\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t\t// Prefetch data for dynamic routes only; static/content pages don't need it\n\t\t\tif (prefetch) {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof window !== 'undefined') {\n\t\t\t\t\t\tconst url = new URL(String(to), window.location.origin);\n\t\t\t\t\t\tif (url.origin === window.location.origin) {\n\t\t\t\t\t\t\tconst path = url.pathname;\n\t\t\t\t\t\t\tconst isDynamic = !!matchRoute?.(path)?.route?.isDynamic;\n\t\t\t\t\t\t\tconst w = window as Any;\n\t\t\t\t\t\t\tw.__REROUTE_DATA__ = w.__REROUTE_DATA__ || {};\n\t\t\t\t\t\t\t// Skip for content links (inferred) and non-dynamic routes\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tisDynamic &&\n\t\t\t\t\t\t\t\t(!inferred || !inferred.module) &&\n\t\t\t\t\t\t\t\tw.__REROUTE_DATA__[path] === undefined\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconst ctl = new AbortController();\n\t\t\t\t\t\t\t\tconst timer = setTimeout(() => ctl.abort(), 350);\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst r = await fetch(\n\t\t\t\t\t\t\t\t\t\t`/__reroute_data?path=${encodeURIComponent(path)}`,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\theaders: { Accept: 'application/json' },\n\t\t\t\t\t\t\t\t\t\t\tcredentials: 'same-origin',\n\t\t\t\t\t\t\t\t\t\t\tsignal: ctl.signal,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t).catch(() => null);\n\t\t\t\t\t\t\t\t\tif (r?.ok) {\n\t\t\t\t\t\t\t\t\t\tconst j = await r.json().catch(() => null);\n\t\t\t\t\t\t\t\t\t\tif (j) {\n\t\t\t\t\t\t\t\t\t\t\t(w.__REROUTE_DATA__ as Any)[path] = j.data ?? j;\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tw.dispatchEvent(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew CustomEvent('__reroute_data__', {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdetail: { key: path },\n\t\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t\t// Build the URL with fragment if provided\n\t\t\tconst targetUrl = fragment ? `${to}#${fragment}` : to;\n\t\t\tnavigate(targetUrl, { replace, state });\n\t\t},\n\t\t[\n\t\t\tnavigate,\n\t\t\tto,\n\t\t\treplace,\n\t\t\tstate,\n\t\t\tonClick,\n\t\t\tprops.target,\n\t\t\tprefetch,\n\t\t\tinferred,\n\t\t\tmatchRoute,\n\t\t\tfragment,\n\t\t\thasRouter,\n\t\t],\n\t);\n\n\tconst handleMouseEnter = useCallback<\n\t\tNonNullable<React.AnchorHTMLAttributes<HTMLAnchorElement>['onMouseEnter']>\n\t>(\n\t\t(e: Any) => {\n\t\t\tif (prefetch && inferred && inferred.module) prefetchContent(inferred);\n\t\t\telse if (prefetch) {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof window !== 'undefined') {\n\t\t\t\t\t\tconst url = new URL(String(to), window.location.origin);\n\t\t\t\t\t\tif (url.origin === window.location.origin) {\n\t\t\t\t\t\t\tconst path = url.pathname;\n\t\t\t\t\t\t\tconst isDynamic = !!matchRoute?.(path)?.route?.isDynamic;\n\t\t\t\t\t\t\t// Fallback for content links without module: load collection then prefetch\n\t\t\t\t\t\t\t// Only try to load collections we already know exist (avoid 404s like /products)\n\t\t\t\t\t\t\tconst known = !!(\n\t\t\t\t\t\t\t\tcontentIndex &&\n\t\t\t\t\t\t\t\tinferred &&\n\t\t\t\t\t\t\t\tinferred.collection in (contentIndex as Any)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (inferred && !inferred.module && ensureCollection && known) {\n\t\t\t\t\t\t\t\t(async () => {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tconst items: Any[] | undefined = (await ensureCollection(\n\t\t\t\t\t\t\t\t\t\t\tinferred.collection,\n\t\t\t\t\t\t\t\t\t\t)) as Any[] | undefined;\n\t\t\t\t\t\t\t\t\t\tconst found = (items || []).find(\n\t\t\t\t\t\t\t\t\t\t\t(item: Any) => item?.name === inferred.name,\n\t\t\t\t\t\t\t\t\t\t) as Any | undefined;\n\t\t\t\t\t\t\t\t\t\tconst mod = (found as Any)?.module as string | undefined;\n\t\t\t\t\t\t\t\t\t\tif (mod) prefetchContent({ ...inferred, module: mod });\n\t\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t\t})();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst w = window as Any;\n\t\t\t\t\t\t\tw.__REROUTE_DATA__ = w.__REROUTE_DATA__ || {};\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tisDynamic &&\n\t\t\t\t\t\t\t\t(!inferred || !inferred.module) &&\n\t\t\t\t\t\t\t\tw.__REROUTE_DATA__[path] === undefined\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tfetch(`/__reroute_data?path=${encodeURIComponent(path)}`, {\n\t\t\t\t\t\t\t\t\theaders: { Accept: 'application/json' },\n\t\t\t\t\t\t\t\t\tcredentials: 'same-origin',\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.then((r) => (r.ok ? r.json() : null))\n\t\t\t\t\t\t\t\t\t.then((j) => {\n\t\t\t\t\t\t\t\t\t\tif (!j) return;\n\t\t\t\t\t\t\t\t\t\tw.__REROUTE_DATA__[path] = j.data ?? j;\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tw.dispatchEvent(\n\t\t\t\t\t\t\t\t\t\t\t\tnew CustomEvent('__reroute_data__', {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdetail: { key: path },\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.catch(() => {});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t\tif (onMouseEnter) onMouseEnter(e);\n\t\t},\n\t\t[\n\t\t\tprefetch,\n\t\t\tinferred,\n\t\t\tonMouseEnter,\n\t\t\tto,\n\t\t\tcontentIndex,\n\t\t\tensureCollection,\n\t\t\tmatchRoute,\n\t\t],\n\t);\n\n\tconst handleFocus = useCallback<\n\t\tNonNullable<React.AnchorHTMLAttributes<HTMLAnchorElement>['onFocus']>\n\t>(\n\t\t(e: Any) => {\n\t\t\tif (prefetch && inferred && inferred.module) prefetchContent(inferred);\n\t\t\telse if (prefetch) {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof window !== 'undefined') {\n\t\t\t\t\t\tconst url = new URL(String(to), window.location.origin);\n\t\t\t\t\t\tif (url.origin === window.location.origin) {\n\t\t\t\t\t\t\tconst path = url.pathname;\n\t\t\t\t\t\t\tconst isDynamic = !!matchRoute?.(path)?.route?.isDynamic;\n\t\t\t\t\t\t\tconst known2 = !!(\n\t\t\t\t\t\t\t\tcontentIndex &&\n\t\t\t\t\t\t\t\tinferred &&\n\t\t\t\t\t\t\t\tinferred.collection in (contentIndex as Any)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (inferred && !inferred.module && ensureCollection && known2) {\n\t\t\t\t\t\t\t\t(async () => {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tconst items: Any[] | undefined = (await ensureCollection(\n\t\t\t\t\t\t\t\t\t\t\tinferred.collection,\n\t\t\t\t\t\t\t\t\t\t)) as Any[] | undefined;\n\t\t\t\t\t\t\t\t\t\tconst found = (items || []).find(\n\t\t\t\t\t\t\t\t\t\t\t(item: Any) => item?.name === inferred.name,\n\t\t\t\t\t\t\t\t\t\t) as Any | undefined;\n\t\t\t\t\t\t\t\t\t\tconst mod = (found as Any)?.module as string | undefined;\n\t\t\t\t\t\t\t\t\t\tif (mod) prefetchContent({ ...inferred, module: mod });\n\t\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t\t})();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst w = window as Any;\n\t\t\t\t\t\t\tw.__REROUTE_DATA__ = w.__REROUTE_DATA__ || {};\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tisDynamic &&\n\t\t\t\t\t\t\t\t(!inferred || !inferred.module) &&\n\t\t\t\t\t\t\t\tw.__REROUTE_DATA__[path] === undefined\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tfetch(`/__reroute_data?path=${encodeURIComponent(path)}`, {\n\t\t\t\t\t\t\t\t\theaders: { Accept: 'application/json' },\n\t\t\t\t\t\t\t\t\tcredentials: 'same-origin',\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.then((r) => (r.ok ? r.json() : null))\n\t\t\t\t\t\t\t\t\t.then((j) => {\n\t\t\t\t\t\t\t\t\t\tif (!j) return;\n\t\t\t\t\t\t\t\t\t\tw.__REROUTE_DATA__[path] = j.data ?? j;\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tw.dispatchEvent(\n\t\t\t\t\t\t\t\t\t\t\t\tnew CustomEvent('__reroute_data__', {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdetail: { key: path },\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} catch {}\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.catch(() => {});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t\tif (onFocus) onFocus(e);\n\t\t},\n\t\t[\n\t\t\tprefetch,\n\t\t\tinferred,\n\t\t\tonFocus,\n\t\t\tto,\n\t\t\tcontentIndex,\n\t\t\tensureCollection,\n\t\t\tmatchRoute,\n\t\t],\n\t);\n\n\t// Build href with fragment if provided\n\tconst href = fragment ? `${to}#${fragment}` : to;\n\n\treturn (\n\t\t<a\n\t\t\thref={href}\n\t\t\tonClick={handleClick}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonFocus={handleFocus}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport { Link };\n",
|
|
20
|
+
"/**\n * Markdown component with optional Shiki syntax highlighting\n *\n * Requires: react-markdown\n * Optional: @shikijs/rehype (SSR/compile-time) or shiki (client-only)\n */\n\nimport type { ReactNode } from 'react';\n// Note: Avoid hooks so this component remains safe to use from\n// content chunks that are bundled separately without duplicating React.\nimport type { Components } from 'react-markdown';\nimport ReactMarkdownLib from 'react-markdown';\n\nexport interface MarkdownProps {\n\t/**\n\t * Markdown content to render\n\t */\n\tchildren: string;\n\n\t/**\n\t * Additional CSS class name\n\t */\n\tclassName?: string;\n\n\t/**\n\t * Enable GitHub Flavored Markdown (requires remark-gfm)\n\t * @default true if remark-gfm is installed\n\t */\n\tgfm?: boolean;\n\n\t/**\n\t * Enable syntax highlighting. For programmatic Markdown (TSX routes),\n\t * highlighting is applied client-side using Shiki to avoid SSR mismatch.\n\t * For content-generated MD/MDX, highlighting can also be compiled in.\n\t * @default false\n\t */\n\thighlight?: boolean;\n\n\t/**\n\t * Shiki theme to use for syntax highlighting\n\t * @default 'github-dark'\n\t */\n\ttheme?: string;\n\n\t/**\n\t * Skip HTML in markdown completely\n\t * @default false\n\t */\n\tskipHtml?: boolean;\n\n\t/**\n\t * Custom components to override default HTML elements\n\t */\n\tcomponents?: Components;\n\n\t/**\n\t * Additional remark plugins\n\t */\n\t// biome-ignore lint/suspicious/noExplicitAny: flexible plugin types\n\tremarkPlugins?: any[];\n\n\t/**\n\t * Additional rehype plugins\n\t */\n\t// biome-ignore lint/suspicious/noExplicitAny: flexible plugin types\n\trehypePlugins?: any[];\n}\n\n/**\n * Markdown component for rendering markdown content with optional syntax highlighting\n *\n * @example\n * ```tsx\n * import { Markdown } from 'reroute-js/react';\n *\n * <Markdown>\n * # Hello World\n * This is **bold** and this is *italic*.\n * </Markdown>\n * ```\n *\n * @example With code blocks\n * ```tsx\n * <Markdown highlight theme=\"github-dark\">\n * {`\n * # Code Example\n * \\`\\`\\`typescript\n * const greeting = \"Hello, World!\";\n * console.log(greeting);\n * \\`\\`\\`\n * `}\n * </Markdown>\n * ```\n */\nexport function Markdown({\n\tchildren,\n\tclassName,\n\tskipHtml = false,\n\tcomponents,\n\tremarkPlugins = [],\n\trehypePlugins = [],\n}: MarkdownProps): ReactNode {\n\t// Build plugins arrays\n\tconst finalRemarkPlugins = [...remarkPlugins];\n\tconst finalRehypePlugins = [...rehypePlugins];\n\n\t// Note: Optional plugins (remark-gfm, @shikijs/rehype) should be passed\n\t// via remarkPlugins/rehypePlugins props if needed, or the generated\n\t// markdown routes will handle them\n\n\treturn (\n\t\t<div className={className}>\n\t\t\t<ReactMarkdownLib\n\t\t\t\tremarkPlugins={finalRemarkPlugins}\n\t\t\t\trehypePlugins={finalRehypePlugins}\n\t\t\t\tskipHtml={skipHtml}\n\t\t\t\tcomponents={components}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</ReactMarkdownLib>\n\t\t</div>\n\t);\n}\n",
|
|
20
21
|
"import { useContext } from 'react';\nimport { OutletContext } from '../providers';\n\n/**\n * Outlet component for rendering nested routes within layouts.\n * Must be used within a layout component that's rendered by RouterProvider.\n */\nfunction Outlet() {\n\tconst outletContent = useContext(OutletContext);\n\treturn <>{outletContent}</>;\n}\n\nexport { Outlet };\n"
|
|
21
22
|
],
|
|
22
|
-
"mappings": "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",
|
|
23
|
-
"debugId": "
|
|
23
|
+
"mappings": ";;;;;;;;;;;AACA;AAAA;AAqBA,SAAS,UAAU,GAAG,UAAU,WAAW,QAAyB;AAAA,EACnE,OAAO,SAAS,cAAc,SAAS,KAAK;AAAA,EAE5C,UAAU,MAAM;AAAA,IACf,WAAW,IAAI;AAAA,KACb,CAAC,CAAC;AAAA,EAEL,IAAI,CAAC,SAAS;AAAA,IACb,uBAAO;AAAA,gBAAG;AAAA,KAAW;AAAA,EACtB;AAAA,EAEA,uBAAO;AAAA;AAAA,GAAc;AAAA;;ACjCtB;AAAA;AAAA,eAGC;AAAA,aACA;AAAA;AAAA,cAEA;AAAA;;;ACND,wBAAS,2BAAa,uBAAW,sBAAS;;;ACA1C;AAAA;AAAA;AAAA;AAAA;AAAA,cAMC;AAAA;;;ACHM,SAAS,gBAAgB,CAC/B,MACmD;AAAA,EACnD,IAAI;AAAA,IACH,MAAM,MAAM,IAAI,IAAI,MAAM,cAAc;AAAA,IACxC,OAAO,YAAY,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO;AAAA,IACjE,IAAI,CAAC,cAAc,CAAC;AAAA,MAAM;AAAA,IAC1B,OAAO,EAAE,YAAY,KAAK;AAAA,IACzB,MAAM;AAAA,IACP;AAAA;AAAA;AAIK,SAAS,0BAA0B,CACzC,UACkB;AAAA,EAClB,OAAO,CAAC,SAA6B;AAAA,IACpC,MAAM,SAAS,iBAAiB,IAAI;AAAA,IACpC,IAAI,CAAC;AAAA,MAAQ;AAAA,IACb,IAAI;AAAA,MACH,MAAM,QAAQ,SAAS,OAAO,YAAY,OAAO,IAAI;AAAA,MACrD,IAAI,CAAC;AAAA,QAAO,OAAO;AAAA,MACnB,MAAM,YAAa,OAAe;AAAA,MAClC,OAAO,YAAY,KAAK,QAAQ,QAAQ,UAAU,IAAI;AAAA,MACrD,MAAM;AAAA,MACP,OAAO;AAAA;AAAA;AAAA;;;;ADXV,IAAM,yBAAyB,cAAsC,IAAI;AACzE,IAAM,sBAAsB,cAA4C,IAAI;AAC5E,IAAM,yBAAyB,cAE7B,IAAI;AACN,IAAM,+BAA+B,cAEnC,IAAI;AAiBN,SAAS,eAAe;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,GACwB;AAAA,EACxB,OAAO,KAAK,UAAU,UAAgC,MAAM;AAAA,IAC3D,MAAM,gBAAuC,MAAM;AAAA,MAClD,IAAI;AAAA,QACH,IAAI,OAAO,WAAW,aAAa;AAAA,UAClC,MAAM,IAAI;AAAA,UACV,OAAQ,EAAE,2BAAqD,CAAC;AAAA,QACjE;AAAA,QACC,MAAM;AAAA,MACR,OAAO,CAAC;AAAA,OACN;AAAA,IACH,MAAM,gBAAuC,MAAM;AAAA,MAClD,IAAI;AAAA,QACH,IAAI,OAAO,WAAW,aAAa;AAAA,UAClC,MAAM,IAAI;AAAA,UACV,OAAQ,EAAE,2BAAqD,CAAC;AAAA,QACjE;AAAA,QACC,MAAM;AAAA,MACR,OAAO,CAAC;AAAA,OACN;AAAA,IACH,OAAO;AAAA,SACF,gBAAgB,CAAC;AAAA,SAClB;AAAA,SACA;AAAA,IACJ;AAAA,GACA;AAAA,EACD,MAAM,UAAU,YAAY;AAAA,EAE5B,MAAM,WAAW,QAAgC,MAAM;AAAA,IACtD,IAAI,OAAO,kBAAkB;AAAA,MAAY,OAAO;AAAA,IAChD,IAAI,OAAO,aAAa;AAAA,MACvB,OAAO,2BAA2B,QAAQ;AAAA,IAE3C,OAAO,CAAC,SAAiB;AAAA,MACxB,MAAM,SAAS,iBAAiB,IAAI;AAAA,MACpC,IAAI,CAAC;AAAA,QAAQ;AAAA,MACb,IAAI;AAAA,QACH,MAAM,OAAQ,MAAc,OAAO;AAAA,QACnC,IAAI,MAAM,QAAQ,IAAI,GAAG;AAAA,UACxB,MAAM,QAAQ,KAAK,KAAK,CAAC,MAAW,GAAG,SAAS,OAAO,IAAI;AAAA,UAG3D,IAAI,SAAS,OAAO,MAAM,WAAW,UAAU;AAAA,YAC9C,OAAO,KAAK,QAAQ,QAAQ,MAAM,OAAO;AAAA,UAC1C;AAAA,QACD;AAAA,QACC,MAAM;AAAA,MACR,OAAO;AAAA;AAAA,KAEN,CAAC,eAAe,UAAU,GAAG,CAAC;AAAA,EAEjC,MAAM,mBAAmB,YACxB,OAAO,eAAmD;AAAA,IACzD,IAAI;AAAA,MACH,MAAM,WAAY,IAAY;AAAA,MAC9B,IAAI,MAAM,QAAQ,QAAQ,KAAK,SAAS;AAAA,QAAQ,OAAO;AAAA,MACvD,IAAI,CAAC;AAAA,QAAgB,OAAO;AAAA,MAC5B,MAAM,MAAM,MAAM,eAAe,UAAU;AAAA,MAC3C,MAAM,QAAU,IAAY,SAAU,IAAY,QAAQ,CAAC;AAAA,MAC3D,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,QACzB,OAAO,CAAC,UAAU,KAAM,QAAQ,CAAC,IAAK,aAAa,MAAM,EAAE;AAAA,QAC3D,OAAO;AAAA,MACR;AAAA,MACA,OAAO;AAAA,MACN,MAAM;AAAA,MACP;AAAA;AAAA,KAGF,CAAC,KAAK,cAAc,CACrB;AAAA,EAEA,uBACC,KAQE,uBAAuB,UARzB;AAAA,IAAiC,OAAO;AAAA,IAAxC,0BACC,KAME,oBAAoB,UANtB;AAAA,MAA8B,OAAO;AAAA,MAArC,0BACC,KAIE,uBAAuB,UAJzB;AAAA,QAAiC,OAAO;AAAA,QAAxC,0BACC,KAEE,6BAA6B,UAF/B;AAAA,UAAuC,OAAO;AAAA,UAA9C;AAAA,SAEE;AAAA,OACD;AAAA,KACD;AAAA,GACD;AAAA;AAIJ,SAAS,kBAAkB,GAA2B;AAAA,EACrD,OAAO,WAAW,sBAAsB;AAAA;AAIzC,SAAS,eAAe,GAAiC;AAAA,EACxD,OAAO,WAAW,mBAAmB;AAAA;AAMtC,SAAS,kBAAkB,GAEnB;AAAA,EACP,OAAO,WAAW,sBAAsB;AAAA;AAKzC,SAAS,wBAAwB,GAEzB;AAAA,EACP,OAAO,WAAW,4BAA4B;AAAA;;;ADvH/C,SAAS,UAAU,CAClB,OACuD;AAAA,EACvD,OAAO,CAAC,GAAqB,MAAwB;AAAA,IACpD,MAAM,KACL,GAAG,QAAS,EAAE,MAAc,OACzB,KAAK,MAAM,OAAQ,EAAE,KAAa,IAAI,CAAC,IACvC;AAAA,IACJ,MAAM,KACL,GAAG,QAAS,EAAE,MAAc,OACzB,KAAK,MAAM,OAAQ,EAAE,KAAa,IAAI,CAAC,IACvC;AAAA,IACJ,OAAO,UAAU,QAAQ,KAAK,KAAK,KAAK;AAAA;AAAA;AAInC,SAAS,eAAe,CAC9B,OACO;AAAA,EACP,IAAI,OAAO,WAAW;AAAA,IAAa;AAAA,EACnC,MAAM,SAAU,OAAe;AAAA,EAC/B,IAAI,CAAC,UAAU,OAAO,WAAW;AAAA,IAAU;AAAA,EAC3C,IAAI;AAAA,IACH,MAAM,MAAM,GAAG,MAAM,cAAc,MAAM;AAAA,IACzC,MAAM,IAAI;AAAA,IACV,IAAI,CAAC,EAAE;AAAA,MAAqB,EAAE,sBAAsB,CAAC;AAAA,IACrD,MAAM,QAAa,EAAE;AAAA,IACrB,IAAI,MAAM;AAAA,MAAM;AAAA,IACU,eACxB,KAAK,CAAC,MAAM;AAAA,MACZ,MAAM,IAAK,EAAU,WAAY;AAAA,MACjC,MAAM,OAAO;AAAA,KACb,EACA,MAAM,MAAM,EAAE;AAAA,IACf,MAAM;AAAA;AAGF,SAAS,UAAU,CACzB,QAC6B;AAAA,EAC7B,QAAQ,YAAY,OAAO,EAAE,MAAM,OAAO,GAAG,UAAU;AAAA,EAGvD,IAAI;AAAA,IACH,IAAI,OAAO,WAAW,aAAa;AAAA,MAClC,MAAM,IAAI;AAAA,MACV,IAAI,CAAC,EAAE,0BAA0B;AAAA,QAChC,EAAE,2BAA2B,CAAC;AAAA,MAC/B;AAAA,MACA,MAAM,MAAW,EAAE;AAAA,MACnB,MAAM,WAAgB,IAAI,eAAe,CAAC;AAAA,MAC1C,MAAM,eAAe,OAAO,SAAS;AAAA,MACrC,MAAM,UAAU,eACb,WACA,SAAS,QACR,SACA,OAAO,SAAS,WACf,SAAS,aACR,aACA,cACD,OAAO,SAAS,YAAY,QAAS,KAAa,SAAS,QAC1D,aACA;AAAA,MAEN,SAAS,OACR,SAAS,QAAQ,SAAS,SAAS,UAChC,WACA,SAAS,QAAQ;AAAA,MACrB,MAAM,YACL,OAAO,UAAU,YAAY,QAAQ,IAAI,QAAQ;AAAA,MAClD,SAAS,QAAQ,KAAK,IAAI,SAAS,SAAS,GAAG,SAAS;AAAA,MACxD,IAAI,cAAc;AAAA,IACnB;AAAA,IACC,MAAM;AAAA,EACR,MAAM,QAAQ,gBAAgB;AAAA,EAC9B,MAAM,iBAAiB,yBAAyB;AAAA,EAChD,OAAO,QAAQ,YAAY,UAAS,KAAK;AAAA,EAEzC,WAAU,MAAM;AAAA,IACf,IAAI,YAAY;AAAA,IAChB,eAAe,MAAM,GAAG;AAAA,MACvB,IAAI;AAAA,QACH,MAAM,OAAQ,QAAgB;AAAA,QAG9B,MAAM,IACL,OAAO,WAAW,cAAe,SAAiB;AAAA,QACnD,MAAM,UAAmB,QACxB,GAAG,kCAAkC,WACtC;AAAA,QACA,IACC,CAAC,QACA,YACC,CAAC,SAAU,OAAO,UAAU,YAAY,KAAK,SAAS,QACvD;AAAA,UACD,IAAI;AAAA,YAAgB,MAAM,eAAe,UAAU;AAAA,QACpD;AAAA,gBACC;AAAA,QACD,IAAI,CAAC;AAAA,UAAW,SAAS,IAAI;AAAA;AAAA;AAAA,IAG/B,OAAO;AAAA,IACP,OAAO,MAAM;AAAA,MACZ,YAAY;AAAA;AAAA,KAEX,CAAC,YAAY,OAAO,gBAAgB,KAAK,CAAC;AAAA,EAE7C,MAAM,QAAQ,SAA4B,MAAM;AAAA,IAC/C,MAAM,SAAS,SAAS,CAAC;AAAA,IACzB,MAAM,OAAQ,SAAiB;AAAA,IAG/B,IAAI,CAAC,MAAM,QAAQ,IAAI,KAAK,KAAK,WAAW;AAAA,MAC3C,OAAO,CAAC;AAAA,IACT,IAAI,SAAS,CAAC,GAAG,IAAI;AAAA,IACrB,IAAI,OAAO,SAAS;AAAA,MAAY,SAAS,OAAO,KAAK,IAAI;AAAA,IACpD,SAAI,OAAO,SAAS,UAAU;AAAA,MAClC,SAAS,OAAO,KAAK,WAAW,SAAS,aAAa,QAAQ,MAAM,CAAC;AAAA,IACtE,EAAO,SAAI,QAAQ,OAAO,SAAS,YAAa,KAAa,MAAM;AAAA,MAClE,SAAS,OAAO,KACf,WAAY,KAAa,SAAS,QAAQ,QAAQ,MAAM,CACzD;AAAA,IACD;AAAA,IAEA,IAAI,OAAO,UAAU,YAAY,SAAS;AAAA,MACzC,SAAS,OAAO,MAAM,GAAG,KAAK;AAAA,IAC/B,OAAO;AAAA,KACL,CAAC,OAAO,YAAY,MAAM,KAAK,CAAC;AAAA,EAEnC,MAAM,WAAW,aAChB,CAAC,UACA,gBAAgB,KAAK,GACtB,CAAC,CACF;AAAA,EAEA,OAAO,EAAE,OAAO,SAAS;AAAA;;AG1K1B,sBAAS,uBAAW,sBAAS;;;ACA7B,uBAAS;;ACCT;AAAA,mBACC;AAAA,iBACA;AAAA,eACA;AAAA,aACA;AAAA;AAAA;AAGD;;;ACNA,IAAM,YAAY;AAClB,IAAM,kBAAkB;AAExB,SAAS,SAAS,GAAY;AAAA,EAC7B,OAAO,OAAO,aAAa,eAAe,OAAO,WAAW;AAAA;AAGtD,SAAS,aAAa,CAAC,MAA6B;AAAA,EAC1D,IAAI,CAAC,UAAU,KAAK,CAAC,QAAQ,OAAO,SAAS;AAAA,IAAU;AAAA,EACvD,IAAI;AAAA,IACH,MAAM,QAAQ,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ;AAAA,IAC5D,MAAM,cACL,OAAQ,KAAa,gBAAgB,WACjC,KAAa,cACd,OAAQ,KAAa,YAAY,WAC/B,KAAa,UACd;AAAA,IAEL,IAAI;AAAA,MAAO,SAAS,QAAQ;AAAA,IAE5B,IAAI,aAAa;AAAA,MAChB,IAAI,MAAM,SAAS,KAAK,cACvB,0BACD;AAAA,MACA,IAAI,CAAC,KAAK;AAAA,QACT,MAAM,SAAS,cAAc,MAAM;AAAA,QACnC,IAAI,aAAa,QAAQ,aAAa;AAAA,QACtC,SAAS,KAAK,YAAY,GAAG;AAAA,MAC9B;AAAA,MACA,IAAI,aAAa,WAAW,WAAW;AAAA,IACxC;AAAA,IACC,MAAM;AAAA;AAGF,SAAS,SAAS,CAAC,MAA6B;AAAA,EACtD,IAAI,CAAC,UAAU;AAAA,IAAG;AAAA,EAClB,IAAI,OAAO,SAAS,YAAY,KAAK,KAAK,GAAG;AAAA,IAC5C,IAAI;AAAA,MACH,SAAS,gBAAgB,OAAO,KAAK,KAAK;AAAA,MACzC,MAAM;AAAA,EACT;AAAA;AAGM,SAAS,YAAY,CAAC,MAA6B;AAAA,EACzD,IAAI,CAAC,UAAU;AAAA,IAAG;AAAA,EAClB,IAAI;AAAA,IAEH,SAAS,iBAAiB,IAAI,YAAY,EAAE,QAAQ,CAAC,MAAM;AAAA,MAC1D,EAAE,eAAe,YAAY,CAAC;AAAA,KAC9B;AAAA,IAED,IAAI,CAAC;AAAA,MAAM;AAAA,IAEX,MAAM,QAAkB,MAAM,QAAQ,IAAI,IACtC,KAAe,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC,IACpC,CAAC,OAAO,IAAI,CAAC;AAAA,IAChB,MAAM,OAAO,MACX,IAAI,CAAC,MAAO,OAAO,MAAM,WAAW,IAAI,OAAO,CAAC,CAAE,EAClD,KAAK;AAAA,CAAI;AAAA,IACX,IAAI,CAAC,KAAK,KAAK;AAAA,MAAG;AAAA,IAElB,MAAM,MAAM,SAAS,cAAc,UAAU;AAAA,IAC7C,IAAI,YAAY;AAAA,IAChB,MAAM,QAAQ,MAAM,KAAK,IAAI,QAAQ,UAAU;AAAA,IAC/C,WAAW,QAAQ,OAAO;AAAA,MACzB,IAAI,KAAK,aAAa,KAAK,cAAc;AAAA,QACvC,KAAiB,aAAa,WAAW,EAAE;AAAA,QAC5C,SAAS,KAAK,YAAY,IAAI;AAAA,MAC/B;AAAA,IACD;AAAA,IACC,MAAM;AAAA;AAGF,SAAS,cAAc,CAAC,MAA6B;AAAA,EAC3D,IAAI,CAAC,UAAU;AAAA,IAAG;AAAA,EAClB,IAAI;AAAA,IAEH,SAAS,iBAAiB,IAAI,kBAAkB,EAAE,QAAQ,CAAC,MAAM;AAAA,MAChE,EAAE,eAAe,YAAY,CAAC;AAAA,KAC9B;AAAA,IAED,IAAI,CAAC;AAAA,MAAM;AAAA,IAEX,MAAM,QAAkB,MAAM,QAAQ,IAAI,IACtC,KAAe,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC,IACpC,CAAC,OAAO,IAAI,CAAC;AAAA,IAChB,MAAM,OAAO,MACX,IAAI,CAAC,MAAO,OAAO,MAAM,WAAW,IAAI,OAAO,CAAC,CAAE,EAClD,KAAK;AAAA,CAAI;AAAA,IACX,IAAI,CAAC,KAAK,KAAK;AAAA,MAAG;AAAA,IAElB,MAAM,MAAM,SAAS,cAAc,UAAU;AAAA,IAC7C,IAAI,YAAY;AAAA,IAChB,MAAM,QAAQ,MAAM,KAAK,IAAI,QAAQ,UAAU;AAAA,IAC/C,WAAW,QAAQ,OAAO;AAAA,MACzB,IAAI,KAAK,aAAa,KAAK,cAAc;AAAA,QACvC,KAAiB,aAAa,iBAAiB,EAAE;AAAA,QAClD,SAAS,KAAK,YAAY,IAAI;AAAA,MAC/B;AAAA,IACD;AAAA,IACC,MAAM;AAAA;;;;ADpFT,IAAM,aACL,OAAO,WAAW,eAAe,OAAO,OAAO,aAAa;AAE7D,IAAM,gBAAgB,eAAyB,IAAI;AACnD,IAAM,gBAAgB,eAA2C,IAAI;AAGrE,IAAI,YAA+B,CAAC;AACpC,IAAI,kBAAkB,aACnB;AAAA,EACA,UAAU,OAAO,SAAS;AAAA,EAC1B,QAAQ,OAAO,SAAS;AAAA,EACxB,MAAM,OAAO,SAAS;AACvB,IACC,EAAE,UAAU,KAAK,QAAQ,IAAI,MAAM,GAAG;AAazC,SAAS,SAAS,CAAC,UAAsB;AAAA,EACxC,IAAI,CAAC;AAAA,IAAW,OAAO,MAAM;AAAA,EAC7B,UAAU,KAAK,QAAQ;AAAA,EACvB,OAAO,MAAM;AAAA,IACZ,YAAY,UAAU,OAAO,CAAC,MAAM,MAAM,QAAQ;AAAA;AAAA;AAIpD,SAAS,WAAW,GAAG;AAAA,EACtB,OAAO;AAAA;AAGR,SAAS,UAAU,GAAG;AAAA,EACrB,WAAW,YAAY,WAAW;AAAA,IACjC,SAAS;AAAA,EACV;AAAA;AAID,IAAM,0BACL,OAAO,aAAa,eAAe,yBAAyB;AAG7D,IAAI,yBAAyB;AAE7B,SAAS,yBAAyB,CAAC,SAAkB;AAAA,EACpD,yBAAyB,WAAW;AAAA;AAIrC,IAAI,2BAA2B;AAE/B,SAAS,2BAA2B,CAAC,SAAkB;AAAA,EACtD,2BAA2B;AAAA;AAI5B,IAAM,kBAAkB,IAAI;AAG5B,SAAS,sBAAsB,GAAY;AAAA,EAC1C,IAAI,CAAC;AAAA,IAAW,OAAO;AAAA,EACvB,IAAI;AAAA,IAEH,MAAM,cAAc,SAAS,iBAAiB,GAAG;AAAA,IACjD,WAAW,MAAM,aAAa;AAAA,MAC7B,MAAM,gBAAgB,OAAO,iBAAiB,EAAE;AAAA,MAChD,MAAM,iBAAiB,cAAc;AAAA,MACrC,IAAI,kBAAkB,mBAAmB,QAAQ;AAAA,QAChD,OAAO;AAAA,MACR;AAAA,IACD;AAAA,IACA,OAAO;AAAA,IACN,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAIT,SAAS,gBAAgB,CAAC,IAAY,UAA2B,CAAC,GAAG;AAAA,EACpE,IAAI,CAAC;AAAA,IAAW;AAAA,EAEhB,MAAM,MAAM,IAAI,IAAI,IAAI,OAAO,SAAS,MAAM;AAAA,EAE9C,IAAI,IAAI,WAAW,OAAO,SAAS,QAAQ;AAAA,IAE1C,OAAO,SAAS,OAAO;AAAA,IACvB;AAAA,EACD;AAAA,EAEA,MAAM,UAAU,IAAI,WAAW,IAAI,SAAS,IAAI;AAAA,EAChD,MAAM,cACL,OAAO,SAAS,WAAW,OAAO,SAAS,SAAS,OAAO,SAAS;AAAA,EAErE,IAAI,YAAY;AAAA,IAAa;AAAA,EAG7B,IAAI,0BAA0B;AAAA,IAC7B,gBAAgB,IAAI,aAAa;AAAA,MAChC,GAAG,OAAO;AAAA,MACV,GAAG,OAAO;AAAA,IACX,CAAC;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,SAAS;AAAA,IACpB,OAAO,QAAQ,aAAa,QAAQ,SAAS,MAAM,IAAI,EAAE;AAAA,EAC1D,EAAO;AAAA,IACN,OAAO,QAAQ,UAAU,QAAQ,SAAS,MAAM,IAAI,EAAE;AAAA;AAAA,EAGvD,MAAM,cAAc,MAAM;AAAA,IACzB,kBAAkB;AAAA,MACjB,UAAU,IAAI;AAAA,MACd,QAAQ,IAAI;AAAA,MACZ,MAAM,IAAI;AAAA,IACX;AAAA,IACA,WAAW;AAAA;AAAA,EAIZ,MAAM,0BACL,0BAA0B,uBAAuB;AAAA,EAElD,IAAI,yBAAyB;AAAA,IAC5B,SAAS,oBAAoB,MAAM;AAAA,MAClC,UAAU,MAAM;AAAA,QACf,YAAY;AAAA,OACZ;AAAA,KACD;AAAA,EACF,EAAO;AAAA,IACN,YAAY;AAAA;AAAA,EAIb,sBAAsB,MAAM;AAAA,IAC3B,IAAI,IAAI,MAAM;AAAA,MAEb,IAAI,WAAW;AAAA,MACf,MAAM,cAAc;AAAA,MACpB,MAAM,YAAY,MAAM;AAAA,QACvB,MAAM,UAAU,SAAS,cAAc,IAAI,IAAI;AAAA,QAC/C,IAAI,SAAS;AAAA,UACZ,QAAQ,eAAe,EAAE,UAAU,UAAU,OAAO,QAAQ,CAAC;AAAA,QAC9D,EAAO,SAAI,WAAW,aAAa;AAAA,UAClC;AAAA,UACA,sBAAsB,SAAS;AAAA,QAChC;AAAA;AAAA,MAED,UAAU;AAAA,IACX,EAAO;AAAA,MAEN,OAAO,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,UAAU,UAAU,CAAC;AAAA;AAAA,GAEzD;AAAA;AAOF,SAAS,cAAc;AAAA,EACtB;AAAA,EACA,UAAU,CAAC;AAAA,EACX;AAAA,EACA,iBAAiB,CAAC;AAAA,EAClB,UAAU;AAAA,EACV,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,GACG;AAAA,EAEvB,WAAU,MAAM;AAAA,IACf,0BAA0B,eAAe;AAAA,IACzC,4BAA4B,iBAAiB;AAAA,KAC3C,CAAC,iBAAiB,iBAAiB,CAAC;AAAA,EAEvC,MAAM,oBAAoB,MAAM,OAItB,IAAI;AAAA,EAEd,IAAI,CAAC,kBAAkB,SAAS;AAAA,IAC/B,IAAI,YAAW;AAAA,MAId,kBAAkB,UAAU;AAAA,IAC7B,EAAO;AAAA,MAEN,kBAAkB,UAAU,EAAE,UAAU,QAAQ,IAAI,MAAM,GAAG;AAAA;AAAA,EAE/D;AAAA,EAGA,MAAM,oBAAoB,aAAY,MAAM,kBAAkB,SAAS,CAAC,CAAC;AAAA,EAGzE,MAAM,WACL,qBAAqB,WAAW,aAAa,iBAAiB,KAC9D;AAAA,EAID,WAAU,MAAM;AAAA,IACf,IAAI,CAAC;AAAA,MAAW;AAAA,IAChB,MAAM,OAAO;AAAA,MACZ,UAAU,OAAO,SAAS;AAAA,MAC1B,QAAQ,OAAO,SAAS;AAAA,MACxB,MAAM,OAAO,SAAS;AAAA,IACvB;AAAA,IACA,IACC,gBAAgB,aAAa,KAAK,YAClC,gBAAgB,WAAW,KAAK,UAChC,gBAAgB,SAAS,KAAK,MAC7B;AAAA,MACD,kBAAkB;AAAA,MAClB,WAAW;AAAA,IACZ;AAAA,KACE,CAAC,CAAC;AAAA,EAEL,MAAM,SAAS,SACd,MAAM,WAAW,SAAS,QAAQ,GAClC,CAAC,SAAS,UAAU,UAAU,CAC/B;AAAA,EAEA,MAAM,SAAS,QAAQ,UAAU,CAAC;AAAA,EAClC,MAAM,eAAe,SACpB,MAAM,IAAI,gBAAgB,SAAS,MAAM,GACzC,CAAC,SAAS,MAAM,CACjB;AAAA,EAEA,MAAM,WAAW,aAAY,CAAC,IAAY,UAA2B,CAAC,MAAM;AAAA,IAC3E,iBAAiB,IAAI,OAAO;AAAA,KAC1B,CAAC,CAAC;AAAA,EAGL,WAAU,MAAM;AAAA,IACf,IAAI,CAAC;AAAA,MAAW;AAAA,IAEhB,MAAM,iBAAiB,MAAM;AAAA,MAC5B,MAAM,OAAO;AAAA,QACZ,UAAU,OAAO,SAAS;AAAA,QAC1B,QAAQ,OAAO,SAAS;AAAA,QACxB,MAAM,OAAO,SAAS;AAAA,MACvB;AAAA,MACA,IAAI;AAAA,QACH,MAAM,IAAI;AAAA,QACV,EAAE,mBAAmB,EAAE,oBAAoB,CAAC;AAAA,QAC5C,MAAM,OAAQ,EAAE,iBAAyB,KAAK;AAAA,QAE9C,MAAM,YAAY,CAAC,CAAC,aAAa,KAAK,QAAQ,GAAG,OAAO;AAAA,QACxD,IAAI,aAAa,SAAS,WAAW;AAAA,UACpC,IAAI,UAAU;AAAA,UACd,MAAM,WAAW,WAAW,MAAM;AAAA,YACjC,IAAI;AAAA,cAAS;AAAA,YACb,UAAU;AAAA,YACV,kBAAkB;AAAA,YAClB,WAAW;AAAA,aACT,GAAG;AAAA,UACN,MAAM,wBAAwB,mBAAmB,KAAK,QAAQ,KAAK;AAAA,YAClE,SAAS,EAAE,QAAQ,mBAAmB;AAAA,YACtC,aAAa;AAAA,UACd,CAAC,EACC,KAAK,CAAC,MAAO,EAAE,KAAK,EAAE,KAAK,IAAI,IAAK,EACpC,KAAK,CAAC,MAAM;AAAA,YACZ,IAAI;AAAA,cACH,MAAM,UAAU,IAAK,EAAE,QAAQ,IAAK;AAAA,cACpC,IAAI,YAAY;AAAA,gBACd,EAAE,iBAAyB,KAAK,YAAY;AAAA,cAC9C,IAAI;AAAA,gBACH,EAAE,cACD,IAAI,YAAY,oBAAoB;AAAA,kBACnC,QAAQ,EAAE,KAAK,KAAK,SAAS;AAAA,gBAC9B,CAAC,CACF;AAAA,gBACC,MAAM;AAAA,cACP,MAAM;AAAA,WACR,EACA,MAAM,MAAM,EAAE,EACd,QAAQ,MAAM;AAAA,YACd,IAAI,CAAC,SAAS;AAAA,cACb,aAAa,QAAQ;AAAA,cACrB,UAAU;AAAA,cACV,kBAAkB;AAAA,cAClB,WAAW;AAAA,YACZ;AAAA,WACA;AAAA,UACF;AAAA,QACD;AAAA,QACC,MAAM;AAAA,MAER,MAAM,cAAc,MAAM;AAAA,QACzB,kBAAkB;AAAA,QAClB,WAAW;AAAA;AAAA,MAIZ,MAAM,0BACL,0BAA0B,uBAAuB;AAAA,MAElD,IAAI,yBAAyB;AAAA,QAC3B,SAAiB,oBAAoB,MAAM;AAAA,UAC3C,UAAU,MAAM;AAAA,YACf,YAAY;AAAA,WACZ;AAAA,SACD;AAAA,MACF,EAAO;AAAA,QACN,YAAY;AAAA;AAAA,MAIb,IAAI,0BAA0B;AAAA,QAC7B,MAAM,WAAW,KAAK,WAAW,KAAK,SAAS,KAAK;AAAA,QACpD,MAAM,gBAAgB,gBAAgB,IAAI,QAAQ;AAAA,QAGlD,MAAM,gBAAgB,MAAM;AAAA,UAC3B,IAAI,KAAK,MAAM;AAAA,YAEd,MAAM,UAAU,SAAS,cAAc,KAAK,IAAI;AAAA,YAChD,IAAI,SAAS;AAAA,cACZ,QAAQ,eAAe,EAAE,UAAU,SAAS,CAAC;AAAA,YAC9C;AAAA,UACD,EAAO,SAAI,eAAe;AAAA,YAEzB,OAAO,SAAS;AAAA,cACf,KAAK,cAAc;AAAA,cACnB,MAAM,cAAc;AAAA,cACpB,UAAU;AAAA,YACX,CAAC;AAAA,UACF;AAAA;AAAA,QAID,IAAI,yBAAyB;AAAA,UAE5B,sBAAsB,MAAM;AAAA,YAC3B,sBAAsB,aAAa;AAAA,WACnC;AAAA,QACF,EAAO;AAAA,UACN,sBAAsB,aAAa;AAAA;AAAA,MAErC;AAAA;AAAA,IAGD,OAAO,iBAAiB,YAAY,cAAc;AAAA,IAClD,OAAO,MAAM,OAAO,oBAAoB,YAAY,cAAc;AAAA,KAChE,CAAC,UAAU,CAAC;AAAA,EAGf,WAAU,MAAM;AAAA,IACf,IAAI,CAAC;AAAA,MAAW;AAAA,IAEhB,MAAM,cAAc,CAAC,MAAkB;AAAA,MACtC,MAAM,UAAU,EAAE,OAAuB,QAAQ,GAAG;AAAA,MACpD,IAAI,CAAC;AAAA,QAAQ;AAAA,MAEb,MAAM,OAAO,QAAO,aAAa,MAAM;AAAA,MACvC,IAAI,CAAC;AAAA,QAAM;AAAA,MAOX,IACC,QAAO,WAAW,YAClB,QAAO,aAAa,UAAU,KAC9B,EAAE,WACF,EAAE,WACF,EAAE,YACF,EAAE,QACD;AAAA,QACD;AAAA,MACD;AAAA,MAEA,MAAM,MAAM,IAAI,IAAI,MAAM,OAAO,SAAS,MAAM;AAAA,MAChD,IAAI,IAAI,WAAW,OAAO,SAAS;AAAA,QAAQ;AAAA,MAG3C,MAAM,QAAQ,WAAW,IAAI,QAAQ;AAAA,MACrC,IAAI,CAAC;AAAA,QAAO;AAAA,MAEZ,EAAE,eAAe;AAAA,MACjB,SAAS,IAAI;AAAA;AAAA,IAGd,SAAS,iBAAiB,SAAS,WAAW;AAAA,IAC9C,OAAO,MAAM,SAAS,oBAAoB,SAAS,WAAW;AAAA,KAC5D,CAAC,UAAU,UAAU,CAAC;AAAA,EAGzB,WAAU,MAAM;AAAA,IACf,MAAM,QAAa,QAAQ;AAAA,IAC3B,IAAI,CAAC;AAAA,MAAO;AAAA,IACZ,IAAI;AAAA,MACH,IAAI,MAAM;AAAA,QAAM,cAAc,MAAM,IAAI;AAAA,MACvC,MAAM;AAAA,IACR,IAAI;AAAA,MACH,MAAM,MAAM,MAAM;AAAA,MAClB,IAAI,KAAK;AAAA,QAAM,eAAe,IAAI,IAAI;AAAA,MACtC,IAAI,KAAK;AAAA,QAAM,UAAU,IAAI,IAAI;AAAA,MAChC,MAAM;AAAA,IACR,OAAO,MAAM;AAAA,MAEZ,eAAe,SAAS;AAAA;AAAA,KAEvB,CAAC,MAAM,CAAC;AAAA,EAEX,MAAM,mBAAmB,aACxB,CAAC,cAAqB;AAAA,IACrB,IAAI;AAAA,MAEH,MAAM,OAAO,MAAM,QAAQ,cAAc,IACrC,iBACD,CAAC;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI,UAAU;AAAA,MACd,WAAW,MAAM,MAAM;AAAA,QACtB,MAAM,MAAM,OAAO,IAAI,WAAW,GAAG;AAAA,QACrC,IAAI,CAAC,UAAS,WAAW,GAAG;AAAA,UAAG;AAAA,QAC/B,MAAM,MAAM,IAAI,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE;AAAA,QAC3C,IAAI,OAAO,SAAS;AAAA,UACnB,UAAU;AAAA,UACV,SAAS;AAAA,QACV;AAAA,MACD;AAAA,MACA,OAAO,QAAQ;AAAA,MACd,MAAM;AAAA,MACP;AAAA;AAAA,KAGF,CAAC,cAAc,CAChB;AAAA,EAEA,MAAM,eAAe,SACpB,OACE;AAAA,IACA,UAAU,SAAS;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,IACD;AAAA,IACC,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CACD;AAAA,EAGA,MAAM,kBAAkB,SAAQ,MAAM;AAAA,IACrC,OAAO,QACL,OAAO,CAAC,WAAgB;AAAA,MAExB,IAAI,OAAO,YAAY;AAAA,QAAK,OAAO;AAAA,MACnC,OAAO,SAAS,SAAS,WAAW,OAAO,OAAO;AAAA,KAClD,EACA,KAAK,CAAC,GAAQ,MAAW;AAAA,MAEzB,OAAO,EAAE,QAAQ,MAAM,GAAG,EAAE,SAAS,EAAE,QAAQ,MAAM,GAAG,EAAE;AAAA,KAC1D;AAAA,KACA,CAAC,SAAS,SAAS,QAAQ,CAAC;AAAA,EAE/B,IAAI;AAAA,EAEJ,IAAI,QAAQ;AAAA,IACX,MAAM,YAAY,OAAO,MAAM;AAAA,IAC/B,IAAI,gCAA2B,KAAC,WAAD,EAAW;AAAA,IAG1C,SAAS,IAAI,gBAAgB,SAAS,EAAG,KAAK,GAAG,KAAK;AAAA,MACrD,MAAM,SAAS,gBAAgB,GAAG;AAAA,MAClC,MAAM,gBAAgB;AAAA,MACtB,gCACC,KAEE,cAAc,UAFhB;AAAA,QAAwB,OAAO;AAAA,QAA/B,0BACC,KAAC,QAAD,EAAQ;AAAA,OACP;AAAA,IAEJ;AAAA,IAEA,UAAU;AAAA,EACX,EAAO;AAAA,IACN,MAAM,WAAY,iBAAiB,SAAS,QAAQ,KAAa;AAAA,IACjE,IAAI,UAAU;AAAA,MACb,0BAAU,KAAC,UAAD,EAAU;AAAA,IACrB,EAAO;AAAA,MACN,0BACC,KAIE,OAJF;AAAA,QAAK,OAAO,EAAE,SAAS,QAAQ,WAAW,SAAS;AAAA,QAAnD,UAIE;AAAA,0BAHD,KAA0B,MAA1B;AAAA;AAAA,WAA0B;AAAA,0BAC1B,KAAqD,KAArD;AAAA,sBAAqD;AAAA,cAArD;AAAA,cAAa,SAAS;AAAA,cAAtB;AAAA;AAAA,WAAqD;AAAA,0BACrD,KAAqB,KAArB;AAAA,YAAG,MAAK;AAAA,YAAR;AAAA,WAAqB;AAAA;AAAA,OACpB;AAAA;AAAA;AAAA,EAKL,uBACC,KAEE,cAAc,UAFhB;AAAA,IAAwB,OAAO;AAAA,IAA/B,UACE,YAAY;AAAA,GACZ;AAAA;;;;AE9fJ,SAAS,eAAe;AAAA,EACvB;AAAA,EACA;AAAA,GAIE;AAAA,EACF;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,CAAC;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACG;AAAA,EACJ,MAAM,SACL,gBACC,iBACI,CAAC,MACuB,UAAG,kBAAkB,UAC/C;AAAA,EAEJ,uBACC,KAgBE,iBAhBF;AAAA,IACC,UAAU;AAAA,IACV,cAAc,gBAAgB;AAAA,IAC9B,gBAAgB;AAAA,IAHjB,0BAKC,KAUE,gBAVF;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAPD;AAAA,KAUE;AAAA,GACD;AAAA;;AH1DG,SAAS,SAAS,GAAyB;AAAA,EACjD,MAAM,UAAU,YAAW,aAAa;AAAA,EACxC,IAAI,CAAC,SAAS;AAAA,IACb,MAAM,IAAI,MAAM,gDAAgD;AAAA,EACjE;AAAA,EACA,OAAO;AAAA;;;ADDD,SAAS,OAAoB,CAAC,KAA6B;AAAA,EACjE,QAAQ,aAAa,UAAU;AAAA,EAC/B,MAAM,IAAI,OAAO;AAAA,EACjB,OAAO,OAAO,WAAW,UAAS,CAAC;AAAA,EAEnC,WAAU,MAAM;AAAA,IACf,IAAI,OAAO,WAAW;AAAA,MAAa;AAAA,IACnC,MAAM,UAAU,CAAC,MAAa;AAAA,MAC7B,IAAI;AAAA,QACH,MAAM,SAAU,EAAkB;AAAA,QAClC,IAAI,QAAQ,OAAO,OAAO,QAAQ;AAAA,UAAG;AAAA,QACrC,QAAQ,CAAC,MAAM,IAAI,CAAC;AAAA,QACnB,MAAM;AAAA;AAAA,IAET,OAAO,iBAAiB,oBAA2B,OAAc;AAAA,IACjE,OAAO,MAAM;AAAA,MACZ,IAAI;AAAA,QACH,OAAO,oBAAoB,oBAA2B,OAAc;AAAA,QACnE,MAAM;AAAA;AAAA,KAEP,CAAC,CAAC,CAAC;AAAA,EAKN,WAAU,MAAM;AAAA,IACf,IAAI,OAAO,WAAW;AAAA,MAAa;AAAA,IACnC,IAAI;AAAA,MACH,MAAM,IAAI;AAAA,MACV,EAAE,mBAAmB,EAAE,oBAAoB,CAAC;AAAA,MAC5C,IAAK,EAAE,iBAAyB,OAAO;AAAA,QAAW;AAAA,MAGlD,EAAE,2BAA2B,EAAE,4BAA6B,CAAC;AAAA,MAC7D,MAAM,UAAU,EAAE;AAAA,MAClB,IAAI,QAAQ;AAAA,QAAI;AAAA,MAChB,QAAQ,KAAK;AAAA,MAEb,MAAM,wBAAwB,mBAAmB,CAAC,KAAK;AAAA,QACtD,SAAS,EAAE,QAAQ,mBAAmB;AAAA,QACtC,aAAa;AAAA,MACd,CAAC,EACC,KAAK,CAAC,MAAO,EAAE,KAAK,EAAE,KAAK,IAAI,IAAK,EACpC,KAAK,CAAC,MAAM;AAAA,QACZ,IAAI,CAAC;AAAA,UAAG;AAAA,QACP,EAAE,iBAAyB,KAAK,EAAE,QAAQ;AAAA,QAE3C,IAAI;AAAA,UACH,QAAQ,CAAC,MAAM,IAAI,CAAC;AAAA,UACnB,MAAM;AAAA,QACR,IAAI;AAAA,UACH,EAAE,cACD,IAAI,YAAY,oBAAoB;AAAA,YACnC,QAAQ,EAAE,KAAK,EAAE;AAAA,UAClB,CAAC,CACF;AAAA,UACC,MAAM;AAAA,OACR,EACA,MAAM,MAAM,EAAE,EACd,QAAQ,MAAM;AAAA,QACd,IAAI;AAAA,UACH,OAAQ,EAAE,yBAAiC;AAAA,UAC1C,MAAM;AAAA,OACR;AAAA,MACD,MAAM;AAAA,KACN,CAAC,CAAC,CAAC;AAAA,EAEN,OAAO,SAAQ,MAAM;AAAA,IACpB,IAAI;AAAA,MAEH,IAAI,OAAO,WAAW,aAAa;AAAA,QAClC,MAAM,IAAI;AAAA,QACV,OAAQ,EAAE,mBAAqD;AAAA,MAChE;AAAA,MACA,MAAM,IAAI;AAAA,MACV,OAAQ,EAAE,mBAAqD;AAAA,MAC9D,MAAM;AAAA,MACP;AAAA;AAAA,KAEC,CAAC,GAAG,KAAK,CAAC;AAAA;;AKrFP,SAAS,WAAW,GAAG;AAAA,EAC7B,QAAQ,aAAa,UAAU;AAAA,EAC/B,OAAO;AAAA;;ACFD,SAAS,SAEf,GAAM;AAAA,EACN,QAAQ,WAAW,UAAU;AAAA,EAC7B,OAAO;AAAA;;ACJD,SAAS,eAAe,GAAoB;AAAA,EAClD,QAAQ,iBAAiB,UAAU;AAAA,EACnC,OAAO;AAAA;;;AXcR,SAAS,WAAW,CAAC,GAAuB;AAAA,EAC3C,IAAI,OAAO,MAAM;AAAA,IAAY,OAAO;AAAA,EACpC,IAAI,eAAe,CAAC;AAAA,IAAG,OAAO,MAAM;AAAA,EACpC,OAAO,MAAM;AAAA;AAGd,SAAS,YAAY;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,GAKE;AAAA,EACF,MAAM,SAAS,UAAkC;AAAA,EACjD,QAAQ,UAAU,qBAAqB,UAAU;AAAA,EACjD,MAAM,eACL,QACA,OAAO,QACP,OAAO,SACN,MAAM;AAAA,IACN,IAAI;AAAA,MACH,MAAM,QAAQ,OAAO,YAAY,EAAE,EACjC,MAAM,GAAG,EACT,OAAO,OAAO;AAAA,MAChB,OAAO,MAAM,UAAU,IAAI,MAAM,KAAK;AAAA,MACrC,MAAM;AAAA,MACP;AAAA;AAAA,KAEC;AAAA,EACJ,MAAM,MAAM,eAAe,GAAG,cAAc,iBAAiB,GAAG;AAAA,EAChE,MAAM,cAAc,mBAAmB;AAAA,EACvC,MAAM,MAAM,gBAAgB;AAAA,EAC5B,MAAM,mBAAmB,yBAAyB;AAAA,EAClD,MAAM,eACL,YACA,gBACC,CAAC,GAAG,MAAM;AAAA,IACV,IAAI;AAAA,MACH,MAAM,OAAQ,MAAc;AAAA,MAC5B,IAAI,CAAC,MAAM,QAAQ,IAAI;AAAA,QAAG;AAAA,MAC1B,MAAM,QAAQ,KAAK,KAAK,CAAC,MAAW,GAAG,SAAS,CAAC;AAAA,MACjD,IAAI,CAAC;AAAA,QAAO;AAAA,MACZ,OAAO,EAAE,QAAQ,MAAM,QAAQ,MAAM,MAAM,KAAK;AAAA,MAC/C,MAAM;AAAA,MACP;AAAA;AAAA;AAAA,EAGH,MAAM,QACL,gBAAgB,eACb,aAAa,YAAY,YAAY,IACrC;AAAA,EAMJ,MAAM,cAAc,SAAuB,MAAM;AAAA,IAChD,IAAI;AAAA,MACH,MAAM,IAAS;AAAA,MACf,MAAM,IAAI,EAAE,0BAA0B;AAAA,MACtC,IAAI;AAAA,QAAG,OAAO,YAAY,CAAC;AAAA,MAC1B,MAAM;AAAA,IACR,IAAI,OAAO,WAAW,aAAa;AAAA,MAClC,MAAM,QAAS,OAAe,uBAAuB,CAAC;AAAA,MACtD,IAAI,MAAM;AAAA,QAAM,OAAO,YAAY,MAAM,IAAI;AAAA,IAC9C;AAAA,IACA,IAAK,OAAe;AAAA,MAAW,OAAO,YAAa,MAAc,SAAS;AAAA,IAE1E,IAAI;AAAA,MACH,MAAM,KACL,OAAO,qBAAqB,aACzB,iBAAiB,QAAQ,IACzB;AAAA,MACJ,IAAI;AAAA,QAAI,OAAO,YAAY,EAAE;AAAA,MAC5B,MAAM;AAAA,IACR,OAAO,MAAM;AAAA,KACX,CAAC,KAAK,KAAK,CAAC;AAAA,EAEf,OAAO,MAAM,WAAW,UAAwB,MAAM,WAAW;AAAA,EACjE,MAAM,eAAe,OAA8B,IAAI;AAAA,EAEvD,WAAU,MAAM;AAAA,IACf,IAAI,YAAY;AAAA,IAChB,IAAI,OAAO,UAAU,OAAO,WAAW,aAAa;AAAA,MACzB,aAAM,QAC9B,KAAK,CAAC,MAAM;AAAA,QACZ,IAAI;AAAA,UAAW;AAAA,QACf,MAAM,IAAK,EAAU,WAAY;AAAA,QACjC,MAAM,IAAI,YAAY,CAAC;AAAA,QACvB,QAAQ,MAAM,CAAC;AAAA,QACf,MAAM,IAAI;AAAA,QACV,EAAE,wBAAwB,CAAC;AAAA,QAC3B,EAAE,oBAAoB,OAAO;AAAA,QAG7B,IAAI;AAAA,UACH,MAAM,OAAQ,EAAU,QAAS,EAAU;AAAA,UAC3C,IAAI;AAAA,YAAM,cAAc,IAAI;AAAA,UAC3B,MAAM;AAAA,QACR,IAAI;AAAA,UACH,MAAM,MAAO,EAAU;AAAA,UACvB,IAAI,KAAK;AAAA,YAAM,aAAa,IAAI,IAAI;AAAA,UACpC,IAAI,KAAK;AAAA,YAAM,UAAU,IAAI,IAAI;AAAA,UAChC,MAAM;AAAA,OACR,EACA,MAAM,MAAM,EAAE;AAAA,IACjB;AAAA,IACA,OAAO,MAAM;AAAA,MACZ,YAAY;AAAA,MAEZ,aAAa,SAAS;AAAA;AAAA,KAErB,CAAC,OAAO,QAAQ,GAAG,CAAC;AAAA,EAIvB,WAAU,MAAM;AAAA,IACf,IAAI,OAAO,WAAW;AAAA,MAAa;AAAA,IACnC,IAAI,SAAS,CAAC;AAAA,MAAY;AAAA,IAC1B,IAAI;AAAA,MACH,IAAI,OAAO,qBAAqB,YAAY;AAAA,QAEtC,iBAAiB,UAAU;AAAA,MACjC;AAAA,MACC,MAAM;AAAA,KAEN,CAAC,YAAY,kBAAkB,KAAK,CAAC;AAAA,EAGxC,WAAU,MAAM;AAAA,IACf,IAAI;AAAA,MACH,IAAI,SAAU,MAAc;AAAA,QAAM,cAAe,MAAc,IAAI;AAAA,MAClE,MAAM;AAAA,KACN,CAAC,KAAK,CAAC;AAAA,EAGV,WAAU,MAAM;AAAA,IACf,IAAI;AAAA,MACH,IAAI,OAAO,WAAW;AAAA,QAAa;AAAA,MACnC,MAAM,QACJ,OAAO,YAAY,gBACjB,QAAQ,KAAK,YAAoB,mBAAmB,gBACtD,OAAO,aAAa,eACpB,2BAA2B,KAAK,OAAO,SAAS,QAAQ;AAAA,MAE1D,IAAI,CAAC;AAAA,QAAO;AAAA,MACZ,MAAM,OAAO,aAAa;AAAA,MAC1B,IAAI,CAAC;AAAA,QAAM;AAAA,MAKX,MAAM,SAAS,KAAK,iBAAiB,KAAK;AAAA,MAC1C,IAAI,CAAC,OAAO,QAAQ;AAAA,QACnB;AAAA,MACD;AAAA,MAGA,QAAQ,eACP,0DAA0D,MAC3D;AAAA,MACA,OAAO,QAAQ,CAAC,OAAO,SAAQ;AAAA,QAC9B,MAAM,QAAQ,MAAM,QAAQ,GAAG;AAAA,QAC/B,MAAM,UAAU,CAAC,QACf,IAAI,eAAe,IAAI,QAAQ,QAAQ,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG;AAAA,QAEjE,QAAQ,KAAK,QAAQ,OAAM,MAAM;AAAA,UAChC,cAAc,QAAQ,KAAK;AAAA,UAC3B,cAAc,QAAQ,KAAK;AAAA,QAC5B,CAAC;AAAA,OACD;AAAA,MAED,QAAQ,SAAS;AAAA,MAChB,MAAM;AAAA,KACN,CAAC,GAAG,CAAC;AAAA,EAER,uBACC,KAEE,OAFF;AAAA,IAAK,gBAAa;AAAA,IAAU,KAAK;AAAA,IAAjC,0BACC,KAAC,MAAD,EAAM;AAAA,GACL;AAAA;;AY3MJ;AAAA,eAGC;AAAA,YACA;AAAA,cACA;AAAA;AAAA;AAkDD,IAAM,uBAAuB,CAAC,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,IAAI;AAGzE,SAAS,cAAc,CACtB,KACA,OACA,SACA,QACA,QACS;AAAA,EACT,MAAM,QAAQ,QACX,qBAAqB,OAAO,CAAC,SAAS,QAAQ,QAAQ,CAAC,IACvD;AAAA,EAEH,IAAI,MAAM,WAAW,KAAK,CAAC,OAAO;AAAA,IACjC,OAAO;AAAA,EACR;AAAA,EAEA,OAAO,MACL,IAAI,CAAC,SAAS;AAAA,IACd,MAAM,MAAM,SACT,OAAO,EAAE,KAAK,OAAO,MAAM,SAAS,OAAO,CAAC,IAC5C,cAAc,EAAE,KAAK,OAAO,MAAM,SAAS,OAAO,CAAC;AAAA,IACtD,OAAO,GAAG,OAAO;AAAA,GACjB,EACA,KAAK,IAAI;AAAA;AAIZ,SAAS,aAAa;AAAA,EACrB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,GAMU;AAAA,EACV,MAAM,SAAS,IAAI;AAAA,EACnB,OAAO,IAAI,OAAO,GAAG;AAAA,EACrB,OAAO,IAAI,KAAK,MAAM,SAAS,CAAC;AAAA,EAChC,OAAO,IAAI,KAAK,QAAQ,SAAS,CAAC;AAAA,EAClC,IAAI,UAAU,WAAW,QAAQ;AAAA,IAChC,OAAO,IAAI,KAAK,MAAM;AAAA,EACvB;AAAA,EACA,OAAO,mBAAmB,OAAO,SAAS;AAAA;AAI3C,SAAS,yBAAyB,GAAY;AAAA,EAC7C,IAAI,OAAO,qBAAqB,aAAa;AAAA,IAC5C,OAAO;AAAA,EACR;AAAA,EACA,OAAO,aAAa,iBAAiB;AAAA;AAG/B,SAAS,KAAK;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,SAAS;AAAA,EACT;AAAA,EACA,WAAW;AAAA,EACX,cAAc;AAAA,EACd;AAAA,EACA,cAAc;AAAA,EACd;AAAA,EACA,cAAc;AAAA,EACd,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,SAAS;AAAA,EACT;AAAA,EACA;AAAA,KACG;AAAA,GACW;AAAA,EACd,OAAO,UAAU,eAAe,UAAS,KAAK;AAAA,EAC9C,OAAO,UAAU,eAAe,UAAS,KAAK;AAAA,EAC9C,MAAM,SAAS,QAAyB,IAAI;AAAA,EAI5C,MAAM,WAAW,SACd,OAAO,EAAE,KAAK,OAAO,SAAS,GAAG,SAAS,OAAO,CAAC,IAClD,QACC,cAAc,EAAE,KAAK,OAAO,SAAS,OAAO,CAAC,IAC7C;AAAA,EAGJ,WAAU,MAAM;AAAA,IACf,MAAM,MAAM,OAAO;AAAA,IACnB,IAAI,KAAK,YAAY,IAAI,eAAe,GAAG;AAAA,MAC1C,YAAY,IAAI;AAAA,IACjB;AAAA,KACE,CAAC,CAAC;AAAA,EAGL,MAAM,SAAS,QACZ,eAAe,KAAK,OAAO,SAAS,QAAQ,MAAM,IAClD;AAAA,EAGH,MAAM,aAAa,MAAM;AAAA,IACxB,YAAY,IAAI;AAAA,IAChB,aAAa;AAAA;AAAA,EAId,MAAM,cAAc,MAAM;AAAA,IACzB,YAAY,IAAI;AAAA,IAChB,cAAc;AAAA;AAAA,EAIf,WAAU,MAAM;AAAA,IACf,IAAI,YAAY,OAAO,WAAW,aAAa;AAAA,MAC9C;AAAA,IACD;AAAA,IAEA,MAAM,MAAM,OAAO;AAAA,IACnB,IAAI,CAAC;AAAA,MAAK;AAAA,IAGV,IAAI,0BAA0B,GAAG;AAAA,MAChC;AAAA,IACD;AAAA,IAGA,MAAM,WAAW,IAAI,qBACpB,CAAC,YAAY;AAAA,MACZ,QAAQ,QAAQ,CAAC,UAAU;AAAA,QAC1B,IAAI,MAAM,gBAAgB;AAAA,UACzB,MAAM,UAAU,MAAM;AAAA,UACtB,MAAM,UAAU,QAAQ,aAAa,UAAU;AAAA,UAC/C,MAAM,aAAa,QAAQ,aAAa,aAAa;AAAA,UAErD,IAAI,SAAS;AAAA,YACZ,QAAQ,MAAM;AAAA,UACf;AAAA,UACA,IAAI,YAAY;AAAA,YACf,QAAQ,SAAS;AAAA,UAClB;AAAA,UAEA,SAAS,UAAU,OAAO;AAAA,QAC3B;AAAA,OACA;AAAA,OAEF;AAAA,MACC,YAAY;AAAA,IACb,CACD;AAAA,IAEA,SAAS,QAAQ,GAAG;AAAA,IAEpB,OAAO,MAAM;AAAA,MACZ,IAAI,KAAK;AAAA,QACR,SAAS,UAAU,GAAG;AAAA,MACvB;AAAA;AAAA,KAEC,CAAC,QAAQ,CAAC;AAAA,EAGb,MAAM,WAA0B;AAAA,OAC5B;AAAA,OACC,SAAS,SAAS,EAAE,aAAa,GAAG,WAAW,SAAS,IAAI,CAAC;AAAA,OAC7D,gBAAgB,UAAU,CAAC,YAAY,CAAC,WACzC;AAAA,MACA,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,YAAY;AAAA,IACb,IACC,WACC;AAAA,MACA,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,YAAY;AAAA,IACb,IACC,CAAC;AAAA,EACN;AAAA,EAGA,MAAM,cAAc,WAAW,UAAU;AAAA,EAGzC,MAAM,iBACL,gBAAgB,UAAU,cAAc,cAAc;AAAA,EAEvD,uBACC,MA0FE,QA1FF;AAAA,IACC,OAAO;AAAA,MACN,UAAU;AAAA,MACV,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,OAAO;AAAA,MACP,QAAQ;AAAA,IACT;AAAA,IARD,UA0FE;AAAA,MA/EA,eAAe,CAAC,YAAY,CAAC,4BAC7B,KAwBE,OAxBF;AAAA,QACC,OAAO;AAAA,UACN,UAAU;AAAA,UACV,OAAO;AAAA,UACP,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,iBAAiB;AAAA,UACjB,QAAQ;AAAA,UACR,eAAe;AAAA,QAChB;AAAA,QAVD,UAYE,2BACA,KAAC,OAAD;AAAA,UACC,OAAO;AAAA,YACN,OAAO,GAAG;AAAA,YACV,QAAQ,GAAG;AAAA,YACX,QAAQ,GAAG,KAAK,IAAI,GAAG,cAAc,EAAE;AAAA,YACvC,gBAAgB;AAAA,YAChB,cAAc;AAAA,YACd,WAAW;AAAA,UACZ;AAAA,SACD;AAAA,OAEA;AAAA,MAGF,gBAAgB,UAAU,kBAAkB,CAAC,YAAY,CAAC,4BAC1D,KAAC,OAAD;AAAA,QACC,KAAK;AAAA,QACL,KAAI;AAAA,QACJ,eAAY;AAAA,QACZ,OAAO;AAAA,UACN,UAAU;AAAA,UACV,OAAO;AAAA,UACP,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,WAAW,OAAO,aAAa;AAAA,UAC/B,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,QAAQ;AAAA,QACT;AAAA,OACD;AAAA,sBAED,KAAC,OAAD;AAAA,QACC,KAAK;AAAA,QACL,KAAK,YAAY,0BAA0B,IAAI,WAAW;AAAA,QAC1D,YACC,CAAC,YAAY,CAAC,0BAA0B,IAAI,WAAW;AAAA,QAExD,QAAQ,YAAY,0BAA0B,IAAI,SAAS;AAAA,QAC3D,eACC,CAAC,YAAY,CAAC,0BAA0B,IAAI,SAAS;AAAA,QAEtD;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK,OAAO;AAAA,QACZ,SAAS;AAAA,QACT,eAAe,WAAW,SAAS;AAAA,QACnC,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,OAAO;AAAA,QACP;AAAA,WACI;AAAA,OACL;AAAA,MAGC,eAAe,CAAC,4BAChB,KAOE,SAPF;AAAA,kBACE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAMA;AAAA;AAAA,GAEF;AAAA;;AClVJ,wBAAS,4BAAa,wBAAY;;AAgBlC,SAAS,IAAI;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,KACG;AAAA,GACU;AAAA,EAEb,MAAM,gBAAgB,YAAW,aAAa;AAAA,EAC9C,MAAM,SAAS,UAAU;AAAA,EACzB,MAAM,WAAW,mBAAmB;AAAA,EACpC,MAAM,eAAe,gBAAgB;AAAA,EACrC,MAAM,mBAAmB,yBAAyB;AAAA,EAGlD,MAAM,YAAY,CAAC,CAAC;AAAA,EAEpB,QAAQ,UAAU,eAAe,UAAU;AAAA,IAC1C,UAAU,MAAM;AAAA,IAChB,YAAY,MAAM;AAAA,EACnB;AAAA,EAEA,MAAM,WAAW,SAChB,MAAO,WAAW,SAAS,OAAO,EAAE,CAAC,IAAI,WACzC,CAAC,UAAU,EAAE,CACd;AAAA,EAEA,MAAM,cAAc,aACnB,OAAO,MAA2C;AAAA,IACjD,IAAI,SAAS;AAAA,MACZ,QAAQ,CAAC;AAAA,IACV;AAAA,IAGA,IAAI,CAAC,WAAW;AAAA,MACf;AAAA,IACD;AAAA,IAEA,IACC,EAAE,oBACF,EAAE,WAAW,KACb,EAAE,WACF,EAAE,WACF,EAAE,YACF,EAAE,UACF,MAAM,WAAW,UAChB;AAAA,MACD;AAAA,IACD;AAAA,IAEA,EAAE,eAAe;AAAA,IAEjB,IAAI,UAAU;AAAA,MACb,IAAI;AAAA,QACH,IAAI,OAAO,WAAW,aAAa;AAAA,UAClC,MAAM,MAAM,IAAI,IAAI,OAAO,EAAE,GAAG,OAAO,SAAS,MAAM;AAAA,UACtD,IAAI,IAAI,WAAW,OAAO,SAAS,QAAQ;AAAA,YAC1C,MAAM,OAAO,IAAI;AAAA,YACjB,MAAM,YAAY,CAAC,CAAC,aAAa,IAAI,GAAG,OAAO;AAAA,YAC/C,MAAM,IAAI;AAAA,YACV,EAAE,mBAAmB,EAAE,oBAAoB,CAAC;AAAA,YAE5C,IACC,cACC,CAAC,YAAY,CAAC,SAAS,WACxB,EAAE,iBAAiB,UAAU,WAC5B;AAAA,cACD,MAAM,MAAM,IAAI;AAAA,cAChB,MAAM,QAAQ,WAAW,MAAM,IAAI,MAAM,GAAG,GAAG;AAAA,cAC/C,IAAI;AAAA,gBACH,MAAM,IAAI,MAAM,MACf,wBAAwB,mBAAmB,IAAI,KAC/C;AAAA,kBACC,SAAS,EAAE,QAAQ,mBAAmB;AAAA,kBACtC,aAAa;AAAA,kBACb,QAAQ,IAAI;AAAA,gBACb,CACD,EAAE,MAAM,MAAM,IAAI;AAAA,gBAClB,IAAI,GAAG,IAAI;AAAA,kBACV,MAAM,IAAI,MAAM,EAAE,KAAK,EAAE,MAAM,MAAM,IAAI;AAAA,kBACzC,IAAI,GAAG;AAAA,oBACL,EAAE,iBAAyB,QAAQ,EAAE,QAAQ;AAAA,oBAC9C,IAAI;AAAA,sBACH,EAAE,cACD,IAAI,YAAY,oBAAoB;AAAA,wBACnC,QAAQ,EAAE,KAAK,KAAK;AAAA,sBACrB,CAAC,CACF;AAAA,sBACC,MAAM;AAAA,kBACT;AAAA,gBACD;AAAA,gBACC,MAAM;AAAA,cACR,aAAa,KAAK;AAAA,YACnB;AAAA,UACD;AAAA,QACD;AAAA,QACC,MAAM;AAAA,IACT;AAAA,IAEA,MAAM,YAAY,WAAW,GAAG,MAAM,aAAa;AAAA,IACnD,SAAS,WAAW,EAAE,SAAS,MAAM,CAAC;AAAA,KAEvC;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CACD;AAAA,EAEA,MAAM,mBAAmB,aAGxB,CAAC,MAAW;AAAA,IACX,IAAI,YAAY,YAAY,SAAS;AAAA,MAAQ,gBAAgB,QAAQ;AAAA,IAChE,SAAI,UAAU;AAAA,MAClB,IAAI;AAAA,QACH,IAAI,OAAO,WAAW,aAAa;AAAA,UAClC,MAAM,MAAM,IAAI,IAAI,OAAO,EAAE,GAAG,OAAO,SAAS,MAAM;AAAA,UACtD,IAAI,IAAI,WAAW,OAAO,SAAS,QAAQ;AAAA,YAC1C,MAAM,OAAO,IAAI;AAAA,YACjB,MAAM,YAAY,CAAC,CAAC,aAAa,IAAI,GAAG,OAAO;AAAA,YAG/C,MAAM,QAAQ,CAAC,EACd,gBACA,aACA,SAAS,cAAe;AAAA,YAEzB,IAAI,YAAY,CAAC,SAAS,UAAU,oBAAoB,OAAO;AAAA,eAC7D,YAAY;AAAA,gBACZ,IAAI;AAAA,kBACH,MAAM,QAA4B,MAAM,iBACvC,SAAS,UACV;AAAA,kBACA,MAAM,SAAS,SAAS,CAAC,GAAG,KAC3B,CAAC,SAAc,MAAM,SAAS,SAAS,IACxC;AAAA,kBACA,MAAM,MAAO,OAAe;AAAA,kBAC5B,IAAI;AAAA,oBAAK,gBAAgB,KAAK,UAAU,QAAQ,IAAI,CAAC;AAAA,kBACpD,MAAM;AAAA,iBACN;AAAA,YACJ;AAAA,YACA,MAAM,IAAI;AAAA,YACV,EAAE,mBAAmB,EAAE,oBAAoB,CAAC;AAAA,YAC5C,IACC,cACC,CAAC,YAAY,CAAC,SAAS,WACxB,EAAE,iBAAiB,UAAU,WAC5B;AAAA,cACD,MAAM,wBAAwB,mBAAmB,IAAI,KAAK;AAAA,gBACzD,SAAS,EAAE,QAAQ,mBAAmB;AAAA,gBACtC,aAAa;AAAA,cACd,CAAC,EACC,KAAK,CAAC,MAAO,EAAE,KAAK,EAAE,KAAK,IAAI,IAAK,EACpC,KAAK,CAAC,MAAM;AAAA,gBACZ,IAAI,CAAC;AAAA,kBAAG;AAAA,gBACR,EAAE,iBAAiB,QAAQ,EAAE,QAAQ;AAAA,gBACrC,IAAI;AAAA,kBACH,EAAE,cACD,IAAI,YAAY,oBAAoB;AAAA,oBACnC,QAAQ,EAAE,KAAK,KAAK;AAAA,kBACrB,CAAC,CACF;AAAA,kBACC,MAAM;AAAA,eACR,EACA,MAAM,MAAM,EAAE;AAAA,YACjB;AAAA,UACD;AAAA,QACD;AAAA,QACC,MAAM;AAAA,IACT;AAAA,IACA,IAAI;AAAA,MAAc,aAAa,CAAC;AAAA,KAEjC;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CACD;AAAA,EAEA,MAAM,cAAc,aAGnB,CAAC,MAAW;AAAA,IACX,IAAI,YAAY,YAAY,SAAS;AAAA,MAAQ,gBAAgB,QAAQ;AAAA,IAChE,SAAI,UAAU;AAAA,MAClB,IAAI;AAAA,QACH,IAAI,OAAO,WAAW,aAAa;AAAA,UAClC,MAAM,MAAM,IAAI,IAAI,OAAO,EAAE,GAAG,OAAO,SAAS,MAAM;AAAA,UACtD,IAAI,IAAI,WAAW,OAAO,SAAS,QAAQ;AAAA,YAC1C,MAAM,OAAO,IAAI;AAAA,YACjB,MAAM,YAAY,CAAC,CAAC,aAAa,IAAI,GAAG,OAAO;AAAA,YAC/C,MAAM,SAAS,CAAC,EACf,gBACA,aACA,SAAS,cAAe;AAAA,YAEzB,IAAI,YAAY,CAAC,SAAS,UAAU,oBAAoB,QAAQ;AAAA,eAC9D,YAAY;AAAA,gBACZ,IAAI;AAAA,kBACH,MAAM,QAA4B,MAAM,iBACvC,SAAS,UACV;AAAA,kBACA,MAAM,SAAS,SAAS,CAAC,GAAG,KAC3B,CAAC,SAAc,MAAM,SAAS,SAAS,IACxC;AAAA,kBACA,MAAM,MAAO,OAAe;AAAA,kBAC5B,IAAI;AAAA,oBAAK,gBAAgB,KAAK,UAAU,QAAQ,IAAI,CAAC;AAAA,kBACpD,MAAM;AAAA,iBACN;AAAA,YACJ;AAAA,YACA,MAAM,IAAI;AAAA,YACV,EAAE,mBAAmB,EAAE,oBAAoB,CAAC;AAAA,YAC5C,IACC,cACC,CAAC,YAAY,CAAC,SAAS,WACxB,EAAE,iBAAiB,UAAU,WAC5B;AAAA,cACD,MAAM,wBAAwB,mBAAmB,IAAI,KAAK;AAAA,gBACzD,SAAS,EAAE,QAAQ,mBAAmB;AAAA,gBACtC,aAAa;AAAA,cACd,CAAC,EACC,KAAK,CAAC,MAAO,EAAE,KAAK,EAAE,KAAK,IAAI,IAAK,EACpC,KAAK,CAAC,MAAM;AAAA,gBACZ,IAAI,CAAC;AAAA,kBAAG;AAAA,gBACR,EAAE,iBAAiB,QAAQ,EAAE,QAAQ;AAAA,gBACrC,IAAI;AAAA,kBACH,EAAE,cACD,IAAI,YAAY,oBAAoB;AAAA,oBACnC,QAAQ,EAAE,KAAK,KAAK;AAAA,kBACrB,CAAC,CACF;AAAA,kBACC,MAAM;AAAA,eACR,EACA,MAAM,MAAM,EAAE;AAAA,YACjB;AAAA,UACD;AAAA,QACD;AAAA,QACC,MAAM;AAAA,IACT;AAAA,IACA,IAAI;AAAA,MAAS,QAAQ,CAAC;AAAA,KAEvB;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CACD;AAAA,EAGA,MAAM,OAAO,WAAW,GAAG,MAAM,aAAa;AAAA,EAE9C,uBACC,KAAC,KAAD;AAAA,IACC;AAAA,IACA,SAAS;AAAA,IACT,cAAc;AAAA,IACd,SAAS;AAAA,OACL;AAAA,GACL;AAAA;;AC5RF;AAAA;AAmFO,SAAS,QAAQ;AAAA,EACvB;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,gBAAgB,CAAC;AAAA,GACW;AAAA,EAE5B,MAAM,qBAAqB,CAAC,GAAG,aAAa;AAAA,EAC5C,MAAM,qBAAqB,CAAC,GAAG,aAAa;AAAA,EAM5C,uBACC,KASE,OATF;AAAA,IAAK;AAAA,IAAL,0BACC,KAOE,kBAPF;AAAA,MACC,eAAe;AAAA,MACf,eAAe;AAAA,MACf;AAAA,MACA;AAAA,MAJD;AAAA,KAOE;AAAA,GACD;AAAA;;ACxHJ,uBAAS;;AAOT,SAAS,MAAM,GAAG;AAAA,EACjB,MAAM,gBAAgB,YAAW,aAAa;AAAA,EAC9C,uBAAO;AAAA,cAAG;AAAA,GAAgB;AAAA;",
|
|
24
|
+
"debugId": "C9918CE64524583B64756E2164756E21",
|
|
24
25
|
"names": []
|
|
25
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentRoute.d.ts","sourceRoot":"","sources":["../../../../../../packages/react/src/components/ContentRoute.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ContentRoute.d.ts","sourceRoot":"","sources":["../../../../../../packages/react/src/components/ContentRoute.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAGxC,KAAK,eAAe,GAAG,CACtB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,KACR;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,GAAG,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAA;CAAE,GAAG,SAAS,CAAC;AAQlE,iBAAS,YAAY,CAAC,EACrB,UAAU,EACV,IAAI,EACJ,QAAQ,GACR,EAAE;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC3B,2CAyKA;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../../../../../packages/react/src/components/Link.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../../../../../packages/react/src/components/Link.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;GAGG;AACH,iBAAS,IAAI,CAAC,EACb,EAAE,EACF,OAAO,EACP,KAAK,EACL,QAAe,EACf,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,OAAO,EACP,GAAG,KAAK,EACR,EAAE,SAAS,2CA+QX;AAED,OAAO,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* reroute-js v0.7.0
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @copyright 2025 stewones <hi@stewan.io>
|
|
6
|
+
* @see https://github.com/stewones/reroute
|
|
7
|
+
*
|
|
8
|
+
* Built with Bun <3
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Markdown component with optional Shiki syntax highlighting
|
|
12
|
+
*
|
|
13
|
+
* Requires: react-markdown
|
|
14
|
+
* Optional: @shikijs/rehype (SSR/compile-time) or shiki (client-only)
|
|
15
|
+
*/
|
|
16
|
+
import type { ReactNode } from 'react';
|
|
17
|
+
import type { Components } from 'react-markdown';
|
|
18
|
+
export interface MarkdownProps {
|
|
19
|
+
/**
|
|
20
|
+
* Markdown content to render
|
|
21
|
+
*/
|
|
22
|
+
children: string;
|
|
23
|
+
/**
|
|
24
|
+
* Additional CSS class name
|
|
25
|
+
*/
|
|
26
|
+
className?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Enable GitHub Flavored Markdown (requires remark-gfm)
|
|
29
|
+
* @default true if remark-gfm is installed
|
|
30
|
+
*/
|
|
31
|
+
gfm?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Enable syntax highlighting. For programmatic Markdown (TSX routes),
|
|
34
|
+
* highlighting is applied client-side using Shiki to avoid SSR mismatch.
|
|
35
|
+
* For content-generated MD/MDX, highlighting can also be compiled in.
|
|
36
|
+
* @default false
|
|
37
|
+
*/
|
|
38
|
+
highlight?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Shiki theme to use for syntax highlighting
|
|
41
|
+
* @default 'github-dark'
|
|
42
|
+
*/
|
|
43
|
+
theme?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Skip HTML in markdown completely
|
|
46
|
+
* @default false
|
|
47
|
+
*/
|
|
48
|
+
skipHtml?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Custom components to override default HTML elements
|
|
51
|
+
*/
|
|
52
|
+
components?: Components;
|
|
53
|
+
/**
|
|
54
|
+
* Additional remark plugins
|
|
55
|
+
*/
|
|
56
|
+
remarkPlugins?: any[];
|
|
57
|
+
/**
|
|
58
|
+
* Additional rehype plugins
|
|
59
|
+
*/
|
|
60
|
+
rehypePlugins?: any[];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Markdown component for rendering markdown content with optional syntax highlighting
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```tsx
|
|
67
|
+
* import { Markdown } from 'reroute-js/react';
|
|
68
|
+
*
|
|
69
|
+
* <Markdown>
|
|
70
|
+
* # Hello World
|
|
71
|
+
* This is **bold** and this is *italic*.
|
|
72
|
+
* </Markdown>
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* @example With code blocks
|
|
76
|
+
* ```tsx
|
|
77
|
+
* <Markdown highlight theme="github-dark">
|
|
78
|
+
* {`
|
|
79
|
+
* # Code Example
|
|
80
|
+
* \`\`\`typescript
|
|
81
|
+
* const greeting = "Hello, World!";
|
|
82
|
+
* console.log(greeting);
|
|
83
|
+
* \`\`\`
|
|
84
|
+
* `}
|
|
85
|
+
* </Markdown>
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export declare function Markdown({ children, className, skipHtml, components, remarkPlugins, rehypePlugins, }: MarkdownProps): ReactNode;
|
|
89
|
+
//# sourceMappingURL=Markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../../../../../packages/react/src/components/Markdown.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,MAAM,WAAW,aAAa;IAC7B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IAEd;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB;;OAEG;IAEH,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC;IAEtB;;OAEG;IAEH,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,QAAQ,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,QAAgB,EAChB,UAAU,EACV,aAAkB,EAClB,aAAkB,GAClB,EAAE,aAAa,GAAG,SAAS,CAqB3B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* reroute-js v0.
|
|
2
|
+
* reroute-js v0.7.0
|
|
3
3
|
*
|
|
4
4
|
* @license MIT
|
|
5
5
|
* @copyright 2025 stewones <hi@stewan.io>
|
|
@@ -11,5 +11,6 @@ export * from './ClientOnly';
|
|
|
11
11
|
export * from './ContentRoute';
|
|
12
12
|
export * from './Image';
|
|
13
13
|
export * from './Link';
|
|
14
|
+
export * from './Markdown';
|
|
14
15
|
export * from './Outlet';
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/react/src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/react/src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC"}
|