olova 2.0.54 → 2.0.56
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 +34 -283
- package/dist/chunk-23UAGQ6N.js +2208 -0
- package/dist/chunk-23UAGQ6N.js.map +1 -0
- package/dist/chunk-D7SIC5TC.js +367 -0
- package/dist/chunk-D7SIC5TC.js.map +1 -0
- package/dist/entry-server.cjs +2341 -0
- package/dist/entry-server.cjs.map +1 -0
- package/dist/entry-server.js +114 -0
- package/dist/entry-server.js.map +1 -0
- package/dist/entry-worker.cjs +2354 -0
- package/dist/entry-worker.cjs.map +1 -0
- package/dist/entry-worker.js +126 -0
- package/dist/entry-worker.js.map +1 -0
- package/dist/main.cjs +18 -0
- package/dist/main.cjs.map +1 -0
- package/dist/main.js +16 -0
- package/dist/main.js.map +1 -0
- package/dist/olova.cjs +1684 -0
- package/dist/olova.cjs.map +1 -0
- package/dist/olova.d.cts +72 -0
- package/dist/olova.d.ts +72 -0
- package/dist/olova.js +1325 -0
- package/dist/olova.js.map +1 -0
- package/dist/performance.cjs +386 -0
- package/dist/performance.cjs.map +1 -0
- package/dist/performance.js +3 -0
- package/dist/performance.js.map +1 -0
- package/dist/router.cjs +646 -0
- package/dist/router.cjs.map +1 -0
- package/dist/router.d.cts +113 -0
- package/dist/router.d.ts +113 -0
- package/dist/router.js +632 -0
- package/dist/router.js.map +1 -0
- package/main.tsx +76 -0
- package/olova.ts +619 -0
- package/package.json +37 -55
- package/src/entry-server.tsx +165 -0
- package/src/entry-worker.tsx +201 -0
- package/src/generator/index.ts +409 -0
- package/src/hydration/flight.ts +320 -0
- package/src/hydration/index.ts +12 -0
- package/src/hydration/types.ts +225 -0
- package/src/logger.ts +182 -0
- package/src/main.tsx +24 -0
- package/src/performance.ts +488 -0
- package/src/plugin/index.ts +204 -0
- package/src/router/ErrorBoundary.tsx +145 -0
- package/src/router/Link.tsx +117 -0
- package/src/router/OlovaRouter.tsx +354 -0
- package/src/router/Outlet.tsx +8 -0
- package/src/router/context.ts +117 -0
- package/src/router/index.ts +29 -0
- package/src/router/matching.ts +63 -0
- package/src/router/router.tsx +23 -0
- package/src/router/search-params.ts +29 -0
- package/src/scanner/index.ts +116 -0
- package/src/types/index.ts +191 -0
- package/src/utils/export.ts +85 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/naming.ts +54 -0
- package/src/utils/path.ts +45 -0
- package/tsup.config.ts +35 -0
- package/dist/client-BBLXpllK.d.ts +0 -487
- package/dist/client-C0av_vTZ.d.cts +0 -487
- package/dist/client.cjs +0 -850
- package/dist/client.cjs.map +0 -1
- package/dist/client.d.cts +0 -5
- package/dist/client.d.ts +0 -5
- package/dist/client.js +0 -816
- package/dist/client.js.map +0 -1
- package/dist/image.cjs +0 -25
- package/dist/image.cjs.map +0 -1
- package/dist/image.d.cts +0 -1
- package/dist/image.d.ts +0 -1
- package/dist/image.js +0 -3
- package/dist/image.js.map +0 -1
- package/dist/index.cjs +0 -907
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -31
- package/dist/index.d.ts +0 -31
- package/dist/index.js +0 -868
- package/dist/index.js.map +0 -1
- package/dist/plugin/index.cjs +0 -1550
- package/dist/plugin/index.cjs.map +0 -1
- package/dist/plugin/index.d.cts +0 -131
- package/dist/plugin/index.d.ts +0 -131
- package/dist/plugin/index.js +0 -1490
- package/dist/plugin/index.js.map +0 -1
- package/dist/serialization-xKcOESDh.d.cts +0 -122
- package/dist/serialization-xKcOESDh.d.ts +0 -122
- package/dist/server.cjs +0 -547
- package/dist/server.cjs.map +0 -1
- package/dist/server.d.cts +0 -148
- package/dist/server.d.ts +0 -148
- package/dist/server.js +0 -493
- package/dist/server.js.map +0 -1
package/dist/client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hydration/scheduler.ts","../src/router/context.ts","../src/router/navigation.ts","../src/router/match.ts","../src/router/prefetch.ts","../src/router/hooks.ts","../src/router/Link.tsx","../src/router/Router.tsx","../src/router/BuiltinComponents.tsx","../src/router/Styles.ts","../src/router/useRouterInternal.ts","../src/router/Metadata.ts","../src/router/Query.ts","../src/head/Head.tsx","../src/head/HeadProvider.tsx","../src/head/ssr.ts","../src/data/provider.tsx","../src/data/hooks.ts","../src/hydration/serialization.ts","../src/hydration/index.ts"],"sourcesContent":["import type { HydrationState, FlightChunk, HydrationHint } from './types.js';\r\n\r\n/**\r\n * Hydration scheduler - Prioritizes component hydration\r\n */\r\nexport class HydrationScheduler {\r\n private queue: Array<{ id: string; priority: number; task: () => void }> = [];\r\n private isProcessing = false;\r\n private state: HydrationState = 'idle';\r\n \r\n constructor() {\r\n if (typeof window !== 'undefined') {\r\n (window as any).__FLIGHT_CHUNK__ = this.receiveChunk.bind(this);\r\n }\r\n }\r\n \r\n getState(): HydrationState {\r\n return this.state;\r\n }\r\n \r\n schedule(id: string, priority: HydrationHint['priority'], task: () => void): void {\r\n const priorityValue = {\r\n critical: 0,\r\n high: 1,\r\n low: 2,\r\n idle: 3,\r\n }[priority];\r\n \r\n this.queue.push({ id, priority: priorityValue, task });\r\n this.queue.sort((a, b) => a.priority - b.priority);\r\n \r\n if (!this.isProcessing) {\r\n this.processQueue();\r\n }\r\n }\r\n \r\n private async processQueue(): Promise<void> {\r\n this.isProcessing = true;\r\n this.state = 'hydrating';\r\n \r\n while (this.queue.length > 0) {\r\n const item = this.queue.shift()!;\r\n \r\n try {\r\n if (item.priority >= 2 && 'requestIdleCallback' in window) {\r\n await new Promise<void>(resolve => {\r\n (window as any).requestIdleCallback(() => {\r\n item.task();\r\n resolve();\r\n });\r\n });\r\n } else {\r\n await Promise.resolve().then(item.task);\r\n }\r\n } catch (error) {\r\n console.error(`[Olova] Hydration failed for ${item.id}:`, error);\r\n }\r\n \r\n await new Promise(r => setTimeout(r, 0));\r\n }\r\n \r\n this.isProcessing = false;\r\n this.state = 'complete';\r\n \r\n if (typeof window !== 'undefined') {\r\n window.dispatchEvent(new CustomEvent('olova:hydration-complete'));\r\n }\r\n }\r\n \r\n private receiveChunk(chunk: FlightChunk): void {\r\n this.state = 'streaming';\r\n \r\n const placeholder = document.querySelector(`[data-flight-id=\"${chunk.id}\"]`);\r\n if (placeholder) {\r\n const temp = document.createElement('div');\r\n temp.innerHTML = chunk.html;\r\n \r\n while (temp.firstChild) {\r\n placeholder.parentNode?.insertBefore(temp.firstChild, placeholder);\r\n }\r\n placeholder.remove();\r\n \r\n if (chunk.data) {\r\n this.schedule(chunk.id, 'high', () => {\r\n this.hydrateNode(chunk.id, chunk.data);\r\n });\r\n }\r\n }\r\n }\r\n \r\n private hydrateNode(id: string, data: any): void {\r\n const element = document.querySelector(`[data-flight-id=\"${id}\"]`);\r\n if (element) {\r\n element.setAttribute('data-hydrated', 'true');\r\n (element as any).__FLIGHT_DATA__ = data;\r\n }\r\n }\r\n}\r\n","/**\r\n * Router Context\r\n * React contexts and shared state for the router\r\n */\r\n\r\nimport { createContext } from 'react';\r\nimport type { \r\n RouterContextType, \r\n RouterEvents, \r\n RouterEventType, \r\n RouterEventHandler \r\n} from './types.js';\r\n\r\n// Caches for page components and metadata\r\nexport const pageCache = new Map<string, React.ComponentType<any>>();\r\nexport const prefetchPromises = new Map<string, Promise<void>>();\r\nexport const metadataCache = new Map<string, any>();\r\n\r\n// Chunk manifest cache for route-based code splitting\r\nexport interface ChunkManifestData {\r\n version: number;\r\n routes: Record<string, { chunk: string; size: number; isStatic: boolean; isDynamic: boolean }>;\r\n shared: string[];\r\n}\r\nexport let chunkManifest: ChunkManifestData | null = null;\r\n\r\nexport function setChunkManifest(manifest: ChunkManifestData): void {\r\n chunkManifest = manifest;\r\n}\r\n\r\nexport function getChunkManifest(): ChunkManifestData | null {\r\n return chunkManifest;\r\n}\r\n\r\n// Navigation event name\r\nexport const NAVIGATE_EVENT = 'olova:navigate';\r\n\r\n// Event emitter for router events\r\nconst eventHandlers = new Map<RouterEventType, Set<RouterEventHandler>>();\r\n\r\nexport const routerEvents: RouterEvents = {\r\n on(event, handler) {\r\n if (!eventHandlers.has(event)) {\r\n eventHandlers.set(event, new Set());\r\n }\r\n eventHandlers.get(event)!.add(handler);\r\n },\r\n off(event, handler) {\r\n eventHandlers.get(event)?.delete(handler);\r\n },\r\n emit(event, ...args) {\r\n eventHandlers.get(event)?.forEach(handler => handler(...args));\r\n }\r\n};\r\n\r\n// Router context with default values\r\nexport const RouterContext = createContext<RouterContextType>({\r\n pathname: '/',\r\n params: {},\r\n query: {},\r\n asPath: '/',\r\n push: async () => true,\r\n replace: async () => true,\r\n back: () => {},\r\n forward: () => {},\r\n prefetch: async () => {},\r\n reload: () => {},\r\n isReady: false,\r\n isNavigating: false,\r\n isFallback: false,\r\n events: routerEvents,\r\n});\r\n\r\n// Params context for route parameters\r\nexport const ParamsContext = createContext<Record<string, string | string[]>>({});\r\n","/**\r\n * Navigation Functions\r\n * Programmatic navigation utilities\r\n */\r\n\r\nimport type { NavigateOptions } from './types.js';\r\nimport { routerEvents, NAVIGATE_EVENT } from './context.js';\r\n\r\n/**\r\n * Navigate to a new URL (push to history)\r\n */\r\nexport function navigate(to: string, options: NavigateOptions = {}): Promise<boolean> {\r\n return new Promise((resolve) => {\r\n const { scroll = true } = options;\r\n \r\n routerEvents.emit('routeChangeStart', to, { shallow: options.shallow });\r\n routerEvents.emit('beforeHistoryChange', to);\r\n \r\n window.history.pushState({ scroll }, '', to);\r\n window.dispatchEvent(new CustomEvent(NAVIGATE_EVENT, { \r\n detail: { path: to, scroll } \r\n }));\r\n \r\n if (scroll) {\r\n window.scrollTo(0, 0);\r\n }\r\n \r\n routerEvents.emit('routeChangeComplete', to, { shallow: options.shallow });\r\n resolve(true);\r\n });\r\n}\r\n\r\n/**\r\n * Replace current URL in history\r\n */\r\nexport function replace(to: string, options: NavigateOptions = {}): Promise<boolean> {\r\n return new Promise((resolve) => {\r\n const { scroll = false } = options;\r\n \r\n routerEvents.emit('routeChangeStart', to, { shallow: options.shallow });\r\n routerEvents.emit('beforeHistoryChange', to);\r\n \r\n window.history.replaceState({ scroll }, '', to);\r\n window.dispatchEvent(new CustomEvent(NAVIGATE_EVENT, { \r\n detail: { path: to, scroll, replace: true } \r\n }));\r\n \r\n if (scroll) {\r\n window.scrollTo(0, 0);\r\n }\r\n \r\n routerEvents.emit('routeChangeComplete', to, { shallow: options.shallow });\r\n resolve(true);\r\n });\r\n}\r\n\r\n/**\r\n * Programmatic redirect (client-side)\r\n */\r\nexport function redirect(url: string): never {\r\n if (typeof window !== 'undefined') {\r\n window.location.href = url;\r\n }\r\n throw new Error('NEXT_REDIRECT');\r\n}\r\n\r\n/**\r\n * Permanent redirect (client-side)\r\n */\r\nexport function permanentRedirect(url: string): never {\r\n redirect(url);\r\n}\r\n\r\n/**\r\n * Throw 404 error\r\n */\r\nexport function notFound(): never {\r\n throw new Error('NEXT_NOT_FOUND');\r\n}\r\n","/**\r\n * Route Matching\r\n */\r\n\r\nimport type { Route, MatchResult, FindRouteResult } from './types.js';\r\n\r\n/**\r\n * Match a route path against the current path\r\n * Supports dynamic routes, catch-all, and optional catch-all patterns\r\n */\r\nexport function matchRoute(routePath: string, currentPath: string): MatchResult {\r\n if (routePath === currentPath) {\r\n return { matches: true, params: {}, score: 100 };\r\n }\r\n \r\n const routeSegments = routePath.split('/').filter(Boolean);\r\n const pathSegments = currentPath.split('/').filter(Boolean);\r\n \r\n const params: Record<string, string | string[]> = {};\r\n let score = 0;\r\n \r\n for (let i = 0; i < routeSegments.length; i++) {\r\n const routeSegment = routeSegments[i];\r\n const pathSegment = pathSegments[i];\r\n \r\n if (routeSegment?.startsWith('*') && routeSegment?.endsWith('?')) {\r\n const paramName = routeSegment.slice(1, -1);\r\n const remainingPath = pathSegments.slice(i);\r\n params[paramName] = remainingPath.length > 0 ? remainingPath : [];\r\n score += 1;\r\n return { matches: true, params, score };\r\n }\r\n \r\n if (routeSegment?.startsWith('*')) {\r\n const paramName = routeSegment.slice(1);\r\n const remainingPath = pathSegments.slice(i);\r\n if (remainingPath.length > 0) {\r\n params[paramName] = remainingPath;\r\n score += 2;\r\n return { matches: true, params, score };\r\n }\r\n return { matches: false, params: {}, score: 0 };\r\n }\r\n \r\n if (routeSegment?.startsWith(':') || (routeSegment?.startsWith('[') && routeSegment?.endsWith(']'))) {\r\n if (!pathSegment) return { matches: false, params: {}, score: 0 };\r\n const paramName = routeSegment.startsWith(':') \r\n ? routeSegment.slice(1) \r\n : routeSegment.slice(1, -1);\r\n params[paramName] = pathSegment;\r\n score += 5;\r\n continue;\r\n }\r\n \r\n if (routeSegment !== pathSegment) return { matches: false, params: {}, score: 0 };\r\n score += 10;\r\n }\r\n \r\n if (routeSegments.length !== pathSegments.length) return { matches: false, params: {}, score: 0 };\r\n return { matches: true, params, score };\r\n}\r\n\r\n/**\r\n * Find the best matching route for a path\r\n */\r\nexport function findRoute(routes: Route[], path: string): FindRouteResult {\r\n const normalizedPath = path.endsWith('/') && path !== '/' ? path.slice(0, -1) : path;\r\n const exactMatch = routes.find(r => r.path === normalizedPath);\r\n if (exactMatch) return { route: exactMatch, params: {} };\r\n \r\n let bestMatch: { route: Route; params: Record<string, string | string[]>; score: number } | null = null;\r\n for (const route of routes) {\r\n const { matches, params, score } = matchRoute(route.path, normalizedPath);\r\n if (matches && (!bestMatch || score > bestMatch.score)) {\r\n bestMatch = { route, params, score };\r\n }\r\n }\r\n return bestMatch ? { route: bestMatch.route, params: bestMatch.params } : { route: null, params: {} };\r\n}\r\n","/**\r\n * Route Prefetching\r\n */\r\n\r\nimport type { Route } from './types.js';\r\nimport { pageCache, prefetchPromises, metadataCache } from './context.js';\r\nimport { findRoute } from './match.js';\r\n\r\n/**\r\n * Prefetch a route's component\r\n */\r\nexport async function prefetchRoute(routes: Route[], path: string): Promise<void> {\r\n const normalizedPath = path.endsWith('/') && path !== '/' ? path.slice(0, -1) : path;\r\n \r\n if (prefetchPromises.has(normalizedPath)) {\r\n return prefetchPromises.get(normalizedPath);\r\n }\r\n \r\n const { route } = findRoute(routes, normalizedPath);\r\n if (!route) return;\r\n \r\n const cacheKey = route.path;\r\n if (pageCache.has(cacheKey)) return;\r\n \r\n const promise = route.component().then(module => {\r\n pageCache.set(cacheKey, module.default);\r\n if ((module as any).metadata) {\r\n metadataCache.set(cacheKey, (module as any).metadata);\r\n }\r\n }).catch(() => {});\r\n \r\n prefetchPromises.set(normalizedPath, promise);\r\n return promise;\r\n}\r\n","/**\r\n * Router Hooks\r\n * React hooks for navigation and route information\r\n */\r\n\r\nimport { useState, useEffect, useContext } from 'react';\r\nimport type { RouterContextType } from './types.js';\r\nimport { RouterContext, ParamsContext, NAVIGATE_EVENT } from './context.js';\r\n\r\n/**\r\n * Access the router context\r\n */\r\nexport function useRouter(): RouterContextType {\r\n return useContext(RouterContext);\r\n}\r\n\r\n/**\r\n * Access route parameters\r\n */\r\nexport function useParams<T extends Record<string, string | string[]> = Record<string, string | string[]>>(): T {\r\n return useContext(ParamsContext) as T;\r\n}\r\n\r\n/**\r\n * Get the current pathname\r\n */\r\nexport function usePathname(): string {\r\n const { pathname } = useContext(RouterContext);\r\n return pathname;\r\n}\r\n\r\n/**\r\n * Access URL search parameters\r\n */\r\nexport function useSearchParams(): URLSearchParams {\r\n const [searchParams, setSearchParams] = useState(() => \r\n new URLSearchParams(window.location.search)\r\n );\r\n \r\n useEffect(() => {\r\n const handleNavigate = () => {\r\n setSearchParams(new URLSearchParams(window.location.search));\r\n };\r\n \r\n window.addEventListener(NAVIGATE_EVENT, handleNavigate);\r\n window.addEventListener('popstate', handleNavigate);\r\n \r\n return () => {\r\n window.removeEventListener(NAVIGATE_EVENT, handleNavigate);\r\n window.removeEventListener('popstate', handleNavigate);\r\n };\r\n }, []);\r\n \r\n return searchParams;\r\n}\r\n\r\n/**\r\n * Get the first segment of the current layout\r\n */\r\nexport function useSelectedLayoutSegment(): string | null {\r\n const { pathname } = useRouter();\r\n const segments = pathname.split('/').filter(Boolean);\r\n return segments[0] || null;\r\n}\r\n\r\n/**\r\n * Get all segments of the current layout\r\n */\r\nexport function useSelectedLayoutSegments(): string[] {\r\n const { pathname } = useRouter();\r\n return pathname.split('/').filter(Boolean);\r\n}\r\n","/**\r\n * Link Component\r\n * Client-side navigation link with prefetching\r\n */\r\n\r\nimport React, { useEffect, useCallback, useRef } from 'react';\r\nimport type { LinkProps, Route } from './types.js';\r\nimport { navigate, replace } from './navigation.js';\r\nimport { prefetchRoute } from './prefetch.js';\r\n\r\nexport function Link({ \r\n href, \r\n children, \r\n prefetch: shouldPrefetch = true, \r\n scroll = true,\r\n replace: shouldReplace = false,\r\n shallow = false,\r\n ...props \r\n}: LinkProps) {\r\n const prefetchedRef = useRef(false);\r\n const linkRef = useRef<HTMLAnchorElement>(null);\r\n \r\n const getRoutes = useCallback((): Route[] => {\r\n return (window as any).__OLOVA_ROUTES__ || [];\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!shouldPrefetch || prefetchedRef.current || !linkRef.current) return;\r\n \r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n if (entries[0].isIntersecting && !prefetchedRef.current) {\r\n prefetchedRef.current = true;\r\n prefetchRoute(getRoutes(), href);\r\n }\r\n },\r\n { rootMargin: '200px' }\r\n );\r\n \r\n observer.observe(linkRef.current);\r\n \r\n return () => observer.disconnect();\r\n }, [href, shouldPrefetch, getRoutes]);\r\n\r\n const handleMouseEnter = useCallback(() => {\r\n if (!prefetchedRef.current) {\r\n prefetchedRef.current = true;\r\n prefetchRoute(getRoutes(), href);\r\n }\r\n }, [href, getRoutes]);\r\n\r\n const handleClick = useCallback((e: React.MouseEvent<HTMLAnchorElement>) => {\r\n if (\r\n e.ctrlKey || \r\n e.metaKey || \r\n e.shiftKey ||\r\n e.button !== 0 ||\r\n props.target === '_blank' ||\r\n href.startsWith('http') ||\r\n href.startsWith('//')\r\n ) {\r\n return;\r\n }\r\n \r\n e.preventDefault();\r\n \r\n if (shouldReplace) {\r\n replace(href, { scroll, shallow });\r\n } else {\r\n navigate(href, { scroll, shallow });\r\n }\r\n }, [href, scroll, shallow, shouldReplace, props.target]);\r\n\r\n return (\r\n <a \r\n ref={linkRef}\r\n href={href} \r\n onClick={handleClick} \r\n onMouseEnter={handleMouseEnter}\r\n {...props}\r\n >\r\n {children}\r\n </a>\r\n );\r\n}\r\n","import React, { Suspense, useMemo, useEffect, useRef } from 'react';\r\nimport type { RouterProps, RouterContextType } from './types.js';\r\nimport { RouterContext, ParamsContext, routerEvents } from './context.js';\r\nimport { navigate, replace } from './navigation.js';\r\nimport { prefetchRoute } from './prefetch.js';\r\nimport { LoadingIndicator, NavigationProgress } from './BuiltinComponents.js';\r\nimport { injectStyles } from './Styles.js';\r\nimport { useRouterInternal } from './useRouterInternal.js';\r\n\r\ninjectStyles();\r\n\r\nclass ErrorBoundary extends React.Component<{ children: React.ReactNode, fallback?: React.ComponentType<{ error: Error, reset: () => void }> }, { hasError: boolean, error: Error | null }> {\r\n constructor(props: any) {\r\n super(props);\r\n this.state = { hasError: false, error: null };\r\n }\r\n static getDerivedStateFromError(error: Error) {\r\n return { hasError: true, error };\r\n }\r\n reset = () => this.setState({ hasError: false, error: null });\r\n render() {\r\n if (this.state.hasError && this.props.fallback) {\r\n const Fallback = this.props.fallback;\r\n return <Fallback error={this.state.error!} reset={this.reset} />;\r\n }\r\n return this.props.children;\r\n }\r\n}\r\n\r\nexport function Router({ routes }: RouterProps) {\r\n const routesRef = useRef(routes);\r\n routesRef.current = routes;\r\n\r\n const { \r\n currentPath, query, components, params, isNavigating, isReady \r\n } = useRouterInternal(routes);\r\n\r\n useEffect(() => {\r\n const handleHashChange = () => {\r\n routerEvents.emit('hashChangeStart', window.location.hash);\r\n routerEvents.emit('hashChangeComplete', window.location.hash);\r\n };\r\n window.addEventListener('hashchange', handleHashChange);\r\n return () => window.removeEventListener('hashchange', handleHashChange);\r\n }, []);\r\n\r\n const routerContextValue = useMemo<RouterContextType>(() => ({\r\n pathname: currentPath,\r\n params,\r\n query,\r\n asPath: typeof window !== 'undefined' \r\n ? currentPath + window.location.search + window.location.hash\r\n : currentPath,\r\n push: navigate,\r\n replace,\r\n back: () => typeof window !== 'undefined' && window.history.back(),\r\n forward: () => typeof window !== 'undefined' && window.history.forward(),\r\n prefetch: (url: string) => prefetchRoute(routesRef.current, url),\r\n reload: () => typeof window !== 'undefined' && window.location.reload(),\r\n isReady,\r\n isNavigating,\r\n isFallback: false,\r\n events: routerEvents,\r\n }), [currentPath, params, query, isReady, isNavigating]);\r\n\r\n if (!components.page) return null;\r\n\r\n const { page: Page, layouts, loading: Loading, error: ErrorComp } = components;\r\n\r\n // Render the component tree from bottom up\r\n let content = (\r\n <ErrorBoundary fallback={ErrorComp}>\r\n <Page params={params} searchParams={query} />\r\n </ErrorBoundary>\r\n );\r\n\r\n // Wrap with layouts in reverse order (closest is inner)\r\n for (let i = layouts.length - 1; i >= 0; i--) {\r\n const Layout = layouts[i];\r\n content = (\r\n <ErrorBoundary key={i} fallback={ErrorComp}>\r\n <Layout children={content} params={params} searchParams={query} />\r\n </ErrorBoundary>\r\n );\r\n }\r\n\r\n return (\r\n <RouterContext.Provider value={routerContextValue}>\r\n <ParamsContext.Provider value={params}>\r\n <Suspense fallback={Loading ? <Loading /> : <LoadingIndicator />}>\r\n {content}\r\n {isNavigating && <NavigationProgress />}\r\n </Suspense>\r\n </ParamsContext.Provider>\r\n </RouterContext.Provider>\r\n );\r\n}\r\n\r\nexport { NotFound, ErrorPage, LoadingIndicator, NavigationProgress } from './BuiltinComponents.js';\r\n","import React from 'react';\r\nimport { Link } from './Link.js';\r\n\r\nexport function NotFound() {\r\n return (\r\n <div style={{ padding: '4rem 2rem', textAlign: 'center' }}>\r\n <h1 style={{ fontSize: '4rem', margin: 0 }}>404</h1>\r\n <p style={{ fontSize: '1.25rem', color: '#666' }}>This page could not be found.</p>\r\n <Link href=\"/\" style={{ color: '#0070f3' }}>Go back home</Link>\r\n </div>\r\n );\r\n}\r\n\r\nexport function ErrorPage() {\r\n return (\r\n <div style={{ padding: '4rem 2rem', textAlign: 'center' }}>\r\n <h1 style={{ fontSize: '2rem', margin: 0 }}>Something went wrong</h1>\r\n <p style={{ fontSize: '1rem', color: '#666' }}>Failed to load this page.</p>\r\n <button onClick={() => window.location.reload()} style={{ \r\n padding: '0.5rem 1rem', \r\n background: '#0070f3', \r\n color: 'white', \r\n border: 'none',\r\n borderRadius: '4px',\r\n cursor: 'pointer'\r\n }}>\r\n Try again\r\n </button>\r\n </div>\r\n );\r\n}\r\n\r\nexport function LoadingIndicator() {\r\n return (\r\n <div style={{ padding: '2rem', textAlign: 'center' }}>\r\n <div style={{\r\n width: '40px',\r\n height: '40px',\r\n border: '3px solid #f3f3f3',\r\n borderTop: '3px solid #0070f3',\r\n borderRadius: '50%',\r\n animation: 'olova-spin 1s linear infinite',\r\n margin: '0 auto'\r\n }} />\r\n </div>\r\n );\r\n}\r\n\r\nexport function NavigationProgress() {\r\n return (\r\n <div style={{\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n height: '3px',\r\n background: 'linear-gradient(90deg, #0070f3, #00a8ff)',\r\n animation: 'olova-loading 1s ease-in-out infinite',\r\n zIndex: 9999,\r\n }} />\r\n );\r\n}\r\n","/**\r\n * CSS Injection for Router\r\n */\r\nexport function injectStyles() {\r\n if (typeof document !== 'undefined') {\r\n const style = document.createElement('style');\r\n style.textContent = `\r\n @keyframes olova-loading {\r\n 0% { transform: translateX(-100%); }\r\n 50% { transform: translateX(0); }\r\n 100% { transform: translateX(100%); }\r\n }\r\n @keyframes olova-spin {\r\n 0% { transform: rotate(0deg); }\r\n 100% { transform: rotate(360deg); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n}\r\n","import { useState, useEffect, useRef, startTransition } from 'react';\r\nimport type { Route, RouterProps } from './types.js';\r\nimport { \r\n routerEvents, \r\n NAVIGATE_EVENT,\r\n pageCache,\r\n metadataCache \r\n} from './context.js';\r\nimport { findRoute } from './match.js';\r\nimport { applyMetadata } from './Metadata.js';\r\nimport { parseQueryString } from './Query.js';\r\nimport { NotFound, ErrorPage } from './BuiltinComponents.js';\r\n\r\nexport interface RouteComponents {\r\n page: React.ComponentType<any> | null;\r\n layouts: React.ComponentType<any>[];\r\n loading?: React.ComponentType<any>;\r\n error?: React.ComponentType<any>;\r\n notFound?: React.ComponentType<any>;\r\n template?: React.ComponentType<any>;\r\n}\r\n\r\nexport function useRouterInternal(routes: Route[]) {\r\n const [currentPath, setCurrentPath] = useState(() => {\r\n if (typeof window === 'undefined') return '/';\r\n const path = window.location.pathname;\r\n return path.endsWith('/') && path !== '/' ? path.slice(0, -1) : path;\r\n });\r\n \r\n const [query, setQuery] = useState(() => {\r\n if (typeof window === 'undefined') return {};\r\n return parseQueryString(window.location.search);\r\n });\r\n \r\n const [components, setComponents] = useState<RouteComponents>({ page: null, layouts: [] });\r\n const [params, setParams] = useState<Record<string, string | string[]>>({});\r\n const [isNavigating, setIsNavigating] = useState(false);\r\n const [isReady, setIsReady] = useState(false);\r\n const isHydrating = useRef(true);\r\n\r\n useEffect(() => {\r\n const handleNavigate = (e: Event) => {\r\n const customEvent = e as CustomEvent;\r\n const newPath = customEvent.detail?.path || window.location.pathname;\r\n const normalizedPath = newPath.endsWith('/') && newPath !== '/' ? newPath.slice(0, -1) : newPath;\r\n isHydrating.current = false;\r\n startTransition(() => {\r\n setCurrentPath(normalizedPath);\r\n setQuery(parseQueryString(window.location.search));\r\n });\r\n };\r\n\r\n const handlePopState = () => {\r\n const path = window.location.pathname;\r\n const normalizedPath = path.endsWith('/') && path !== '/' ? path.slice(0, -1) : path;\r\n isHydrating.current = false;\r\n startTransition(() => {\r\n setCurrentPath(normalizedPath);\r\n setQuery(parseQueryString(window.location.search));\r\n });\r\n };\r\n \r\n window.addEventListener(NAVIGATE_EVENT, handleNavigate);\r\n window.addEventListener('popstate', handlePopState);\r\n return () => {\r\n window.removeEventListener(NAVIGATE_EVENT, handleNavigate);\r\n window.removeEventListener('popstate', handlePopState);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n const { route, params: extractedParams } = findRoute(routes, currentPath);\r\n \r\n const loadComponent = async (loader?: () => Promise<{ default: React.ComponentType<any> }>) => {\r\n if (!loader) return undefined;\r\n const module = await loader();\r\n return module.default;\r\n };\r\n\r\n if (!route) {\r\n // Try to find the closest parent route to inherit layouts for the 404 page\r\n const findParentLayouts = async () => {\r\n const segments = currentPath.split('/').filter(Boolean);\r\n for (let i = segments.length - 1; i >= 0; i--) {\r\n const partialPath = '/' + segments.slice(0, i).join('/');\r\n const { route: parentRoute } = findRoute(routes, partialPath);\r\n if (parentRoute) {\r\n const layouts = await Promise.all((parentRoute.layouts || []).map(l => loadComponent(l)));\r\n return layouts.filter((l): l is React.ComponentType<any> => !!l);\r\n }\r\n }\r\n return [];\r\n };\r\n\r\n findParentLayouts().then(layouts => {\r\n setComponents(prev => ({ ...prev, page: NotFound, layouts }));\r\n setParams({});\r\n setIsReady(true);\r\n });\r\n return;\r\n }\r\n setParams(extractedParams);\r\n \r\n if (!isHydrating.current) setIsNavigating(true);\r\n\r\n const loadRoute = async () => {\r\n try {\r\n const [page, layouts, loading, error, notFound, template] = await Promise.all([\r\n loadComponent(route.component),\r\n Promise.all((route.layouts || []).map(l => loadComponent(l))),\r\n loadComponent(route.loading),\r\n loadComponent(route.error),\r\n loadComponent(route.notFound),\r\n loadComponent(route.template),\r\n ]);\r\n\r\n if (route.metadata) {\r\n metadataCache.set(route.path, route.metadata);\r\n applyMetadata(route.metadata);\r\n }\r\n\r\n startTransition(() => {\r\n setComponents({ \r\n page: page || null, \r\n layouts: layouts.filter((l): l is React.ComponentType<any> => !!l),\r\n loading,\r\n error,\r\n notFound,\r\n template\r\n });\r\n setIsNavigating(false);\r\n setIsReady(true);\r\n isHydrating.current = false;\r\n });\r\n } catch (err) {\r\n console.error('[Olova] Failed to load route:', err);\r\n routerEvents.emit('routeChangeError', err, currentPath);\r\n setComponents({ page: ErrorPage, layouts: [] });\r\n setIsNavigating(false);\r\n setIsReady(true);\r\n }\r\n };\r\n\r\n loadRoute();\r\n }, [currentPath, routes]);\r\n\r\n return { currentPath, query, components, params, isNavigating, isReady, isHydrating };\r\n}\r\n","/**\r\n * Metadata Handling\r\n */\r\nexport function applyMetadata(metadata: any) {\r\n if (!metadata || typeof document === 'undefined') return;\r\n \r\n if (metadata.title) {\r\n document.title = metadata.title;\r\n }\r\n \r\n const metaTags: Record<string, string> = {\r\n description: metadata.description,\r\n keywords: metadata.keywords,\r\n };\r\n \r\n for (const [name, content] of Object.entries(metaTags)) {\r\n if (content) {\r\n let meta = document.querySelector(`meta[name=\"${name}\"]`);\r\n if (!meta) {\r\n meta = document.createElement('meta');\r\n meta.setAttribute('name', name);\r\n document.head.appendChild(meta);\r\n }\r\n meta.setAttribute('content', content);\r\n }\r\n }\r\n \r\n if (metadata.openGraph) {\r\n const og = metadata.openGraph;\r\n const ogTags: Record<string, string> = {\r\n 'og:title': og.title,\r\n 'og:description': og.description,\r\n 'og:type': og.type,\r\n 'og:url': og.url,\r\n 'og:image': og.image,\r\n };\r\n \r\n for (const [property, content] of Object.entries(ogTags)) {\r\n if (content) {\r\n let meta = document.querySelector(`meta[property=\"${property}\"]`);\r\n if (!meta) {\r\n meta = document.createElement('meta');\r\n meta.setAttribute('property', property);\r\n document.head.appendChild(meta);\r\n }\r\n meta.setAttribute('content', content);\r\n }\r\n }\r\n }\r\n}\r\n","/**\r\n * Query String Parsing\r\n */\r\nexport function parseQueryString(search: string): Record<string, string | string[]> {\r\n const params = new URLSearchParams(search);\r\n const result: Record<string, string | string[]> = {};\r\n \r\n params.forEach((value, key) => {\r\n if (result[key]) {\r\n if (Array.isArray(result[key])) {\r\n (result[key] as string[]).push(value);\r\n } else {\r\n result[key] = [result[key] as string, value];\r\n }\r\n } else {\r\n result[key] = value;\r\n }\r\n });\r\n \r\n return result;\r\n}\r\n","import React, { useEffect, useContext } from 'react';\r\nimport { HeadContext, type TitleProps, type MetaProps, type HeadLinkProps } from './HeadProvider.js';\r\n\r\n/**\r\n * Head component - client-side document head management\r\n */\r\nexport function Head({ children }: { children: React.ReactNode }) {\r\n const context = useContext(HeadContext);\r\n\r\n useEffect(() => {\r\n React.Children.forEach(children, (child) => {\r\n if (!React.isValidElement(child)) return;\r\n\r\n const { type, props } = child as React.ReactElement<any>;\r\n\r\n if (type === 'title') {\r\n const titleProps = props as TitleProps;\r\n if (typeof titleProps.children === 'string') {\r\n document.title = titleProps.children;\r\n context?.update({ title: titleProps.children });\r\n }\r\n }\r\n\r\n if (type === 'meta') {\r\n const metaProps = props as MetaProps;\r\n const key = metaProps.name || metaProps.property || metaProps.httpEquiv;\r\n if (key) {\r\n let meta = document.querySelector(`meta[name=\"${key}\"], meta[property=\"${key}\"]`);\r\n if (!meta) {\r\n meta = document.createElement('meta');\r\n if (metaProps.name) meta.setAttribute('name', metaProps.name);\r\n if (metaProps.property) meta.setAttribute('property', metaProps.property);\r\n document.head.appendChild(meta);\r\n }\r\n meta.setAttribute('content', metaProps.content);\r\n }\r\n }\r\n\r\n if (type === 'link') {\r\n const linkProps = props as HeadLinkProps;\r\n const key = linkProps.href;\r\n let link = document.querySelector(`link[href=\"${key}\"]`);\r\n if (!link) {\r\n link = document.createElement('link');\r\n link.setAttribute('rel', linkProps.rel);\r\n link.setAttribute('href', linkProps.href);\r\n if (linkProps.as) link.setAttribute('as', linkProps.as);\r\n document.head.appendChild(link);\r\n }\r\n }\r\n });\r\n\r\n return () => {\r\n // Cleanup could go here if needed\r\n };\r\n }, [children, context]);\r\n\r\n return null;\r\n}\r\n","import React, { createContext, useState } from 'react';\r\n\r\nexport interface MetaProps {\r\n name?: string;\r\n property?: string;\r\n httpEquiv?: string;\r\n content: string;\r\n}\r\n\r\nexport interface HeadLinkProps {\r\n rel: string;\r\n href: string;\r\n as?: string;\r\n}\r\n\r\nexport interface TitleProps {\r\n children: string;\r\n}\r\n\r\nexport interface HeadState {\r\n title?: string;\r\n metas: Map<string, MetaProps>;\r\n links: Map<string, HeadLinkProps>;\r\n}\r\n\r\nexport const HeadContext = createContext<{\r\n state: HeadState;\r\n update: (updates: Partial<HeadState>) => void;\r\n} | null>(null);\r\n\r\n/**\r\n * Provider for Head state management\r\n */\r\nexport function HeadProvider({ children }: { children: React.ReactNode }) {\r\n const [state, setState] = useState<HeadState>({\r\n metas: new Map(),\r\n links: new Map(),\r\n });\r\n\r\n const update = (updates: Partial<HeadState>) => {\r\n setState(prev => ({ ...prev, ...updates }));\r\n };\r\n\r\n return (\r\n <HeadContext.Provider value={{ state, update }}>\r\n {children}\r\n </HeadContext.Provider>\r\n );\r\n}\r\n","import React from 'react';\r\nimport { type TitleProps, type MetaProps, type HeadLinkProps } from './HeadProvider.js';\r\n\r\n/**\r\n * For SSR/SSG - extract head elements to string\r\n */\r\nexport function renderHeadToString(children: React.ReactNode): { title: string; metas: string } {\r\n let title = 'Olova App';\r\n let metas = '';\r\n\r\n React.Children.forEach(children, (child) => {\r\n if (!React.isValidElement(child)) return;\r\n\r\n const { type, props } = child as React.ReactElement<any>;\r\n\r\n if (type === 'title') {\r\n const titleProps = props as TitleProps;\r\n if (typeof titleProps.children === 'string') {\r\n title = titleProps.children;\r\n }\r\n }\r\n\r\n if (type === 'meta') {\r\n const metaProps = props as MetaProps;\r\n const attrs = Object.entries(metaProps)\r\n .map(([k, v]) => `${k}=\"${v}\"`)\r\n .join(' ');\r\n metas += ` <meta ${attrs} />\\n`;\r\n }\r\n\r\n if (type === 'link') {\r\n const linkProps = props as HeadLinkProps;\r\n const attrs = Object.entries(linkProps)\r\n .map(([k, v]) => `${k}=\"${v}\"`)\r\n .join(' ');\r\n metas += ` <link ${attrs} />\\n`;\r\n }\r\n });\r\n\r\n return { title, metas };\r\n}\r\n","import React, { createContext } from 'react';\r\n\r\nexport const PageDataContext = createContext<any>(null);\r\n\r\n/**\r\n * Provider for page data\r\n */\r\nexport function PageDataProvider({ \r\n children, \r\n data \r\n}: { \r\n children: React.ReactNode; \r\n data: any;\r\n}) {\r\n return (\r\n <PageDataContext.Provider value={data}>\r\n {children}\r\n </PageDataContext.Provider>\r\n );\r\n}\r\n","import { useState, useEffect, useContext } from 'react';\r\nimport { PageDataContext } from './provider.js';\r\n\r\n/**\r\n * Hook to access page data (like getStaticProps props)\r\n */\r\nexport function usePageData<T = any>(): T | null {\r\n const context = useContext(PageDataContext);\r\n const [data, setData] = useState<T | null>(context);\r\n\r\n useEffect(() => {\r\n // Check for hydrated data from SSG\r\n // @ts-ignore\r\n if (typeof window !== 'undefined' && window.__OLOVA_PAGE_DATA__) {\r\n // @ts-ignore\r\n setData(window.__OLOVA_PAGE_DATA__);\r\n }\r\n }, []);\r\n\r\n return data;\r\n}\r\n","import type { FlightPayload, FlightChunk } from './types.js';\r\n\r\n/**\r\n * Safely stringify JSON for embedding in script tags\r\n * Escapes <, >, /, \\u2028, and \\u2029 to prevent XSS and syntax errors\r\n */\r\nexport function safeStringify(data: unknown): string {\r\n return JSON.stringify(data).replace(/[<>\\/\\u2028\\u2029]/g, (char) => {\r\n switch (char) {\r\n case '<': return '\\\\u003c';\r\n case '>': return '\\\\u003e';\r\n case '/': return '\\\\u002f';\r\n case '\\u2028': return '\\\\u2028';\r\n case '\\u2029': return '\\\\u2029';\r\n default: return char;\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Serialize props for transfer (remove functions, handle special types)\r\n */\r\nexport function serializeProps(props: Record<string, any>): Record<string, any> {\r\n const serialized: Record<string, any> = {};\r\n \r\n for (const [key, value] of Object.entries(props)) {\r\n if (key === 'children') continue;\r\n if (typeof value === 'function') continue;\r\n \r\n if (value instanceof Date) {\r\n serialized[key] = { __type: 'Date', value: value.toISOString() };\r\n } else if (value instanceof Map) {\r\n serialized[key] = { __type: 'Map', value: Array.from(value.entries()) };\r\n } else if (value instanceof Set) {\r\n serialized[key] = { __type: 'Set', value: Array.from(value) };\r\n } else if (typeof value === 'object' && value !== null) {\r\n serialized[key] = serializeProps(value);\r\n } else {\r\n serialized[key] = value;\r\n }\r\n }\r\n \r\n return serialized;\r\n}\r\n\r\n/**\r\n * Deserialize props from Flight format\r\n */\r\nexport function deserializeProps(props: Record<string, any>): Record<string, any> {\r\n const result: Record<string, any> = {};\r\n \r\n for (const [key, value] of Object.entries(props)) {\r\n if (value && typeof value === 'object') {\r\n if (value.__type === 'Date') {\r\n result[key] = new Date(value.value);\r\n } else if (value.__type === 'Map') {\r\n result[key] = new Map(value.value);\r\n } else if (value.__type === 'Set') {\r\n result[key] = new Set(value.value);\r\n } else {\r\n result[key] = deserializeProps(value);\r\n }\r\n } else {\r\n result[key] = value;\r\n }\r\n }\r\n \r\n return result;\r\n}\r\n\r\n/**\r\n * Serialize Flight payload to string\r\n */\r\nexport function serializeFlightPayload(payload: FlightPayload): string {\r\n return JSON.stringify(payload);\r\n}\r\n\r\n/**\r\n * Generate script tag for embedding Flight payload\r\n */\r\nexport function generateFlightScript(payload: FlightPayload): string {\r\n const serialized = serializeFlightPayload(payload);\r\n const escaped = serialized\r\n .replace(/</g, '\\\\u003c')\r\n .replace(/>/g, '\\\\u003e')\r\n .replace(/&/g, '\\\\u0026');\r\n \r\n return `<script>self.__FLIGHT__=${escaped}</script>`;\r\n}\r\n\r\n/**\r\n * Generate streaming chunk script\r\n */\r\nexport function generateChunkScript(chunk: FlightChunk): string {\r\n const serialized = JSON.stringify(chunk)\r\n .replace(/</g, '\\\\u003c')\r\n .replace(/>/g, '\\\\u003e');\r\n \r\n return `<script>self.__FLIGHT_CHUNK__(${serialized})</script>`;\r\n}\r\n\r\n/**\r\n * Parse Flight payload from window\r\n */\r\nexport function parseFlightPayload(): FlightPayload | null {\r\n if (typeof window === 'undefined') return null;\r\n const flight = (window as any).__FLIGHT__;\r\n return (flight as FlightPayload) || null;\r\n}\r\n\r\n/**\r\n * Get component data from Flight payload\r\n */\r\nexport function getFlightData<T = any>(key: string): T | null {\r\n const payload = parseFlightPayload();\r\n if (!payload) return null;\r\n return payload.data[key] ?? null;\r\n}\r\n","/**\r\n * Olova Hydration Module\r\n * Implements \"Flight\" format for efficient client hydration\r\n */\r\n\r\nexport * from './types.js';\r\nexport * from './payload.js';\r\nexport * from './serialization.js';\r\nexport * from './scheduler.js';\r\nexport * from './context.js';\r\nexport * from './seo.js';\r\nexport * from './generation.js';\r\nexport * from './client-utils.js';\r\n\r\n// Global singleton instance for the client\r\nlet clientScheduler: any = null;\r\n\r\n/**\r\n * Get the global hydration scheduler instance\r\n */\r\nexport function getHydrationScheduler() {\r\n if (typeof window === 'undefined') return null;\r\n if (!clientScheduler) {\r\n const { HydrationScheduler } = require('./scheduler.js');\r\n clientScheduler = new HydrationScheduler();\r\n }\r\n return clientScheduler;\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA,IAKa;AALb;AAAA;AAAA;AAKO,IAAM,qBAAN,MAAyB;AAAA,MAK9B,cAAc;AAJd,aAAQ,QAAmE,CAAC;AAC5E,aAAQ,eAAe;AACvB,aAAQ,QAAwB;AAG9B,YAAI,OAAO,WAAW,aAAa;AACjC,UAAC,OAAe,mBAAmB,KAAK,aAAa,KAAK,IAAI;AAAA,QAChE;AAAA,MACF;AAAA,MAEA,WAA2B;AACzB,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,SAAS,IAAY,UAAqC,MAAwB;AAChF,cAAM,gBAAgB;AAAA,UACpB,UAAU;AAAA,UACV,MAAM;AAAA,UACN,KAAK;AAAA,UACL,MAAM;AAAA,QACR,EAAE,QAAQ;AAEV,aAAK,MAAM,KAAK,EAAE,IAAI,UAAU,eAAe,KAAK,CAAC;AACrD,aAAK,MAAM,KAAK,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ;AAEjD,YAAI,CAAC,KAAK,cAAc;AACtB,eAAK,aAAa;AAAA,QACpB;AAAA,MACF;AAAA,MAEA,MAAc,eAA8B;AAC1C,aAAK,eAAe;AACpB,aAAK,QAAQ;AAEb,eAAO,KAAK,MAAM,SAAS,GAAG;AAC5B,gBAAM,OAAO,KAAK,MAAM,MAAM;AAE9B,cAAI;AACF,gBAAI,KAAK,YAAY,KAAK,yBAAyB,QAAQ;AACzD,oBAAM,IAAI,QAAc,aAAW;AACjC,gBAAC,OAAe,oBAAoB,MAAM;AACxC,uBAAK,KAAK;AACV,0BAAQ;AAAA,gBACV,CAAC;AAAA,cACH,CAAC;AAAA,YACH,OAAO;AACL,oBAAM,QAAQ,QAAQ,EAAE,KAAK,KAAK,IAAI;AAAA,YACxC;AAAA,UACF,SAAS,OAAO;AACd,oBAAQ,MAAM,gCAAgC,KAAK,EAAE,KAAK,KAAK;AAAA,UACjE;AAEA,gBAAM,IAAI,QAAQ,OAAK,WAAW,GAAG,CAAC,CAAC;AAAA,QACzC;AAEA,aAAK,eAAe;AACpB,aAAK,QAAQ;AAEb,YAAI,OAAO,WAAW,aAAa;AACjC,iBAAO,cAAc,IAAI,YAAY,0BAA0B,CAAC;AAAA,QAClE;AAAA,MACF;AAAA,MAEQ,aAAa,OAA0B;AAC7C,aAAK,QAAQ;AAEb,cAAM,cAAc,SAAS,cAAc,oBAAoB,MAAM,EAAE,IAAI;AAC3E,YAAI,aAAa;AACf,gBAAM,OAAO,SAAS,cAAc,KAAK;AACzC,eAAK,YAAY,MAAM;AAEvB,iBAAO,KAAK,YAAY;AACtB,wBAAY,YAAY,aAAa,KAAK,YAAY,WAAW;AAAA,UACnE;AACA,sBAAY,OAAO;AAEnB,cAAI,MAAM,MAAM;AACd,iBAAK,SAAS,MAAM,IAAI,QAAQ,MAAM;AACpC,mBAAK,YAAY,MAAM,IAAI,MAAM,IAAI;AAAA,YACvC,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,MAEQ,YAAY,IAAY,MAAiB;AAC/C,cAAM,UAAU,SAAS,cAAc,oBAAoB,EAAE,IAAI;AACjE,YAAI,SAAS;AACX,kBAAQ,aAAa,iBAAiB,MAAM;AAC5C,UAAC,QAAgB,kBAAkB;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC5FA,SAAS,qBAAqB;AASvB,IAAM,YAAY,oBAAI,IAAsC;AAC5D,IAAM,mBAAmB,oBAAI,IAA2B;AACxD,IAAM,gBAAgB,oBAAI,IAAiB;AAmB3C,IAAM,iBAAiB;AAG9B,IAAM,gBAAgB,oBAAI,IAA8C;AAEjE,IAAM,eAA6B;AAAA,EACxC,GAAG,OAAO,SAAS;AACjB,QAAI,CAAC,cAAc,IAAI,KAAK,GAAG;AAC7B,oBAAc,IAAI,OAAO,oBAAI,IAAI,CAAC;AAAA,IACpC;AACA,kBAAc,IAAI,KAAK,EAAG,IAAI,OAAO;AAAA,EACvC;AAAA,EACA,IAAI,OAAO,SAAS;AAClB,kBAAc,IAAI,KAAK,GAAG,OAAO,OAAO;AAAA,EAC1C;AAAA,EACA,KAAK,UAAU,MAAM;AACnB,kBAAc,IAAI,KAAK,GAAG,QAAQ,aAAW,QAAQ,GAAG,IAAI,CAAC;AAAA,EAC/D;AACF;AAGO,IAAM,gBAAgB,cAAiC;AAAA,EAC5D,UAAU;AAAA,EACV,QAAQ,CAAC;AAAA,EACT,OAAO,CAAC;AAAA,EACR,QAAQ;AAAA,EACR,MAAM,YAAY;AAAA,EAClB,SAAS,YAAY;AAAA,EACrB,MAAM,MAAM;AAAA,EAAC;AAAA,EACb,SAAS,MAAM;AAAA,EAAC;AAAA,EAChB,UAAU,YAAY;AAAA,EAAC;AAAA,EACvB,QAAQ,MAAM;AAAA,EAAC;AAAA,EACf,SAAS;AAAA,EACT,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,QAAQ;AACV,CAAC;AAGM,IAAM,gBAAgB,cAAiD,CAAC,CAAC;;;AC/DzE,SAAS,SAAS,IAAY,UAA2B,CAAC,GAAqB;AACpF,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,EAAE,SAAS,KAAK,IAAI;AAE1B,iBAAa,KAAK,oBAAoB,IAAI,EAAE,SAAS,QAAQ,QAAQ,CAAC;AACtE,iBAAa,KAAK,uBAAuB,EAAE;AAE3C,WAAO,QAAQ,UAAU,EAAE,OAAO,GAAG,IAAI,EAAE;AAC3C,WAAO,cAAc,IAAI,YAAY,gBAAgB;AAAA,MACnD,QAAQ,EAAE,MAAM,IAAI,OAAO;AAAA,IAC7B,CAAC,CAAC;AAEF,QAAI,QAAQ;AACV,aAAO,SAAS,GAAG,CAAC;AAAA,IACtB;AAEA,iBAAa,KAAK,uBAAuB,IAAI,EAAE,SAAS,QAAQ,QAAQ,CAAC;AACzE,YAAQ,IAAI;AAAA,EACd,CAAC;AACH;AAKO,SAAS,QAAQ,IAAY,UAA2B,CAAC,GAAqB;AACnF,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,EAAE,SAAS,MAAM,IAAI;AAE3B,iBAAa,KAAK,oBAAoB,IAAI,EAAE,SAAS,QAAQ,QAAQ,CAAC;AACtE,iBAAa,KAAK,uBAAuB,EAAE;AAE3C,WAAO,QAAQ,aAAa,EAAE,OAAO,GAAG,IAAI,EAAE;AAC9C,WAAO,cAAc,IAAI,YAAY,gBAAgB;AAAA,MACnD,QAAQ,EAAE,MAAM,IAAI,QAAQ,SAAS,KAAK;AAAA,IAC5C,CAAC,CAAC;AAEF,QAAI,QAAQ;AACV,aAAO,SAAS,GAAG,CAAC;AAAA,IACtB;AAEA,iBAAa,KAAK,uBAAuB,IAAI,EAAE,SAAS,QAAQ,QAAQ,CAAC;AACzE,YAAQ,IAAI;AAAA,EACd,CAAC;AACH;;;AC5CO,SAAS,WAAW,WAAmB,aAAkC;AAC9E,MAAI,cAAc,aAAa;AAC7B,WAAO,EAAE,SAAS,MAAM,QAAQ,CAAC,GAAG,OAAO,IAAI;AAAA,EACjD;AAEA,QAAM,gBAAgB,UAAU,MAAM,GAAG,EAAE,OAAO,OAAO;AACzD,QAAM,eAAe,YAAY,MAAM,GAAG,EAAE,OAAO,OAAO;AAE1D,QAAM,SAA4C,CAAC;AACnD,MAAI,QAAQ;AAEZ,WAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,UAAM,eAAe,cAAc,CAAC;AACpC,UAAM,cAAc,aAAa,CAAC;AAElC,QAAI,cAAc,WAAW,GAAG,KAAK,cAAc,SAAS,GAAG,GAAG;AAChE,YAAM,YAAY,aAAa,MAAM,GAAG,EAAE;AAC1C,YAAM,gBAAgB,aAAa,MAAM,CAAC;AAC1C,aAAO,SAAS,IAAI,cAAc,SAAS,IAAI,gBAAgB,CAAC;AAChE,eAAS;AACT,aAAO,EAAE,SAAS,MAAM,QAAQ,MAAM;AAAA,IACxC;AAEA,QAAI,cAAc,WAAW,GAAG,GAAG;AACjC,YAAM,YAAY,aAAa,MAAM,CAAC;AACtC,YAAM,gBAAgB,aAAa,MAAM,CAAC;AAC1C,UAAI,cAAc,SAAS,GAAG;AAC5B,eAAO,SAAS,IAAI;AACpB,iBAAS;AACT,eAAO,EAAE,SAAS,MAAM,QAAQ,MAAM;AAAA,MACxC;AACA,aAAO,EAAE,SAAS,OAAO,QAAQ,CAAC,GAAG,OAAO,EAAE;AAAA,IAChD;AAEA,QAAI,cAAc,WAAW,GAAG,KAAM,cAAc,WAAW,GAAG,KAAK,cAAc,SAAS,GAAG,GAAI;AACnG,UAAI,CAAC,YAAa,QAAO,EAAE,SAAS,OAAO,QAAQ,CAAC,GAAG,OAAO,EAAE;AAChE,YAAM,YAAY,aAAa,WAAW,GAAG,IACzC,aAAa,MAAM,CAAC,IACpB,aAAa,MAAM,GAAG,EAAE;AAC5B,aAAO,SAAS,IAAI;AACpB,eAAS;AACT;AAAA,IACF;AAEA,QAAI,iBAAiB,YAAa,QAAO,EAAE,SAAS,OAAO,QAAQ,CAAC,GAAG,OAAO,EAAE;AAChF,aAAS;AAAA,EACX;AAEA,MAAI,cAAc,WAAW,aAAa,OAAQ,QAAO,EAAE,SAAS,OAAO,QAAQ,CAAC,GAAG,OAAO,EAAE;AAChG,SAAO,EAAE,SAAS,MAAM,QAAQ,MAAM;AACxC;AAKO,SAAS,UAAU,QAAiB,MAA+B;AACxE,QAAM,iBAAiB,KAAK,SAAS,GAAG,KAAK,SAAS,MAAM,KAAK,MAAM,GAAG,EAAE,IAAI;AAChF,QAAM,aAAa,OAAO,KAAK,OAAK,EAAE,SAAS,cAAc;AAC7D,MAAI,WAAY,QAAO,EAAE,OAAO,YAAY,QAAQ,CAAC,EAAE;AAEvD,MAAI,YAA+F;AACnG,aAAW,SAAS,QAAQ;AAC1B,UAAM,EAAE,SAAS,QAAQ,MAAM,IAAI,WAAW,MAAM,MAAM,cAAc;AACxE,QAAI,YAAY,CAAC,aAAa,QAAQ,UAAU,QAAQ;AACtD,kBAAY,EAAE,OAAO,QAAQ,MAAM;AAAA,IACrC;AAAA,EACF;AACA,SAAO,YAAY,EAAE,OAAO,UAAU,OAAO,QAAQ,UAAU,OAAO,IAAI,EAAE,OAAO,MAAM,QAAQ,CAAC,EAAE;AACtG;;;ACnEA,eAAsB,cAAc,QAAiB,MAA6B;AAChF,QAAM,iBAAiB,KAAK,SAAS,GAAG,KAAK,SAAS,MAAM,KAAK,MAAM,GAAG,EAAE,IAAI;AAEhF,MAAI,iBAAiB,IAAI,cAAc,GAAG;AACxC,WAAO,iBAAiB,IAAI,cAAc;AAAA,EAC5C;AAEA,QAAM,EAAE,MAAM,IAAI,UAAU,QAAQ,cAAc;AAClD,MAAI,CAAC,MAAO;AAEZ,QAAM,WAAW,MAAM;AACvB,MAAI,UAAU,IAAI,QAAQ,EAAG;AAE7B,QAAM,UAAU,MAAM,UAAU,EAAE,KAAK,YAAU;AAC/C,cAAU,IAAI,UAAU,OAAO,OAAO;AACtC,QAAK,OAAe,UAAU;AAC5B,oBAAc,IAAI,UAAW,OAAe,QAAQ;AAAA,IACtD;AAAA,EACF,CAAC,EAAE,MAAM,MAAM;AAAA,EAAC,CAAC;AAEjB,mBAAiB,IAAI,gBAAgB,OAAO;AAC5C,SAAO;AACT;;;AC5BA,SAAS,UAAU,WAAW,kBAAkB;AAOzC,SAAS,YAA+B;AAC7C,SAAO,WAAW,aAAa;AACjC;AAKO,SAAS,YAAgG;AAC9G,SAAO,WAAW,aAAa;AACjC;AAKO,SAAS,cAAsB;AACpC,QAAM,EAAE,SAAS,IAAI,WAAW,aAAa;AAC7C,SAAO;AACT;AAKO,SAAS,kBAAmC;AACjD,QAAM,CAAC,cAAc,eAAe,IAAI;AAAA,IAAS,MAC/C,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAAA,EAC5C;AAEA,YAAU,MAAM;AACd,UAAM,iBAAiB,MAAM;AAC3B,sBAAgB,IAAI,gBAAgB,OAAO,SAAS,MAAM,CAAC;AAAA,IAC7D;AAEA,WAAO,iBAAiB,gBAAgB,cAAc;AACtD,WAAO,iBAAiB,YAAY,cAAc;AAElD,WAAO,MAAM;AACX,aAAO,oBAAoB,gBAAgB,cAAc;AACzD,aAAO,oBAAoB,YAAY,cAAc;AAAA,IACvD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;;;ACjDA,SAAgB,aAAAA,YAAW,aAAa,cAAc;AAqElD;AAhEG,SAAS,KAAK;AAAA,EACnB;AAAA,EACA;AAAA,EACA,UAAU,iBAAiB;AAAA,EAC3B,SAAS;AAAA,EACT,SAAS,gBAAgB;AAAA,EACzB,UAAU;AAAA,EACV,GAAG;AACL,GAAc;AACZ,QAAM,gBAAgB,OAAO,KAAK;AAClC,QAAM,UAAU,OAA0B,IAAI;AAE9C,QAAM,YAAY,YAAY,MAAe;AAC3C,WAAQ,OAAe,oBAAoB,CAAC;AAAA,EAC9C,GAAG,CAAC,CAAC;AAEL,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,kBAAkB,cAAc,WAAW,CAAC,QAAQ,QAAS;AAElE,UAAM,WAAW,IAAI;AAAA,MACnB,CAAC,YAAY;AACX,YAAI,QAAQ,CAAC,EAAE,kBAAkB,CAAC,cAAc,SAAS;AACvD,wBAAc,UAAU;AACxB,wBAAc,UAAU,GAAG,IAAI;AAAA,QACjC;AAAA,MACF;AAAA,MACA,EAAE,YAAY,QAAQ;AAAA,IACxB;AAEA,aAAS,QAAQ,QAAQ,OAAO;AAEhC,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,MAAM,gBAAgB,SAAS,CAAC;AAEpC,QAAM,mBAAmB,YAAY,MAAM;AACzC,QAAI,CAAC,cAAc,SAAS;AAC1B,oBAAc,UAAU;AACxB,oBAAc,UAAU,GAAG,IAAI;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,MAAM,SAAS,CAAC;AAEpB,QAAM,cAAc,YAAY,CAAC,MAA2C;AAC1E,QACE,EAAE,WACF,EAAE,WACF,EAAE,YACF,EAAE,WAAW,KACb,MAAM,WAAW,YACjB,KAAK,WAAW,MAAM,KACtB,KAAK,WAAW,IAAI,GACpB;AACA;AAAA,IACF;AAEA,MAAE,eAAe;AAEjB,QAAI,eAAe;AACjB,cAAQ,MAAM,EAAE,QAAQ,QAAQ,CAAC;AAAA,IACnC,OAAO;AACL,eAAS,MAAM,EAAE,QAAQ,QAAQ,CAAC;AAAA,IACpC;AAAA,EACF,GAAG,CAAC,MAAM,QAAQ,SAAS,eAAe,MAAM,MAAM,CAAC;AAEvD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,SAAS;AAAA,MACT,cAAc;AAAA,MACb,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;ACpFA,OAAOC,UAAS,UAAU,SAAS,aAAAC,YAAW,UAAAC,eAAc;;;ACKxD,SACE,OAAAC,MADF;AAFG,SAAS,WAAW;AACzB,SACE,qBAAC,SAAI,OAAO,EAAE,SAAS,aAAa,WAAW,SAAS,GACtD;AAAA,oBAAAA,KAAC,QAAG,OAAO,EAAE,UAAU,QAAQ,QAAQ,EAAE,GAAG,iBAAG;AAAA,IAC/C,gBAAAA,KAAC,OAAE,OAAO,EAAE,UAAU,WAAW,OAAO,OAAO,GAAG,2CAA6B;AAAA,IAC/E,gBAAAA,KAAC,QAAK,MAAK,KAAI,OAAO,EAAE,OAAO,UAAU,GAAG,0BAAY;AAAA,KAC1D;AAEJ;AAEO,SAAS,YAAY;AAC1B,SACE,qBAAC,SAAI,OAAO,EAAE,SAAS,aAAa,WAAW,SAAS,GACtD;AAAA,oBAAAA,KAAC,QAAG,OAAO,EAAE,UAAU,QAAQ,QAAQ,EAAE,GAAG,kCAAoB;AAAA,IAChE,gBAAAA,KAAC,OAAE,OAAO,EAAE,UAAU,QAAQ,OAAO,OAAO,GAAG,uCAAyB;AAAA,IACxE,gBAAAA,KAAC,YAAO,SAAS,MAAM,OAAO,SAAS,OAAO,GAAG,OAAO;AAAA,MACtD,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,QAAQ;AAAA,IACV,GAAG,uBAEH;AAAA,KACF;AAEJ;AAEO,SAAS,mBAAmB;AACjC,SACE,gBAAAA,KAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,WAAW,SAAS,GACjD,0BAAAA,KAAC,SAAI,OAAO;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,cAAc;AAAA,IACd,WAAW;AAAA,IACX,QAAQ;AAAA,EACV,GAAG,GACL;AAEJ;AAEO,SAAS,qBAAqB;AACnC,SACE,gBAAAA,KAAC,SAAI,OAAO;AAAA,IACV,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,QAAQ;AAAA,EACV,GAAG;AAEP;;;AC1DO,SAAS,eAAe;AAC7B,MAAI,OAAO,aAAa,aAAa;AACnC,UAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,UAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWpB,aAAS,KAAK,YAAY,KAAK;AAAA,EACjC;AACF;;;ACnBA,SAAS,YAAAC,WAAU,aAAAC,YAAW,UAAAC,SAAQ,uBAAuB;;;ACGtD,SAAS,cAAc,UAAe;AAC3C,MAAI,CAAC,YAAY,OAAO,aAAa,YAAa;AAElD,MAAI,SAAS,OAAO;AAClB,aAAS,QAAQ,SAAS;AAAA,EAC5B;AAEA,QAAM,WAAmC;AAAA,IACvC,aAAa,SAAS;AAAA,IACtB,UAAU,SAAS;AAAA,EACrB;AAEA,aAAW,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACtD,QAAI,SAAS;AACX,UAAI,OAAO,SAAS,cAAc,cAAc,IAAI,IAAI;AACxD,UAAI,CAAC,MAAM;AACT,eAAO,SAAS,cAAc,MAAM;AACpC,aAAK,aAAa,QAAQ,IAAI;AAC9B,iBAAS,KAAK,YAAY,IAAI;AAAA,MAChC;AACA,WAAK,aAAa,WAAW,OAAO;AAAA,IACtC;AAAA,EACF;AAEA,MAAI,SAAS,WAAW;AACtB,UAAM,KAAK,SAAS;AACpB,UAAM,SAAiC;AAAA,MACrC,YAAY,GAAG;AAAA,MACf,kBAAkB,GAAG;AAAA,MACrB,WAAW,GAAG;AAAA,MACd,UAAU,GAAG;AAAA,MACb,YAAY,GAAG;AAAA,IACjB;AAEA,eAAW,CAAC,UAAU,OAAO,KAAK,OAAO,QAAQ,MAAM,GAAG;AACxD,UAAI,SAAS;AACX,YAAI,OAAO,SAAS,cAAc,kBAAkB,QAAQ,IAAI;AAChE,YAAI,CAAC,MAAM;AACT,iBAAO,SAAS,cAAc,MAAM;AACpC,eAAK,aAAa,YAAY,QAAQ;AACtC,mBAAS,KAAK,YAAY,IAAI;AAAA,QAChC;AACA,aAAK,aAAa,WAAW,OAAO;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACF;;;AC9CO,SAAS,iBAAiB,QAAmD;AAClF,QAAM,SAAS,IAAI,gBAAgB,MAAM;AACzC,QAAM,SAA4C,CAAC;AAEnD,SAAO,QAAQ,CAAC,OAAO,QAAQ;AAC7B,QAAI,OAAO,GAAG,GAAG;AACf,UAAI,MAAM,QAAQ,OAAO,GAAG,CAAC,GAAG;AAC9B,QAAC,OAAO,GAAG,EAAe,KAAK,KAAK;AAAA,MACtC,OAAO;AACL,eAAO,GAAG,IAAI,CAAC,OAAO,GAAG,GAAa,KAAK;AAAA,MAC7C;AAAA,IACF,OAAO;AACL,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;AFEO,SAAS,kBAAkB,QAAiB;AACjD,QAAM,CAAC,aAAa,cAAc,IAAIC,UAAS,MAAM;AACnD,QAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,UAAM,OAAO,OAAO,SAAS;AAC7B,WAAO,KAAK,SAAS,GAAG,KAAK,SAAS,MAAM,KAAK,MAAM,GAAG,EAAE,IAAI;AAAA,EAClE,CAAC;AAED,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAS,MAAM;AACvC,QAAI,OAAO,WAAW,YAAa,QAAO,CAAC;AAC3C,WAAO,iBAAiB,OAAO,SAAS,MAAM;AAAA,EAChD,CAAC;AAED,QAAM,CAAC,YAAY,aAAa,IAAIA,UAA0B,EAAE,MAAM,MAAM,SAAS,CAAC,EAAE,CAAC;AACzF,QAAM,CAAC,QAAQ,SAAS,IAAIA,UAA4C,CAAC,CAAC;AAC1E,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,KAAK;AACtD,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,KAAK;AAC5C,QAAM,cAAcC,QAAO,IAAI;AAE/B,EAAAC,WAAU,MAAM;AACd,UAAM,iBAAiB,CAAC,MAAa;AACnC,YAAM,cAAc;AACpB,YAAM,UAAU,YAAY,QAAQ,QAAQ,OAAO,SAAS;AAC5D,YAAM,iBAAiB,QAAQ,SAAS,GAAG,KAAK,YAAY,MAAM,QAAQ,MAAM,GAAG,EAAE,IAAI;AACzF,kBAAY,UAAU;AACtB,sBAAgB,MAAM;AACpB,uBAAe,cAAc;AAC7B,iBAAS,iBAAiB,OAAO,SAAS,MAAM,CAAC;AAAA,MACnD,CAAC;AAAA,IACH;AAEA,UAAM,iBAAiB,MAAM;AAC3B,YAAM,OAAO,OAAO,SAAS;AAC7B,YAAM,iBAAiB,KAAK,SAAS,GAAG,KAAK,SAAS,MAAM,KAAK,MAAM,GAAG,EAAE,IAAI;AAChF,kBAAY,UAAU;AACtB,sBAAgB,MAAM;AACpB,uBAAe,cAAc;AAC7B,iBAAS,iBAAiB,OAAO,SAAS,MAAM,CAAC;AAAA,MACnD,CAAC;AAAA,IACH;AAEA,WAAO,iBAAiB,gBAAgB,cAAc;AACtD,WAAO,iBAAiB,YAAY,cAAc;AAClD,WAAO,MAAM;AACX,aAAO,oBAAoB,gBAAgB,cAAc;AACzD,aAAO,oBAAoB,YAAY,cAAc;AAAA,IACvD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,EAAAA,WAAU,MAAM;AACd,UAAM,EAAE,OAAO,QAAQ,gBAAgB,IAAI,UAAU,QAAQ,WAAW;AAExE,UAAM,gBAAgB,OAAO,WAAkE;AAC7F,UAAI,CAAC,OAAQ,QAAO;AACpB,YAAM,SAAS,MAAM,OAAO;AAC5B,aAAO,OAAO;AAAA,IAChB;AAEA,QAAI,CAAC,OAAO;AAEV,YAAM,oBAAoB,YAAY;AACpC,cAAM,WAAW,YAAY,MAAM,GAAG,EAAE,OAAO,OAAO;AACtD,iBAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7C,gBAAM,cAAc,MAAM,SAAS,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AACvD,gBAAM,EAAE,OAAO,YAAY,IAAI,UAAU,QAAQ,WAAW;AAC5D,cAAI,aAAa;AACf,kBAAM,UAAU,MAAM,QAAQ,KAAK,YAAY,WAAW,CAAC,GAAG,IAAI,OAAK,cAAc,CAAC,CAAC,CAAC;AACxF,mBAAO,QAAQ,OAAO,CAAC,MAAqC,CAAC,CAAC,CAAC;AAAA,UACjE;AAAA,QACF;AACA,eAAO,CAAC;AAAA,MACV;AAEA,wBAAkB,EAAE,KAAK,aAAW;AAClC,sBAAc,WAAS,EAAE,GAAG,MAAM,MAAM,UAAU,QAAQ,EAAE;AAC5D,kBAAU,CAAC,CAAC;AACZ,mBAAW,IAAI;AAAA,MACjB,CAAC;AACD;AAAA,IACF;AACA,cAAU,eAAe;AAEzB,QAAI,CAAC,YAAY,QAAS,iBAAgB,IAAI;AAE9C,UAAM,YAAY,YAAY;AAC5B,UAAI;AACF,cAAM,CAAC,MAAM,SAAS,SAAS,OAAOC,WAAU,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAAA,UAC5E,cAAc,MAAM,SAAS;AAAA,UAC7B,QAAQ,KAAK,MAAM,WAAW,CAAC,GAAG,IAAI,OAAK,cAAc,CAAC,CAAC,CAAC;AAAA,UAC5D,cAAc,MAAM,OAAO;AAAA,UAC3B,cAAc,MAAM,KAAK;AAAA,UACzB,cAAc,MAAM,QAAQ;AAAA,UAC5B,cAAc,MAAM,QAAQ;AAAA,QAC9B,CAAC;AAED,YAAI,MAAM,UAAU;AAClB,wBAAc,IAAI,MAAM,MAAM,MAAM,QAAQ;AAC5C,wBAAc,MAAM,QAAQ;AAAA,QAC9B;AAEA,wBAAgB,MAAM;AACpB,wBAAc;AAAA,YACZ,MAAM,QAAQ;AAAA,YACd,SAAS,QAAQ,OAAO,CAAC,MAAqC,CAAC,CAAC,CAAC;AAAA,YACjE;AAAA,YACA;AAAA,YACA,UAAAA;AAAA,YACA;AAAA,UACF,CAAC;AACD,0BAAgB,KAAK;AACrB,qBAAW,IAAI;AACf,sBAAY,UAAU;AAAA,QACxB,CAAC;AAAA,MACH,SAAS,KAAK;AACZ,gBAAQ,MAAM,iCAAiC,GAAG;AAClD,qBAAa,KAAK,oBAAoB,KAAK,WAAW;AACtD,sBAAc,EAAE,MAAM,WAAW,SAAS,CAAC,EAAE,CAAC;AAC9C,wBAAgB,KAAK;AACrB,mBAAW,IAAI;AAAA,MACjB;AAAA,IACF;AAEA,cAAU;AAAA,EACZ,GAAG,CAAC,aAAa,MAAM,CAAC;AAExB,SAAO,EAAE,aAAa,OAAO,YAAY,QAAQ,cAAc,SAAS,YAAY;AACtF;;;AH5Ha,gBAAAC,MAkEL,QAAAC,aAlEK;AAdb,aAAa;AAEb,IAAM,gBAAN,cAA4BC,OAAM,UAA0J;AAAA,EAC1L,YAAY,OAAY;AACtB,UAAM,KAAK;AAMb,iBAAQ,MAAM,KAAK,SAAS,EAAE,UAAU,OAAO,OAAO,KAAK,CAAC;AAL1D,SAAK,QAAQ,EAAE,UAAU,OAAO,OAAO,KAAK;AAAA,EAC9C;AAAA,EACA,OAAO,yBAAyB,OAAc;AAC5C,WAAO,EAAE,UAAU,MAAM,MAAM;AAAA,EACjC;AAAA,EAEA,SAAS;AACP,QAAI,KAAK,MAAM,YAAY,KAAK,MAAM,UAAU;AAC9C,YAAM,WAAW,KAAK,MAAM;AAC5B,aAAO,gBAAAF,KAAC,YAAS,OAAO,KAAK,MAAM,OAAQ,OAAO,KAAK,OAAO;AAAA,IAChE;AACA,WAAO,KAAK,MAAM;AAAA,EACpB;AACF;AAEO,SAAS,OAAO,EAAE,OAAO,GAAgB;AAC9C,QAAM,YAAYG,QAAO,MAAM;AAC/B,YAAU,UAAU;AAEpB,QAAM;AAAA,IACJ;AAAA,IAAa;AAAA,IAAO;AAAA,IAAY;AAAA,IAAQ;AAAA,IAAc;AAAA,EACxD,IAAI,kBAAkB,MAAM;AAE5B,EAAAC,WAAU,MAAM;AACd,UAAM,mBAAmB,MAAM;AAC7B,mBAAa,KAAK,mBAAmB,OAAO,SAAS,IAAI;AACzD,mBAAa,KAAK,sBAAsB,OAAO,SAAS,IAAI;AAAA,IAC9D;AACA,WAAO,iBAAiB,cAAc,gBAAgB;AACtD,WAAO,MAAM,OAAO,oBAAoB,cAAc,gBAAgB;AAAA,EACxE,GAAG,CAAC,CAAC;AAEL,QAAM,qBAAqB,QAA2B,OAAO;AAAA,IAC3D,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,QAAQ,OAAO,WAAW,cACtB,cAAc,OAAO,SAAS,SAAS,OAAO,SAAS,OACvD;AAAA,IACJ,MAAM;AAAA,IACN;AAAA,IACA,MAAM,MAAM,OAAO,WAAW,eAAe,OAAO,QAAQ,KAAK;AAAA,IACjE,SAAS,MAAM,OAAO,WAAW,eAAe,OAAO,QAAQ,QAAQ;AAAA,IACvE,UAAU,CAAC,QAAgB,cAAc,UAAU,SAAS,GAAG;AAAA,IAC/D,QAAQ,MAAM,OAAO,WAAW,eAAe,OAAO,SAAS,OAAO;AAAA,IACtE;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ,QAAQ;AAAA,EACV,IAAI,CAAC,aAAa,QAAQ,OAAO,SAAS,YAAY,CAAC;AAEvD,MAAI,CAAC,WAAW,KAAM,QAAO;AAE7B,QAAM,EAAE,MAAM,MAAM,SAAS,SAAS,SAAS,OAAO,UAAU,IAAI;AAGpE,MAAI,UACF,gBAAAJ,KAAC,iBAAc,UAAU,WACvB,0BAAAA,KAAC,QAAK,QAAgB,cAAc,OAAO,GAC7C;AAIF,WAAS,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;AAC5C,UAAM,SAAS,QAAQ,CAAC;AACxB,cACE,gBAAAA,KAAC,iBAAsB,UAAU,WAC/B,0BAAAA,KAAC,UAAO,UAAU,SAAS,QAAgB,cAAc,OAAO,KAD9C,CAEpB;AAAA,EAEJ;AAEA,SACE,gBAAAA,KAAC,cAAc,UAAd,EAAuB,OAAO,oBAC7B,0BAAAA,KAAC,cAAc,UAAd,EAAuB,OAAO,QAC7B,0BAAAC,MAAC,YAAS,UAAU,UAAU,gBAAAD,KAAC,WAAQ,IAAK,gBAAAA,KAAC,oBAAiB,GAC3D;AAAA;AAAA,IACA,gBAAgB,gBAAAA,KAAC,sBAAmB;AAAA,KACvC,GACF,GACF;AAEJ;;;AMhGA,OAAOK,UAAS,aAAAC,YAAW,cAAAC,mBAAkB;;;ACA7C,SAAgB,iBAAAC,gBAAe,YAAAC,iBAAgB;AA4C3C,gBAAAC,YAAA;AAnBG,IAAM,cAAcF,eAGjB,IAAI;AAKP,SAAS,aAAa,EAAE,SAAS,GAAkC;AACxE,QAAM,CAAC,OAAO,QAAQ,IAAIC,UAAoB;AAAA,IAC5C,OAAO,oBAAI,IAAI;AAAA,IACf,OAAO,oBAAI,IAAI;AAAA,EACjB,CAAC;AAED,QAAM,SAAS,CAAC,YAAgC;AAC9C,aAAS,WAAS,EAAE,GAAG,MAAM,GAAG,QAAQ,EAAE;AAAA,EAC5C;AAEA,SACE,gBAAAC,KAAC,YAAY,UAAZ,EAAqB,OAAO,EAAE,OAAO,OAAO,GAC1C,UACH;AAEJ;;;AD1CO,SAAS,KAAK,EAAE,SAAS,GAAkC;AAChE,QAAM,UAAUC,YAAW,WAAW;AAEtC,EAAAC,WAAU,MAAM;AACd,IAAAC,OAAM,SAAS,QAAQ,UAAU,CAAC,UAAU;AAC1C,UAAI,CAACA,OAAM,eAAe,KAAK,EAAG;AAElC,YAAM,EAAE,MAAM,MAAM,IAAI;AAExB,UAAI,SAAS,SAAS;AACpB,cAAM,aAAa;AACnB,YAAI,OAAO,WAAW,aAAa,UAAU;AAC3C,mBAAS,QAAQ,WAAW;AAC5B,mBAAS,OAAO,EAAE,OAAO,WAAW,SAAS,CAAC;AAAA,QAChD;AAAA,MACF;AAEA,UAAI,SAAS,QAAQ;AACnB,cAAM,YAAY;AAClB,cAAM,MAAM,UAAU,QAAQ,UAAU,YAAY,UAAU;AAC9D,YAAI,KAAK;AACP,cAAI,OAAO,SAAS,cAAc,cAAc,GAAG,sBAAsB,GAAG,IAAI;AAChF,cAAI,CAAC,MAAM;AACT,mBAAO,SAAS,cAAc,MAAM;AACpC,gBAAI,UAAU,KAAM,MAAK,aAAa,QAAQ,UAAU,IAAI;AAC5D,gBAAI,UAAU,SAAU,MAAK,aAAa,YAAY,UAAU,QAAQ;AACxE,qBAAS,KAAK,YAAY,IAAI;AAAA,UAChC;AACA,eAAK,aAAa,WAAW,UAAU,OAAO;AAAA,QAChD;AAAA,MACF;AAEA,UAAI,SAAS,QAAQ;AACnB,cAAM,YAAY;AAClB,cAAM,MAAM,UAAU;AACtB,YAAI,OAAO,SAAS,cAAc,cAAc,GAAG,IAAI;AACvD,YAAI,CAAC,MAAM;AACT,iBAAO,SAAS,cAAc,MAAM;AACpC,eAAK,aAAa,OAAO,UAAU,GAAG;AACtC,eAAK,aAAa,QAAQ,UAAU,IAAI;AACxC,cAAI,UAAU,GAAI,MAAK,aAAa,MAAM,UAAU,EAAE;AACtD,mBAAS,KAAK,YAAY,IAAI;AAAA,QAChC;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO,MAAM;AAAA,IAEb;AAAA,EACF,GAAG,CAAC,UAAU,OAAO,CAAC;AAEtB,SAAO;AACT;;;AE1DA,OAAOC,YAAW;;;ACAlB,SAAgB,iBAAAC,sBAAqB;AAejC,gBAAAC,YAAA;AAbG,IAAM,kBAAkBD,eAAmB,IAAI;;;ACFtD,SAAS,YAAAE,WAAU,aAAAC,YAAW,cAAAC,mBAAkB;AAMzC,SAAS,cAAiC;AAC/C,QAAM,UAAUC,YAAW,eAAe;AAC1C,QAAM,CAAC,MAAM,OAAO,IAAIC,UAAmB,OAAO;AAElD,EAAAC,WAAU,MAAM;AAGd,QAAI,OAAO,WAAW,eAAe,OAAO,qBAAqB;AAE/D,cAAQ,OAAO,mBAAmB;AAAA,IACpC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACT;;;AC4BO,SAAS,iBAAiB,OAAiD;AAChF,QAAM,SAA8B,CAAC;AAErC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,SAAS,OAAO,UAAU,UAAU;AACtC,UAAI,MAAM,WAAW,QAAQ;AAC3B,eAAO,GAAG,IAAI,IAAI,KAAK,MAAM,KAAK;AAAA,MACpC,WAAW,MAAM,WAAW,OAAO;AACjC,eAAO,GAAG,IAAI,IAAI,IAAI,MAAM,KAAK;AAAA,MACnC,WAAW,MAAM,WAAW,OAAO;AACjC,eAAO,GAAG,IAAI,IAAI,IAAI,MAAM,KAAK;AAAA,MACnC,OAAO;AACL,eAAO,GAAG,IAAI,iBAAiB,KAAK;AAAA,MACtC;AAAA,IACF,OAAO;AACL,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AACT;AAoCO,SAAS,qBAA2C;AACzD,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,QAAM,SAAU,OAAe;AAC/B,SAAQ,UAA4B;AACtC;AAKO,SAAS,cAAuB,KAAuB;AAC5D,QAAM,UAAU,mBAAmB;AACnC,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO,QAAQ,KAAK,GAAG,KAAK;AAC9B;;;AC7GA;AAOA,IAAI,kBAAuB;AAKpB,SAAS,wBAAwB;AACtC,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,MAAI,CAAC,iBAAiB;AACpB,UAAM,EAAE,oBAAAC,oBAAmB,IAAI;AAC/B,sBAAkB,IAAIA,oBAAmB;AAAA,EAC3C;AACA,SAAO;AACT;","names":["useEffect","useEffect","React","useEffect","useRef","jsx","useState","useEffect","useRef","useState","useRef","useEffect","notFound","jsx","jsxs","React","useRef","useEffect","React","useEffect","useContext","createContext","useState","jsx","useContext","useEffect","React","React","createContext","jsx","useState","useEffect","useContext","useContext","useState","useEffect","HydrationScheduler"]}
|
package/dist/image.cjs
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __copyProps = (to, from, except, desc) => {
|
|
7
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
-
for (let key of __getOwnPropNames(from))
|
|
9
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
-
}
|
|
12
|
-
return to;
|
|
13
|
-
};
|
|
14
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
15
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
16
|
-
|
|
17
|
-
// src/image.ts
|
|
18
|
-
var image_exports = {};
|
|
19
|
-
module.exports = __toCommonJS(image_exports);
|
|
20
|
-
__reExport(image_exports, require("@unpic/react"), module.exports);
|
|
21
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
22
|
-
0 && (module.exports = {
|
|
23
|
-
...require("@unpic/react")
|
|
24
|
-
});
|
|
25
|
-
//# sourceMappingURL=image.cjs.map
|
package/dist/image.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/image.ts"],"sourcesContent":["/**\r\n * Re-export @unpic/react for optimized image handling\r\n * Usage: import { Image } from \"olova/image\";\r\n */\r\n\r\nexport * from \"@unpic/react\";\r\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAKA,0BAAc,yBALd;","names":[]}
|
package/dist/image.d.cts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '@unpic/react';
|
package/dist/image.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '@unpic/react';
|
package/dist/image.js
DELETED
package/dist/image.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/image.ts"],"sourcesContent":["/**\r\n * Re-export @unpic/react for optimized image handling\r\n * Usage: import { Image } from \"olova/image\";\r\n */\r\n\r\nexport * from \"@unpic/react\";\r\n"],"mappings":";AAKA,cAAc;","names":[]}
|