app-studio 0.7.18 → 0.8.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 +11 -1
- package/dist/native/index.cjs +3360 -0
- package/dist/native/index.cjs.map +1 -0
- package/dist/native/index.d.mts +251 -0
- package/dist/native/index.d.ts +251 -0
- package/dist/native/index.js +3268 -0
- package/dist/native/index.js.map +1 -0
- package/dist/viewAnimation-B4BIoOwQ.d.mts +2246 -0
- package/dist/viewAnimation-B4BIoOwQ.d.ts +2246 -0
- package/dist/web/app-studio.umd.production.min.global.js +28 -0
- package/dist/web/app-studio.umd.production.min.global.js.map +1 -0
- package/dist/web/index.cjs +6109 -0
- package/dist/web/index.cjs.map +1 -0
- package/dist/web/index.d.mts +624 -0
- package/dist/web/index.d.ts +624 -0
- package/dist/web/index.js +6008 -0
- package/dist/web/index.js.map +1 -0
- package/docs/README.md +10 -0
- package/package.json +76 -14
- package/dist/app-studio.cjs.development.js +0 -6754
- package/dist/app-studio.cjs.development.js.map +0 -1
- package/dist/app-studio.cjs.production.min.js +0 -2
- package/dist/app-studio.cjs.production.min.js.map +0 -1
- package/dist/app-studio.esm.js +0 -6650
- package/dist/app-studio.esm.js.map +0 -1
- package/dist/app-studio.umd.development.js +0 -6757
- package/dist/app-studio.umd.development.js.map +0 -1
- package/dist/app-studio.umd.production.min.js +0 -2
- package/dist/app-studio.umd.production.min.js.map +0 -1
- package/dist/components/Form.d.ts +0 -17
- package/dist/components/Image.d.ts +0 -7
- package/dist/components/Skeleton.d.ts +0 -3
- package/dist/components/Text/Text.props.d.ts +0 -27
- package/dist/components/Text/Text.type.d.ts +0 -3
- package/dist/components/Text/Text.utils.d.ts +0 -2
- package/dist/components/Text/Text.view.d.ts +0 -20
- package/dist/components/Text.d.ts +0 -5
- package/dist/components/View.d.ts +0 -16
- package/dist/components/Wrapper.d.ts +0 -4
- package/dist/element/Animation.d.ts +0 -1164
- package/dist/element/Element.d.ts +0 -4
- package/dist/element/Element.types.d.ts +0 -123
- package/dist/element/css.d.ts +0 -50
- package/dist/element/utils.d.ts +0 -4
- package/dist/hooks/useActive.d.ts +0 -2
- package/dist/hooks/useClickOutside.d.ts +0 -6
- package/dist/hooks/useElementPosition.d.ts +0 -39
- package/dist/hooks/useFocus.d.ts +0 -2
- package/dist/hooks/useHover.d.ts +0 -2
- package/dist/hooks/useIframeStyles.d.ts +0 -41
- package/dist/hooks/useInView.d.ts +0 -11
- package/dist/hooks/useKeyPress.d.ts +0 -1
- package/dist/hooks/useMount.d.ts +0 -1
- package/dist/hooks/useOnScreen.d.ts +0 -6
- package/dist/hooks/useResponsive.d.ts +0 -59
- package/dist/hooks/useScroll.d.ts +0 -49
- package/dist/hooks/useWindowSize.d.ts +0 -4
- package/dist/index.d.ts +0 -33
- package/dist/index.js +0 -8
- package/dist/providers/Analytics.d.ts +0 -9
- package/dist/providers/Responsive.d.ts +0 -58
- package/dist/providers/StyleRegistry.d.ts +0 -32
- package/dist/providers/Theme.d.ts +0 -46
- package/dist/providers/WindowSize.d.ts +0 -11
- package/dist/stories/AnimateOn.stories.d.ts +0 -30
- package/dist/stories/Animation.stories.d.ts +0 -35
- package/dist/stories/BorderColor.stories.d.ts +0 -4
- package/dist/stories/Color.stories.d.ts +0 -4
- package/dist/stories/ColorAlpha.stories.d.ts +0 -5
- package/dist/stories/Component.stories.d.ts +0 -7
- package/dist/stories/CrossBrowserCompatibility.stories.d.ts +0 -6
- package/dist/stories/CssCascadeOrder.stories.d.ts +0 -10
- package/dist/stories/EmptyBeforeExample.stories.d.ts +0 -7
- package/dist/stories/EventHandlers.stories.d.ts +0 -6
- package/dist/stories/GradientColors.stories.d.ts +0 -6
- package/dist/stories/GroupPeer.stories.d.ts +0 -7
- package/dist/stories/Hooks.stories.d.ts +0 -17
- package/dist/stories/IframeCSSSupport.stories.d.ts +0 -28
- package/dist/stories/IframeSupport.stories.d.ts +0 -20
- package/dist/stories/Image.stories.d.ts +0 -6
- package/dist/stories/Scroll.stories.d.ts +0 -9
- package/dist/stories/ScrollAnimation.stories.d.ts +0 -36
- package/dist/stories/ScrollTimeline.stories.d.ts +0 -6
- package/dist/stories/Skeleton.stories.d.ts +0 -5
- package/dist/stories/Text.stories.d.ts +0 -18
- package/dist/stories/VendorPrefix.stories.d.ts +0 -6
- package/dist/stories/View.stories.d.ts +0 -10
- package/dist/stories/ViewAnimation.stories.d.ts +0 -33
- package/dist/test/CssVariablesTest.d.ts +0 -3
- package/dist/test/LowercaseVendorPrefixTest.d.ts +0 -3
- package/dist/test/VendorPrefixTest.d.ts +0 -3
- package/dist/test/WebkitTextStrokeTest.d.ts +0 -3
- package/dist/types/scrollAnimation.types.d.ts +0 -75
- package/dist/utils/colors.d.ts +0 -21
- package/dist/utils/constants.d.ts +0 -24
- package/dist/utils/cssProperties.d.ts +0 -8
- package/dist/utils/env.d.ts +0 -15
- package/dist/utils/hash.d.ts +0 -4
- package/dist/utils/shadow.d.ts +0 -10
- package/dist/utils/style.d.ts +0 -22
- package/dist/utils/typography.d.ts +0 -45
- package/dist/utils/vendorPrefixes.d.ts +0 -19
- package/dist/utils/viewAnimation.d.ts +0 -138
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/web/index.tsx","../../src/components/View.tsx","../../src/element/Element.tsx","../../src/providers/Theme.tsx","../../src/utils/colors.ts","../../src/providers/Responsive.tsx","../../src/providers/StyleRegistry.tsx","../../src/utils/shadow.ts","../../src/element/css.ts","../../src/utils/constants.ts","../../src/utils/cssProperties.ts","../../src/utils/style.ts","../../src/element/utils.ts","../../src/utils/vendorPrefixes.ts","../../src/utils/hash.ts","../../src/providers/Analytics.tsx","../../src/components/Image.tsx","../../src/components/Text.tsx","../../src/components/Text/Text.view.tsx","../../src/components/Form.tsx","../../src/components/Skeleton.tsx","../../src/element/Animation.tsx","../../src/utils/typography.ts","../../src/utils/env.ts","../../src/providers/WindowSize.tsx","../../src/hooks/useActive.ts","../../src/hooks/useClickOutside.ts","../../src/hooks/useElementPosition.ts","../../src/hooks/useFocus.ts","../../src/hooks/useHover.ts","../../src/hooks/useKeyPress.ts","../../src/hooks/useMount.ts","../../src/hooks/useOnScreen.ts","../../src/hooks/useResponsive.ts","../../src/hooks/useScroll.ts","../../src/hooks/useWindowSize.ts","../../src/hooks/useInView.ts","../../src/hooks/useIframeStyles.ts","../../src/utils/viewAnimation.ts"],"sourcesContent":["export * from '../index';\n","import React from 'react';\nimport { Element, ElementProps } from '../element/Element';\nimport { ViewStyleProps } from '../types/style';\n\nexport interface ViewProps\n extends Omit<ViewStyleProps, keyof ElementProps>, ElementProps {\n onPress?: (..._args: any) => void;\n}\n\nexport const View = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithRef<typeof Element> & ViewProps\n>((props, ref) => (\n <Element {...props} ref={ref} />\n)) as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithRef<typeof Element> &\n ViewProps &\n React.RefAttributes<HTMLElement>\n>;\n\nexport const Horizontal = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithRef<typeof Element> & ViewProps\n>((props, ref) => (\n <Element display=\"flex\" flexDirection=\"row\" {...props} ref={ref} />\n)) as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithRef<typeof Element> &\n ViewProps &\n React.RefAttributes<HTMLElement>\n>;\n\nexport const Center = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithRef<typeof Element> & ViewProps\n>((props, ref) => (\n <Element\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n {...props}\n ref={ref}\n />\n)) as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithRef<typeof Element> &\n ViewProps &\n React.RefAttributes<HTMLElement>\n>;\n\nexport const Vertical = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithRef<typeof Element> & ViewProps\n>((props, ref) => (\n <Element display=\"flex\" flexDirection=\"column\" {...props} ref={ref} />\n)) as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithRef<typeof Element> &\n ViewProps &\n React.RefAttributes<HTMLElement>\n>;\n\nexport const HorizontalResponsive = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithRef<typeof Element> & ViewProps\n>(({ media = {}, ...props }, ref) => (\n <Horizontal\n media={{\n ...media,\n mobile: {\n ...(media as any)?.mobile,\n flexDirection: 'column',\n },\n }}\n {...props}\n ref={ref}\n />\n)) as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithRef<typeof Element> &\n ViewProps &\n React.RefAttributes<HTMLElement>\n>;\n\nexport const VerticalResponsive = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithRef<typeof Element> & ViewProps\n>(({ media = {}, ...props }, ref) => (\n <Vertical\n media={{\n ...media,\n mobile: {\n ...(media as any)?.mobile,\n flexDirection: 'row',\n },\n }}\n {...props}\n ref={ref}\n />\n)) as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithRef<typeof Element> &\n ViewProps &\n React.RefAttributes<HTMLElement>\n>;\n\nexport const Scroll = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithRef<typeof Element> & ViewProps\n>((props, ref) => (\n <Element {...props} ref={ref} />\n)) as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithRef<typeof Element> &\n ViewProps &\n React.RefAttributes<HTMLElement>\n>;\n\nexport const SafeArea = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithRef<typeof Element> & ViewProps\n>((props, ref) => (\n <Element overflow=\"auto\" {...props} ref={ref} />\n)) as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithRef<typeof Element> &\n ViewProps &\n React.RefAttributes<HTMLElement>\n>;\n\nexport const Div = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithRef<typeof Element> & ViewProps\n>((props, ref) => (\n <Element {...props} ref={ref} />\n)) as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithRef<typeof Element> &\n ViewProps &\n React.RefAttributes<HTMLElement>\n>;\n\nexport const Span = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithRef<typeof Element> & ViewProps\n>((props, ref) => (\n <Element as=\"span\" {...props} ref={ref} />\n)) as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithRef<typeof Element> &\n ViewProps &\n React.RefAttributes<HTMLElement>\n>;\n","import React, {\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useCallback,\n useState,\n} from 'react';\nimport { useTheme, Theme } from '../providers/Theme';\nimport { useBreakpointContext } from '../providers/Responsive';\nimport { useStyleRegistry } from '../providers/StyleRegistry';\n\nimport { isStyleProp } from '../utils/style';\nimport { excludedKeys, includeKeys } from '../utils/constants';\nimport { extractUtilityClasses, AnimationUtils } from './css';\nimport { useAnalytics } from '../providers/Analytics';\nimport { hash } from '../utils/hash';\n\n// Set of special prop names that affect CSS generation\nconst styleRelevantProps = new Set([\n 'on',\n 'media',\n 'animate',\n 'css',\n 'shadow',\n 'blend',\n 'widthHeight',\n 'paddingHorizontal',\n 'paddingVertical',\n 'marginHorizontal',\n 'marginVertical',\n]);\n\n// Skip these props from hash computation\nconst skipHashProps = new Set(['children', 'ref', 'key', 'style']);\n\n/**\n * Fast serialization of a value for hashing purposes.\n * Avoids JSON.stringify overhead for common cases (strings, numbers, booleans).\n */\nfunction fastSerialize(value: any): string {\n if (value === null) return 'n';\n const t = typeof value;\n if (t === 'string') return `s${value}`;\n if (t === 'number') return `d${value}`;\n if (t === 'boolean') return value ? 'T' : 'F';\n // Fall back to JSON.stringify only for complex objects\n return JSON.stringify(value);\n}\n\n/**\n * Computes a stable hash of style-relevant props.\n * Optimized: avoids sorting, uses fast serialization, feeds directly to hash.\n */\nfunction hashStyleProps(props: Record<string, any>): string {\n // Build a deterministic string representation of style-relevant props\n // We use a single string accumulator instead of array + join\n let hashInput = '';\n\n const keys = Object.keys(props);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n\n // Skip non-style props that don't affect CSS generation\n if (skipHashProps.has(key)) continue;\n\n // Include style-relevant props\n if (\n isStyleProp(key) ||\n key.charCodeAt(0) === 95 || // starts with '_'\n styleRelevantProps.has(key)\n ) {\n const value = props[key];\n if (value !== undefined) {\n hashInput += `|${key}:${fastSerialize(value)}`;\n }\n }\n }\n\n return hash(hashInput);\n}\n\n/**\n * Custom hook that memoizes style extraction based on a stable hash of props.\n * Only recalculates when the hash of style-relevant props changes.\n */\nfunction useStableStyleMemo(\n propsToProcess: Record<string, any>,\n getColor: (color: string) => string,\n mediaQueries: Record<string, string>,\n devices: Record<string, string[]>,\n manager: any,\n theme: any\n): string[] {\n const cacheRef = useRef<{ hash: string; classes: string[] } | null>(null);\n\n // Compute hash directly — no useMemo since propsToProcess is always a new\n // reference (from destructuring), so the memo deps would always change.\n // Theme hash uses Object.values() concatenation instead of JSON.stringify\n const themeHash = theme ? hash(Object.values(theme).join('|')) : '';\n const currentHash = hashStyleProps(propsToProcess) + '|' + themeHash;\n\n // Only recompute classes if hash changed\n if (!cacheRef.current || cacheRef.current.hash !== currentHash) {\n const classes = extractUtilityClasses(\n propsToProcess,\n getColor,\n mediaQueries,\n devices,\n manager\n );\n cacheRef.current = { hash: currentHash, classes };\n }\n\n return cacheRef.current.classes;\n}\n\nimport { ElementProps, CssProps } from './Element.types';\n\nexport type { ElementProps, CssProps };\n\nconst THEME_PREFIX = 'theme-';\n\n// Build a getColor that resolves `theme-*` tokens against a component-scoped\n// theme override before falling back to the global getColor. Tokens not\n// covered by the override (color-*, light-*, dark-*, theme-* keys not in the\n// override) pass straight through.\nfunction makeScopedGetColor(\n componentTheme: Partial<Theme>,\n baseGetColor: (name: string) => string\n): (name: string) => string {\n return (name: string) => {\n if (!name || typeof name !== 'string') return String(name);\n if (!name.startsWith(THEME_PREFIX)) return baseGetColor(name);\n\n const parts = name.substring(THEME_PREFIX.length).split('-');\n const lastPart = parts[parts.length - 1];\n const maybeAlpha = parseInt(lastPart, 10);\n const hasAlpha =\n parts.length >= 2 &&\n !isNaN(maybeAlpha) &&\n maybeAlpha >= 0 &&\n maybeAlpha <= 1000;\n\n const themeKey = (\n hasAlpha ? parts.slice(0, -1).join('-') : parts.join('-')\n ) as keyof Theme;\n\n const overrideValue = componentTheme[themeKey];\n if (typeof overrideValue !== 'string') return baseGetColor(name);\n\n const resolved = baseGetColor(overrideValue);\n if (!hasAlpha) return resolved;\n\n const percentage = Math.round((maybeAlpha / 1000) * 100);\n return `color-mix(in srgb, ${resolved} ${percentage}%, transparent)`;\n };\n}\n\nexport const Element = React.memo(\n forwardRef<HTMLElement, ElementProps>(\n ({ as = 'div', animateIn, animateOut, ...props }: ElementProps, ref) => {\n if ((props.onClick || props.onPress) && props.cursor == undefined) {\n props.cursor = 'pointer';\n }\n\n const {\n onPress,\n blend,\n animateOn = 'Both',\n theme: componentTheme,\n ...rest\n } = props;\n const elementRef = useRef<HTMLElement | null>(null);\n const setRef = useCallback(\n (node: HTMLElement | null) => {\n elementRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLElement | null>).current = node;\n }\n },\n [ref]\n );\n const { getColor, theme } = useTheme();\n\n // When a component-level `theme` prop is supplied, wrap getColor so\n // `theme-*` tokens resolve against the override first. Memoize on a\n // serialized signature so the function identity stays stable across\n // renders that don't change the override.\n const componentThemeKey = componentTheme\n ? Object.entries(componentTheme)\n .map(([k, v]) => `${k}=${v}`)\n .join('|')\n : '';\n const scopedGetColor = useMemo(\n () =>\n componentTheme\n ? makeScopedGetColor(componentTheme, getColor)\n : getColor,\n [componentTheme, componentThemeKey, getColor]\n );\n const { trackEvent } = useAnalytics();\n const { mediaQueries, devices } = useBreakpointContext();\n const { manager } = useStyleRegistry();\n const [isVisible, setIsVisible] = useState(false);\n\n useEffect(() => {\n if (!animateIn) {\n setIsVisible(true);\n return;\n }\n\n if (\n typeof IntersectionObserver === 'undefined' ||\n !elementRef.current\n ) {\n setIsVisible(true);\n return;\n }\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setIsVisible(true);\n observer.disconnect();\n }\n },\n { threshold: 0.1 }\n );\n\n observer.observe(elementRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, [animateIn]);\n\n useEffect(() => {\n if (animateIn && elementRef.current && isVisible) {\n const animations = Array.isArray(animateIn) ? animateIn : [animateIn];\n const styles = AnimationUtils.processAnimations(animations, manager);\n Object.assign(elementRef.current.style, styles);\n }\n }, [animateIn, isVisible, manager]);\n\n useEffect(() => {\n const node = elementRef.current;\n return () => {\n if (animateOut && node) {\n const animations = Array.isArray(animateOut)\n ? animateOut\n : [animateOut];\n const styles = AnimationUtils.processAnimations(\n animations,\n manager\n );\n Object.assign(node.style, styles);\n }\n };\n }, [animateOut, manager]);\n\n // Prepare props for processing (apply view/scroll timeline if needed)\n // No useMemo — `rest` is always a new reference from destructuring, so\n // memo deps would always change. useStableStyleMemo handles the real\n // memoization via hash-based comparison.\n const propsToProcess: Record<string, any> = {\n ...rest,\n blend,\n };\n\n // Apply view() timeline ONLY if animateOn='View' (not Both or Mount)\n if (animateOn === 'View' && propsToProcess.animate) {\n const animations = Array.isArray(propsToProcess.animate)\n ? propsToProcess.animate\n : [propsToProcess.animate];\n\n propsToProcess.animate = animations.map((anim: any) => {\n // Only add timeline if not already specified\n if (!anim.timeline) {\n return {\n ...anim,\n timeline: 'view()',\n range: anim.range || 'entry',\n fillMode: anim.fillMode || 'both',\n };\n }\n return anim;\n });\n }\n\n // Apply scroll() timeline if animateOn='Scroll'\n if (animateOn === 'Scroll' && propsToProcess.animate) {\n const animations = Array.isArray(propsToProcess.animate)\n ? propsToProcess.animate\n : [propsToProcess.animate];\n\n propsToProcess.animate = animations.map((anim: any) => {\n // Only add timeline if not already specified\n if (!anim.timeline) {\n return {\n ...anim,\n timeline: 'scroll()',\n fillMode: anim.fillMode || 'both',\n };\n }\n return anim;\n });\n }\n\n // Use hash-based memoization for style extraction. Mix the component\n // theme signature into the `theme` argument so the cache invalidates\n // when an override changes between renders.\n const utilityClasses = useStableStyleMemo(\n propsToProcess,\n scopedGetColor,\n mediaQueries,\n devices,\n manager,\n componentTheme ? { ...theme, __scope: componentThemeKey } : theme\n );\n\n const newProps: any = { ref: setRef };\n if (onPress) {\n newProps.onClick = onPress;\n }\n\n if (utilityClasses.length > 0) {\n newProps.className = utilityClasses.join(' ');\n }\n\n if (props.className) {\n newProps.className = newProps.className\n ? `${newProps.className} ${props.className}`\n : props.className;\n }\n\n // Handle event tracking for onClick\n if (trackEvent && props.onClick) {\n let componentName: string;\n if (typeof as === 'string') {\n componentName = as;\n } else {\n componentName =\n (as as React.ComponentType<any>).displayName ||\n (as as React.ComponentType<any>).name ||\n 'div';\n }\n let text: string | undefined;\n if (typeof props.children === 'string') {\n text = props.children.slice(0, 100);\n }\n newProps.onClick = (event: any) => {\n trackEvent({\n type: 'click',\n target: componentName !== 'div' ? componentName : undefined,\n text,\n });\n if (props.onClick) {\n props.onClick(event);\n }\n };\n } else if (props.onClick && !onPress) {\n // If onClick is provided and not already handled by onPress, pass it directly\n newProps.onClick = props.onClick;\n }\n\n const { style, children, before, after, ...otherProps } = rest;\n\n // Single pass: add event handlers and non-style props together\n const otherKeys = Object.keys(otherProps);\n for (let i = 0; i < otherKeys.length; i++) {\n const key = otherKeys[i];\n // Event handlers: start with \"on\" + uppercase letter\n if (\n key.charCodeAt(0) === 111 && // 'o'\n key.charCodeAt(1) === 110 && // 'n'\n key.length > 2 &&\n key.charCodeAt(2) >= 65 &&\n key.charCodeAt(2) <= 90 // uppercase A-Z\n ) {\n newProps[key] = (otherProps as any)[key];\n }\n // Non-style props (pass through to DOM)\n else if (\n (!excludedKeys.has(key) && !isStyleProp(key)) ||\n includeKeys.has(key)\n ) {\n newProps[key] = (otherProps as any)[key];\n }\n }\n\n if (style) {\n newProps.style = style;\n }\n\n if (animateIn && !isVisible) {\n newProps.style = {\n ...newProps.style,\n opacity: 0,\n };\n }\n\n const Component = as;\n return children ? (\n <Component {...newProps}>\n {before}\n {children}\n {after}\n </Component>\n ) : (\n <Component {...newProps} />\n );\n }\n )\n);\n","import React, {\n createContext,\n useContext,\n useState,\n ReactNode,\n useEffect,\n useRef,\n useMemo,\n useCallback,\n} from 'react';\nimport {\n ColorPalette,\n ColorSingleton,\n defaultDarkColors,\n defaultDarkPalette,\n defaultLightColors,\n defaultLightPalette,\n} from '../utils/colors'; // Assuming this path is correct\n\n// --- Constants ---\n// Public API prefixes (dash notation: theme-primary, color-blue-500)\nconst THEME_PREFIX = 'theme-';\nconst COLOR_PREFIX = 'color-';\nconst LIGHT_PREFIX = 'light-';\nconst DARK_PREFIX = 'dark-';\n\nconst TRANSPARENT = 'transparent';\n\n// --- Interfaces ---\nexport interface Colors {\n main: ColorSingleton;\n palette: ColorPalette;\n}\n\nexport interface Theme {\n primary?: string;\n secondary?: string;\n success?: string;\n error?: string;\n warning?: string;\n disabled?: string;\n loading?: string;\n // Optional surface/ink slots — used by design-system style brand themes.\n // Iterated and emitted as `--theme-<key>` CSS variables alongside the rest.\n canvas?: string;\n surface?: string;\n text?: string;\n muted?: string;\n border?: string;\n onPrimary?: string;\n info?: string;\n [extra: string]: string | undefined;\n}\n\ninterface Override {\n colors?: Colors;\n theme?: Theme;\n themeMode?: 'light' | 'dark';\n}\n\n// --- CSS Variable Injection Helper ---\n// Optimized: single-pass processing, minimal string allocations, minified output\nconst generateCSSVariables = (\n theme: Theme,\n lightColors: Colors,\n darkColors: Colors\n) => {\n const rootVars: string[] = [];\n const lightMappings: string[] = [];\n const darkMappings: string[] = [];\n\n // Single-pass helper: generates base, light, dark vars and theme-switch mappings together\n const processColors = (lightObj: any, darkObj: any, prefix: string) => {\n const keys = Object.keys(lightObj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const lightValue = lightObj[key];\n const darkValue = darkObj?.[key];\n const varName = `${prefix}-${key}`;\n\n if (typeof lightValue === 'object' && lightValue !== null) {\n processColors(lightValue, darkValue, varName);\n } else if (\n typeof lightValue === 'string' ||\n typeof lightValue === 'number'\n ) {\n // :root gets base + light/dark prefixed vars\n rootVars.push(\n `--${varName}:${lightValue};--light-${varName}:${lightValue};--dark-${varName}:${darkValue ?? lightValue}`\n );\n // Theme-switching selectors\n lightMappings.push(`--${varName}:var(--light-${varName})`);\n darkMappings.push(`--${varName}:var(--dark-${varName})`);\n }\n }\n };\n\n processColors(lightColors.main, darkColors.main, 'color');\n processColors(lightColors.palette, darkColors.palette, 'color');\n\n // Process theme variables\n const themeVars: string[] = [];\n const themeKeys = Object.keys(theme);\n for (let i = 0; i < themeKeys.length; i++) {\n const key = themeKeys[i];\n const value = (theme as any)[key];\n if (typeof value === 'string') {\n themeVars.push(\n value.startsWith('color-') || value.startsWith('theme-')\n ? `--theme-${key}:var(--${value})`\n : `--theme-${key}:${value}`\n );\n }\n }\n\n // Build minified CSS (no unnecessary whitespace)\n return `:root{${rootVars.join(';')};${themeVars.join(';')}}[data-theme='light']{${lightMappings.join(';')}}[data-theme='dark']{${darkMappings.join(';')}}`;\n};\n\ninterface ThemeContextProps {\n // Signature allows overriding the mode for a specific lookup\n getColor: (name: string, override?: Override) => string;\n getColorHex: (name: string, override?: Override) => string;\n getColorRGBA: (\n name: string,\n alphaOrOverride?: number | Override,\n override?: Override\n ) => string;\n getColorScheme: (name: string, override?: Override) => string | undefined;\n getContrastColor: (name: string, override?: Override) => 'black' | 'white';\n theme: Theme;\n colors: Colors; // Current mode's colors\n themeMode: 'light' | 'dark';\n setThemeMode: (mode: 'light' | 'dark') => void;\n}\n\n// --- Default Configuration ---\n// Theme values use dash notation (color-X or color-X-shade)\n// which gets resolved to CSS variables (var(--color-X-shade))\nexport const defaultThemeMain: Theme = {\n primary: 'color-black',\n secondary: 'color-blue',\n success: 'color-green-500',\n error: 'color-red-500',\n warning: 'color-orange-500',\n disabled: 'color-gray-500',\n loading: 'color-dark-500',\n};\n\nconst defaultLightColorConfig: Colors = {\n main: defaultLightColors,\n palette: defaultLightPalette,\n};\n\nconst defaultDarkColorConfig: Colors = {\n main: defaultDarkColors,\n palette: defaultDarkPalette,\n};\n\n// --- Create Theme Context ---\nexport const ThemeContext = createContext<ThemeContextProps>({\n getColor: () => '',\n getColorHex: () => '',\n getColorRGBA: () => '',\n getColorScheme: () => undefined,\n getContrastColor: () => 'black',\n theme: {},\n colors: { main: defaultLightColors, palette: defaultLightPalette },\n themeMode: 'light',\n setThemeMode: () => {},\n});\n\n// --- Custom Hook ---\nexport const useTheme = () => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};\n\n// --- Helper Function to Convert Color to RGBA with Alpha ---\n/**\n * Converts a color (hex, rgb, or rgba) to rgba format with specified alpha.\n * @param color - The base color in hex, rgb, or rgba format\n * @param alpha - Alpha value on a 0-1000 scale (e.g., 200 = 0.2 opacity)\n * @returns RGBA color string\n */\nconst convertToRgba = (color: string, alpha: number): string => {\n // Normalize alpha to 0-1 range\n const normalizedAlpha = Math.max(0, Math.min(1000, alpha)) / 1000;\n\n // Handle hex colors (#RGB or #RRGGBB)\n if (color.startsWith('#')) {\n let hex = color.slice(1);\n // Convert shorthand hex to full form\n if (hex.length === 3) {\n hex = hex\n .split('')\n .map((char) => char + char)\n .join('');\n }\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${normalizedAlpha})`;\n }\n\n // Handle rgb/rgba colors\n if (color.startsWith('rgb')) {\n // Extract the values from rgb() or rgba()\n const rgbMatch = color.match(/rgba?\\(([^)]+)\\)/);\n if (rgbMatch) {\n const values = rgbMatch[1].split(',').map((v) => v.trim());\n const r = values[0];\n const g = values[1];\n const b = values[2];\n return `rgba(${r}, ${g}, ${b}, ${normalizedAlpha})`;\n }\n }\n\n // If color format is not recognized, return as-is\n console.warn(`Unable to convert color \"${color}\" to rgba format`);\n return color;\n};\n\nconst clamp255 = (value: number) => Math.max(0, Math.min(255, value));\n\nconst toTwoHex = (value: number) =>\n clamp255(Math.round(value)).toString(16).padStart(2, '0');\n\nconst normalizeToHex = (color: string): string => {\n if (!color || typeof color !== 'string') return String(color);\n\n const trimmed = color.trim();\n if (trimmed === TRANSPARENT) return '#00000000';\n\n if (trimmed.startsWith('#')) {\n const hex = trimmed.slice(1);\n if (hex.length === 3) {\n const r = hex[0] + hex[0];\n const g = hex[1] + hex[1];\n const b = hex[2] + hex[2];\n return `#${r}${g}${b}`.toLowerCase();\n }\n if (hex.length === 4) {\n const r = hex[0] + hex[0];\n const g = hex[1] + hex[1];\n const b = hex[2] + hex[2];\n const a = hex[3] + hex[3];\n return `#${r}${g}${b}${a}`.toLowerCase();\n }\n if (hex.length === 6 || hex.length === 8) {\n return `#${hex}`.toLowerCase();\n }\n return trimmed;\n }\n\n if (trimmed.startsWith('rgb')) {\n const match = trimmed.match(/rgba?\\(([^)]+)\\)/i);\n if (!match) return trimmed;\n\n const parts = match[1]\n .split(',')\n .map((p) => p.trim())\n .filter(Boolean);\n\n const r = Number(parts[0]);\n const g = Number(parts[1]);\n const b = Number(parts[2]);\n const a = parts.length >= 4 ? Number(parts[3]) : 1;\n\n if ([r, g, b].some((v) => Number.isNaN(v)) || Number.isNaN(a))\n return trimmed;\n\n const rr = toTwoHex(r);\n const gg = toTwoHex(g);\n const bb = toTwoHex(b);\n\n const alpha = Math.max(0, Math.min(1, a));\n if (alpha >= 1) return `#${rr}${gg}${bb}`.toLowerCase();\n\n const aa = toTwoHex(alpha * 255);\n return `#${rr}${gg}${bb}${aa}`.toLowerCase();\n }\n\n return trimmed;\n};\n\nconst normalizeToRgba = (color: string, alphaOverride?: number): string => {\n if (!color || typeof color !== 'string') return String(color);\n\n const trimmed = color.trim();\n const overrideAlpha =\n typeof alphaOverride === 'number'\n ? Math.max(0, Math.min(1000, alphaOverride)) / 1000\n : undefined;\n\n if (trimmed === TRANSPARENT) {\n const a = overrideAlpha ?? 0;\n return `rgba(0, 0, 0, ${a})`;\n }\n\n if (trimmed.startsWith('#')) {\n let hex = trimmed.slice(1);\n if (hex.length === 3 || hex.length === 4) {\n hex = hex\n .split('')\n .map((ch) => ch + ch)\n .join('');\n }\n\n if (hex.length !== 6 && hex.length !== 8) return trimmed;\n\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n const aFromHex = hex.length === 8 ? parseInt(hex.slice(6, 8), 16) / 255 : 1;\n const a = overrideAlpha ?? aFromHex;\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n }\n\n if (trimmed.startsWith('rgb')) {\n const match = trimmed.match(/rgba?\\(([^)]+)\\)/i);\n if (!match) return trimmed;\n\n const parts = match[1]\n .split(',')\n .map((p) => p.trim())\n .filter(Boolean);\n\n const r = Number(parts[0]);\n const g = Number(parts[1]);\n const b = Number(parts[2]);\n const aExisting = parts.length >= 4 ? Number(parts[3]) : 1;\n\n if ([r, g, b].some((v) => Number.isNaN(v)) || Number.isNaN(aExisting))\n return trimmed;\n\n const a = overrideAlpha ?? Math.max(0, Math.min(1, aExisting));\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n }\n\n // If it's already something else (var(), color-mix(), named color), we can't reliably convert.\n return trimmed;\n};\n\n// --- Deep Merge Function (remains the same, assuming it works as intended) ---\n// Consider using a library like `lodash.merge` or `deepmerge` if complexity grows\n// or edge cases (like merging arrays) need different handling.\nexport const deepMerge = (target: any, source: any): any => {\n // (Implementation from original code)\n if (typeof source !== 'object' || source === null) {\n return target;\n }\n const merged = { ...target };\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n const sourceValue = source[key];\n const targetValue = target[key];\n if (Array.isArray(sourceValue)) {\n // Overwrite arrays, don't merge them (common for theme configs)\n merged[key] = sourceValue;\n } else if (\n typeof sourceValue === 'object' &&\n sourceValue !== null &&\n !Array.isArray(sourceValue)\n ) {\n merged[key] = deepMerge(targetValue || {}, sourceValue);\n } else if (sourceValue !== undefined) {\n // Ensure undefined doesn't overwrite\n merged[key] = sourceValue;\n }\n }\n }\n return merged;\n};\n\n// --- CSS Variable Injection Helper (Deprecated/Replaced) ---\n// The new logic generates CSS variables within the component and applies them to the container style.\n\n// Detects whether a ThemeProvider is being nested inside another. Nested\n// providers skip the wrapper's background/color/sizing so they can override\n// theme variables for a subtree (e.g. a design-system brand context) without\n// repainting the page or breaking the host layout.\nconst ThemeNestingContext = createContext<boolean>(false);\n\n// --- ThemeProvider Component ---\ninterface ThemeProviderProps {\n theme?: Partial<Theme>;\n dark?: Partial<Colors>;\n light?: Partial<Colors>;\n mode?: 'light' | 'dark';\n children: ReactNode;\n strict?: boolean;\n targetWindow?: Window;\n /**\n * When `true`, the wrapper renders as `display: contents` (no background,\n * color, sizing, or transition). Useful when nesting a ThemeProvider inside\n * an existing themed subtree — the inner provider only contributes its CSS\n * variables and `data-theme` attribute. Automatically inferred when a parent\n * ThemeProvider exists in the React tree.\n */\n transparentWrapper?: boolean;\n}\n\n// Stable default references to prevent unnecessary re-renders and cache invalidation\nconst DEFAULT_THEME_OVERRIDE: Partial<Theme> = {};\nconst DEFAULT_COLORS_OVERRIDE: Partial<Colors> = {};\n\nexport const ThemeProvider = ({\n theme: themeOverride = DEFAULT_THEME_OVERRIDE,\n mode: initialMode = 'light',\n dark: darkOverride = DEFAULT_COLORS_OVERRIDE,\n light: lightOverride = DEFAULT_COLORS_OVERRIDE,\n children,\n strict = false,\n targetWindow,\n transparentWrapper,\n}: ThemeProviderProps): React.ReactElement => {\n const isNested = useContext(ThemeNestingContext);\n const wrapperIsTransparent = transparentWrapper ?? isNested;\n const [themeMode, setThemeMode] = useState<'light' | 'dark'>(initialMode);\n const colorCache = useRef(new Map<string, string>()).current;\n\n // Sync state with prop changes\n useEffect(() => {\n setThemeMode(initialMode);\n }, [initialMode]);\n\n // Clear cache when theme definitions change to avoid stale colors\n useEffect(() => {\n colorCache.clear();\n }, [lightOverride, darkOverride, themeOverride, colorCache]);\n\n // --- Memoize derived values ---\n const mergedTheme = useMemo<Theme>(\n () => deepMerge(defaultThemeMain, themeOverride),\n [themeOverride]\n );\n\n const themeColors = useMemo<{ light: Colors; dark: Colors }>(\n () => ({\n light: deepMerge(defaultLightColorConfig, lightOverride),\n dark: deepMerge(defaultDarkColorConfig, darkOverride),\n }),\n [lightOverride, darkOverride]\n );\n\n const currentColors = useMemo(\n () => themeColors[themeMode],\n [themeColors, themeMode]\n );\n\n const resolveColorTokenForMode = useCallback(\n (\n token: string,\n mode: 'light' | 'dark',\n override?: Override,\n depth: number = 0\n ): string => {\n if (!token || typeof token !== 'string') return String(token);\n if (token === TRANSPARENT) return token;\n if (depth > 25) return token;\n\n const effectiveTheme = override?.theme\n ? (deepMerge(mergedTheme, override.theme) as Theme)\n : mergedTheme;\n\n // Convert dash notation to internal format for resolution\n // theme-primary-100 -> parts for processing\n if (token.startsWith(THEME_PREFIX)) {\n const parts = token.substring(THEME_PREFIX.length).split('-');\n const lastPart = parts[parts.length - 1];\n const maybeAlpha = parseInt(lastPart, 10);\n\n // Check for alpha suffix: theme-primary-100 (2+ parts after prefix, last is 0-1000)\n if (\n parts.length >= 2 &&\n !isNaN(maybeAlpha) &&\n maybeAlpha >= 0 &&\n maybeAlpha <= 1000\n ) {\n const themeKey = parts.slice(0, -1).join('-') as keyof Theme;\n const baseToken = `${THEME_PREFIX}${themeKey}`;\n const resolvedBase = resolveColorTokenForMode(\n baseToken,\n mode,\n override,\n depth + 1\n );\n return convertToRgba(resolvedBase, maybeAlpha);\n }\n\n const themeKey = parts.join('-') as keyof Theme;\n const themeValue = effectiveTheme[themeKey as keyof Theme];\n if (typeof themeValue === 'string') {\n // Theme values use dash notation (color-blue-500)\n return resolveColorTokenForMode(\n themeValue,\n mode,\n override,\n depth + 1\n );\n }\n return token;\n }\n\n // Handle dash notation: color-blue-500, light-blue-500, dark-blue-500\n if (token.startsWith(COLOR_PREFIX)) {\n const parts = token.substring(COLOR_PREFIX.length).split('-');\n const colorsToUse = themeColors[mode];\n const palette = deepMerge(\n colorsToUse.palette,\n override?.colors?.palette || {}\n );\n const main = deepMerge(colorsToUse.main, override?.colors?.main || {});\n\n // color-blue-500-200 (alpha)\n if (parts.length >= 3) {\n const lastPart = parts[parts.length - 1];\n const maybeAlpha = parseInt(lastPart, 10);\n if (!isNaN(maybeAlpha) && maybeAlpha >= 0 && maybeAlpha <= 1000) {\n const colorName = parts[0];\n const variant = parts[1];\n const base = palette?.[colorName]?.[variant];\n if (typeof base === 'string') {\n return convertToRgba(base, maybeAlpha);\n }\n }\n }\n // color-blue-500\n if (parts.length === 2) {\n const [colorName, variant] = parts;\n const value = palette?.[colorName]?.[variant];\n return typeof value === 'string' ? value : token;\n }\n // color-blue\n if (parts.length === 1) {\n const value = main?.[parts[0]];\n return typeof value === 'string' ? value : token;\n }\n return token;\n }\n\n // Handle light-* and dark-* tokens\n if (token.startsWith(LIGHT_PREFIX) || token.startsWith(DARK_PREFIX)) {\n const explicitMode = token.startsWith(LIGHT_PREFIX) ? 'light' : 'dark';\n const prefix = token.startsWith(LIGHT_PREFIX)\n ? LIGHT_PREFIX\n : DARK_PREFIX;\n const colorPart = token.substring(prefix.length);\n return resolveColorTokenForMode(\n `${COLOR_PREFIX}${colorPart}`,\n explicitMode,\n override,\n depth + 1\n );\n }\n\n return token;\n },\n [mergedTheme, themeColors]\n );\n\n // --- Helper function to resolve color tokens to actual values ---\n // This is used internally and handles dash notation (public API)\n const resolveColorToken = useCallback(\n (token: string): string => {\n if (!token || typeof token !== 'string') return String(token);\n if (token === TRANSPARENT) return token;\n\n const colors = currentColors;\n\n // Handle dash notation: color-blue-500\n if (token.startsWith(COLOR_PREFIX)) {\n const parts = token.substring(COLOR_PREFIX.length).split('-');\n\n // color-blue-500-200 (alpha)\n if (parts.length >= 3) {\n const lastPart = parts[parts.length - 1];\n const maybeAlpha = parseInt(lastPart, 10);\n if (!isNaN(maybeAlpha) && maybeAlpha >= 0 && maybeAlpha <= 1000) {\n const percentage = Math.round((maybeAlpha / 1000) * 100);\n const baseVar = `color-${parts.slice(0, -1).join('-')}`;\n return `color-mix(in srgb, var(--${baseVar}) ${percentage}%, transparent)`;\n }\n }\n // color-blue-500\n if (parts.length === 2) {\n const [colorName, shade] = parts;\n const shadeValue = colors.palette[colorName]?.[Number(shade)];\n return typeof shadeValue === 'string' ? shadeValue : token;\n }\n // color-blue\n if (parts.length === 1) {\n const colorValue = colors.main[parts[0]];\n return typeof colorValue === 'string' ? colorValue : token;\n }\n }\n\n // Handle dash notation: theme-primary, theme-primary-100\n if (token.startsWith(THEME_PREFIX)) {\n const parts = token.substring(THEME_PREFIX.length).split('-');\n const lastPart = parts[parts.length - 1];\n const maybeAlpha = parseInt(lastPart, 10);\n\n // theme-primary-100 (alpha)\n if (\n parts.length >= 2 &&\n !isNaN(maybeAlpha) &&\n maybeAlpha >= 0 &&\n maybeAlpha <= 1000\n ) {\n const percentage = Math.round((maybeAlpha / 1000) * 100);\n const baseVar = `theme-${parts.slice(0, -1).join('-')}`;\n return `color-mix(in srgb, var(--${baseVar}) ${percentage}%, transparent)`;\n }\n\n const themeKey = parts.join('-') as keyof Theme;\n const themeValue = mergedTheme[themeKey as keyof Theme];\n if (typeof themeValue === 'string') {\n return resolveColorToken(themeValue);\n }\n }\n\n return token;\n },\n [currentColors, mergedTheme]\n );\n\n // The mode is now handled by the data-attribute on the container\n\n // --- Memoized getColor function - Dash notation only ---\n const getColor = useCallback(\n (name: string): string => {\n if (!name || typeof name !== 'string') return String(name);\n if (name === TRANSPARENT) return name;\n\n // Strict Mode Check - only dash notation is supported\n if (\n strict &&\n !name.startsWith(COLOR_PREFIX) &&\n !name.startsWith(THEME_PREFIX) &&\n !name.startsWith(LIGHT_PREFIX) &&\n !name.startsWith(DARK_PREFIX)\n ) {\n console.warn(\n `[Theme] Invalid color token: '${name}'. Use dash notation: theme-primary, color-blue-500`\n );\n }\n\n const parts = name.split('-');\n const lastPart = parts[parts.length - 1];\n const maybeAlpha = parseInt(lastPart, 10);\n\n // Handle theme-* tokens (e.g., theme-primary, theme-primary-100)\n if (name.startsWith(THEME_PREFIX)) {\n // Check for alpha suffix: theme-primary-100 (3+ parts, last is 0-1000)\n if (\n parts.length >= 3 &&\n !isNaN(maybeAlpha) &&\n maybeAlpha >= 0 &&\n maybeAlpha <= 1000\n ) {\n const baseVar = parts.slice(0, -1).join('-');\n const percentage = Math.round((maybeAlpha / 1000) * 100);\n return `color-mix(in srgb, var(--${baseVar}) ${percentage}%, transparent)`;\n }\n return `var(--${name})`;\n }\n\n // Handle color-* tokens (e.g., color-blue-500, color-blue-500-200)\n if (name.startsWith(COLOR_PREFIX)) {\n // Check for alpha suffix: color-blue-500-200 (4+ parts, last is 0-1000)\n if (\n parts.length >= 4 &&\n !isNaN(maybeAlpha) &&\n maybeAlpha >= 0 &&\n maybeAlpha <= 1000\n ) {\n const baseVar = parts.slice(0, -1).join('-');\n const percentage = Math.round((maybeAlpha / 1000) * 100);\n return `color-mix(in srgb, var(--${baseVar}) ${percentage}%, transparent)`;\n }\n return `var(--${name})`;\n }\n\n // Handle light-* and dark-* tokens (e.g., light-blue-500, dark-red-200)\n if (name.startsWith(LIGHT_PREFIX) || name.startsWith(DARK_PREFIX)) {\n const prefix = name.startsWith(LIGHT_PREFIX)\n ? LIGHT_PREFIX\n : DARK_PREFIX;\n const colorPart = name.substring(prefix.length);\n return `var(--${prefix}color-${colorPart})`;\n }\n\n // Return as-is for direct values (#hex, rgb(), etc.)\n return name;\n },\n [strict]\n );\n\n const getColorHex = useCallback(\n (name: string, override?: Override): string => {\n if (!name || typeof name !== 'string') return String(name);\n if (name === TRANSPARENT) return '#00000000';\n\n const effectiveMode = override?.themeMode ?? themeMode;\n const cacheKey = `${name}-${effectiveMode}-hex`;\n\n // Cache only when no override object is provided\n if (!override && colorCache.has(cacheKey)) {\n return colorCache.get(cacheKey)!;\n }\n\n const resolved = resolveColorTokenForMode(name, effectiveMode, override);\n const hex = normalizeToHex(resolved);\n\n if (!override) colorCache.set(cacheKey, hex);\n return hex;\n },\n [themeMode, colorCache, resolveColorTokenForMode]\n );\n\n const getColorRGBA = useCallback(\n (\n name: string,\n alphaOrOverride?: number | Override,\n overrideMaybe?: Override\n ): string => {\n if (!name || typeof name !== 'string') return String(name);\n\n const alpha =\n typeof alphaOrOverride === 'number' ? alphaOrOverride : undefined;\n const override = (\n typeof alphaOrOverride === 'object' ? alphaOrOverride : overrideMaybe\n ) as Override | undefined;\n\n const effectiveMode = override?.themeMode ?? themeMode;\n const alphaKey = typeof alpha === 'number' ? String(alpha) : 'auto';\n const cacheKey = `${name}-${effectiveMode}-rgba-${alphaKey}`;\n\n if (!override && colorCache.has(cacheKey)) {\n return colorCache.get(cacheKey)!;\n }\n\n const resolved = resolveColorTokenForMode(name, effectiveMode, override);\n const rgba = normalizeToRgba(resolved, alpha);\n\n if (!override) colorCache.set(cacheKey, rgba);\n return rgba;\n },\n [themeMode, colorCache, resolveColorTokenForMode]\n );\n\n const getColorScheme = useCallback(\n (name: string, override?: Override): string | undefined => {\n if (!name || typeof name !== 'string') return undefined;\n\n const effectiveMode = override?.themeMode ?? themeMode;\n const effectiveTheme = override?.theme\n ? (deepMerge(mergedTheme, override.theme) as Theme)\n : mergedTheme;\n\n // Resolve theme-* tokens to get the underlying color token\n let colorToken = name;\n if (name.startsWith(THEME_PREFIX)) {\n const themeKey = name.substring(THEME_PREFIX.length) as keyof Theme;\n const themeValue = effectiveTheme[themeKey];\n if (typeof themeValue === 'string') {\n colorToken = themeValue;\n }\n }\n\n // Handle light-* or dark-* prefixes\n if (\n colorToken.startsWith(LIGHT_PREFIX) ||\n colorToken.startsWith(DARK_PREFIX)\n ) {\n const prefix = colorToken.startsWith(LIGHT_PREFIX)\n ? LIGHT_PREFIX\n : DARK_PREFIX;\n colorToken = `${COLOR_PREFIX}${colorToken.substring(prefix.length)}`;\n }\n\n // Extract color scheme from color-* tokens (e.g., color-blue-500 -> 'blue')\n if (colorToken.startsWith(COLOR_PREFIX)) {\n const parts = colorToken.substring(COLOR_PREFIX.length).split('-');\n if (parts.length >= 1) {\n return parts[0]; // Return the color scheme name (e.g., 'blue', 'pink')\n }\n }\n\n // Handle hex or rgba colors by finding the closest match in the palette\n const normalizedInput = normalizeToHex(colorToken).toLowerCase();\n if (normalizedInput.startsWith('#')) {\n const colorsToUse = themeColors[effectiveMode];\n const palette = deepMerge(\n colorsToUse.palette,\n override?.colors?.palette || {}\n );\n const main = deepMerge(colorsToUse.main, override?.colors?.main || {});\n\n // First check main colors for exact match\n for (const [colorName, colorValue] of Object.entries(main)) {\n if (typeof colorValue === 'string') {\n const normalizedPalette = normalizeToHex(colorValue).toLowerCase();\n if (normalizedPalette === normalizedInput) {\n return colorName;\n }\n }\n }\n\n // Then check palette colors for exact match\n for (const [colorName, shades] of Object.entries(palette)) {\n if (typeof shades === 'object' && shades !== null) {\n for (const [, shadeValue] of Object.entries(shades)) {\n if (typeof shadeValue === 'string') {\n const normalizedPalette =\n normalizeToHex(shadeValue).toLowerCase();\n if (normalizedPalette === normalizedInput) {\n return colorName;\n }\n }\n }\n }\n }\n }\n\n return undefined;\n },\n [mergedTheme, themeMode, themeColors]\n );\n\n const getContrastColor = useCallback(\n (name: string, override?: Override): 'black' | 'white' => {\n if (!name || typeof name !== 'string') return 'black';\n\n const effectiveMode = override?.themeMode ?? themeMode;\n\n // First resolve the color to a hex value\n let hexColor: string;\n\n // Check if it's already a hex or rgb color\n if (name.startsWith('#') || name.startsWith('rgb')) {\n hexColor = normalizeToHex(name);\n } else {\n // Resolve the token to get the actual color value\n const resolved = resolveColorTokenForMode(\n name,\n effectiveMode,\n override\n );\n hexColor = normalizeToHex(resolved);\n }\n\n // If we couldn't get a valid hex, default to black\n if (!hexColor.startsWith('#') || hexColor.length < 7) {\n return 'black';\n }\n\n // Extract RGB values\n const hex = hexColor.slice(1);\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n\n // Calculate relative luminance using the sRGB formula\n // https://www.w3.org/TR/WCAG20/#relativeluminancedef\n const toLinear = (c: number) => {\n const sRGB = c / 255;\n return sRGB <= 0.03928\n ? sRGB / 12.92\n : Math.pow((sRGB + 0.055) / 1.055, 2.4);\n };\n\n const luminance =\n 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);\n\n // Use threshold of 0.179 (WCAG recommendation)\n // Return white for dark colors, black for light colors\n return luminance > 0.179 ? 'black' : 'white';\n },\n [themeMode, resolveColorTokenForMode]\n );\n\n // --- Memoize Context Value ---\n const contextValue = useMemo(\n () => ({\n getColor,\n getColorHex,\n getColorRGBA,\n getColorScheme,\n getContrastColor,\n theme: mergedTheme,\n colors: currentColors,\n themeMode,\n setThemeMode,\n }),\n [\n getColor,\n getColorHex,\n getColorRGBA,\n getColorScheme,\n getContrastColor,\n mergedTheme,\n currentColors,\n themeMode,\n ]\n );\n\n // Generate CSS variables\n const cssVariables = useMemo(\n () =>\n generateCSSVariables(mergedTheme, themeColors.light, themeColors.dark),\n [mergedTheme, themeColors]\n );\n\n // Inject CSS variables into target document (for iframe support)\n useEffect(() => {\n if (!targetWindow) return;\n\n const targetDoc = targetWindow.document;\n const styleId = 'app-studio-theme-vars';\n\n // Remove existing style tag if any\n const existing = targetDoc.getElementById(styleId);\n if (existing) {\n existing.remove();\n }\n\n // Create and inject new style tag\n const styleTag = targetDoc.createElement('style');\n styleTag.id = styleId;\n styleTag.textContent = cssVariables;\n targetDoc.head.appendChild(styleTag);\n\n // Cleanup on unmount\n return () => {\n const styleToRemove = targetDoc.getElementById(styleId);\n if (styleToRemove) {\n styleToRemove.remove();\n }\n };\n }, [targetWindow, cssVariables]);\n\n const wrapperStyle: React.CSSProperties = wrapperIsTransparent\n ? { display: 'contents' }\n : {\n backgroundColor: 'var(--color-white)',\n color: 'var(--color-black)',\n width: '100%',\n height: '100%',\n transition: 'background-color 0.2s, color 0.2s',\n };\n\n return (\n <ThemeNestingContext.Provider value={true}>\n <ThemeContext.Provider value={contextValue}>\n {!targetWindow && <style>{cssVariables}</style>}\n <div data-theme={themeMode} style={wrapperStyle}>\n {children}\n </div>\n </ThemeContext.Provider>\n </ThemeNestingContext.Provider>\n );\n};\n","export type ColorPalette = Record<string, Record<number, string>>;\n\nexport type ColorSingleton = Record<string, string>;\n\nexport const defaultLightPalette: ColorPalette = {\n white: {\n 50: 'rgba(255, 255, 255, 0.04)',\n 100: 'rgba(255, 255, 255, 0.08)',\n 200: 'rgba(255, 255, 255, 0.16)',\n 300: 'rgba(255, 255, 255, 0.24)',\n 400: 'rgba(255, 255, 255, 0.36)',\n 500: 'rgba(255, 255, 255, 0.48)',\n 600: 'rgba(255, 255, 255, 0.64)',\n 700: 'rgba(255, 255, 255, 0.80)',\n 800: 'rgba(255, 255, 255, 0.92)',\n 900: 'rgba(255, 255, 255, 1)',\n },\n\n black: {\n 50: 'rgba(0, 0, 0, 0.04)',\n 100: 'rgba(0, 0, 0, 0.08)',\n 200: 'rgba(0, 0, 0, 0.16)',\n 300: 'rgba(0, 0, 0, 0.24)',\n 400: 'rgba(0, 0, 0, 0.36)',\n 500: 'rgba(0, 0, 0, 0.48)',\n 600: 'rgba(0, 0, 0, 0.64)',\n 700: 'rgba(0, 0, 0, 0.80)',\n 800: 'rgba(0, 0, 0, 0.92)',\n 900: 'rgba(0, 0, 0, 1)',\n },\n rose: {\n 50: '#fff1f2',\n 100: '#ffe4e6',\n 200: '#fecdd3',\n 300: '#fda4af',\n 400: '#fb7185',\n 500: '#f43f5e',\n 600: '#e11d48',\n 700: '#be123c',\n 800: '#9f1239',\n 900: '#881337',\n },\n pink: {\n 50: '#fdf2f8',\n 100: '#fce7f3',\n 200: '#fbcfe8',\n 300: '#f9a8d4',\n 400: '#f472b6',\n 500: '#ec4899',\n 600: '#db2777',\n 700: '#be185d',\n 800: '#9d174d',\n 900: '#831843',\n },\n fuchsia: {\n 50: '#fdf4ff',\n 100: '#fae8ff',\n 200: '#f5d0fe',\n 300: '#f0abfc',\n 400: '#e879f9',\n 500: '#d946ef',\n 600: '#c026d3',\n 700: '#a21caf',\n 800: '#86198f',\n 900: '#701a75',\n },\n purple: {\n 50: '#faf5ff',\n 100: '#f3e8ff',\n 200: '#e9d5ff',\n 300: '#d8b4fe',\n 400: '#c084fc',\n 500: '#a855f7',\n 600: '#9333ea',\n 700: '#7e22ce',\n 800: '#6b21a8',\n 900: '#581c87',\n },\n violet: {\n 50: '#f5f3ff',\n 100: '#ede9fe',\n 200: '#ddd6fe',\n 300: '#c4b5fd',\n 400: '#a78bfa',\n 500: '#8b5cf6',\n 600: '#7c3aed',\n 700: '#6d28d9',\n 800: '#5b21b6',\n 900: '#4c1d95',\n },\n indigo: {\n 50: '#eef2ff',\n 100: '#e0e7ff',\n 200: '#c7d2fe',\n 300: '#a5b4fc',\n 400: '#818cf8',\n 500: '#6366f1',\n 600: '#4f46e5',\n 700: '#4338ca',\n 800: '#3730a3',\n 900: '#312e81',\n },\n blue: {\n 50: '#eff6ff',\n 100: '#dbeafe',\n 200: '#bfdbfe',\n 300: '#93c5fd',\n 400: '#60a5fa',\n 500: '#3b82f6',\n 600: '#2563eb',\n 700: '#1d4ed8',\n 800: '#1e40af',\n 900: '#1e3a8a',\n },\n lightBlue: {\n 50: '#f0f9ff',\n 100: '#e0f2fe',\n 200: '#bae6fd',\n 300: '#7dd3fc',\n 400: '#38bdf8',\n 500: '#0ea5e9',\n 600: '#0284c7',\n 700: '#0369a1',\n 800: '#075985',\n 900: '#0c4a6e',\n },\n cyan: {\n 50: '#ecfeff',\n 100: '#cffafe',\n 200: '#a5f3fc',\n 300: '#67e8f9',\n 400: '#22d3ee',\n 500: '#06b6d4',\n 600: '#0891b2',\n 700: '#0e7490',\n 800: '#155e75',\n 900: '#164e63',\n },\n teal: {\n 50: '#f0fdfa',\n 100: '#ccfbf1',\n 200: '#99f6e4',\n 300: '#5eead4',\n 400: '#2dd4bf',\n 500: '#14b8a6',\n 600: '#0d9488',\n 700: '#0f766e',\n 800: '#115e59',\n 900: '#134e4a',\n },\n emerald: {\n 50: '#ecfdf5',\n 100: '#d1fae5',\n 200: '#a7f3d0',\n 300: '#6ee7b7',\n 400: '#34d399',\n 500: '#10b981',\n 600: '#059669',\n 700: '#047857',\n 800: '#065f46',\n 900: '#064e3b',\n },\n green: {\n 50: '#f0fdf4',\n 100: '#dcfce7',\n 200: '#bbf7d0',\n 300: '#86efac',\n 400: '#4ade80',\n 500: '#22c55e',\n 600: '#16a34a',\n 700: '#15803d',\n 800: '#166534',\n 900: '#14532d',\n },\n lime: {\n 50: '#f7fee7',\n 100: '#ecfccb',\n 200: '#d9f99d',\n 300: '#bef264',\n 400: '#a3e635',\n 500: '#84cc16',\n 600: '#65a30d',\n 700: '#4d7c0f',\n 800: '#3f6212',\n 900: '#365314',\n },\n yellow: {\n 50: '#fefce8',\n 100: '#fef9c3',\n 200: '#fef08a',\n 300: '#fde047',\n 400: '#facc15',\n 500: '#eab308',\n 600: '#ca8a04',\n 700: '#a16207',\n 800: '#854d0e',\n 900: '#713f12',\n },\n amber: {\n 50: '#fffbeb',\n 100: '#fef3c7',\n 200: '#fde68a',\n 300: '#fcd34d',\n 400: '#fbbf24',\n 500: '#f59e0b',\n 600: '#d97706',\n 700: '#b45309',\n 800: '#92400e',\n 900: '#78350f',\n },\n orange: {\n 50: '#fff7ed',\n 100: '#ffedd5',\n 200: '#fed7aa',\n 300: '#fdba74',\n 400: '#fb923c',\n 500: '#f97316',\n 600: '#ea580c',\n 700: '#c2410c',\n 800: '#9a3412',\n 900: '#7c2d12',\n },\n red: {\n 50: '#fef2f2',\n 100: '#fee2e2',\n 200: '#fecaca',\n 300: '#fca5a5',\n 400: '#f87171',\n 500: '#ef4444',\n 600: '#dc2626',\n 700: '#b91c1c',\n 800: '#991b1b',\n 900: '#7f1d1d',\n },\n warmGray: {\n 50: '#fafaf9',\n 100: '#f5f5f4',\n 200: '#e7e5e4',\n 300: '#d6d3d1',\n 400: '#a8a29e',\n 500: '#78716c',\n 600: '#57534e',\n 700: '#44403c',\n 800: '#292524',\n 900: '#1c1917',\n },\n trueGray: {\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#e5e5e5',\n 300: '#d4d4d4',\n 400: '#a3a3a3',\n 500: '#737373',\n 600: '#525252',\n 700: '#404040',\n 800: '#262626',\n 900: '#171717',\n },\n gray: {\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n },\n dark: {\n 50: '#18181b',\n 100: '#27272a',\n 200: '#3f3f46',\n 300: '#52525b',\n 400: '#71717a',\n 500: '#a1a1aa',\n 600: '#d4d4d8',\n 700: '#e4e4e7',\n 800: '#f4f4f5',\n 900: '#fafafa',\n },\n light: {\n 50: '#f8f9fa',\n 100: '#f1f3f5',\n 200: '#e9ecef',\n 300: '#dee2e6',\n 400: '#ced4da',\n 500: '#adb5bd',\n 600: '#868e96',\n 700: '#495057',\n 800: '#343a40',\n 900: '#212529',\n },\n coolGray: {\n 50: '#f9fafb',\n 100: '#f3f4f6',\n 200: '#e5e7eb',\n 300: '#d1d5db',\n 400: '#9ca3af',\n 500: '#6b7280',\n 600: '#4b5563',\n 700: '#374151',\n 800: '#1f2937',\n 900: '#111827',\n },\n blueGray: {\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n },\n slate: {\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n },\n zinc: {\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n },\n neutral: {\n 50: '#fafafa',\n 100: '#f5f5f5',\n 200: '#e5e5e5',\n 300: '#d4d4d4',\n 400: '#a3a3a3',\n 500: '#737373',\n 600: '#525252',\n 700: '#404040',\n 800: '#262626',\n 900: '#171717',\n },\n stone: {\n 50: '#fafaf9',\n 100: '#f5f5f4',\n 200: '#e7e5e4',\n 300: '#d6d3d1',\n 400: '#a8a29e',\n 500: '#78716c',\n 600: '#57534e',\n 700: '#44403c',\n 800: '#292524',\n 900: '#1c1917',\n },\n};\n\nexport const defaultDarkPalette: ColorPalette = {\n white: {\n 50: 'rgba(0, 0, 0, 0.04)',\n 100: 'rgba(0, 0, 0, 0.08)',\n 200: 'rgba(0, 0, 0, 0.16)',\n 300: 'rgba(0, 0, 0, 0.24)',\n 400: 'rgba(0, 0, 0, 0.36)',\n 500: 'rgba(0, 0, 0, 0.48)',\n 600: 'rgba(0, 0, 0, 0.64)',\n 700: 'rgba(0, 0, 0, 0.80)',\n 800: 'rgba(0, 0, 0, 0.92)',\n 900: 'rgba(0, 0, 0, 1)',\n },\n\n black: {\n 50: 'rgba(255, 255, 255, 0.04)',\n 100: 'rgba(255, 255, 255, 0.08)',\n 200: 'rgba(255, 255, 255, 0.16)',\n 300: 'rgba(255, 255, 255, 0.24)',\n 400: 'rgba(255, 255, 255, 0.36)',\n 500: 'rgba(255, 255, 255, 0.48)',\n 600: 'rgba(255, 255, 255, 0.64)',\n 700: 'rgba(255, 255, 255, 0.80)',\n 800: 'rgba(255, 255, 255, 0.92)',\n 900: 'rgba(255, 255, 255, 1)',\n },\n\n rose: {\n 50: '#330517',\n 100: '#4a031e',\n 200: '#6b112f',\n 300: '#9f1239',\n 400: '#c81e5b',\n 500: '#e11d48',\n 600: '#be123c',\n 700: '#9f1239',\n 800: '#7f1235',\n 900: '#581c87',\n },\n pink: {\n 50: '#fce7f3',\n 100: '#fbcfe8',\n 200: '#f9a8d4',\n 300: '#f472b6',\n 400: '#ec4899',\n 500: '#db2777',\n 600: '#be185d',\n 700: '#9d174d',\n 800: '#831843',\n 900: '#581c87',\n },\n fuchsia: {\n 50: '#c026d3',\n 100: '#a21caf',\n 200: '#86198f',\n 300: '#701a75',\n 400: '#9333ea',\n 500: '#d946ef',\n 600: '#e879f9',\n 700: '#f0abfc',\n 800: '#f5d0fe',\n 900: '#fae8ff',\n },\n purple: {\n 50: '#6b21a8',\n 100: '#7e22ce',\n 200: '#9333ea',\n 300: '#a855f7',\n 400: '#c084fc',\n 500: '#d8b4fe',\n 600: '#e9d5ff',\n 700: '#f3e8ff',\n 800: '#faf5ff',\n 900: '#fef4ff',\n },\n violet: {\n 50: '#4c1d95',\n 100: '#701a75',\n 200: '#86198f',\n 300: '#a21caf',\n 400: '#c026d3',\n 500: '#d946ef',\n 600: '#e879f9',\n 700: '#f0abfc',\n 800: '#f5d0fe',\n 900: '#fae8ff',\n },\n indigo: {\n 50: '#312e81',\n 100: '#3730a3',\n 200: '#1e40af',\n 300: '#1d4ed8',\n 400: '#2563eb',\n 500: '#3b82f6',\n 600: '#60a5fa',\n 700: '#93c5fd',\n 800: '#bfdbfe',\n 900: '#dbeafe',\n },\n blue: {\n 50: '#1e3a8a',\n 100: '#1e40af',\n 200: '#1d4ed8',\n 300: '#2563eb',\n 400: '#3b82f6',\n 500: '#60a5fa',\n 600: '#93c5fd',\n 700: '#bfdbfe',\n 800: '#dbeafe',\n 900: '#eff6ff',\n },\n lightBlue: {\n 50: '#0c4a6e',\n 100: '#075985',\n 200: '#0369a1',\n 300: '#0284c7',\n 400: '#0ea5e9',\n 500: '#38bdf8',\n 600: '#7dd3fc',\n 700: '#bae6fd',\n 800: '#e0f2fe',\n 900: '#f0f9ff',\n },\n cyan: {\n 50: '#164e63',\n 100: '#155e75',\n 200: '#0e7490',\n 300: '#0891b2',\n 400: '#22d3ee',\n 500: '#67e8f9',\n 600: '#a5f3fc',\n 700: '#cffafe',\n 800: '#ecfeff',\n 900: '#f0fefe',\n },\n teal: {\n 50: '#134e4a',\n 100: '#166534',\n 200: '#15803d',\n 300: '#16a34a',\n 400: '#22c55e',\n 500: '#4ade80',\n 600: '#5eead4',\n 700: '#99f6e4',\n 800: '#ccfbf1',\n 900: '#f0fdfa',\n },\n emerald: {\n 50: '#064e3b',\n 100: '#065f46',\n 200: '#047857',\n 300: '#059669',\n 400: '#10b981',\n 500: '#34d399',\n 600: '#6ee7b7',\n 700: '#a7f3d0',\n 800: '#d1fae5',\n 900: '#ecfdf5',\n },\n green: {\n 50: '#14532d',\n 100: '#166534',\n 200: '#15803d',\n 300: '#16a34a',\n 400: '#22c55e',\n 500: '#4ade80',\n 600: '#86efac',\n 700: '#bbf7d0',\n 800: '#dcfce7',\n 900: '#f0fdf4',\n },\n lime: {\n 50: '#365314',\n 100: '#3f6212',\n 200: '#4d7c0f',\n 300: '#65a30d',\n 400: '#84cc16',\n 500: '#a3e635',\n 600: '#bef264',\n 700: '#d9f99d',\n 800: '#ecfccb',\n 900: '#f7fee7',\n },\n yellow: {\n 50: '#713f12',\n 100: '#854d0e',\n 200: '#a16207',\n 300: '#ca8a04',\n 400: '#eab308',\n 500: '#facc15',\n 600: '#fde047',\n 700: '#fef08a',\n 800: '#fef9c3',\n 900: '#fefce8',\n },\n amber: {\n 50: '#78350f',\n 100: '#92400e',\n 200: '#b45309',\n 300: '#d97706',\n 400: '#f59e0b',\n 500: '#fbbf24',\n 600: '#fcd34d',\n 700: '#fde68a',\n 800: '#fef3c7',\n 900: '#fffbeb',\n },\n orange: {\n 50: '#7c2d12',\n 100: '#9a3412',\n 200: '#c2410c',\n 300: '#ea580c',\n 400: '#f97316',\n 500: '#fb923c',\n 600: '#fdba74',\n 700: '#fed7aa',\n 800: '#ffedd5',\n 900: '#fff7ed',\n },\n red: {\n 50: '#7f1d1d',\n 100: '#991b1b',\n 200: '#b91c1c',\n 300: '#dc2626',\n 400: '#ef4444',\n 500: '#f87171',\n 600: '#fca5a5',\n 700: '#fecaca',\n 800: '#fee2e2',\n 900: '#fef2f2',\n },\n warmGray: {\n 50: '#1c1917',\n 100: '#292524',\n 200: '#44403c',\n 300: '#57534e',\n 400: '#78716c',\n 500: '#a8a29e',\n 600: '#d6d3d1',\n 700: '#e7e5e4',\n 800: '#f5f5f4',\n 900: '#fafaf9',\n },\n trueGray: {\n 50: '#171717',\n 100: '#262626',\n 200: '#404040',\n 300: '#525252',\n 400: '#737373',\n 500: '#a3a3a3',\n 600: '#d4d4d4',\n 700: '#e5e5e5',\n 800: '#f5f5f5',\n 900: '#fafafa',\n },\n gray: {\n 50: '#18181b',\n 100: '#27272a',\n 200: '#3f3f46',\n 300: '#52525b',\n 400: '#71717a',\n 500: '#a1a1aa',\n 600: '#d4d4d8',\n 700: '#e4e4e7',\n 800: '#f4f4f5',\n 900: '#fafafa',\n },\n dark: {\n 50: '#212529',\n 100: '#343a40',\n 200: '#495057',\n 300: '#868e96',\n 400: '#adb5bd',\n 500: '#ced4da',\n 600: '#dee2e6',\n 700: '#f1f3f5',\n 800: '#f8f9fa',\n 900: '#ffffff',\n },\n light: {\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n },\n coolGray: {\n 50: '#111827',\n 100: '#1f2937',\n 200: '#374151',\n 300: '#4b5563',\n 400: '#6b7280',\n 500: '#9ca3af',\n 600: '#d1d5db',\n 700: '#e5e7eb',\n 800: '#f3f4f6',\n 900: '#f9fafb',\n },\n blueGray: {\n 50: '#0f172a',\n 100: '#1e293b',\n 200: '#334155',\n 300: '#475569',\n 400: '#64748b',\n 500: '#94a3b8',\n 600: '#cbd5e1',\n 700: '#e2e8f0',\n 800: '#f1f5f9',\n 900: '#f8fafc',\n },\n slate: {\n 50: '#0f172a',\n 100: '#1e293b',\n 200: '#334155',\n 300: '#475569',\n 400: '#64748b',\n 500: '#94a3b8',\n 600: '#cbd5e1',\n 700: '#e2e8f0',\n 800: '#f1f5f9',\n 900: '#f8fafc',\n },\n zinc: {\n 50: '#18181b',\n 100: '#27272a',\n 200: '#3f3f46',\n 300: '#52525b',\n 400: '#71717a',\n 500: '#a1a1aa',\n 600: '#d4d4d8',\n 700: '#e4e4e7',\n 800: '#f4f4f5',\n 900: '#fafafa',\n },\n neutral: {\n 50: '#171717',\n 100: '#262626',\n 200: '#404040',\n 300: '#525252',\n 400: '#737373',\n 500: '#a3a3a3',\n 600: '#d4d4d4',\n 700: '#e5e5e5',\n 800: '#f5f5f5',\n 900: '#fafafa',\n },\n stone: {\n 50: '#1c1917',\n 100: '#292524',\n 200: '#44403c',\n 300: '#57534e',\n 400: '#78716c',\n 500: '#a8a29e',\n 600: '#d6d3d1',\n 700: '#e7e5e4',\n 800: '#f5f5f4',\n 900: '#fafaf9',\n },\n};\n\nexport const defaultColors: ColorConfig = {\n white: '#FFFFFF',\n black: '#000000',\n red: '#FF0000',\n green: '#00FF00',\n blue: '#0000FF',\n yellow: '#FFFF00',\n cyan: '#00FFFF',\n magenta: '#FF00FF',\n grey: '#808080',\n orange: '#FFA500',\n brown: '#A52A2A',\n purple: '#800080',\n pink: '#FFC0CB',\n};\n\nexport type ColorConfig = Record<string, string>;\n\nexport const defaultLightColors: ColorConfig = { ...defaultColors };\nexport const defaultDarkColors: ColorConfig = {\n ...defaultColors,\n white: '#000000',\n black: '#FFFFFF',\n};\n\n// Centralized regex for color token detection\n// Matches color-x-y-z or theme-x-y (dash notation)\nconst COLOR_TOKEN_REGEX = /(color-[a-zA-Z0-9-]+|theme-[a-zA-Z0-9-]+)/g;\n\n/**\n * Checks if a value contains color tokens.\n * @param value - The string to check.\n * @returns True if the value contains color tokens.\n */\nexport const hasColorToken = (value: string): boolean => {\n return value.includes('color-') || value.includes('theme-');\n};\n\n/**\n * Replaces color tokens in a string with values returned by a resolver function.\n * @param value - The string containing color tokens.\n * @param resolver - A function that takes a token and returns its replacement value.\n * @returns The string with color tokens replaced.\n */\nexport const replaceColorTokens = (\n value: string,\n resolver: (token: string) => string\n): string => {\n if (!hasColorToken(value)) {\n return value;\n }\n\n return value.replace(COLOR_TOKEN_REGEX, (token) => {\n return resolver(token);\n });\n};\n","// ResponsiveContext.tsx\nimport React, {\n ReactNode,\n createContext,\n useContext,\n useMemo,\n useState,\n useEffect,\n useRef,\n} from 'react';\n\n// Define Types\nexport type ResponsiveConfig = Record<string, number>;\n\nconst defaultBreakpointsConfig: ResponsiveConfig = {\n xs: 0,\n sm: 340,\n md: 560,\n lg: 1080,\n xl: 1300,\n};\n\nexport type ScreenOrientation = 'landscape' | 'portrait';\n\nexport type DeviceType = 'mobile' | 'tablet' | 'desktop';\n\nexport type DeviceConfig = Record<string, string[]>;\n\nconst defaultDeviceConfig: DeviceConfig = {\n mobile: ['xs', 'sm'],\n tablet: ['md', 'lg'],\n desktop: ['lg', 'xl'],\n};\n\nexport type QueryConfig = Record<string, string>;\n\n// Split context types for optimized re-renders\n// BreakpointConfig changes rarely (only when crossing breakpoint thresholds)\nexport type BreakpointConfig = {\n breakpoints: ResponsiveConfig;\n devices: DeviceConfig;\n mediaQueries: QueryConfig;\n currentBreakpoint: keyof ResponsiveConfig;\n currentDevice: DeviceType;\n orientation: ScreenOrientation;\n};\n\n// WindowDimensions changes often (on every resize)\nexport type WindowDimensions = {\n width: number;\n height: number;\n};\n\n// Combined ScreenConfig for backward compatibility\nexport type ScreenConfig = {\n breakpoints: ResponsiveConfig;\n devices: DeviceConfig;\n mediaQueries: QueryConfig;\n currentWidth: number;\n currentHeight: number;\n currentBreakpoint: keyof ResponsiveConfig;\n currentDevice: DeviceType;\n orientation: ScreenOrientation;\n};\n\n// Helper Function to Generate Media Queries\nconst getMediaQueries = (breakpoints: ResponsiveConfig): QueryConfig => {\n const sortedBreakpoints = Object.keys(breakpoints)\n .map((key) => ({\n breakpoint: key as keyof ResponsiveConfig,\n min: breakpoints[key],\n max: undefined as number | undefined,\n }))\n .sort((a, b) => a.min - b.min);\n\n for (let i = 0; i < sortedBreakpoints.length - 1; i++) {\n sortedBreakpoints[i].max = sortedBreakpoints[i + 1].min - 1;\n }\n\n const queries: Record<string, string> = {};\n\n sortedBreakpoints.forEach((bp) => {\n let mediaQuery = 'only screen';\n if (bp.min > 0) {\n mediaQuery += ` and (min-width: ${bp.min}px)`;\n }\n if (bp.max !== undefined) {\n mediaQuery += ` and (max-width: ${bp.max}px)`;\n }\n queries[bp.breakpoint] = mediaQuery.trim();\n });\n\n return queries;\n};\n\n// Utility Function to Determine Current Device Type\nconst determineCurrentDevice = (\n breakpoint: keyof ResponsiveConfig,\n devices: DeviceConfig\n): DeviceType => {\n for (const device in devices) {\n if (devices[device as DeviceType].includes(breakpoint)) {\n return device as DeviceType;\n }\n }\n return 'desktop'; // Default to desktop if not found\n};\n\n// Debounce Function to Optimize Resize Handling\nexport const debounce = (func: Function, wait: number) => {\n let timeout: NodeJS.Timeout;\n return (...args: any[]) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n};\n\n// Helper to compute breakpoint from width\nconst getBreakpointFromWidth = (\n width: number,\n breakpoints: ResponsiveConfig\n): string => {\n const sortedBreakpoints = Object.entries(breakpoints).sort(\n ([, a], [, b]) => b - a\n ); // Sort descending by min value\n\n for (const [name, minWidth] of sortedBreakpoints) {\n if (width >= minWidth) {\n return name;\n }\n }\n const fallback = sortedBreakpoints[sortedBreakpoints.length - 1]?.[0] || 'xs';\n return fallback;\n};\n\n// ============================================================================\n// SPLIT CONTEXTS FOR OPTIMIZED RE-RENDERS\n// ============================================================================\n\n// BreakpointContext - changes rarely (only on breakpoint threshold crossing)\nconst defaultBreakpointConfig: BreakpointConfig = {\n breakpoints: defaultBreakpointsConfig,\n devices: defaultDeviceConfig,\n mediaQueries: getMediaQueries(defaultBreakpointsConfig),\n currentBreakpoint: 'xs',\n currentDevice: 'mobile',\n orientation: 'portrait',\n};\n\nexport const BreakpointContext = createContext<BreakpointConfig>(\n defaultBreakpointConfig\n);\n\n// WindowDimensionsContext - changes often (on every resize)\nconst defaultWindowDimensions: WindowDimensions = {\n width: 0,\n height: 0,\n};\n\nexport const WindowDimensionsContext = createContext<WindowDimensions>(\n defaultWindowDimensions\n);\n\n// ============================================================================\n// HOOKS FOR SPLIT CONTEXTS\n// ============================================================================\n\n/**\n * Hook to access breakpoint information only.\n * Components using this hook will NOT re-render on every resize,\n * only when the breakpoint actually changes.\n */\nexport const useBreakpointContext = (): BreakpointConfig =>\n useContext(BreakpointContext);\n\n/**\n * Hook to access window dimensions.\n * Components using this hook WILL re-render on every resize.\n * Use sparingly - prefer useBreakpointContext when possible.\n */\nexport const useWindowDimensionsContext = (): WindowDimensions =>\n useContext(WindowDimensionsContext);\n\n// ============================================================================\n// LEGACY CONTEXT FOR BACKWARD COMPATIBILITY\n// ============================================================================\n\n// Create the combined Context with default values (for backward compatibility)\nexport const ResponsiveContext = createContext<ScreenConfig>({\n breakpoints: defaultBreakpointsConfig,\n devices: defaultDeviceConfig,\n mediaQueries: getMediaQueries(defaultBreakpointsConfig),\n currentWidth: 0,\n currentHeight: 0,\n currentBreakpoint: 'xs',\n currentDevice: 'mobile',\n orientation: 'portrait',\n});\n\n/**\n * Legacy hook for backward compatibility.\n * Prefer useBreakpointContext for better performance.\n * @deprecated Use useBreakpointContext instead for better performance\n */\nexport const useResponsiveContext = (): ScreenConfig =>\n useContext(ResponsiveContext);\n\n// ============================================================================\n// PROVIDER\n// ============================================================================\n\nexport interface ResponsiveProviderProps {\n breakpoints?: ResponsiveConfig;\n devices?: DeviceConfig;\n children: ReactNode;\n /** Optional target window to track (for iframe support). Defaults to global window. */\n targetWindow?: Window;\n}\n\nexport const ResponsiveProvider = ({\n breakpoints = defaultBreakpointsConfig,\n devices = defaultDeviceConfig,\n children,\n targetWindow,\n}: ResponsiveProviderProps) => {\n const win = targetWindow || (typeof window !== 'undefined' ? window : null);\n\n // Track current breakpoint - only updates when crossing thresholds\n const [screen, setScreen] = useState(() => {\n if (win) {\n return getBreakpointFromWidth(win.innerWidth, breakpoints);\n }\n return 'xs';\n });\n\n // Track orientation - rarely changes\n const [orientation, setOrientation] = useState<ScreenOrientation>('portrait');\n\n // Track window dimensions - changes often\n const [dimensions, setDimensions] = useState<WindowDimensions>({\n width: win?.innerWidth || 0,\n height: win?.innerHeight || 0,\n });\n\n // Use ref to track previous breakpoint to avoid unnecessary state updates\n const prevBreakpointRef = useRef(screen);\n\n const mediaQueries = useMemo(\n () => getMediaQueries(breakpoints),\n [breakpoints]\n );\n\n useEffect(() => {\n if (!win) return;\n\n // Set initial screen size immediately based on window width\n const initialScreen = getBreakpointFromWidth(win.innerWidth, breakpoints);\n setScreen(initialScreen);\n prevBreakpointRef.current = initialScreen;\n\n const handleResize = () => {\n const newWidth = win.innerWidth;\n const newHeight = win.innerHeight;\n\n // Always update dimensions (WindowDimensionsContext will re-render)\n setDimensions({ width: newWidth, height: newHeight });\n\n // Only update breakpoint if it actually changed\n // This prevents BreakpointContext from causing unnecessary re-renders\n const newScreen = getBreakpointFromWidth(newWidth, breakpoints);\n if (newScreen !== prevBreakpointRef.current) {\n prevBreakpointRef.current = newScreen;\n setScreen(newScreen);\n }\n };\n\n const debouncedResize = debounce(handleResize, 100);\n win.addEventListener('resize', debouncedResize);\n\n // Set up orientation listener\n const orientationMql = win.matchMedia('(orientation: landscape)');\n const onOrientationChange = () =>\n setOrientation(orientationMql.matches ? 'landscape' : 'portrait');\n\n if (orientationMql.addEventListener) {\n orientationMql.addEventListener('change', onOrientationChange);\n } else {\n orientationMql.addListener(onOrientationChange);\n }\n\n onOrientationChange();\n\n return () => {\n win.removeEventListener('resize', debouncedResize);\n if (orientationMql.removeEventListener) {\n orientationMql.removeEventListener('change', onOrientationChange);\n } else {\n orientationMql.removeListener(onOrientationChange);\n }\n };\n }, [breakpoints, win]);\n\n // Breakpoint context value - only updates when breakpoint/orientation changes\n const breakpointValue = useMemo<BreakpointConfig>(\n () => ({\n breakpoints,\n devices,\n mediaQueries,\n currentBreakpoint: screen,\n currentDevice: determineCurrentDevice(screen, devices),\n orientation,\n }),\n [breakpoints, devices, mediaQueries, screen, orientation]\n );\n\n // Window dimensions context value - updates on every resize\n const dimensionsValue = useMemo<WindowDimensions>(\n () => ({\n width: dimensions.width,\n height: dimensions.height,\n }),\n [dimensions.width, dimensions.height]\n );\n\n // Combined legacy context value for backward compatibility\n const legacyValue = useMemo<ScreenConfig>(\n () => ({\n breakpoints,\n devices,\n mediaQueries,\n currentWidth: dimensions.width,\n currentHeight: dimensions.height,\n currentBreakpoint: screen,\n currentDevice: determineCurrentDevice(screen, devices),\n orientation,\n }),\n [breakpoints, devices, mediaQueries, dimensions, screen, orientation]\n );\n\n return (\n <BreakpointContext.Provider value={breakpointValue}>\n <WindowDimensionsContext.Provider value={dimensionsValue}>\n <ResponsiveContext.Provider value={legacyValue}>\n {children}\n </ResponsiveContext.Provider>\n </WindowDimensionsContext.Provider>\n </BreakpointContext.Provider>\n );\n};\n","import React, { createContext, useContext, useMemo } from 'react';\nimport {\n UtilityClassManager,\n utilityClassManager as globalManager,\n propertyShorthand,\n} from '../element/css';\n\n/**\n * Context to hold the style manager instance.\n */\ninterface StyleRegistryContextValue {\n manager: UtilityClassManager;\n}\n\nconst StyleRegistryContext = createContext<StyleRegistryContextValue>({\n manager: globalManager,\n});\n\n/**\n * Hook to access the current style manager.\n */\nexport const useStyleRegistry = () => useContext(StyleRegistryContext);\n\ninterface StyleRegistryProps {\n registry?: UtilityClassManager;\n children: React.ReactNode;\n}\n\n/**\n * Provider to wrap the app and manage styles.\n * When doing SSR, pass a new registry created via createStyleRegistry().\n */\nexport const StyleRegistry = ({ registry, children }: StyleRegistryProps) => {\n const value = useMemo(\n () => ({\n // If no registry provided, fallback to globalManager\n manager: registry || globalManager,\n }),\n [registry]\n );\n\n return (\n <StyleRegistryContext.Provider value={value}>\n {children}\n </StyleRegistryContext.Provider>\n );\n};\n\n/**\n * Helper to create a new style registry (UtilityClassManager) instance.\n * Useful for SSR to create a fresh manager per request.\n */\nexport const createStyleRegistry = () => {\n return new UtilityClassManager(propertyShorthand, 10000);\n};\n\n/**\n * React hook to get the CSS string from the registry.\n * Note: This only works if you're using a fresh registry that collected styles.\n */\nexport const useServerInsertedHTML = (registry: UtilityClassManager) => {\n return () => {\n return (\n <style\n id=\"app-studio-server-css\"\n dangerouslySetInnerHTML={{ __html: registry.getServerStyles() }}\n />\n );\n };\n};\n","export type Shadow = {\n shadowColor: string;\n shadowOffset: {\n width: number;\n height: number;\n };\n shadowOpacity: number;\n shadowRadius: number;\n};\n\nexport const Shadows: Record<number, Shadow> = {\n 0: {\n shadowColor: '#000',\n shadowOffset: {\n width: 1,\n height: 2,\n },\n shadowOpacity: 0.18,\n shadowRadius: 1.0,\n },\n 1: {\n shadowColor: '#000',\n shadowOffset: {\n width: 2,\n height: 2,\n },\n shadowOpacity: 0.2,\n shadowRadius: 1.41,\n },\n 2: {\n shadowColor: '#000',\n shadowOffset: {\n width: 3,\n height: 3,\n },\n shadowOpacity: 0.22,\n shadowRadius: 2.22,\n },\n 3: {\n shadowColor: '#000',\n shadowOffset: {\n width: 4,\n height: 4,\n },\n shadowOpacity: 0.23,\n shadowRadius: 2.62,\n },\n 4: {\n shadowColor: '#000',\n shadowOffset: {\n width: 5,\n height: 5,\n },\n shadowOpacity: 0.25,\n shadowRadius: 3.84,\n },\n 5: {\n shadowColor: '#000',\n shadowOffset: {\n width: 6,\n height: 6,\n },\n shadowOpacity: 0.27,\n shadowRadius: 4.65,\n },\n 6: {\n shadowColor: '#000',\n shadowOffset: {\n width: 7,\n height: 7,\n },\n shadowOpacity: 0.29,\n shadowRadius: 4.65,\n },\n 7: {\n shadowColor: '#000',\n shadowOffset: {\n width: 8,\n height: 8,\n },\n shadowOpacity: 0.3,\n shadowRadius: 4.65,\n },\n 8: {\n shadowColor: '#000',\n shadowOffset: {\n width: 9,\n height: 9,\n },\n shadowOpacity: 0.32,\n shadowRadius: 5.46,\n },\n 9: {\n shadowColor: '#000',\n shadowOffset: {\n width: 10,\n height: 10,\n },\n shadowOpacity: 0.34,\n shadowRadius: 6.27,\n },\n};\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable prefer-const */\nimport { Shadows } from '../utils/shadow';\nimport Color from 'color-convert';\nimport { generateKeyframes } from './utils';\nimport {\n isStyleProp,\n StyleProps,\n propertyToKebabCase,\n toKebabCase,\n processStyleProperty,\n} from '../utils/style';\nimport { ElementProps } from './Element.types';\nimport { numericCssProperties } from '../utils/cssProperties';\nimport {\n needsVendorPrefix,\n getVendorPrefixedProperties,\n} from '../utils/vendorPrefixes';\nimport { hash } from '../utils/hash';\n\ntype StyleContext =\n | 'base-shorthand'\n | 'base-side'\n | 'base-cross'\n | 'base'\n | 'pseudo'\n | 'media'\n | 'modifier'\n | 'override-shorthand'\n | 'override-side'\n | 'override-cross'\n | 'override';\n\n// Top-level CSS shorthands that reset a wide set of longhands on conflict.\n// Rules for these properties are injected into a stylesheet that appears\n// FIRST in the document, so longhand overrides written later in source order\n// win the cascade regardless of which element first instantiated each class.\nconst TIER2_SHORTHANDS = new Set<string>([\n 'all',\n 'background',\n 'border',\n 'borderRadius',\n 'font',\n 'margin',\n 'padding',\n 'animation',\n 'transition',\n 'flex',\n 'grid',\n 'gridTemplate',\n 'gridArea',\n 'outline',\n 'inset',\n 'gap',\n 'gridGap',\n 'listStyle',\n 'textDecoration',\n 'placeItems',\n 'placeContent',\n 'placeSelf',\n 'overflow',\n 'mask',\n 'columns',\n 'columnRule',\n]);\n\n// Side-shorthands: target a single side of the box and override tier-2\n// shorthands for that side. Example: `borderTop` overrides the top piece of\n// `border`. They MUST cascade before tier-4 cross-property shorthands so\n// that `borderColor` wins the per-side color slot when both are written.\nconst TIER3_SIDE_SHORTHANDS = new Set<string>([\n 'borderTop',\n 'borderRight',\n 'borderBottom',\n 'borderLeft',\n]);\n\n// Cross-property shorthands: span all sides for one CSS property and reset\n// the per-side longhands. Example: `borderColor` resets all four\n// `border-*-color` longhands. These intersect with side-shorthands at\n// `border-{side}-{prop}` (e.g. `border-top-color`), so they must cascade\n// AFTER side-shorthands to win that intersection.\nconst TIER4_CROSS_SHORTHANDS = new Set<string>([\n 'borderColor',\n 'borderStyle',\n 'borderWidth',\n 'borderImage',\n]);\n\nfunction baseContextForProperty(property: string): StyleContext {\n if (TIER2_SHORTHANDS.has(property)) return 'base-shorthand';\n if (TIER3_SIDE_SHORTHANDS.has(property)) return 'base-side';\n if (TIER4_CROSS_SHORTHANDS.has(property)) return 'base-cross';\n return 'base';\n}\n\nfunction overrideContextForProperty(property: string): StyleContext {\n if (TIER2_SHORTHANDS.has(property)) return 'override-shorthand';\n if (TIER3_SIDE_SHORTHANDS.has(property)) return 'override-side';\n if (TIER4_CROSS_SHORTHANDS.has(property)) return 'override-cross';\n return 'override';\n}\n\n// Implement a simple LRU cache for classCache\nclass LRUCache<K, V> {\n private cache: Map<K, V>;\n private maxSize: number;\n\n constructor(maxSize: number) {\n this.maxSize = maxSize;\n this.cache = new Map();\n }\n\n get(key: K): V | undefined {\n const item = this.cache.get(key);\n if (item) {\n // Move to the end to mark as recently used\n this.cache.delete(key);\n this.cache.set(key, item);\n return item;\n }\n return undefined;\n }\n\n set(key: K, value: V): void {\n if (this.cache.has(key)) {\n // If already in cache, just move to the end\n this.cache.delete(key);\n } else if (this.cache.size >= this.maxSize) {\n // Remove the least recently used (first item in the map)\n const firstKey = this.cache.keys().next().value;\n if (firstKey) {\n this.cache.delete(firstKey);\n }\n }\n this.cache.set(key, value);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n delete(key: K): void {\n this.cache.delete(key);\n }\n\n get size(): number {\n return this.cache.size;\n }\n\n keys(): IterableIterator<K> {\n return this.cache.keys();\n }\n\n values(): IterableIterator<V> {\n return this.cache.values();\n }\n\n has(key: K): boolean {\n return this.cache.has(key);\n }\n}\n\n// Store raw CSS classes\nconst rawCssCache = new Map<string, string>();\n\n/**\n * Maps a React event to a CSS pseudo-class.\n */\nconst EVENT_TO_PSEUDO: Record<string, string> = {\n // Basic interaction states\n hover: 'hover',\n active: 'active',\n focus: 'focus',\n visited: 'visited',\n // Form states\n disabled: 'disabled',\n enabled: 'enabled',\n checked: 'checked',\n unchecked: 'not(:checked)',\n invalid: 'invalid',\n valid: 'valid',\n required: 'required',\n optional: 'optional',\n // Selection states\n selected: 'selected',\n // Target states\n target: 'target',\n // Child states\n firstChild: 'first-child',\n lastChild: 'last-child',\n onlyChild: 'only-child',\n firstOfType: 'first-of-type',\n lastOfType: 'last-of-type',\n // Other states\n empty: 'empty',\n // Focus states\n focusVisible: 'focus-visible',\n focusWithin: 'focus-within',\n // Placeholder\n placeholder: 'placeholder',\n // Pseudo-elements\n before: 'before',\n after: 'after',\n firstLetter: 'first-letter',\n firstLine: 'first-line',\n selection: 'selection',\n backdrop: 'backdrop',\n marker: 'marker',\n // Group modifiers\n groupHover: 'group-hover',\n groupFocus: 'group-focus',\n groupActive: 'group-active',\n groupDisabled: 'group-disabled',\n // Peer modifiers\n peerHover: 'peer-hover',\n peerFocus: 'peer-focus',\n peerActive: 'peer-active',\n peerDisabled: 'peer-disabled',\n peerChecked: 'peer-checked',\n};\n\n/**\n * Utility functions for animation handling\n */\nexport const AnimationUtils = {\n parseDuration(duration: string): number {\n const match = duration.match(/^([\\d.]+)(ms|s)$/);\n if (!match) return 0;\n const value = parseFloat(match[1]);\n const unit = match[2];\n return unit === 's' ? value * 1000 : value;\n },\n\n formatDuration(ms: number): string {\n if (ms >= 1000 && ms % 1000 === 0) {\n return `${ms / 1000}s`;\n }\n return `${ms}ms`;\n },\n\n processAnimations(animations: any[], manager?: UtilityClassManager) {\n const result = {\n names: [] as string[],\n durations: [] as string[],\n timingFunctions: [] as string[],\n delays: [] as string[],\n iterationCounts: [] as string[],\n directions: [] as string[],\n fillModes: [] as string[],\n playStates: [] as string[],\n timelines: [] as string[],\n ranges: [] as string[],\n };\n\n let cumulativeTime = 0;\n\n animations.forEach((animation) => {\n const { keyframesName, keyframes } = generateKeyframes(animation);\n if (keyframes) {\n // Use provided manager or fall back to global\n (manager || utilityClassManager).injectRule(keyframes);\n }\n\n result.names.push(keyframesName);\n\n // For scroll-driven animations (with timeline), use 'auto' duration\n // For time-based animations, parse the duration normally\n const hasTimeline = !!animation.timeline;\n\n if (hasTimeline) {\n // Scroll-driven animations should use 'auto' duration\n // unless explicitly specified\n result.durations.push(animation.duration || 'auto');\n // Don't accumulate time for scroll-driven animations\n result.delays.push(animation.delay || '0s');\n } else {\n const durationMs = this.parseDuration(animation.duration || '0s');\n const delayMs = this.parseDuration(animation.delay || '0s');\n const totalDelayMs = cumulativeTime + delayMs;\n\n cumulativeTime = totalDelayMs + durationMs;\n\n result.durations.push(this.formatDuration(durationMs));\n result.delays.push(this.formatDuration(totalDelayMs));\n }\n\n result.timingFunctions.push(animation.timingFunction || 'ease');\n result.iterationCounts.push(\n animation.iterationCount !== undefined\n ? `${animation.iterationCount}`\n : '1'\n );\n result.directions.push(animation.direction || 'normal');\n // Default to 'both' fillMode for scroll-driven animations, 'none' for time-based\n result.fillModes.push(\n animation.fillMode || (hasTimeline ? 'both' : 'none')\n );\n result.playStates.push(animation.playState || 'running');\n result.timelines.push(animation.timeline || '');\n result.ranges.push(animation.range || '');\n });\n\n return {\n animationName: result.names.join(', '),\n animationDuration: result.durations.join(', '),\n animationTimingFunction: result.timingFunctions.join(', '),\n animationDelay: result.delays.join(', '),\n animationIterationCount: result.iterationCounts.join(', '),\n animationDirection: result.directions.join(', '),\n animationFillMode: result.fillModes.join(', '),\n animationPlayState: result.playStates.join(', '),\n ...(result.timelines.some((t) => t) && {\n animationTimeline: result.timelines.join(', '),\n }),\n ...(result.ranges.some((r) => r) && {\n animationRange: result.ranges.join(', '),\n }),\n };\n },\n};\n\n/**\n * Utility functions for value processing\n */\nconst ValueUtils = {\n formatValue(\n value: any,\n property: string,\n getColor: (color: string) => string\n ): any {\n // Use the shared processStyleProperty function which now contains the robust regex logic\n return processStyleProperty(property, value, getColor);\n },\n\n normalizeCssValue(value: any): string {\n const str = typeof value === 'string' ? value : String(value);\n\n // Handle CSS variables in values\n if (str.charCodeAt(0) === 45 && str.charCodeAt(1) === 45) {\n // starts with '--'\n return `var-${str.substring(2)}`;\n }\n\n // Handle vendor-prefixed values\n if (str.startsWith('-webkit-')) {\n return `webkit-${str\n .substring(8)\n .replace(/\\./g, 'p')\n .replace(/\\s+/g, '-')\n .replace(/[^a-zA-Z0-9-]/g, '')}`;\n }\n\n // Single-pass normalization: replace dots with 'p', spaces with '-', strip non-alphanumeric\n return str\n .replace(/\\./g, 'p')\n .replace(/\\s+/g, '-')\n .replace(/[^a-zA-Z0-9-]/g, '');\n },\n\n generateUniqueClassName(css: string): string {\n if (rawCssCache.has(css)) {\n return rawCssCache.get(css)!;\n }\n\n const shortName = hash(css);\n const newClassName = `raw-css-${shortName}`;\n\n rawCssCache.set(css, newClassName);\n return newClassName;\n },\n};\n\nexport class UtilityClassManager {\n private styleSheets: Map<Document, Record<StyleContext, CSSStyleSheet>> =\n new Map();\n private classCache: LRUCache<\n string,\n {\n className: string;\n rules: Array<{\n rule: string;\n context: StyleContext;\n }>;\n }\n >;\n private propertyShorthand: Record<string, string>;\n private mainDocument: Document | null = null;\n\n constructor(\n propertyShorthand: Record<string, string>,\n maxCacheSize: number = 10000\n ) {\n this.propertyShorthand = propertyShorthand;\n this.classCache = new LRUCache(maxCacheSize);\n\n if (typeof document !== 'undefined') {\n this.mainDocument = document;\n this.initStyleSheets(document);\n }\n }\n\n private initStyleSheets(targetDocument: Document) {\n if (!this.styleSheets.has(targetDocument)) {\n const sheetMap: Record<StyleContext, CSSStyleSheet> = {} as any;\n\n // Initialize all style sheets at once\n // Order matters: <style> tags are appended to <head> in the order\n // listed here, and the cascade resolves equal-specificity rules by\n // source order. Earlier entries cascade FIRST (lower priority), so\n // top-level shorthands like `border` are listed before their\n // sub-shorthands and longhands.\n const contextIds: Record<StyleContext, string> = {\n 'base-shorthand': 'utility-classes-base-shorthand',\n 'base-side': 'utility-classes-base-side',\n 'base-cross': 'utility-classes-base-cross',\n base: 'utility-classes-base',\n pseudo: 'utility-classes-pseudo',\n media: 'utility-classes-media',\n modifier: 'utility-classes-modifier',\n 'override-shorthand': 'utility-classes-override-shorthand',\n 'override-side': 'utility-classes-override-side',\n 'override-cross': 'utility-classes-override-cross',\n override: 'utility-classes-override',\n };\n\n for (const [context, id] of Object.entries(contextIds)) {\n let styleTag = targetDocument.getElementById(id) as HTMLStyleElement;\n\n if (!styleTag) {\n styleTag = targetDocument.createElement('style');\n styleTag.id = id;\n targetDocument.head.appendChild(styleTag);\n }\n\n sheetMap[context as StyleContext] = styleTag.sheet as CSSStyleSheet;\n }\n\n this.styleSheets.set(targetDocument, sheetMap);\n }\n }\n\n private getDocumentRules(targetDocument: Document): Array<{\n cssText: string;\n context: StyleContext;\n }> {\n const rules: Array<{ cssText: string; context: StyleContext }> = [];\n const styleSheetsMap = this.styleSheets.get(targetDocument);\n\n if (!styleSheetsMap) return rules;\n\n // Get rules from all contexts\n for (const [context, sheet] of Object.entries(styleSheetsMap)) {\n Array.from(sheet.cssRules).forEach((rule) => {\n rules.push({ cssText: rule.cssText, context: context as StyleContext });\n });\n }\n\n return rules;\n }\n\n public addDocument(targetDocument: Document) {\n if (targetDocument === this.mainDocument) return;\n\n this.initStyleSheets(targetDocument);\n this.clearStylesFromDocument(targetDocument);\n\n // Copy rules from main document\n if (this.mainDocument) {\n const mainRules = this.getDocumentRules(this.mainDocument);\n mainRules.forEach(({ cssText, context }) => {\n this.injectRuleToDocument(cssText, context, targetDocument);\n });\n }\n }\n\n private clearStylesFromDocument(targetDocument: Document) {\n const styleSheetsMap = this.styleSheets.get(targetDocument);\n if (!styleSheetsMap) return;\n\n for (const sheet of Object.values(styleSheetsMap)) {\n this.clearStyleSheet(sheet);\n }\n }\n\n private escapeClassName(className: string): string {\n return className.replace(/:/g, '\\\\:');\n }\n\n private serverRules: Map<StyleContext, string[]> = new Map();\n\n public injectRule(cssRule: string, context: StyleContext = 'base') {\n // Inject to main document or cache for server\n if (this.mainDocument) {\n this.injectRuleToDocument(cssRule, context, this.mainDocument);\n } else {\n if (!this.serverRules.has(context)) {\n this.serverRules.set(context, []);\n }\n this.serverRules.get(context)?.push(cssRule);\n }\n\n // Inject to all other documents\n for (const document of this.getAllRegisteredDocuments()) {\n if (document !== this.mainDocument) {\n this.injectRuleToDocument(cssRule, context, document);\n }\n }\n }\n\n public getServerStyles(): string {\n const contexts: StyleContext[] = [\n 'base-shorthand',\n 'base-side',\n 'base-cross',\n 'base',\n 'pseudo',\n 'media',\n 'modifier',\n 'override-shorthand',\n 'override-side',\n 'override-cross',\n 'override',\n ];\n let css = '';\n\n contexts.forEach((context) => {\n const rules = this.serverRules.get(context);\n if (rules) {\n css += rules.join('\\n') + '\\n';\n }\n });\n\n return css;\n }\n\n private getAllRegisteredDocuments(): Document[] {\n return Array.from(this.styleSheets.keys());\n }\n\n private addToCache(\n key: string,\n className: string,\n rules: Array<{ rule: string; context: StyleContext }>\n ) {\n this.classCache.set(key, { className, rules });\n }\n\n public getClassNames(\n property: string,\n value: any,\n context: StyleContext = 'base',\n modifier: string = '',\n getColor: (color: string) => string,\n mediaQueries: string[] = []\n ): string[] {\n // Format value\n let processedValue = ValueUtils.formatValue(value, property, getColor);\n\n let formattedValue = processedValue.toString().split(' ').join('-');\n let key = `${property}:${formattedValue}`;\n if (modifier && context !== 'base') {\n key = `${property}:${formattedValue}|${context}:${modifier}`;\n }\n\n // Check cache\n const cached = this.classCache.get(key);\n if (cached) {\n return [cached.className];\n }\n\n // Get property shorthand\n let shorthand =\n this.propertyShorthand[property] ||\n (property.startsWith('--') ? property : toKebabCase(property));\n\n // Special handling for vendor-prefixed properties to avoid double hyphens\n if (shorthand.startsWith('-webkit-')) {\n shorthand = 'webkit' + shorthand.substring(8); // Remove the extra hyphen\n } else if (shorthand.startsWith('-moz-')) {\n shorthand = 'moz' + shorthand.substring(5);\n } else if (shorthand.startsWith('-ms-')) {\n shorthand = 'ms' + shorthand.substring(4);\n } else if (shorthand.startsWith('-o-')) {\n shorthand = 'o' + shorthand.substring(3);\n }\n\n // Normalize the value for class name generation\n let normalizedValue = ValueUtils.normalizeCssValue(formattedValue);\n\n // Generate class name\n let baseClassName = `${shorthand}-${normalizedValue}`;\n let classNames: string[] = [baseClassName];\n let rules: Array<{ rule: string; context: StyleContext }> = [];\n\n // Format CSS property name with proper vendor prefix handling\n const cssProperty = propertyToKebabCase(property);\n let valueForCss = processedValue;\n\n // Handle numeric values for CSS\n if (typeof valueForCss === 'number') {\n // lineHeight\n if (property === 'lineHeight' && Number.isInteger(valueForCss)) {\n // Keep as unitless\n } else if (numericCssProperties.has(cssProperty)) {\n valueForCss = `${valueForCss}px`;\n }\n }\n\n // Check if this property needs vendor prefixes\n const needsPrefixes = needsVendorPrefix(property);\n const cssProperties = needsPrefixes\n ? getVendorPrefixedProperties(property)\n : [cssProperty];\n\n // Generate CSS rules based on context\n if (context === 'pseudo' && modifier) {\n const pseudoClassName = `${baseClassName}--${modifier}`;\n classNames = [pseudoClassName];\n const escapedClassName = this.escapeClassName(pseudoClassName);\n\n // Format CSS rules for group and peer modifiers\n if (modifier.startsWith('group-')) {\n const groupState = modifier.replace('group-', '');\n cssProperties.forEach((prefixedProperty) => {\n rules.push({\n rule: `.group:${groupState} .${escapedClassName} { ${prefixedProperty}: ${valueForCss}; }`,\n context: 'pseudo',\n });\n });\n } else if (modifier.startsWith('peer-')) {\n const peerState = modifier.replace('peer-', '');\n cssProperties.forEach((prefixedProperty) => {\n rules.push({\n rule: `.peer:${peerState} ~ .${escapedClassName} { ${prefixedProperty}: ${valueForCss}; }`,\n context: 'pseudo',\n });\n });\n } else {\n // Standard pseudo-class\n cssProperties.forEach((prefixedProperty) => {\n rules.push({\n rule: `.${escapedClassName}:${modifier} { ${prefixedProperty}: ${valueForCss}; }`,\n context: 'pseudo',\n });\n });\n }\n } else if (context === 'media' && modifier) {\n const mediaClassName = `${modifier}--${baseClassName}`;\n classNames = [mediaClassName];\n const escapedClassName = this.escapeClassName(mediaClassName);\n\n mediaQueries.forEach((mq) => {\n // Add media query rules for all necessary vendor prefixes\n cssProperties.forEach((prefixedProperty) => {\n rules.push({\n rule: `@media ${mq} { .${escapedClassName} { ${prefixedProperty}: ${valueForCss}; } }`,\n context: 'media',\n });\n });\n });\n } else {\n const escapedClassName = this.escapeClassName(baseClassName);\n\n // Add rules for all necessary vendor prefixes.\n // Route to a tiered sheet (shorthand → sub → longhand) within the\n // passed context (base or override), so shorthand properties cascade\n // BEFORE their longhands regardless of which element first\n // instantiated each utility class.\n const tier =\n context === 'override'\n ? overrideContextForProperty(property)\n : baseContextForProperty(property);\n cssProperties.forEach((prefixedProperty) => {\n rules.push({\n rule: `.${escapedClassName} { ${prefixedProperty}: ${valueForCss}; }`,\n context: tier,\n });\n });\n }\n\n // Inject all rules\n rules.forEach(({ rule, context }) => {\n this.injectRule(rule, context);\n });\n\n // Cache the generated rules\n this.addToCache(key, classNames[0], rules);\n\n return classNames;\n }\n\n public removeDocument(targetDocument: Document) {\n if (targetDocument === this.mainDocument) return;\n this.styleSheets.delete(targetDocument);\n }\n\n public clearCache() {\n this.classCache.clear();\n }\n\n private clearStyleSheet(styleSheet: CSSStyleSheet) {\n while (styleSheet.cssRules.length > 0) {\n styleSheet.deleteRule(0);\n }\n }\n\n public regenerateStyles(targetDocument: Document) {\n if (targetDocument === this.mainDocument) {\n // For main document, regenerate from cache\n this.clearStylesFromDocument(targetDocument);\n const values = Array.from(this.classCache.values());\n for (const { rules } of values) {\n rules.forEach(\n ({ rule, context }: { rule: string; context: StyleContext }) => {\n this.injectRuleToDocument(rule, context, targetDocument);\n }\n );\n }\n } else {\n // For other documents, copy from main document\n this.addDocument(targetDocument);\n }\n }\n\n public regenerateAllStyles() {\n for (const document of this.getAllRegisteredDocuments()) {\n this.regenerateStyles(document);\n }\n }\n\n private injectRuleToDocument(\n cssRule: string,\n context: StyleContext,\n targetDocument: Document\n ) {\n const styleSheetsMap = this.styleSheets.get(targetDocument);\n if (!styleSheetsMap) return;\n\n const styleSheet = styleSheetsMap[context];\n\n if (styleSheet) {\n try {\n styleSheet.insertRule(cssRule, styleSheet.cssRules.length);\n } catch (e) {\n console.error(`Error inserting CSS rule to document: \"${cssRule}\"`, e);\n }\n }\n }\n\n // Debug helper\n public printStyles(targetDocument: Document) {\n console.group('Current styles for document:');\n\n const styleSheetsMap = this.styleSheets.get(targetDocument);\n if (!styleSheetsMap) {\n console.log('No styles found for this document');\n console.groupEnd();\n return;\n }\n\n for (const [context, sheet] of Object.entries(styleSheetsMap)) {\n console.group(`${context} styles:`);\n Array.from(sheet.cssRules).forEach((rule, i) => {\n console.log(`${i}: ${rule.cssText}`);\n });\n console.groupEnd();\n }\n\n console.groupEnd();\n }\n}\n\n/**\n * Generates shorthand abbreviations for CSS properties.\n */\nfunction generatePropertyShorthand(\n styledProps: string[]\n): Record<string, string> {\n const propertyShorthand: Record<string, string> = {};\n const usedAbbreviations = new Set<string>();\n\n function generateAbbreviation(prop: string): string {\n const first = prop[0].toLowerCase();\n const last = prop[prop.length - 1].toLowerCase();\n const middle = prop.slice(1, -1).replace(/[a-z]/g, '').toLowerCase();\n let abbr = first + middle + last;\n if (abbr.length < 2) {\n abbr = prop.slice(0, 2).toLowerCase();\n }\n let i = 0;\n let uniqueAbbr = abbr;\n while (usedAbbreviations.has(uniqueAbbr)) {\n i++;\n uniqueAbbr = abbr + prop.slice(-i).toLowerCase();\n }\n usedAbbreviations.add(uniqueAbbr);\n return uniqueAbbr;\n }\n\n for (const prop of styledProps) {\n propertyShorthand[prop] = generateAbbreviation(prop);\n }\n return propertyShorthand;\n}\n\nexport const propertyShorthand = generatePropertyShorthand(StyleProps);\nexport const utilityClassManager = new UtilityClassManager(\n propertyShorthand,\n 10000\n);\n\n/**\n * Process styles for various contexts (base, pseudo, media)\n */\nfunction processStyles(\n styles: Record<string, any>,\n context: StyleContext = 'base',\n modifier: string = '',\n getColor: (color: string) => string,\n mediaQueries: Record<string, string> = {},\n devices: Record<string, string[]> = {},\n manager?: UtilityClassManager\n): string[] {\n const classes: string[] = [];\n const activeManager = manager || utilityClassManager;\n\n // Pre-compute media queries for this modifier (only done once per call)\n let mediaQueriesForClass: string[] = [];\n if (context === 'media') {\n if (mediaQueries[modifier]) {\n mediaQueriesForClass = [mediaQueries[modifier]];\n } else if (devices[modifier]) {\n mediaQueriesForClass = devices[modifier]\n .map((mq) => mediaQueries[mq])\n .filter((mq) => mq);\n }\n }\n\n const expandedStyles = expandShorthandStyles(styles);\n\n const keys = Object.keys(expandedStyles);\n for (let i = 0; i < keys.length; i++) {\n const value = expandedStyles[keys[i]];\n if (value !== undefined && value !== '') {\n const classNames = activeManager.getClassNames(\n keys[i],\n value,\n context,\n modifier,\n getColor,\n mediaQueriesForClass\n );\n classes.push(...classNames);\n }\n }\n\n return classes;\n}\n\n/**\n * Expand shorthand props (widthHeight, paddingHorizontal, marginVertical, ...)\n * into their canonical CSS properties. Returns a new object so the caller's\n * input is not mutated. Keeps unknown shorthands only if their value is set.\n */\nfunction expandShorthandStyles(\n styles: Record<string, any>\n): Record<string, any> {\n const wh = styles.widthHeight;\n const ph = styles.paddingHorizontal;\n const pv = styles.paddingVertical;\n const mh = styles.marginHorizontal;\n const mv = styles.marginVertical;\n\n if (\n wh === undefined &&\n ph === undefined &&\n pv === undefined &&\n mh === undefined &&\n mv === undefined\n ) {\n return styles;\n }\n\n const out: Record<string, any> = {};\n const keys = Object.keys(styles);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (\n k === 'widthHeight' ||\n k === 'paddingHorizontal' ||\n k === 'paddingVertical' ||\n k === 'marginHorizontal' ||\n k === 'marginVertical'\n ) {\n continue;\n }\n out[k] = styles[k];\n }\n\n if (wh !== undefined) {\n const v = typeof wh === 'number' ? `${wh}px` : wh;\n if (out.width === undefined) out.width = v;\n if (out.height === undefined) out.height = v;\n }\n if (ph !== undefined) {\n const v = typeof ph === 'number' ? `${ph}px` : ph;\n if (out.paddingLeft === undefined) out.paddingLeft = v;\n if (out.paddingRight === undefined) out.paddingRight = v;\n }\n if (pv !== undefined) {\n const v = typeof pv === 'number' ? `${pv}px` : pv;\n if (out.paddingTop === undefined) out.paddingTop = v;\n if (out.paddingBottom === undefined) out.paddingBottom = v;\n }\n if (mh !== undefined) {\n const v = typeof mh === 'number' ? `${mh}px` : mh;\n if (out.marginLeft === undefined) out.marginLeft = v;\n if (out.marginRight === undefined) out.marginRight = v;\n }\n if (mv !== undefined) {\n const v = typeof mv === 'number' ? `${mv}px` : mv;\n if (out.marginTop === undefined) out.marginTop = v;\n if (out.marginBottom === undefined) out.marginBottom = v;\n }\n\n return out;\n}\n\n// Add a function to handle nested pseudo-classes\nfunction processPseudoStyles(\n styles: Record<string, any>,\n parentPseudo: string = '',\n getColor: (color: string) => string,\n manager?: UtilityClassManager\n): string[] {\n const classes: string[] = [];\n\n // Process each property in the styles object\n Object.keys(styles).forEach((key) => {\n const value = styles[key];\n\n // Check if this is a nested pseudo selector (starts with underscore)\n if (key.startsWith('_') && typeof value === 'object') {\n const pseudoName = key.substring(1);\n const pseudo = EVENT_TO_PSEUDO[pseudoName];\n\n if (pseudo) {\n // Construct the combined pseudo selector\n const combinedPseudo = parentPseudo\n ? `${parentPseudo}::${pseudo}`\n : `${pseudo}`;\n\n // Process the nested styles with the combined pseudo\n classes.push(\n ...processPseudoStyles(value, combinedPseudo, getColor, manager)\n );\n }\n } else if (typeof value !== 'object' || value === null) {\n // This is a regular CSS property\n if (parentPseudo) {\n // Generate class for the pseudo element/class\n const pseudoClassName = `${key}-${ValueUtils.normalizeCssValue(\n value\n )}-${parentPseudo.replace(/:/g, '-')}`;\n const escapedClassName = pseudoClassName.replace(/[^\\w-]/g, '-');\n\n // Format the value\n const processedValue = ValueUtils.formatValue(value, key, getColor);\n\n // Create and inject the rule\n const rule = `.${escapedClassName}::${parentPseudo} { ${propertyToKebabCase(\n key\n )}: ${processedValue}; }`;\n (manager || utilityClassManager).injectRule(rule, 'pseudo');\n\n classes.push(escapedClassName);\n }\n }\n });\n\n return classes;\n}\n\n/**\n * Process event-based styles (hover, focus, etc.)\n */\nfunction processEventStyles(\n eventName: string,\n eventStyles: any,\n getColor: (color: string) => string,\n manager?: UtilityClassManager\n): string[] {\n const classes: string[] = [];\n\n // Handle string shorthand (e.g., _hover: \"color-red-500\")\n if (typeof eventStyles === 'string') {\n eventStyles = { color: eventStyles };\n }\n\n // Ensure eventStyles is an object\n if (typeof eventStyles !== 'object' || eventStyles === null) {\n return classes;\n }\n\n const {\n animate = undefined,\n shadow = undefined,\n ...otherEventStyles\n } = eventStyles;\n\n // Process animations if present\n if (animate) {\n const animations = Array.isArray(animate) ? animate : [animate];\n const animationStyles = AnimationUtils.processAnimations(\n animations,\n manager\n );\n Object.assign(otherEventStyles, animationStyles);\n }\n\n // Process shadow if present\n if (shadow !== undefined) {\n let shadowValue: number;\n\n if (typeof shadow === 'number' && Shadows[shadow] !== undefined) {\n shadowValue = shadow;\n } else if (typeof shadow === 'boolean') {\n shadowValue = shadow ? 2 : 0;\n } else {\n shadowValue = 2;\n }\n\n if (Shadows[shadowValue]) {\n const { shadowColor, shadowOpacity, shadowOffset, shadowRadius } =\n Shadows[shadowValue];\n const rgb = Color.hex.rgb(shadowColor);\n const rgbaColor = `rgba(${rgb.join(',')}, ${shadowOpacity})`;\n otherEventStyles.boxShadow = `${shadowOffset.height}px ${shadowOffset.width}px ${shadowRadius}px ${rgbaColor}`;\n }\n }\n\n // Check for nested pseudo selectors\n const nestedPseudos = Object.keys(otherEventStyles).filter(\n (key) => key.startsWith('_') && typeof otherEventStyles[key] === 'object'\n );\n\n if (nestedPseudos.length > 0) {\n // Handle nested pseudo selectors\n const pseudo = EVENT_TO_PSEUDO[eventName];\n if (pseudo) {\n nestedPseudos.forEach((nestedKey) => {\n const nestedPseudoName = nestedKey.substring(1);\n const nestedPseudo = EVENT_TO_PSEUDO[nestedPseudoName];\n\n if (nestedPseudo) {\n const combinedPseudo = `${pseudo}::${nestedPseudo}`;\n classes.push(\n ...processPseudoStyles(\n otherEventStyles[nestedKey],\n combinedPseudo,\n getColor,\n manager\n )\n );\n }\n });\n\n // Remove processed nested pseudos\n nestedPseudos.forEach((key) => {\n delete otherEventStyles[key];\n });\n }\n }\n\n // Apply remaining styles if we have a valid pseudo-class\n if (Object.keys(otherEventStyles).length > 0) {\n const pseudo = EVENT_TO_PSEUDO[eventName];\n if (pseudo) {\n classes.push(\n ...processStyles(\n otherEventStyles,\n 'pseudo',\n pseudo,\n getColor,\n {},\n {},\n manager\n )\n );\n }\n }\n\n return classes;\n}\n\nexport const extractUtilityClasses = (\n props: ElementProps,\n getColor: (color: string) => string,\n mediaQueries: Record<string, string>,\n devices: Record<string, string[]>,\n manager?: UtilityClassManager\n): string[] => {\n const classes: string[] = [];\n const computedStyles: Record<string, any> = {};\n const activeManager = manager || utilityClassManager;\n\n // Handle widthHeight (shorthand for both width and height)\n if (\n props.widthHeight ||\n (props.height !== undefined &&\n props.width !== undefined &&\n props.height === props.width)\n ) {\n const widthHeightValue = props.widthHeight || props.width;\n const formattedValue =\n typeof widthHeightValue === 'number'\n ? `${widthHeightValue}px`\n : widthHeightValue;\n computedStyles.width = formattedValue;\n computedStyles.height = formattedValue;\n }\n\n if (props.lineHeight) {\n const lh = props.lineHeight as string | number;\n if (typeof lh === 'number') {\n computedStyles.lineHeight = `${lh.toFixed(0)}px`;\n } else if (lh.indexOf('px') === -1) {\n const numericValue = parseFloat(lh);\n if (!isNaN(numericValue) && Number.isInteger(numericValue)) {\n computedStyles.lineHeight = `${numericValue.toFixed(0)}px`;\n } else {\n computedStyles.lineHeight = lh;\n }\n }\n }\n\n // Handle padding and margin shorthands (inlined to avoid Object.entries overhead)\n const ph = (props as any).paddingHorizontal;\n if (ph !== undefined) {\n const v = typeof ph === 'number' ? `${ph}px` : ph;\n computedStyles.paddingLeft = v;\n computedStyles.paddingRight = v;\n }\n const pv = (props as any).paddingVertical;\n if (pv !== undefined) {\n const v = typeof pv === 'number' ? `${pv}px` : pv;\n computedStyles.paddingTop = v;\n computedStyles.paddingBottom = v;\n }\n const mh = (props as any).marginHorizontal;\n if (mh !== undefined) {\n const v = typeof mh === 'number' ? `${mh}px` : mh;\n computedStyles.marginLeft = v;\n computedStyles.marginRight = v;\n }\n const mv = (props as any).marginVertical;\n if (mv !== undefined) {\n const v = typeof mv === 'number' ? `${mv}px` : mv;\n computedStyles.marginTop = v;\n computedStyles.marginBottom = v;\n }\n\n // Handle shadows\n if (props.shadow !== undefined) {\n let shadowValue: number;\n\n if (\n typeof props.shadow === 'number' &&\n Shadows[props.shadow] !== undefined\n ) {\n shadowValue = props.shadow;\n } else if (typeof props.shadow === 'boolean') {\n shadowValue = props.shadow ? 2 : 0;\n } else {\n shadowValue = 2;\n }\n\n if (Shadows[shadowValue]) {\n const { shadowColor, shadowOpacity, shadowOffset, shadowRadius } =\n Shadows[shadowValue];\n const rgb = Color.hex.rgb(shadowColor);\n const rgbaColor = `rgba(${rgb.join(',')}, ${shadowOpacity})`;\n computedStyles.boxShadow = `${shadowOffset.height}px ${shadowOffset.width}px ${shadowRadius}px ${rgbaColor}`;\n }\n }\n\n // Handle animations\n if (props.animate) {\n const animations = Array.isArray(props.animate)\n ? props.animate\n : [props.animate];\n Object.assign(\n computedStyles,\n AnimationUtils.processAnimations(animations, manager)\n );\n }\n\n // Handle default blend\n if (props.blend === true) {\n if ((props as any).bgColor) {\n computedStyles.mixBlendMode = 'overlay';\n computedStyles.color = 'white';\n } else {\n computedStyles.mixBlendMode = 'difference';\n computedStyles.color = 'white';\n }\n }\n\n // Process base computed styles\n classes.push(\n ...processStyles(computedStyles, 'base', '', getColor, {}, {}, manager)\n );\n\n // SINGLE PASS over props: classify each prop into style, event, or underscore\n const propKeys = Object.keys(props);\n for (let i = 0; i < propKeys.length; i++) {\n const property = propKeys[i];\n const value = (props as any)[property];\n\n // Handle underscore-prefixed event properties (_hover, _focus, etc.)\n if (property.charCodeAt(0) === 95 && property.length > 1) {\n // 95 = '_'\n const eventName = property.substring(1);\n classes.push(...processEventStyles(eventName, value, getColor, manager));\n\n // Handle blend for underscore props\n if (props.blend === true && value?.color === undefined) {\n if ((props as any).bgColor) {\n value.mixBlendMode = 'overlay';\n value.color = 'white';\n } else {\n value.mixBlendMode = 'difference';\n value.color = 'white';\n }\n }\n continue;\n }\n\n // Skip non-style props\n if (property === 'style' || property === 'css') continue;\n\n if (property === 'on') {\n // Process event-based styles\n if (typeof value === 'object' && value !== null) {\n const events = Object.keys(value);\n for (let j = 0; j < events.length; j++) {\n classes.push(\n ...processEventStyles(\n events[j],\n value[events[j]],\n getColor,\n manager\n )\n );\n }\n\n // Handle blend for 'on' prop\n if (props.blend === true && value?.color === undefined) {\n if ((props as any).bgColor) {\n value.mixBlendMode = 'overlay';\n value.color = 'white';\n } else {\n value.mixBlendMode = 'difference';\n value.color = 'white';\n }\n }\n }\n continue;\n }\n\n if (property === 'media') {\n // Process media query styles\n if (typeof value === 'object' && value !== null) {\n const screens = Object.keys(value);\n for (let j = 0; j < screens.length; j++) {\n classes.push(\n ...processStyles(\n value[screens[j]],\n 'media',\n screens[j],\n getColor,\n mediaQueries,\n devices,\n manager\n )\n );\n }\n\n // Handle blend for 'media' prop\n if (props.blend === true && value?.color === undefined) {\n if ((props as any).bgColor) {\n value.mixBlendMode = 'overlay';\n value.color = 'white';\n } else {\n value.mixBlendMode = 'difference';\n value.color = 'white';\n }\n }\n }\n continue;\n }\n\n // Standard style props\n if (isStyleProp(property)) {\n if (value !== undefined && value !== '') {\n if (typeof value === 'object' && value !== null) {\n // Object-style props are not directly processed as base styles\n continue;\n }\n classes.push(\n ...activeManager.getClassNames(\n property,\n value,\n 'base',\n '',\n getColor,\n []\n )\n );\n }\n }\n }\n\n // Handle raw CSS - uses 'override' context for higher specificity\n if (props.css) {\n if (typeof props.css === 'object') {\n classes.push(\n ...processStyles(props.css, 'override', '', getColor, {}, {}, manager)\n );\n } else if (typeof props.css === 'string') {\n const uniqueClassName = ValueUtils.generateUniqueClassName(props.css);\n activeManager.injectRule(\n `.${uniqueClassName} { ${props.css} }`,\n 'override'\n );\n classes.push(uniqueClassName);\n }\n }\n\n return classes;\n};\n","// constants.ts\nimport { CSSProperties } from 'react';\nimport {\n AnimationDirection,\n AnimationFillMode,\n AnimationIterationCount,\n AnimationKeyframes,\n} from '../types/style';\n\n// List of numeric properties that don't need 'px' suffix\nexport const NumberProps = new Set<string>([\n 'numberOfLines',\n 'fontWeight',\n 'timeStamp',\n 'flex',\n 'flexGrow',\n 'flexShrink',\n 'order',\n 'zIndex',\n 'aspectRatio',\n 'shadowOpacity',\n 'shadowRadius',\n 'scale',\n 'opacity',\n 'min',\n 'max',\n 'now',\n]);\n\n// Keys to exclude when passing props to the component\nexport const excludedKeys = new Set<string>([\n // Standard styling props\n 'on',\n 'shadow',\n 'only',\n 'media',\n 'css',\n 'widthHeight',\n 'paddingHorizontal',\n 'paddingVertical',\n 'marginHorizontal',\n 'marginVertical',\n 'animate',\n 'animateIn',\n 'animateOut',\n 'theme',\n\n // Underscore-prefixed event props\n '_hover',\n '_active',\n '_focus',\n '_visited',\n '_disabled',\n '_enabled',\n '_checked',\n '_unchecked',\n '_invalid',\n '_valid',\n '_required',\n '_optional',\n '_selected',\n '_target',\n '_firstChild',\n '_lastChild',\n '_onlyChild',\n '_firstOfType',\n '_lastOfType',\n '_empty',\n '_focusVisible',\n '_focusWithin',\n '_placeholder',\n // Pseudo-element props\n '_before',\n '_after',\n '_firstLetter',\n '_firstLine',\n '_selection',\n '_backdrop',\n '_marker',\n // Add more styling props here if needed\n]);\n\n// Keys to exclude when passing props to the component\nexport const extraKeys = new Set<string>([\n 'on',\n 'shadow',\n 'only',\n 'media',\n 'css',\n // Add more styling props here if needed\n]);\n\nexport const includeKeys = new Set<string>(['src', 'alt', 'style', 'as']);\n\n// Type definitions for animation props\nexport interface AnimationProps {\n from?: CSSProperties | any;\n to?: CSSProperties | any;\n leave?: CSSProperties | any;\n duration?: string;\n timingFunction?:\n | string\n | 'linear'\n | 'ease'\n | 'ease-in'\n | 'ease-out'\n | 'ease-in-out';\n delay?: string;\n property?: string;\n iterationCount?: AnimationIterationCount;\n direction?: AnimationDirection;\n fillMode?: AnimationFillMode;\n playState?: AnimationPlayState;\n keyframes?: AnimationKeyframes;\n timeline?: string;\n range?: string;\n '--fill'?: any;\n [key: string]:\n | CSSProperties\n | string\n | number\n | Record<string, string | number>\n | AnimationKeyframes\n | undefined;\n}\n","// src/cssPropertyKeys.ts\nimport { CSSProperties } from 'react';\n\n// Define a type that includes both standard CSS properties and custom vendor-prefixed properties\ntype ExtendedCSSProperties = CSSProperties & {\n [key: string]: any; // Allow any string key for custom properties\n};\n\nimport hyphenate from 'hyphenate-style-name';\n\n// Helper function to convert camelCase vendor-prefixed properties to kebab-case\nexport const vendorPrefixToKebabCase = (property: string): string => {\n // Handle custom properties (CSS variables)\n if (property.startsWith('--')) {\n return property;\n }\n return hyphenate(property);\n};\n\nexport const cssPropertyKeys: Array<keyof ExtendedCSSProperties> = [\n 'alignContent',\n 'alignItems',\n 'alignSelf',\n 'animation',\n 'animationDelay',\n 'animationDirection',\n 'animationDuration',\n 'animationFillMode',\n 'animationIterationCount',\n 'animationName',\n 'animationPlayState',\n 'animationTimingFunction',\n 'backfaceVisibility',\n 'background',\n 'backgroundAttachment',\n 'backgroundBlendMode',\n 'backgroundClip',\n 'backgroundColor',\n 'backgroundImage',\n 'backgroundOrigin',\n 'backgroundPosition',\n 'backgroundRepeat',\n 'backgroundSize',\n 'border',\n 'borderBottom',\n 'borderBottomColor',\n 'borderBottomLeftRadius',\n 'borderBottomRightRadius',\n 'borderBottomStyle',\n 'borderBottomWidth',\n 'borderCollapse',\n 'borderColor',\n 'borderImage',\n 'borderImageOutset',\n 'borderImageRepeat',\n 'borderImageSlice',\n 'borderImageSource',\n 'borderImageWidth',\n 'borderLeft',\n 'borderLeftColor',\n 'borderLeftStyle',\n 'borderLeftWidth',\n 'borderRadius',\n 'borderRight',\n 'borderRightColor',\n 'borderRightStyle',\n 'borderRightWidth',\n 'borderSpacing',\n 'borderStyle',\n 'borderTop',\n 'borderTopColor',\n 'borderTopLeftRadius',\n 'borderTopRightRadius',\n 'borderTopStyle',\n 'borderTopWidth',\n 'borderWidth',\n 'bottom',\n 'boxShadow',\n 'boxSizing',\n 'captionSide',\n 'caretColor',\n 'clear',\n 'clip',\n 'color',\n 'columnCount',\n 'columnFill',\n 'columnGap',\n 'columnRule',\n 'columnRuleColor',\n 'columnRuleStyle',\n 'columnRuleWidth',\n 'columns',\n 'columnSpan',\n 'columnWidth',\n 'content',\n 'counterIncrement',\n 'counterReset',\n 'cursor',\n 'direction',\n 'display',\n 'emptyCells',\n 'filter',\n 'flex',\n 'flexBasis',\n 'flexDirection',\n 'flexFlow',\n 'flexGrow',\n 'flexShrink',\n 'flexWrap',\n 'float',\n 'font',\n 'fontFamily',\n 'fontSize',\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'gap',\n 'grid',\n 'gridArea',\n 'gridAutoColumns',\n 'gridAutoFlow',\n 'gridAutoRows',\n 'gridColumn',\n 'gridColumnEnd',\n 'gridColumnGap',\n 'gridColumnStart',\n 'gridGap',\n 'gridRow',\n 'gridRowEnd',\n 'gridRowGap',\n 'gridRowStart',\n 'gridTemplate',\n 'gridTemplateAreas',\n 'gridTemplateColumns',\n 'gridTemplateRows',\n 'height',\n 'hyphens',\n 'imageRendering',\n 'inlineSize',\n 'isolation',\n 'justifyContent',\n 'justifyItems',\n 'justifySelf',\n 'left',\n 'letterSpacing',\n 'lineHeight',\n 'listStyle',\n 'listStyleImage',\n 'listStylePosition',\n 'listStyleType',\n 'margin',\n 'marginBlockEnd',\n 'marginBlockStart',\n 'marginBottom',\n 'marginInlineEnd',\n 'marginInlineStart',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'mask',\n 'maskType',\n 'maxBlockSize',\n 'maxHeight',\n 'maxInlineSize',\n 'maxWidth',\n 'minBlockSize',\n 'minHeight',\n 'minInlineSize',\n 'minWidth',\n 'mixBlendMode',\n 'objectFit',\n 'objectPosition',\n 'opacity',\n 'order',\n 'outline',\n 'outlineColor',\n 'outlineOffset',\n 'outlineStyle',\n 'outlineWidth',\n 'overflow',\n 'overflowAnchor',\n 'overflowWrap',\n 'overflowX',\n 'overflowY',\n 'padding',\n 'paddingBlockEnd',\n 'paddingBlockStart',\n 'paddingBottom',\n 'paddingInlineEnd',\n 'paddingInlineStart',\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'pageBreakAfter',\n 'pageBreakBefore',\n 'pageBreakInside',\n 'perspective',\n 'perspectiveOrigin',\n 'pointerEvents',\n 'position',\n 'quotes',\n 'resize',\n 'right',\n 'rotate',\n 'rowGap',\n 'scale',\n 'scrollBehavior',\n 'scrollMargin',\n 'scrollMarginBlock',\n 'scrollMarginBlockEnd',\n 'scrollMarginBlockStart',\n 'scrollMarginBottom',\n 'scrollMarginInline',\n 'scrollMarginInlineEnd',\n 'scrollMarginInlineStart',\n 'scrollMarginLeft',\n 'scrollMarginRight',\n 'scrollMarginTop',\n 'scrollPadding',\n 'scrollPaddingBlock',\n 'scrollPaddingBlockEnd',\n 'scrollPaddingBlockStart',\n 'scrollPaddingBottom',\n 'scrollPaddingInline',\n 'scrollPaddingInlineEnd',\n 'scrollPaddingInlineStart',\n 'scrollPaddingLeft',\n 'scrollPaddingRight',\n 'scrollPaddingTop',\n 'scrollSnapAlign',\n 'scrollSnapMargin',\n 'scrollSnapMarginBottom',\n 'scrollSnapMarginLeft',\n 'scrollSnapMarginRight',\n 'scrollSnapMarginTop',\n 'scrollSnapStop',\n 'scrollSnapType',\n 'shapeImageThreshold',\n 'shapeMargin',\n 'shapeOutside',\n 'tabSize',\n 'tableLayout',\n 'textAlign',\n 'textAlignLast',\n 'textCombineUpright',\n 'textDecoration',\n 'textDecorationColor',\n 'textDecorationLine',\n 'textDecorationStyle',\n 'textIndent',\n 'textJustify',\n 'textOverflow',\n 'textShadow',\n 'textTransform',\n 'top',\n 'transform',\n 'transformOrigin',\n 'transformStyle',\n 'transition',\n 'transitionDelay',\n 'transitionDuration',\n 'transitionProperty',\n 'transitionTimingFunction',\n 'translate',\n 'unicodeBidi',\n 'userSelect',\n 'verticalAlign',\n 'visibility',\n 'whiteSpace',\n 'widows',\n 'width',\n 'wordBreak',\n 'wordSpacing',\n 'wordWrap',\n 'writingMode',\n 'zIndex',\n\n // Vendor-prefixed properties (uppercase first letter)\n 'WebkitAppearance',\n 'WebkitBackfaceVisibility',\n 'WebkitBorderImage',\n 'WebkitBoxShadow',\n 'WebkitBoxSizing',\n 'WebkitColumnCount',\n 'WebkitColumnRule',\n 'WebkitColumnWidth',\n 'WebkitColumns',\n 'WebkitFlex',\n 'WebkitFlexBasis',\n 'WebkitFlexDirection',\n 'WebkitFlexFlow',\n 'WebkitFlexGrow',\n 'WebkitFlexShrink',\n 'WebkitFlexWrap',\n 'WebkitFontFeatureSettings',\n 'WebkitFontSmoothing',\n 'WebkitHyphens',\n 'WebkitJustifyContent',\n 'WebkitLineClamp',\n 'WebkitMask',\n 'WebkitOverflowScrolling',\n 'WebkitPerspective',\n 'WebkitPerspectiveOrigin',\n 'WebkitTapHighlightColor',\n 'WebkitTextFillColor',\n 'WebkitTextSizeAdjust',\n 'WebkitTextStroke',\n 'WebkitTextStrokeColor',\n 'WebkitTextStrokeWidth',\n 'WebkitTransform',\n 'WebkitTransformOrigin',\n 'WebkitTransformStyle',\n 'WebkitTransition',\n 'WebkitTransitionDelay',\n 'WebkitTransitionDuration',\n 'WebkitTransitionProperty',\n 'WebkitTransitionTimingFunction',\n 'WebkitUserSelect',\n 'WebkitBackgroundClip',\n\n // Vendor-prefixed properties (lowercase first letter)\n 'webkitAppearance',\n 'webkitBackfaceVisibility',\n 'webkitBorderImage',\n 'webkitBoxShadow',\n 'webkitBoxSizing',\n 'webkitColumnCount',\n 'webkitColumnRule',\n 'webkitColumnWidth',\n 'webkitColumns',\n 'webkitFlex',\n 'webkitFlexBasis',\n 'webkitFlexDirection',\n 'webkitFlexFlow',\n 'webkitFlexGrow',\n 'webkitFlexShrink',\n 'webkitFlexWrap',\n 'webkitFontFeatureSettings',\n 'webkitFontSmoothing',\n 'webkitHyphens',\n 'webkitJustifyContent',\n 'webkitLineClamp',\n 'webkitMask',\n 'webkitOverflowScrolling',\n 'webkitPerspective',\n 'webkitPerspectiveOrigin',\n 'webkitTapHighlightColor',\n 'webkitTextFillColor',\n 'webkitTextSizeAdjust',\n 'webkitTextStroke',\n 'webkitTextStrokeColor',\n 'webkitTextStrokeWidth',\n 'webkitTransform',\n 'webkitTransformOrigin',\n 'webkitTransformStyle',\n 'webkitTransition',\n 'webkitTransitionDelay',\n 'webkitTransitionDuration',\n 'webkitTransitionProperty',\n 'webkitTransitionTimingFunction',\n 'webkitUserSelect',\n 'webkitBackgroundClip',\n\n // Mozilla-specific properties\n 'MozAppearance',\n 'MozBackfaceVisibility',\n 'MozBorderImage',\n 'MozBoxShadow',\n 'MozBoxSizing',\n 'MozColumnCount',\n // 'MozColumnGap',\n 'MozColumnRule',\n 'MozColumnWidth',\n 'MozColumns',\n 'MozFontFeatureSettings',\n 'MozHyphens',\n 'MozOsxFontSmoothing',\n 'MozPerspective',\n 'MozPerspectiveOrigin',\n 'MozTextSizeAdjust',\n // 'MozTransform',\n 'MozTransformOrigin',\n 'MozTransformStyle',\n 'MozTransition',\n 'MozTransitionDelay',\n 'MozTransitionDuration',\n 'MozTransitionProperty',\n 'MozTransitionTimingFunction',\n 'MozUserSelect',\n\n // Microsoft-specific properties\n // 'msFlexAlign',\n 'msFlexDirection',\n // 'msFlexFlow',\n // 'msFlexItemAlign',\n // 'msFlexLinePack',\n // 'msFlexNegative',\n // 'msFlexOrder',\n // 'msFlexPack',\n 'msFlexPositive',\n // 'msFlexPreferredSize',\n // 'msFlexWrap',\n // 'msGridColumn',\n // 'msGridColumnAlign',\n // 'msGridColumnSpan',\n 'msGridColumns',\n // 'msGridRow',\n // 'msGridRowAlign',\n // 'msGridRowSpan',\n 'msGridRows',\n 'msHighContrastAdjust',\n 'msHyphens',\n 'msOverflowStyle',\n 'msScrollbar3dlightColor',\n 'msScrollbarArrowColor',\n 'msScrollbarBaseColor',\n 'msScrollbarDarkshadowColor',\n 'msScrollbarFaceColor',\n 'msScrollbarHighlightColor',\n 'msScrollbarShadowColor',\n 'msScrollbarTrackColor',\n // 'msTextSizeAdjust',\n 'msTransform',\n 'msTransformOrigin',\n 'msTransition',\n 'msTransitionDelay',\n 'msTransitionDuration',\n 'msTransitionProperty',\n 'msTransitionTimingFunction',\n 'msUserSelect',\n\n // Opera-specific properties\n 'OAnimation',\n 'OAnimationDelay',\n 'OAnimationDirection',\n 'OAnimationDuration',\n 'OAnimationFillMode',\n 'OAnimationIterationCount',\n 'OAnimationName',\n 'OAnimationPlayState',\n 'OAnimationTimingFunction',\n 'OBackgroundSize',\n 'OBorderImage',\n 'OObjectFit',\n 'OObjectPosition',\n 'OTransform',\n 'OTransformOrigin',\n 'OTransition',\n 'OTransitionDelay',\n 'OTransitionDuration',\n 'OTransitionProperty',\n 'OTransitionTimingFunction',\n\n // Add any additional CSS properties as needed\n];\n\nexport const numericCssProperties = new Set<string>([\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-width',\n 'border-left-width',\n 'border-radius',\n 'border-right-width',\n 'border-spacing',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-width',\n 'border-width',\n 'bottom',\n 'column-gap',\n 'column-rule-width',\n 'column-width',\n 'font-size',\n 'gap',\n 'height',\n 'left',\n 'letter-spacing',\n 'line-height',\n 'margin',\n 'margin-bottom',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'max-height',\n 'max-width',\n 'min-height',\n 'min-width',\n 'outline-offset',\n 'outline-width',\n 'padding',\n 'padding-bottom',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'perspective',\n 'right',\n 'row-gap',\n 'text-indent',\n 'top',\n 'width',\n\n // Vendor-prefixed properties that need pixel values\n '-webkit-border-radius',\n '-webkit-border-bottom-left-radius',\n '-webkit-border-bottom-right-radius',\n '-webkit-border-top-left-radius',\n '-webkit-border-top-right-radius',\n '-webkit-column-gap',\n '-webkit-column-width',\n '-webkit-margin-bottom',\n '-webkit-margin-left',\n '-webkit-margin-right',\n '-webkit-margin-top',\n '-webkit-padding-bottom',\n '-webkit-padding-left',\n '-webkit-padding-right',\n '-webkit-padding-top',\n '-webkit-perspective',\n '-webkit-text-indent',\n\n '-moz-border-radius',\n '-moz-border-bottom-left-radius',\n '-moz-border-bottom-right-radius',\n '-moz-border-top-left-radius',\n '-moz-border-top-right-radius',\n '-moz-column-gap',\n '-moz-column-width',\n '-moz-margin-bottom',\n '-moz-margin-left',\n '-moz-margin-right',\n '-moz-margin-top',\n '-moz-padding-bottom',\n '-moz-padding-left',\n '-moz-padding-right',\n '-moz-padding-top',\n '-moz-perspective',\n '-moz-text-indent',\n\n '-ms-column-gap',\n '-ms-column-width',\n '-ms-margin-bottom',\n '-ms-margin-left',\n '-ms-margin-right',\n '-ms-margin-top',\n '-ms-padding-bottom',\n '-ms-padding-left',\n '-ms-padding-right',\n '-ms-padding-top',\n '-ms-text-indent',\n]);\n","// styleHelpers.ts\nimport { extraKeys, includeKeys, NumberProps } from './constants';\nimport { vendorPrefixToKebabCase, numericCssProperties } from './cssProperties';\nimport { hasColorToken, replaceColorTokens } from './colors';\n\n/**\n * Converts a camelCase property to kebab-case with proper vendor prefix handling\n *\n * @param property The property name in camelCase\n * @returns The property name in kebab-case with appropriate vendor prefixes\n */\nexport function propertyToKebabCase(property: string): string {\n return vendorPrefixToKebabCase(property);\n}\n\n// Comprehensive list of CSS properties that should be converted to classes\n// NOTE: Uses a static set instead of document.createElement('div').style\n// to avoid DOM access at module load time (breaks SSR, adds startup overhead).\n// The manual list below is comprehensive and covers all commonly used CSS properties.\nconst cssProperties = new Set([\n // Box model\n 'margin',\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n 'marginHorizontal',\n 'marginVertical',\n 'padding',\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n 'paddingHorizontal',\n 'paddingVertical',\n 'width',\n 'height',\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight',\n\n // Positioning\n 'position',\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'zIndex',\n\n // Flexbox\n 'flex',\n 'flexDirection',\n 'flexWrap',\n 'flexFlow',\n 'justifyContent',\n 'alignItems',\n 'alignContent',\n 'alignSelf',\n 'order',\n 'flexGrow',\n 'flexShrink',\n 'flexBasis',\n\n // Grid\n 'gridTemplateColumns',\n 'gridTemplateRows',\n 'gridTemplate',\n 'gridAutoColumns',\n 'gridAutoRows',\n 'gridAutoFlow',\n 'gridArea',\n 'gridColumn',\n 'gridRow',\n 'gap',\n 'gridGap',\n 'rowGap',\n 'columnGap',\n\n // Typography\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'lineHeight',\n 'letterSpacing',\n 'textAlign',\n 'textDecoration',\n 'textTransform',\n 'whiteSpace',\n 'wordBreak',\n 'wordSpacing',\n 'wordWrap',\n\n // Colors and Backgrounds\n 'color',\n 'backgroundColor',\n 'background',\n 'backgroundImage',\n 'backgroundSize',\n 'backgroundPosition',\n 'backgroundRepeat',\n 'backgroundClip',\n 'textFillColor',\n 'WebkitTextFillColor',\n 'WebkitBackgroundClip',\n 'WebkitTextStroke',\n 'WebkitTextStrokeColor',\n 'WebkitTextStrokeWidth',\n 'WebkitTextStrokeStyle',\n 'opacity',\n\n // Borders\n 'border',\n 'borderWidth',\n 'borderStyle',\n 'borderColor',\n 'borderRadius',\n 'borderTop',\n 'borderRight',\n 'borderBottom',\n 'borderLeft',\n 'borderTopLeftRadius',\n 'borderTopRightRadius',\n 'borderBottomLeftRadius',\n 'borderBottomRightRadius',\n\n // Effects\n 'boxShadow',\n 'textShadow',\n 'transform',\n 'transition',\n 'animation',\n 'animationName',\n 'animationDuration',\n 'animationTimingFunction',\n 'animationDelay',\n 'animationIterationCount',\n 'animationDirection',\n 'animationFillMode',\n 'animationPlayState',\n // Scroll-driven animation properties (CSS Scroll-Driven Animations spec)\n 'animationTimeline',\n 'animationRange',\n 'animationRangeStart',\n 'animationRangeEnd',\n 'scrollTimeline',\n 'scrollTimelineName',\n 'scrollTimelineAxis',\n 'viewTimeline',\n 'viewTimelineName',\n 'viewTimelineAxis',\n 'viewTimelineInset',\n 'filter',\n 'backdropFilter',\n 'mixBlendMode',\n\n // Layout\n 'display',\n 'visibility',\n 'overflow',\n 'overflowX',\n 'overflowY',\n 'float',\n 'clear',\n 'objectFit',\n 'objectPosition',\n\n // Interactivity\n 'cursor',\n 'pointerEvents',\n 'userSelect',\n 'resize',\n\n // Custom properties\n 'widthHeight',\n 'shadow',\n\n // Additional properties from cssExtraProps\n 'textJustify',\n 'lineClamp',\n 'textIndent',\n 'perspective',\n]);\n\n// Function to set the widthHeight of the element\nexport const setSize = (\n newSize: string | number,\n styleProps: Record<string, any>\n) => {\n styleProps.height = styleProps.width = newSize;\n};\n\n// Common React event handlers that should not be treated as style props\nconst commonEventHandlers = new Set([\n 'onClick',\n 'onChange',\n 'onSubmit',\n 'onFocus',\n 'onBlur',\n 'onKeyDown',\n 'onKeyUp',\n 'onKeyPress',\n 'onMouseDown',\n 'onMouseUp',\n 'onMouseMove',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onTouchStart',\n 'onTouchEnd',\n 'onTouchMove',\n 'onScroll',\n 'onWheel',\n 'onDrag',\n 'onDragStart',\n 'onDragEnd',\n 'onDrop',\n]);\n\n// Cache for CSS.supports results to avoid repeated DOM queries\nconst cssSupportCache = new Map<string, boolean>();\n\n// Non-hyphenated HTML/SVG attributes that must never be treated as style props.\n// Hyphenated attributes (aria-*, data-*, etc.) are caught by a prefix/hyphen check below.\nconst htmlOnlyAttributes = new Set([\n // Accessibility\n 'role',\n 'tabIndex',\n\n // Global HTML attributes\n 'id',\n 'title',\n 'lang',\n 'dir',\n 'hidden',\n 'draggable',\n 'contentEditable',\n 'spellCheck',\n 'nonce',\n 'slot',\n 'is',\n 'inputMode',\n 'enterKeyHint',\n 'autofocus',\n 'autoFocus',\n 'translate',\n\n // Form attributes\n 'autoComplete',\n 'name',\n 'disabled',\n 'readOnly',\n 'required',\n 'checked',\n 'selected',\n 'multiple',\n 'value',\n 'defaultValue',\n 'defaultChecked',\n 'placeholder',\n 'htmlFor',\n 'type',\n 'accept',\n 'maxLength',\n 'minLength',\n 'pattern',\n 'noValidate',\n 'formAction',\n 'formEncType',\n 'formMethod',\n 'formNoValidate',\n 'formTarget',\n\n // Link/navigation attributes\n 'href',\n 'target',\n 'rel',\n 'download',\n 'referrerPolicy',\n 'integrity',\n 'crossOrigin',\n\n // Form container attributes\n 'action',\n 'method',\n 'encType',\n\n // Media attributes\n 'autoPlay',\n 'controls',\n 'loop',\n 'muted',\n 'playsInline',\n 'poster',\n 'preload',\n 'mediaGroup',\n\n // Image/embed attributes\n 'loading',\n 'decoding',\n 'sizes',\n 'srcDoc',\n 'srcLang',\n 'srcSet',\n 'useMap',\n\n // Table attributes\n 'colSpan',\n 'rowSpan',\n 'cols',\n 'rows',\n 'headers',\n 'scope',\n 'span',\n\n // Iframe/embed attributes\n 'sandbox',\n 'allowFullScreen',\n 'frameBorder',\n 'scrolling',\n 'seamless',\n 'allow',\n\n // Interactive attributes\n 'open',\n 'cite',\n 'dateTime',\n 'reversed',\n 'start',\n 'high',\n 'low',\n 'optimum',\n 'wrap',\n 'shape',\n 'size',\n 'summary',\n\n // Script/resource attributes\n 'async',\n 'defer',\n 'noModule',\n 'charSet',\n 'httpEquiv',\n 'manifest',\n\n // Microdata/RDFa attributes\n 'about',\n 'datatype',\n 'inlist',\n 'prefix',\n 'property',\n 'resource',\n 'typeof',\n 'vocab',\n 'itemProp',\n 'itemScope',\n 'itemType',\n 'itemID',\n 'itemRef',\n\n // Deprecated but still used\n 'classID',\n 'contextMenu',\n 'keyParams',\n 'keyType',\n 'kind',\n 'label',\n 'list',\n 'profile',\n 'radioGroup',\n 'wmode',\n 'capture',\n 'challenge',\n 'scoped',\n 'step',\n 'form',\n\n // SVG-only attributes (not CSS properties)\n 'viewBox',\n 'preserveAspectRatio',\n 'xmlns',\n 'xlinkHref',\n 'xmlBase',\n 'xmlLang',\n 'xmlSpace',\n 'd',\n 'pathLength',\n 'points',\n 'markerEnd',\n 'markerMid',\n 'markerStart',\n 'clipPathUnits',\n 'gradientUnits',\n 'gradientTransform',\n 'patternUnits',\n 'patternTransform',\n 'patternContentUnits',\n 'spreadMethod',\n 'startOffset',\n 'stdDeviation',\n 'stitchTiles',\n 'surfaceScale',\n 'textLength',\n 'lengthAdjust',\n 'maskUnits',\n 'maskContentUnits',\n 'filterUnits',\n 'primitiveUnits',\n 'numOctaves',\n 'baseFrequency',\n 'seed',\n 'result',\n 'in2',\n 'values',\n 'keyTimes',\n 'keySplines',\n 'repeatCount',\n 'repeatDur',\n 'calcMode',\n 'attributeName',\n 'attributeType',\n 'begin',\n 'dur',\n 'end',\n 'by',\n]);\n\n// Improved style prop detection\nexport const isStyleProp = (prop: string): boolean => {\n // First check if it's a common event handler (these should never be treated as style props)\n if (commonEventHandlers.has(prop)) {\n return false;\n }\n\n // HTML attributes should never be treated as style props\n if (htmlOnlyAttributes.has(prop)) {\n return false;\n }\n\n // Any prop containing a hyphen is an HTML attribute (aria-*, data-*, accept-charset, etc.)\n // In React, CSS properties are always camelCase — only CSS custom properties use hyphens (--*),\n // and data-style-* is a special convention handled separately below.\n if (\n prop.includes('-') &&\n !prop.startsWith('--') &&\n !prop.startsWith('data-style-')\n ) {\n return false;\n }\n\n // Check if it's a valid CSS property or custom style prop\n if (\n cssProperties.has(prop) ||\n extraKeys.has(prop) ||\n prop.startsWith('--') ||\n (prop.startsWith('data-style-') && !includeKeys.has(prop))\n ) {\n return true;\n }\n\n // Check if it's a valid CSS property using CSS.supports (browser environment)\n // Results are cached to avoid repeated CSS.supports calls\n if (typeof CSS !== 'undefined' && CSS.supports) {\n const cached = cssSupportCache.get(prop);\n if (cached !== undefined) return cached;\n\n try {\n const kebabProp = vendorPrefixToKebabCase(prop);\n const result = CSS.supports(kebabProp, 'inherit');\n cssSupportCache.set(prop, result);\n return result;\n } catch {\n cssSupportCache.set(prop, false);\n return false;\n }\n }\n\n return false;\n};\n\n/**\n * Enhances styleObjectToCss to handle vendor prefixed properties\n *\n * @param styleObject The style object with camelCase properties\n * @returns A CSS string with properly formatted properties\n */\nexport function styleObjectToCss(styleObject: Record<string, any>): string {\n return Object.entries(styleObject)\n .filter(([key]) => isStyleProp(key))\n .map(([property, value]) => {\n if (value === undefined || value === null) return '';\n\n // Convert property to kebab-case with vendor prefix handling\n const cssProperty = propertyToKebabCase(property);\n\n // Return formatted CSS declaration\n return `${cssProperty}: ${value};`;\n })\n .filter(Boolean)\n .join(' ');\n}\n\nexport const toKebabCase = (str: string): string => {\n return vendorPrefixToKebabCase(str);\n};\n\n// Process and normalize style properties\nexport const processStyleProperty = (\n property: string,\n value: any,\n getColor: (color: string) => string\n): string | number => {\n // Handle null or undefined values\n if (value == null) {\n return '';\n }\n\n // Handle custom CSS properties (variables)\n if (property.startsWith('--')) {\n // For CSS variables, we pass the value as is\n return value;\n }\n\n // Convert kebab-case property to check against numericCssProperties\n const kebabProperty = toKebabCase(property);\n\n // Convert numbers to pixels for appropriate properties\n if (typeof value === 'number') {\n // lineHeight only accepts integers: 1-3 are unitless multipliers, 4+ are pixel sizes\n if (property === 'lineHeight' && Number.isInteger(value) && value <= 3) {\n return value;\n }\n\n // Check if this is a property that should have px units\n // First check the property as is, then check with vendor prefixes removed\n const shouldAddPx =\n !NumberProps.has(property) &&\n (numericCssProperties.has(kebabProperty) ||\n // Check if it's a vendor-prefixed property that needs px\n ((/^-(webkit|moz|ms|o)-/.test(kebabProperty) ||\n /^-(Webkit|Moz|Ms|O)-/.test(kebabProperty)) &&\n numericCssProperties.has(\n kebabProperty.replace(/^-(webkit|moz|ms|o|Webkit|Moz|Ms|O)-/, '')\n )));\n\n if (shouldAddPx) {\n return `${value}px`;\n }\n return value;\n }\n\n // Handle color properties directly\n if (\n property.toLowerCase().indexOf('color') >= 0 ||\n property === 'fill' ||\n property === 'stroke'\n ) {\n return getColor(value);\n }\n\n // Handle properties that might contain color values (borders, gradients, shadows, etc.)\n if (typeof value === 'string' && value.length > 3) {\n if (hasColorToken(value)) {\n return replaceColorTokens(value, (token) => getColor(token));\n }\n }\n\n // Handle arrays (e.g., for transforms)\n if (Array.isArray(value)) {\n return value.join(' ');\n }\n\n // Handle objects (e.g., for gradients or transforms)\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n\n return value;\n};\n\n// Export the set of valid style properties\nexport const StyleProps: string[] = Array.from(cssProperties);\nexport const StyledProps: Set<string> = cssProperties;\n\n// Helper function to validate if a prop should be an attribute\nexport const shouldBeAttribute = (prop: string): boolean => {\n return (\n !isStyleProp(prop) &&\n !includeKeys.has(prop) &&\n // Common non-style attributes\n /^(id|className|role|aria-|data-(?!style-)|tabIndex|title|lang|dir)/.test(\n prop\n )\n );\n};\n\n// Helper to generate class name from style prop\nexport const generateClassName = (\n property: string,\n value: any,\n getColor: (color: string) => string\n): string => {\n const processedValue = processStyleProperty(property, value, getColor);\n const normalizedValue = String(processedValue)\n .replace(/[^a-zA-Z0-9-]/g, '-')\n .replace(/^-+|-+$/g, '');\n\n return `${toKebabCase(property)}-${normalizedValue}`;\n};\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n// animationHelpers.ts\nimport { styleObjectToCss } from '../utils/style';\n\nlet keyframesCounter = 0;\nconst keyframesCache = new Map<string, string>();\n\nexport const generateKeyframes = (\n animation: any\n): { keyframesName: string; keyframes: string } => {\n // Exclure les propriétés qui ne font pas partie des keyframes\n const {\n duration,\n timingFunction,\n delay,\n iterationCount,\n direction,\n fillMode,\n playState,\n timeline,\n range,\n keyframes: explicitKeyframes,\n ...rest\n } = animation;\n\n const keyframesDef = explicitKeyframes || rest;\n\n // Générer une clé pour le cache basée sur les keyframes\n const animationConfigString = JSON.stringify(keyframesDef);\n\n if (keyframesCache.has(animationConfigString)) {\n const keyframesName = keyframesCache.get(animationConfigString)!;\n return { keyframesName, keyframes: '' }; // Les keyframes existent déjà\n }\n\n const keyframesName = `animation-${keyframesCounter++}`;\n keyframesCache.set(animationConfigString, keyframesName);\n\n const keyframesContent: string[] = [];\n\n // Trier les clés pour assurer un ordre cohérent\n const keyframeKeys = Object.keys(keyframesDef).sort((a, b) => {\n const getPercentage = (key: string): number => {\n if (key === 'from') return 0;\n if (key === 'to' || key === 'enter') return 100;\n return parseInt(key.replace('%', ''), 10);\n };\n return getPercentage(a) - getPercentage(b);\n });\n\n keyframeKeys.forEach((key) => {\n const cssKey = key === 'enter' ? 'to' : key; // Remplacer 'enter' par 'to'\n const styles = keyframesDef[key];\n keyframesContent.push(`${cssKey} { ${styleObjectToCss(styles)} }`);\n });\n\n const keyframesCss = `\n @keyframes ${keyframesName} {\n ${keyframesContent.join('\\n')}\n }\n `;\n\n return { keyframesName, keyframes: keyframesCss };\n};\n","/**\n * Mapping of standard CSS properties to their vendor-prefixed equivalents.\n *\n * Optimized for modern browsers (Chrome 100+, Safari 15+, Firefox 91+).\n * Most properties no longer need vendor prefixes in these browsers.\n * Only -webkit- prefixes are kept where still needed by Safari/WebKit.\n *\n * Removed prefixes:\n * - -moz- (Firefox 91+ supports all standard properties unprefixed)\n * - -ms- (IE/Edge Legacy no longer supported)\n * - -o- (Opera uses Blink engine, same as Chrome)\n * - -webkit- for animation, transform, transition, flexbox, boxShadow,\n * boxSizing, columns, borderImage, backgroundSize, backgroundOrigin,\n * perspective, hyphens (all unprefixed in Safari 15+)\n */\n\n// Properties that still need vendor prefixes in modern browsers\nexport const vendorPrefixedProperties: Record<string, string[]> = {\n // Properties that still need -webkit- in Safari\n backgroundClip: ['-webkit-background-clip'],\n maskImage: ['-webkit-mask-image'],\n\n // Webkit-only properties (no unprefixed equivalent)\n textFillColor: ['-webkit-text-fill-color'],\n textStroke: ['-webkit-text-stroke'],\n textStrokeColor: ['-webkit-text-stroke-color'],\n textStrokeWidth: ['-webkit-text-stroke-width'],\n tapHighlightColor: ['-webkit-tap-highlight-color'],\n touchCallout: ['-webkit-touch-callout'],\n userDrag: ['-webkit-user-drag'],\n lineClamp: ['-webkit-line-clamp'],\n overflowScrolling: ['-webkit-overflow-scrolling'],\n};\n\n// Convert camelCase property names to kebab-case\nexport const camelToKebabCase = (property: string): string => {\n return property.replace(/([A-Z])/g, '-$1').toLowerCase();\n};\n\n// Get all vendor prefixed versions of a property in kebab-case\nexport const getVendorPrefixedProperties = (property: string): string[] => {\n const kebabProperty = camelToKebabCase(property);\n const prefixedProperties = vendorPrefixedProperties[property] || [];\n\n // Return the standard property along with all vendor-prefixed versions\n return [kebabProperty, ...prefixedProperties];\n};\n\n// Check if a property needs vendor prefixes\nexport const needsVendorPrefix = (property: string): boolean => {\n return property in vendorPrefixedProperties;\n};\n","/**\n * Simple, fast hash function (djb2) for generating deterministic class names.\n */\nexport function hash(str: string): string {\n let hash = 5381;\n let i = str.length;\n\n while (i) {\n hash = (hash * 33) ^ str.charCodeAt(--i);\n }\n\n // Convert to unsigned 32-bit integer and then to base 36 string\n return (hash >>> 0).toString(36);\n}\n","// analytics/AnalyticsContext.tsx\nimport React, { createContext, ReactNode, useContext, useMemo } from 'react';\n\nexport type AnalyticsConfig = {\n trackEvent?: (event: any) => void;\n};\n\n// Create the context with a default no-op implementation\nexport const AnalyticsContext = createContext<AnalyticsConfig>({});\n\nexport const useAnalytics = (): AnalyticsConfig => useContext(AnalyticsContext);\n\nexport const AnalyticsProvider = ({\n trackEvent,\n children,\n}: AnalyticsConfig & {\n children?: ReactNode;\n}): React.ReactElement => {\n const value = useMemo(() => ({ trackEvent }), [trackEvent]);\n\n return (\n <AnalyticsContext.Provider value={value}>\n {children}\n </AnalyticsContext.Provider>\n );\n};\n","import React from 'react';\nimport { Element, ElementProps } from '../element/Element';\nimport { ImageStyleProps } from '../types/style';\n\nexport interface ImageProps\n extends\n Omit<ImageStyleProps, keyof ElementProps>,\n Omit<Partial<HTMLImageElement>, keyof ElementProps>,\n ElementProps {}\n\nexport const Image = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithRef<typeof Element> & ImageProps\n>((props, ref) => {\n const imageProps = { ...props, alt: props.alt || '' };\n return <Element as=\"img\" {...imageProps} ref={ref} />;\n}) as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithRef<typeof Element> &\n ImageProps &\n React.RefAttributes<HTMLElement>\n>;\n\nexport const ImageBackground = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithRef<typeof Element> & ImageProps\n>(({ src, ...props }, ref) => (\n <Element\n backgroundImage={`url(${src})`}\n backgroundSize=\"cover\"\n backgroundRepeat=\"no-repeat\"\n {...props}\n ref={ref}\n />\n)) as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithRef<typeof Element> &\n ImageProps &\n React.RefAttributes<HTMLElement>\n>;\n","import React from 'react';\n\nimport type { TextProps } from './Text/Text.props';\nimport TextView from './Text/Text.view';\nconst TextComponent = React.forwardRef<HTMLElement, TextProps & any>(\n (props, ref) => {\n return <TextView {...props} ref={ref} />;\n }\n);\n\n/**\n * The Text component is a simple component that renders a text string or paragraphs as a DOM element in the UI. It is a <p> tag by default.\n */\nexport const Text = TextComponent;\n","/**\n * Text View Component\n *\n * Renders text with various styles and states according to the design guidelines.\n */\n\nimport React from 'react';\n\nimport { TextProps } from './Text.props';\n\nimport { View, ViewProps } from '../View';\n\nimport { Element } from '../../element/Element';\n\ninterface Props extends TextProps {\n views?: {\n container?: ViewProps;\n sup?: ViewProps;\n };\n bgColor?: string;\n}\n\n/**\n * Main Text component that renders text with various styles and states\n */\nconst TextView = React.forwardRef<HTMLElement, Props>(\n (\n {\n children,\n maxLines,\n isItalic = false,\n isUnderlined = false,\n toUpperCase = false,\n isSub = false,\n isSup = false,\n isStriked = false,\n views,\n style,\n ...props\n },\n ref\n ) => {\n // console.log('props', props, children);\n // For sub/sup text, use inline display\n const noLineBreak = isSub || isSup ? { display: 'inline' } : {};\n\n const finalChildren = toUpperCase\n ? React.Children.map(children, (child) =>\n typeof child === 'string' ? child.toUpperCase() : child\n )\n : children;\n\n const styles: React.CSSProperties = {\n ...(style as React.CSSProperties),\n ...(maxLines\n ? {\n display: '-webkit-box',\n WebkitLineClamp: maxLines,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }\n : {}),\n };\n\n // Common props\n const commonProps = {\n as: (isSub\n ? 'sub'\n : isSup\n ? 'sup'\n : 'span') as keyof JSX.IntrinsicElements,\n fontStyle: isItalic ? 'italic' : 'normal',\n textDecoration: isStriked\n ? 'line-through'\n : isUnderlined\n ? 'underline'\n : 'none',\n style: styles,\n ...noLineBreak,\n ...props,\n ...views?.container,\n };\n\n if (isSub || isSup) {\n return (\n <View\n {...commonProps}\n ref={ref}\n as={isSub ? 'sub' : 'sup'}\n fontSize=\"75%\"\n lineHeight=\"0\"\n position=\"relative\"\n bottom={isSub ? '-0.25em' : undefined}\n top={isSup ? '-0.5em' : undefined}\n {...views?.sup}\n >\n {finalChildren}\n </View>\n );\n }\n\n // console.log('commonProps', commonProps, children);\n\n return (\n <Element {...commonProps} ref={ref}>\n {finalChildren}\n </Element>\n );\n }\n);\n\nexport default TextView;\n","import React from 'react';\nimport { Element, ElementProps } from '../element/Element';\nimport { ViewStyleProps } from '../types/style';\n\n// Common props pour éviter la répétition\ninterface CommonProps\n extends ElementProps, Omit<ViewStyleProps, keyof ElementProps> {}\n\n// Props pour le composant Form\nexport interface FormProps\n extends\n CommonProps,\n Omit<Partial<HTMLFormElement>, keyof ElementProps>,\n ElementProps {}\n\n// Props pour le composant Button\nexport interface ButtonProps\n extends CommonProps, Omit<Partial<HTMLButtonElement>, keyof CommonProps> {\n children?: React.ReactNode;\n onClick?: (..._args: any) => void;\n}\n\n// Props pour le composant Input\nexport interface InputProps\n extends\n ElementProps,\n CommonProps,\n Omit<Partial<HTMLInputElement>, keyof ElementProps> {}\n\nexport const Form = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithRef<typeof Element> & FormProps\n>((props, ref) => (\n <Element as=\"form\" {...props} ref={ref} />\n)) as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithRef<typeof Element> &\n FormProps &\n React.RefAttributes<HTMLElement>\n>;\n\nexport const Input = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithRef<typeof Element> & InputProps\n>((props, ref) => (\n <Element as=\"input\" {...props} ref={ref} />\n)) as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithRef<typeof Element> &\n InputProps &\n React.RefAttributes<HTMLElement>\n>;\n\nexport const Button = React.forwardRef<\n HTMLElement,\n React.ComponentPropsWithRef<typeof Element> & ButtonProps\n>((props, ref) => {\n if (process.env.NODE_ENV !== 'production') {\n if (!props.children && !props['aria-label']) {\n console.warn(\n 'Accessibility Warning: Button is missing an accessible name. If it is an icon-only button, please provide an `aria-label`.'\n );\n }\n }\n return <Element as=\"button\" {...props} ref={ref} />;\n}) as unknown as React.ForwardRefExoticComponent<\n React.ComponentPropsWithRef<typeof Element> &\n ButtonProps &\n React.RefAttributes<HTMLElement>\n>;\n","import React from 'react';\nimport { View } from './View';\nimport { shimmer } from '../element/Animation';\nimport { AnimationProps } from '../utils/constants';\n\nexport const Skeleton = React.memo(\n ({\n duration = '2s',\n timingFunction = 'linear',\n iterationCount = 'infinite',\n ...props\n }: AnimationProps & any) => (\n <View backgroundColor=\"color-black-300\" {...props} overflow=\"hidden\">\n <View\n position=\"relative\"\n inset={0}\n width={'100%'}\n height={'100%'}\n animate={shimmer({ duration, timingFunction, iterationCount })}\n background=\"linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.6), transparent)\"\n />\n </View>\n )\n);\n","// animations.ts\n\nimport { AnimationProps } from '../utils/constants';\n\nexport const fadeIn = (\n { duration = '1s', timingFunction = 'ease', ...props }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease',\n }\n) => ({\n from: { opacity: 0 },\n to: { opacity: 1 },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const fadeOut = (\n { duration = '1s', timingFunction = 'ease', ...props }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease',\n }\n) => ({\n from: { opacity: 1 },\n to: { opacity: 0 },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const slideInLeft = (\n {\n duration = '0.5s',\n timingFunction = 'ease-out',\n ...props\n }: AnimationProps = {\n duration: '0.5s',\n timingFunction: 'ease-out',\n }\n) => ({\n from: { transform: 'translateX(-100%)' },\n to: { transform: 'translateX(0)' },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const slideInRight = (\n {\n duration = '0.5s',\n timingFunction = 'ease-out',\n ...props\n }: AnimationProps = {\n duration: '0.5s',\n timingFunction: 'ease-out',\n }\n) => ({\n from: { transform: 'translateX(100%)' },\n to: { transform: 'translateX(0)' },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const slideInDown = (\n {\n duration = '0.5s',\n timingFunction = 'ease-out',\n ...props\n }: AnimationProps = {\n duration: '0.5s',\n timingFunction: 'ease-out',\n }\n) => ({\n from: { transform: 'translateY(-100%)' },\n to: { transform: 'translateY(0)' },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const slideInUp = (\n {\n duration = '0.5s',\n timingFunction = 'ease-out',\n ...props\n }: AnimationProps = {\n duration: '0.5s',\n timingFunction: 'ease-out',\n }\n) => ({\n from: { transform: 'translateY(100%)' },\n to: { transform: 'translateY(0)' },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const bounce = (\n {\n duration = '2s',\n timingFunction = 'ease',\n iterationCount = 'infinite',\n ...props\n }: AnimationProps = {\n duration: '2s',\n timingFunction: 'ease',\n iterationCount: 'infinite',\n }\n) => ({\n from: { transform: 'translateY(0)' },\n '20%': { transform: 'translateY(-30px)' },\n '40%': { transform: 'translateY(0)' },\n '60%': { transform: 'translateY(-15px)' },\n '80%': { transform: 'translateY(0)' },\n to: { transform: 'translateY(0)' },\n duration,\n timingFunction,\n iterationCount,\n ...props,\n});\n\nexport const rotate = (\n {\n duration = '1s',\n timingFunction = 'linear',\n iterationCount = 'infinite',\n ...props\n }: AnimationProps = {\n duration: '1s',\n timingFunction: 'linear',\n iterationCount: 'infinite',\n }\n) => ({\n from: { transform: 'rotate(0deg)' },\n to: { transform: 'rotate(360deg)' },\n duration,\n timingFunction,\n iterationCount,\n ...props,\n});\n\nexport const pulse = (\n {\n duration = '1s',\n timingFunction = 'ease-in-out',\n iterationCount = 'infinite',\n ...props\n }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease-in-out',\n iterationCount: 'infinite',\n }\n) => ({\n from: { transform: 'scale(1)' },\n '50%': { transform: 'scale(1.05)' },\n to: { transform: 'scale(1)' },\n duration,\n timingFunction,\n iterationCount,\n ...props,\n});\n\nexport const zoomIn = (\n {\n duration = '0.5s',\n timingFunction = 'ease-out',\n ...props\n }: AnimationProps = {\n duration: '0.5s',\n timingFunction: 'ease-out',\n }\n) => ({\n from: { transform: 'scale(0)' },\n to: { transform: 'scale(1)' },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const zoomOut = (\n {\n duration = '0.5s',\n timingFunction = 'ease-out',\n ...props\n }: AnimationProps = {\n duration: '0.5s',\n timingFunction: 'ease-out',\n }\n) => ({\n from: { transform: 'scale(1)' },\n to: { transform: 'scale(0)' },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const flash = (\n { duration = '1s', iterationCount = 'infinite', ...props }: AnimationProps = {\n duration: '1s',\n iterationCount: 'infinite',\n }\n) => ({\n from: { opacity: 1 },\n '50%': { opacity: 0 },\n to: { opacity: 1 },\n duration,\n iterationCount,\n ...props,\n});\n\nexport const scale = (\n {\n duration = '1s',\n timingFunction = 'ease-in-out',\n iterationCount = 'infinite',\n ...props\n }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease-in-out',\n iterationCount: 'infinite',\n }\n) => ({\n from: { transform: 'scale(1)' },\n '50%': { transform: 'scale(1.05)' },\n to: { transform: 'scale(1)' },\n duration,\n timingFunction,\n iterationCount,\n ...props,\n});\n\nexport const shake = (\n {\n duration = '0.5s',\n iterationCount = 'infinite',\n ...props\n }: AnimationProps = {\n duration: '0.5s',\n iterationCount: 'infinite',\n }\n) => ({\n from: { transform: 'translateX(0)' },\n '10%': { transform: 'translateX(-10px)' },\n '20%': { transform: 'translateX(10px)' },\n '30%': { transform: 'translateX(-10px)' },\n '40%': { transform: 'translateX(10px)' },\n '50%': { transform: 'translateX(-10px)' },\n '60%': { transform: 'translateX(10px)' },\n '70%': { transform: 'translateX(-10px)' },\n '80%': { transform: 'translateX(10px)' },\n '90%': { transform: 'translateX(-10px)' },\n to: { transform: 'translateX(0)' },\n duration,\n iterationCount,\n ...props,\n});\n\nexport const swing = (\n { duration = '1s', iterationCount = 'infinite', ...props }: AnimationProps = {\n duration: '1s',\n iterationCount: 'infinite',\n }\n) => ({\n from: { transform: 'rotate(0deg)' },\n '20%': { transform: 'rotate(15deg)' },\n '40%': { transform: 'rotate(-10deg)' },\n '60%': { transform: 'rotate(5deg)' },\n '80%': { transform: 'rotate(-5deg)' },\n to: { transform: 'rotate(0deg)' },\n duration,\n iterationCount,\n ...props,\n});\n\nexport const rubberBand = (\n {\n duration = '1s',\n timingFunction = 'ease-in-out',\n ...props\n }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease-in-out',\n }\n) => ({\n from: { transform: 'scale3d(1, 1, 1)' },\n '30%': { transform: 'scale3d(1.25, 0.75, 1)' },\n '40%': { transform: 'scale3d(0.75, 1.25, 1)' },\n '50%': { transform: 'scale3d(1.15, 0.85, 1)' },\n '65%': { transform: 'scale3d(0.95, 1.05, 1)' },\n '75%': { transform: 'scale3d(1.05, 0.95, 1)' },\n to: { transform: 'scale3d(1, 1, 1)' },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const wobble = (\n { duration = '1s', ...props }: AnimationProps = {\n duration: '1s',\n }\n) => ({\n from: { transform: 'translateX(0%)' },\n '15%': { transform: 'translateX(-25%) rotate(-5deg)' },\n '30%': { transform: 'translateX(20%) rotate(3deg)' },\n '45%': { transform: 'translateX(-15%) rotate(-3deg)' },\n '60%': { transform: 'translateX(10%) rotate(2deg)' },\n '75%': { transform: 'translateX(-5%) rotate(-1deg)' },\n to: { transform: 'translateX(0%)' },\n duration,\n ...props,\n});\n\nexport const flip = (\n { duration = '1s', ...props }: AnimationProps = {\n duration: '1s',\n }\n) => ({\n from: {\n transform: 'perspective(400px) rotateY(0deg)',\n },\n '40%': {\n transform: 'perspective(400px) rotateY(-180deg)',\n },\n to: {\n transform: 'perspective(400px) rotateY(-360deg)',\n },\n duration,\n ...props,\n});\n\nexport const heartBeat = (\n {\n duration = '1.3s',\n iterationCount = 'infinite',\n ...props\n }: AnimationProps = {\n duration: '1.3s',\n iterationCount: 'infinite',\n }\n) => ({\n from: { transform: 'scale(1)' },\n '14%': { transform: 'scale(1.3)' },\n '28%': { transform: 'scale(1)' },\n '42%': { transform: 'scale(1.3)' },\n '70%': { transform: 'scale(1)' },\n to: { transform: 'scale(1)' },\n duration,\n iterationCount,\n ...props,\n});\n\nexport const rollIn = (\n { duration = '1s', ...props }: AnimationProps = {\n duration: '1s',\n }\n) => ({\n from: {\n opacity: 0,\n transform: 'translateX(-100%) rotate(-120deg)',\n },\n to: {\n opacity: 1,\n transform: 'translateX(0px) rotate(0deg)',\n },\n duration,\n ...props,\n});\n\nexport const rollOut = (\n { duration = '1s', ...props }: AnimationProps = {\n duration: '1s',\n }\n) => ({\n from: {\n opacity: 1,\n transform: 'translateX(0px) rotate(0deg)',\n },\n to: {\n opacity: 0,\n transform: 'translateX(100%) rotate(120deg)',\n },\n duration,\n ...props,\n});\n\nexport const lightSpeedIn = (\n { duration = '1s', timingFunction = 'ease-out', ...props }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease-out',\n }\n) => ({\n from: {\n transform: 'translateX(100%) skewX(-30deg)',\n opacity: 0,\n },\n '60%': {\n transform: 'skewX(20deg)',\n opacity: 1,\n },\n '80%': {\n transform: 'skewX(-5deg)',\n },\n to: {\n transform: 'translateX(0)',\n opacity: 1,\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const lightSpeedOut = (\n { duration = '1s', timingFunction = 'ease-in', ...props }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease-in',\n }\n) => ({\n from: {\n opacity: 1,\n },\n '20%': {\n opacity: 1,\n transform: 'translateX(-20%) skewX(20deg)',\n },\n to: {\n opacity: 0,\n transform: 'translateX(-100%) skewX(30deg)',\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const hinge = (\n {\n duration = '2s',\n timingFunction = 'ease-in-out',\n ...props\n }: AnimationProps = {\n duration: '2s',\n timingFunction: 'ease-in-out',\n }\n) => ({\n from: {\n transform: 'rotate(0deg)',\n transformOrigin: 'top left',\n opacity: 1,\n },\n '20%': {\n transform: 'rotate(80deg)',\n opacity: 1,\n },\n '40%': {\n transform: 'rotate(60deg)',\n opacity: 1,\n },\n '60%': {\n transform: 'rotate(80deg)',\n opacity: 1,\n },\n '80%': {\n transform: 'rotate(60deg)',\n opacity: 1,\n },\n to: {\n transform: 'translateY(700px)',\n opacity: 0,\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const jackInTheBox = (\n { duration = '1s', timingFunction = 'ease', ...props }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease',\n }\n) => ({\n from: {\n opacity: 0,\n transform: 'scale(0.1) rotate(30deg)',\n transformOrigin: 'center bottom',\n },\n '50%': {\n transform: 'rotate(-10deg)',\n },\n '70%': {\n transform: 'rotate(3deg)',\n },\n to: {\n opacity: 1,\n transform: 'scale(1) rotate(0deg)',\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const flipInX = (\n { duration = '1s', timingFunction = 'ease-in', ...props }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease-in',\n }\n) => ({\n from: {\n transform: 'perspective(400px) rotateX(90deg)',\n opacity: 0,\n },\n '40%': {\n transform: 'perspective(400px) rotateX(-10deg)',\n opacity: 1,\n },\n to: {\n transform: 'perspective(400px) rotateX(0deg)',\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const flipInY = (\n { duration = '1s', timingFunction = 'ease-in', ...props }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease-in',\n }\n) => ({\n from: {\n transform: 'perspective(400px) rotateY(90deg)',\n opacity: 0,\n },\n '40%': {\n transform: 'perspective(400px) rotateY(-10deg)',\n opacity: 1,\n },\n to: {\n transform: 'perspective(400px) rotateY(0deg)',\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const headShake = (\n { duration = '1s', iterationCount = 'infinite', ...props }: AnimationProps = {\n duration: '1s',\n iterationCount: 'infinite',\n }\n) => ({\n from: {\n transform: 'translateX(0)',\n },\n '6.5%': {\n transform: 'translateX(-6px) rotateY(-9deg)',\n },\n '18.5%': {\n transform: 'translateX(5px) rotateY(7deg)',\n },\n '31.5%': {\n transform: 'translateX(-3px) rotateY(-5deg)',\n },\n '43.5%': {\n transform: 'translateX(2px) rotateY(3deg)',\n },\n '50%': {\n transform: 'translateX(0)',\n },\n duration,\n iterationCount,\n ...props,\n});\n\nexport const tada = (\n { duration = '1s', iterationCount = 'infinite', ...props }: AnimationProps = {\n duration: '1s',\n iterationCount: 'infinite',\n }\n) => ({\n from: { transform: 'scale3d(1, 1, 1)', opacity: 1 },\n '10%, 20%': {\n transform: 'scale3d(0.9, 0.9, 0.9) rotate(-3deg)',\n },\n '30%, 50%, 70%, 90%': {\n transform: 'scale3d(1.1, 1.1, 1.1) rotate(3deg)',\n },\n '40%, 60%, 80%': {\n transform: 'scale3d(1.1, 1.1, 1.1) rotate(-3deg)',\n },\n to: { transform: 'scale3d(1, 1, 1)', opacity: 1 },\n duration,\n iterationCount,\n ...props,\n});\n\nexport const jello = (\n { duration = '1s', iterationCount = 'infinite', ...props }: AnimationProps = {\n duration: '1s',\n iterationCount: 'infinite',\n }\n) => ({\n from: { transform: 'none' },\n '11.1%': { transform: 'skewX(-12.5deg) skewY(-12.5deg)' },\n '22.2%': { transform: 'skewX(6.25deg) skewY(6.25deg)' },\n '33.3%': { transform: 'skewX(-3.125deg) skewY(-3.125deg)' },\n '44.4%': { transform: 'skewX(1.5625deg) skewY(1.5625deg)' },\n '55.5%': { transform: 'skewX(-0.78125deg) skewY(-0.78125deg)' },\n '66.6%': { transform: 'skewX(0.390625deg) skewY(0.390625deg)' },\n '77.7%': { transform: 'skewX(-0.1953125deg) skewY(-0.1953125deg)' },\n '88.8%': { transform: 'skewX(0.09765625deg) skewY(0.09765625deg)' },\n to: { transform: 'none' },\n duration,\n iterationCount,\n ...props,\n});\n\nexport const fadeInDown = (\n { duration = '1s', timingFunction = 'ease-out', ...props }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease-out',\n }\n) => ({\n from: {\n opacity: 0,\n transform: 'translateY(-100%)',\n },\n to: {\n opacity: 1,\n transform: 'translateY(0)',\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const fadeInUp = (\n { duration = '1s', timingFunction = 'ease-out', ...props }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease-out',\n }\n) => ({\n from: {\n opacity: 0,\n transform: 'translateY(100%)',\n },\n to: {\n opacity: 1,\n transform: 'translateY(0)',\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const bounceIn = (\n {\n duration = '0.75s',\n timingFunction = 'ease-in',\n ...props\n }: AnimationProps = {\n duration: '0.75s',\n timingFunction: 'ease-in',\n }\n) => ({\n from: {\n opacity: 0,\n transform: 'scale(0.3)',\n },\n '50%': {\n opacity: 1,\n transform: 'scale(1.05)',\n },\n '70%': {\n transform: 'scale(0.9)',\n },\n to: {\n transform: 'scale(1)',\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const bounceOut = (\n {\n duration = '0.75s',\n timingFunction = 'ease-out',\n ...props\n }: AnimationProps = {\n duration: '0.75s',\n timingFunction: 'ease-out',\n }\n) => ({\n from: {\n transform: 'scale(1)',\n },\n '20%': {\n transform: 'scale(0.9)',\n },\n '50%, 55%': {\n opacity: 1,\n transform: 'scale(1.1)',\n },\n to: {\n opacity: 0,\n transform: 'scale(0.3)',\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const slideOutLeft = (\n {\n duration = '0.5s',\n timingFunction = 'ease-in',\n ...props\n }: AnimationProps = {\n duration: '0.5s',\n timingFunction: 'ease-in',\n }\n) => ({\n from: {\n transform: 'translateX(0)',\n },\n to: {\n transform: 'translateX(-100%)',\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const slideOutRight = (\n {\n duration = '0.5s',\n timingFunction = 'ease-in',\n ...props\n }: AnimationProps = {\n duration: '0.5s',\n timingFunction: 'ease-in',\n }\n) => ({\n from: {\n transform: 'translateX(0)',\n },\n to: {\n transform: 'translateX(100%)',\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const zoomInDown = (\n { duration = '1s', timingFunction = 'ease-out', ...props }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease-out',\n }\n) => ({\n from: {\n opacity: 0,\n transform: 'scale(0.1) translateY(-1000px)',\n },\n '60%': {\n opacity: 1,\n transform: 'scale(0.475) translateY(60px)',\n },\n to: {\n transform: 'scale(1) translateY(0)',\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const zoomOutUp = (\n { duration = '1s', timingFunction = 'ease-in', ...props }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease-in',\n }\n) => ({\n from: {\n opacity: 1,\n transform: 'scale(1) translateY(0)',\n },\n '40%': {\n opacity: 1,\n transform: 'scale(0.475) translateY(-60px)',\n },\n to: {\n opacity: 0,\n transform: 'scale(0.1) translateY(-1000px)',\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const backInDown = (\n { duration = '1s', timingFunction = 'ease-in', ...props }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease-in',\n }\n) => ({\n from: {\n opacity: 0.7,\n transform: 'translateY(-2000px) scaleY(2.5) scaleX(0.2)',\n },\n to: {\n opacity: 1,\n transform: 'translateY(0) scaleY(1) scaleX(1)',\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const backOutUp = (\n { duration = '1s', timingFunction = 'ease-in', ...props }: AnimationProps = {\n duration: '1s',\n timingFunction: 'ease-in',\n }\n) => ({\n from: {\n opacity: 1,\n transform: 'translateY(0)',\n },\n '80%': {\n opacity: 0.7,\n transform: 'translateY(-20px)',\n },\n to: {\n opacity: 0,\n transform: 'translateY(-2000px)',\n },\n duration,\n timingFunction,\n ...props,\n});\n\nexport const shimmer = (\n {\n duration = '2s',\n timingFunction = 'linear',\n iterationCount = 'infinite',\n ...props\n }: AnimationProps = {\n duration: '2s',\n timingFunction: 'linear',\n iterationCount: 'infinite',\n }\n) => ({\n from: { transform: 'translateX(-100%)' },\n '50%': { transform: 'translateX(100%)' },\n to: { transform: 'translateX(100%)' },\n duration,\n timingFunction,\n iterationCount,\n ...props,\n});\n\nexport const progress = (\n {\n duration = '2s',\n timingFunction = 'linear',\n direction = 'forwards',\n from = { width: '0%' },\n to = { width: '100%' },\n ...props\n }: AnimationProps = {\n duration: '2s',\n timingFunction: 'linear',\n direction: 'forwards',\n from: { width: '0%' },\n to: { width: '100%' },\n }\n) => ({\n from,\n to,\n duration,\n timingFunction,\n direction,\n ...props,\n});\n\nexport const typewriter = (\n {\n duration = '10s',\n steps = 10,\n iterationCount = 1,\n width = 0,\n ...props\n }: AnimationProps = {\n duration: '10s',\n steps: 10,\n iterationCount: 1,\n width: 0,\n }\n) => ({\n from: { width: '0px' },\n to: { width: `${width}px` },\n timingFunction: `steps(${steps})`,\n duration,\n iterationCount,\n ...props,\n});\n\nexport const blinkCursor = (\n {\n duration = '0.75s',\n timingFunction = 'step-end',\n iterationCount = 'infinite',\n color = 'black',\n ...props\n }: AnimationProps = {\n duration: '0.75s',\n timingFunction: 'step-end',\n iterationCount: 'infinite',\n color: 'black',\n }\n) => ({\n from: { color: color },\n to: { color: color },\n '0%': { color: color },\n '50%': { color: 'transparent' },\n '100%': { color: color },\n duration,\n timingFunction,\n iterationCount,\n ...props,\n});\nexport const fadeInScroll = (\n {\n duration = '0.5s',\n timingFunction = 'ease',\n timeline = 'scroll()',\n range = 'cover',\n ...props\n }: AnimationProps = {\n duration: '0.5s',\n timingFunction: 'ease',\n timeline: 'scroll()',\n range: 'cover',\n }\n) => ({\n from: { opacity: 0 },\n to: { opacity: 1 },\n duration,\n timingFunction,\n timeline,\n range,\n ...props,\n});\n\nexport const slideInLeftScroll = (\n {\n duration = '0.5s',\n timingFunction = 'ease-out',\n timeline = 'scroll()',\n range = 'cover',\n ...props\n }: AnimationProps = {\n duration: '0.5s',\n timingFunction: 'ease-out',\n timeline: 'scroll()',\n range: 'cover',\n }\n) => ({\n from: { transform: 'translateX(-200%)' },\n to: { transform: 'translateX(0)' },\n duration,\n timingFunction,\n timeline,\n range,\n ...props,\n});\n\nexport const scaleDownScroll = (\n {\n duration = '0.8s',\n timingFunction = 'ease',\n timeline = 'scroll()',\n range = 'cover',\n ...props\n }: AnimationProps = {\n duration: '0.8s',\n timingFunction: 'ease',\n timeline: 'scroll()',\n range: 'cover',\n }\n) => ({\n from: { transform: 'scale(3)' },\n to: { transform: 'scale(1)' },\n duration,\n timingFunction,\n timeline,\n range,\n ...props,\n});\n\n// Text fill reveal on scroll driven by a custom property (--fill)\n// Requires @property --fill defined in CSS\nexport const fillTextScroll = (\n {\n duration = '1s',\n timingFunction = 'linear',\n timeline = '--section',\n range = 'entry 100% cover 50%, cover 50% exit 0%',\n ...props\n }: AnimationProps = {\n duration: '1s',\n timingFunction: 'linear',\n timeline: '--section',\n range: 'entry 100% cover 50%, cover 50% exit 0%',\n }\n) => ({\n from: {\n '--fill': 0,\n color: 'transparent',\n backgroundPositionX:\n 'calc(var(--underline-block-width) * -1), calc(var(--underline-block-width) * -1), 0',\n },\n '50%': { '--fill': 0.5 },\n to: {\n '--fill': 1,\n backgroundPositionX: '0, 0, 0',\n color: 'var(--finish-fill)',\n },\n duration,\n timingFunction,\n timeline,\n range,\n ...props,\n});\n\n// Collapsing floating call-to-action on scroll\n// This animates the width from an expanded value to a collapsed width.\nexport const ctaCollapseScroll = (\n {\n duration = '1s',\n timingFunction = 'linear',\n timeline = 'scroll()',\n range = '0 400px',\n ...props\n }: AnimationProps = {\n duration: '1s',\n timingFunction: 'linear',\n timeline: 'scroll()',\n range: '0 400px',\n }\n) => ({\n from: { width: 'calc(48px + 120px)' },\n to: { width: '48px' },\n duration,\n timingFunction,\n timeline,\n range,\n ...props,\n});\n\n// Hand wave animation on scroll with a defined view range\nexport const handWaveScroll = (\n {\n duration = '2s',\n timingFunction = 'linear',\n timeline = 'scroll()',\n range = '10vh 60vh',\n ...props\n }: AnimationProps = {\n duration: '2s',\n timingFunction: 'linear',\n timeline: 'scroll()',\n range: '10vh 60vh',\n }\n) => ({\n from: { transform: 'rotate(0deg)' },\n '50%': { transform: 'rotate(20deg)' },\n to: { transform: 'rotate(0deg)' },\n duration,\n timingFunction,\n timeline,\n range,\n ...props,\n});\n\n// Fade out and blur text on scroll exit\nexport const fadeBlurScroll = (\n {\n duration = '1s',\n timingFunction = 'linear',\n timeline = 'view()',\n range = 'cover 40% cover 85%',\n ...props\n }: AnimationProps = {\n duration: '1s',\n timingFunction: 'linear',\n timeline: 'view()',\n range: 'cover 40% cover 85%',\n }\n) => ({\n to: { opacity: 0, filter: 'blur(2rem)' },\n duration,\n timingFunction,\n timeline,\n range,\n ...props,\n});\n\n// Unclip animation using clip-path on scroll\nexport const unclipScroll = (\n {\n duration = '1s',\n timingFunction = 'linear',\n timeline = '--article',\n range = 'entry',\n ...props\n }: AnimationProps = {\n duration: '1s',\n timingFunction: 'linear',\n timeline: '--article',\n range: 'entry',\n }\n) => ({\n to: { clipPath: 'ellipse(220% 200% at 50% 175%)' },\n duration,\n timingFunction,\n timeline,\n range,\n ...props,\n});\n\n// Scale down image (or content) on scroll using article timeline\nexport const scaleDownArticleScroll = (\n {\n duration = '1s',\n timingFunction = 'linear',\n timeline = '--article',\n range = 'entry',\n ...props\n }: AnimationProps = {\n duration: '1s',\n timingFunction: 'linear',\n timeline: '--article',\n range: 'entry',\n }\n) => ({\n '0%': { transform: 'scale(5)' },\n to: { transform: 'scale(1)' },\n duration,\n timingFunction,\n timeline,\n range,\n ...props,\n});\n\n// List item scaling animation on scroll driven by an inline view-timeline (--i)\nexport const listItemScaleScroll = (\n {\n duration = '0.5s',\n timingFunction = 'ease',\n timeline = '--i',\n range = 'cover 40% cover 60%',\n ...props\n }: AnimationProps = {\n duration: '0.5s',\n timingFunction: 'ease',\n timeline: '--i',\n range: 'cover 40% cover 60%',\n }\n) => ({\n from: { transform: 'scale(0.8)' },\n '50%': { transform: 'scale(1)' },\n duration,\n timingFunction,\n timeline,\n range,\n ...props,\n});\n","export const Typography = {\n letterSpacings: {\n tighter: -0.08,\n tight: -0.4,\n normal: 0,\n wide: 0.4,\n wider: 0.8,\n widest: 1.6,\n },\n lineHeights: {\n xs: 10,\n sm: 12,\n md: 14,\n lg: 16,\n xl: 20,\n '2xl': 24,\n '3xl': 30,\n '4xl': 36,\n '5xl': 48,\n '6xl': 64,\n },\n fontWeights: {\n hairline: 100,\n thin: 200,\n light: 300,\n normal: 400,\n medium: 500,\n semiBold: 600,\n bold: 700,\n extraBold: 800,\n black: 900,\n },\n fontSizes: {\n xs: 10,\n sm: 12,\n md: 14,\n lg: 16,\n xl: 20,\n '2xl': 24,\n '3xl': 30,\n '4xl': 36,\n '5xl': 48,\n '6xl': 64,\n },\n};\n","/**\n * whether in browser env\n */\nexport const isBrowser = (): boolean =>\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n typeof window.document.createElement !== 'undefined';\n\n/**\n * get window.g_initialProps\n */\nexport const getWindowInitialProps = () =>\n isBrowser() ? (window as any).g_initialProps : undefined;\n\n/**\n * whether SSR success in client\n */\nexport const isSSR = !isBrowser();\n\nexport function isDev() {\n let dev = false;\n\n if (isBrowser()) {\n dev = !(window.location.hostname.indexOf('localhost') === -1);\n }\n return dev;\n}\n\nexport function isProd() {\n if (isBrowser()) {\n if (window && window.location && window.location.hostname) {\n return (\n window.location.hostname.includes('localhost') ||\n window.location.hostname.includes('develop')\n );\n }\n }\n return false;\n}\n\nexport function isMobile() {\n return navigator.userAgent.match(/(iPhone|iPod|Android|ios|iPad)/i);\n}\n","import React, {\n ReactNode,\n createContext,\n useState,\n useEffect,\n useRef,\n} from 'react';\n\nexport const WindowSizeContext = createContext({ width: 0, height: 0 });\n\nexport interface WindowSizeProviderProps {\n children: ReactNode;\n /** Optional target window to track (for iframe support). Defaults to global window. */\n targetWindow?: Window;\n}\n\nexport const WindowSizeProvider = ({\n children,\n targetWindow,\n}: WindowSizeProviderProps) => {\n const win = targetWindow || (typeof window !== 'undefined' ? window : null);\n\n const [size, setSize] = useState({\n width: win?.innerWidth || 0,\n height: win?.innerHeight || 0,\n });\n\n const timeoutRef = useRef<NodeJS.Timeout>();\n\n useEffect(() => {\n if (!win) return;\n\n const handleResize = () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n const newWidth = win.innerWidth;\n const newHeight = win.innerHeight;\n setSize((prev) => {\n if (prev.width === newWidth && prev.height === newHeight) return prev;\n return { width: newWidth, height: newHeight };\n });\n }, 100);\n };\n\n win.addEventListener('resize', handleResize);\n return () => {\n win.removeEventListener('resize', handleResize);\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, [win]);\n\n return (\n <WindowSizeContext.Provider value={size}>\n {children}\n </WindowSizeContext.Provider>\n );\n};\n","import { useRef, useState, useEffect } from 'react';\n\nexport function useActive<T extends HTMLElement = HTMLElement>(): [\n React.RefObject<T>,\n boolean,\n] {\n const [active, setActive] = useState(false);\n const ref = useRef<T>(null);\n\n useEffect(() => {\n const node = ref.current;\n if (!node) return;\n\n const handleMouseDown = () => setActive(true);\n const handleMouseUp = () => setActive(false);\n const handleTouchStart = () => setActive(true);\n const handleTouchEnd = () => setActive(false);\n\n node.addEventListener('mousedown', handleMouseDown);\n node.addEventListener('mouseup', handleMouseUp);\n node.addEventListener('mouseleave', handleMouseUp);\n node.addEventListener('touchstart', handleTouchStart);\n node.addEventListener('touchend', handleTouchEnd);\n\n return () => {\n node.removeEventListener('mousedown', handleMouseDown);\n node.removeEventListener('mouseup', handleMouseUp);\n node.removeEventListener('mouseleave', handleMouseUp);\n node.removeEventListener('touchstart', handleTouchStart);\n node.removeEventListener('touchend', handleTouchEnd);\n };\n }, []);\n\n return [ref, active];\n}\n","import { useRef, useState, useEffect } from 'react';\n\nexport interface UseClickOutsideOptions {\n /** Optional target window to use (for iframe support). Defaults to global window. */\n targetWindow?: Window;\n}\n\nconst DEFAULT_CLICK_OUTSIDE_OPTIONS: UseClickOutsideOptions = {};\n\nexport function useClickOutside<T extends HTMLElement = HTMLElement>(\n options?: UseClickOutsideOptions\n): [React.RefObject<T>, boolean] {\n const [clickedOutside, setClickedOutside] = useState(false);\n const ref = useRef<T>(null);\n const { targetWindow } = options || DEFAULT_CLICK_OUTSIDE_OPTIONS;\n\n useEffect(() => {\n const win = targetWindow || (typeof window !== 'undefined' ? window : null);\n if (!win) return;\n\n const doc = win.document;\n\n const handleClick = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setClickedOutside(true);\n } else {\n setClickedOutside(false);\n }\n };\n\n doc.addEventListener('mousedown', handleClick);\n return () => {\n doc.removeEventListener('mousedown', handleClick);\n };\n }, [targetWindow]);\n\n return [ref, clickedOutside];\n}\n","import { useRef, useState, useEffect, useCallback } from 'react';\n\n// Type definitions for the desired output\nexport interface RelativePlacement {\n vertical: 'top' | 'bottom';\n horizontal: 'left' | 'right';\n}\n\nexport interface ElementPosition {\n position: RelativePlacement; // Element's general location in viewport\n space: RelativePlacement; // Where more space exists around the element in viewport\n}\n\n// Options for the hook\nexport interface UseElementPositionOptions {\n /** Whether to track changes automatically. Default: true */\n trackChanges?: boolean;\n /** Throttle delay in milliseconds for updates. Default: 100 */\n throttleMs?: number;\n /** Whether to track on hover events. Default: true */\n trackOnHover?: boolean;\n /** Whether to track on scroll events. Default: false */\n trackOnScroll?: boolean;\n /** Whether to track on resize events. Default: false */\n trackOnResize?: boolean;\n /** Optional target window to use (for iframe support). Defaults to global window. */\n targetWindow?: Window;\n}\n\n// Return type of the hook\nexport interface UseElementPositionReturn {\n /** React ref to attach to the target HTML element. */\n ref: React.RefObject<HTMLElement>;\n /**\n * The calculated viewport relation data, or null if not yet calculated\n * or element not found.\n */\n relation: ElementPosition | null;\n /** Function to manually trigger an immediate recalculation. */\n updateRelation: () => void;\n}\n\nconst DEFAULT_ELEMENT_POSITION_OPTIONS: UseElementPositionOptions = {};\n\n/**\n * A React hook to determine an element's relative position within the viewport\n * and where the most available space is around it within the viewport.\n */\nexport function useElementPosition<T extends HTMLElement = HTMLElement>(\n options: UseElementPositionOptions = DEFAULT_ELEMENT_POSITION_OPTIONS\n): UseElementPositionReturn {\n const {\n trackChanges = true,\n throttleMs = 500,\n trackOnHover = true,\n trackOnScroll = false,\n trackOnResize = false,\n targetWindow,\n } = options;\n\n const elementRef = useRef<T>(null);\n const [relation, setRelation] = useState<ElementPosition | null>(null);\n const throttleTimerRef = useRef<NodeJS.Timeout | null>(null);\n\n const calculateRelation = useCallback(() => {\n const element = elementRef.current;\n if (!element) {\n setRelation((currentRelation) =>\n currentRelation === null ? null : null\n );\n return;\n }\n\n const win = targetWindow || element.ownerDocument?.defaultView || window;\n\n const rect = element.getBoundingClientRect();\n const viewportHeight = win.innerHeight;\n const viewportWidth = win.innerWidth;\n\n // 1. Determine element's general position in viewport\n const elementCenterY = rect.top + rect.height / 2;\n const elementCenterX = rect.left + rect.width / 2;\n\n const positionVertical =\n elementCenterY < viewportHeight / 2 ? 'top' : 'bottom';\n const positionHorizontal =\n elementCenterX < viewportWidth / 2 ? 'left' : 'right';\n\n // 2. Determine where more space is available around the element in viewport\n const spaceAbove = rect.top; // Space from viewport top to element top\n const spaceBelow = viewportHeight - rect.bottom; // Space from element bottom to viewport bottom\n const spaceLeft = rect.left; // Space from viewport left to element left\n const spaceRight = viewportWidth - rect.right; // Space from element right to viewport right\n\n const spaceVertical = spaceAbove >= spaceBelow ? 'top' : 'bottom'; // Prefer 'top' if equal\n const spaceHorizontal = spaceLeft >= spaceRight ? 'left' : 'right'; // Prefer 'left' if equal\n\n const newRelation: ElementPosition = {\n position: { vertical: positionVertical, horizontal: positionHorizontal },\n space: { vertical: spaceVertical, horizontal: spaceHorizontal },\n };\n\n setRelation((currentRelation) => {\n if (\n currentRelation &&\n currentRelation.position.vertical === newRelation.position.vertical &&\n currentRelation.position.horizontal ===\n newRelation.position.horizontal &&\n currentRelation.space.vertical === newRelation.space.vertical &&\n currentRelation.space.horizontal === newRelation.space.horizontal\n ) {\n return currentRelation; // No change\n }\n return newRelation;\n });\n }, [targetWindow]); // This callback is stable\n\n const throttledUpdate = useCallback(() => {\n if (throttleTimerRef.current) {\n clearTimeout(throttleTimerRef.current);\n }\n throttleTimerRef.current = setTimeout(() => {\n calculateRelation();\n }, throttleMs);\n }, [calculateRelation, throttleMs]);\n\n useEffect(() => {\n // Initial calculation\n calculateRelation();\n\n if (!trackChanges) {\n if (throttleTimerRef.current) clearTimeout(throttleTimerRef.current);\n return;\n }\n\n const element = elementRef.current;\n if (!element) return;\n\n const win = targetWindow || element.ownerDocument?.defaultView || window;\n const handler = throttledUpdate;\n const immediateHandler = calculateRelation;\n\n // Add event listeners based on configuration\n const cleanupFunctions: (() => void)[] = [];\n\n // Hover events (mouseenter/mouseleave) - immediate calculation for better UX\n if (trackOnHover) {\n element.addEventListener('mouseenter', immediateHandler);\n element.addEventListener('mouseleave', immediateHandler);\n cleanupFunctions.push(() => {\n element.removeEventListener('mouseenter', immediateHandler);\n element.removeEventListener('mouseleave', immediateHandler);\n });\n }\n\n // Scroll events - throttled\n if (trackOnScroll) {\n win.addEventListener('scroll', handler, { passive: true });\n cleanupFunctions.push(() => {\n win.removeEventListener('scroll', handler);\n });\n }\n\n // Resize events - throttled\n if (trackOnResize) {\n win.addEventListener('resize', handler);\n cleanupFunctions.push(() => {\n win.removeEventListener('resize', handler);\n });\n }\n\n return () => {\n if (throttleTimerRef.current) {\n clearTimeout(throttleTimerRef.current);\n }\n cleanupFunctions.forEach((cleanup) => cleanup());\n };\n }, [\n trackChanges,\n trackOnHover,\n trackOnScroll,\n trackOnResize,\n throttledUpdate,\n calculateRelation,\n targetWindow,\n ]);\n\n const manualUpdateRelation = useCallback(() => {\n calculateRelation();\n }, [calculateRelation]);\n\n return {\n ref: elementRef,\n relation,\n updateRelation: manualUpdateRelation,\n };\n}\n","import { useRef, useState, useEffect } from 'react';\n\nexport function useFocus<T extends HTMLElement = HTMLElement>(): [\n React.RefObject<T>,\n boolean,\n] {\n const [focused, setFocused] = useState(false);\n const ref = useRef<T>(null);\n\n useEffect(() => {\n const node = ref.current;\n if (!node) return;\n\n const handleFocus = () => setFocused(true);\n const handleBlur = () => setFocused(false);\n\n node.addEventListener('focus', handleFocus);\n node.addEventListener('blur', handleBlur);\n\n return () => {\n node.removeEventListener('focus', handleFocus);\n node.removeEventListener('blur', handleBlur);\n };\n }, []);\n\n return [ref, focused];\n}\n","import { useRef, useState, useEffect } from 'react';\n\nexport function useHover<T extends HTMLElement = HTMLElement>(): [\n React.RefObject<T>,\n boolean,\n] {\n const [hover, setHover] = useState(false);\n const ref = useRef<T>(null);\n\n useEffect(() => {\n const node = ref.current;\n if (!node) return;\n\n const handleMouseEnter = () => setHover(true);\n const handleMouseLeave = () => setHover(false);\n\n node.addEventListener('mouseenter', handleMouseEnter);\n node.addEventListener('mouseleave', handleMouseLeave);\n\n return () => {\n node.removeEventListener('mouseenter', handleMouseEnter);\n node.removeEventListener('mouseleave', handleMouseLeave);\n };\n }, []);\n\n return [ref, hover];\n}\n","import { useState, useEffect } from 'react';\n\nexport function useKeyPress(targetKey: string): boolean {\n const [keyPressed, setKeyPressed] = useState(false);\n\n useEffect(() => {\n const downHandler = (e: KeyboardEvent) => {\n if (e.key === targetKey) setKeyPressed(true);\n };\n const upHandler = (e: KeyboardEvent) => {\n if (e.key === targetKey) setKeyPressed(false);\n };\n\n window.addEventListener('keydown', downHandler);\n window.addEventListener('keyup', upHandler);\n return () => {\n window.removeEventListener('keydown', downHandler);\n window.removeEventListener('keyup', upHandler);\n };\n }, [targetKey]);\n\n return keyPressed;\n}\n","import { useEffect, useRef } from 'react';\nexport const useMount = (callback: () => void) => {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n useEffect(() => {\n callbackRef.current();\n }, []);\n};\n","import { useRef, useState, useEffect } from 'react';\n\nexport interface UseOnScreenOptions extends IntersectionObserverInit {\n /** Optional target window to use (for iframe support). Defaults to global window. */\n targetWindow?: Window;\n}\n\nconst DEFAULT_ON_SCREEN_OPTIONS: UseOnScreenOptions = {};\n\nexport function useOnScreen<T extends HTMLElement = HTMLElement>(\n options?: UseOnScreenOptions\n): [React.RefObject<T>, boolean] {\n const ref = useRef<T>(null);\n const [isOnScreen, setOnScreen] = useState(false);\n const { targetWindow, ...observerOptions } =\n options || DEFAULT_ON_SCREEN_OPTIONS;\n\n useEffect(() => {\n const node = ref.current;\n if (!node) return;\n\n // If targetWindow is provided and root is not explicitly set,\n // use the target window's document as the root\n const win = targetWindow || node.ownerDocument?.defaultView || window;\n const effectiveRoot =\n observerOptions.root !== undefined\n ? observerOptions.root\n : targetWindow\n ? win.document.documentElement\n : undefined;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n setOnScreen(entry.isIntersecting);\n },\n { ...observerOptions, root: effectiveRoot }\n );\n\n observer.observe(node);\n\n return () => {\n observer.disconnect();\n };\n }, [\n targetWindow,\n observerOptions.root,\n observerOptions.rootMargin,\n observerOptions.threshold,\n ]);\n\n return [ref, isOnScreen];\n}\n","import { useCallback, useMemo } from 'react';\nimport {\n useResponsiveContext,\n useBreakpointContext,\n useWindowDimensionsContext,\n BreakpointConfig,\n WindowDimensions,\n} from '../providers/Responsive';\n\n/**\n * Optimized hook for components that only need breakpoint information.\n * This hook will NOT cause re-renders on every window resize,\n * only when the breakpoint actually changes.\n *\n * Use this hook instead of useResponsive for better performance\n * when you only need to check breakpoints or device type.\n *\n * @example\n * const { screen, on, is, orientation } = useBreakpoint();\n * if (on('mobile')) { ... }\n * if (is('xs')) { ... }\n */\nexport const useBreakpoint = () => {\n const context = useBreakpointContext();\n const { currentBreakpoint: screen, orientation, devices } = context;\n\n // Helper to check if current screen matches a breakpoint or device\n const on = useCallback(\n (s: string) => (devices[s] ? devices[s].includes(screen) : s === screen),\n [devices, screen]\n );\n\n return useMemo(\n () => ({\n ...context,\n screen,\n orientation,\n on,\n is: on,\n }),\n [context, screen, orientation, on]\n );\n};\n\n/**\n * Hook for components that need exact window dimensions.\n * This hook WILL cause re-renders on every window resize.\n * Use sparingly - prefer useBreakpoint when possible.\n *\n * @example\n * const { width, height } = useWindowDimensions();\n */\nexport const useWindowDimensions = (): WindowDimensions => {\n return useWindowDimensionsContext();\n};\n\n/**\n * Combined hook that provides both breakpoint info and window dimensions.\n * This hook WILL cause re-renders on every window resize.\n *\n * For better performance, use:\n * - useBreakpoint() when you only need breakpoint/device info\n * - useWindowDimensions() when you only need exact dimensions\n *\n * @example\n * const { screen, on, currentWidth, currentHeight } = useResponsive();\n */\nexport const useResponsive = () => {\n const context = useResponsiveContext();\n const { currentBreakpoint: screen, orientation, devices } = context;\n\n const on = useCallback(\n (s: string) => (devices[s] ? devices[s].includes(screen) : s === screen),\n [devices, screen]\n );\n\n return useMemo(\n () => ({ ...context, screen, orientation, on, is: on }),\n [context, screen, orientation, on]\n );\n};\n\n// Re-export types for convenience\nexport type { BreakpointConfig, WindowDimensions };\n","import { RefObject, useEffect, useState, useCallback, useRef } from 'react';\n\n// Enhanced type definitions with documentation\nexport interface ScrollPosition {\n x: number;\n y: number;\n xProgress: number; // Value between 0 and 1\n yProgress: number; // Value between 0 and 1\n /**\n * Position of the tracked element relative to the viewport top (if container is provided).\n * Equivalent to getBoundingClientRect().top\n */\n elementY?: number;\n /**\n * Progress of the element scrolling through the viewport (for sticky/reveal effects).\n * Calculated as: -elementY / (elementHeight - viewportHeight)\n * Varies from 0 (element hits top) to 1 (element finishes scrolling).\n */\n elementProgress?: number;\n}\n\nexport interface UseScrollOptions {\n container?: RefObject<HTMLElement>;\n offset?: [number, number];\n throttleMs?: number;\n // Added disabled option to conditionally disable scroll tracking\n disabled?: boolean;\n}\n\nexport interface UseScrollAnimationOptions {\n threshold?: number | number[];\n rootMargin?: string;\n root?: Element | null;\n onIntersectionChange?: (isIntersecting: boolean, ratio: number) => void;\n /** Target window for iframe support - automatically sets correct root */\n targetWindow?: Window | null;\n}\n\nexport interface UseInfiniteScrollOptions {\n threshold?: number;\n isLoading?: boolean;\n root?: Element | null;\n rootMargin?: string;\n // Added to prevent unnecessary rerenders\n debounceMs?: number;\n}\n\ninterface ScrollDimensions {\n scrollHeight: number;\n scrollWidth: number;\n clientHeight: number;\n clientWidth: number;\n scrollTop: number;\n scrollLeft: number;\n}\n\n// Stable default references to prevent unnecessary re-renders\nconst DEFAULT_SCROLL_OFFSET: [number, number] = [0, 0];\nconst DEFAULT_SCROLL_OPTIONS: UseScrollOptions = {};\nconst DEFAULT_SCROLL_ANIMATION_OPTIONS: UseScrollAnimationOptions = {};\nconst DEFAULT_INFINITE_SCROLL_OPTIONS: UseInfiniteScrollOptions = {};\n\n// Helper to check if element is a Window object (works across iframes)\nconst isWindow = (obj: any): obj is Window => {\n return obj && obj.window === obj;\n};\n\nconst isElementScrollable = (el: HTMLElement) => {\n return el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth;\n};\n\n// Memoized function to get scroll dimensions\nconst getScrollDimensions = (\n element: HTMLElement | Window\n): ScrollDimensions => {\n if (isWindow(element)) {\n const doc = element.document.documentElement;\n return {\n scrollHeight: Math.max(doc.scrollHeight, doc.offsetHeight),\n scrollWidth: Math.max(doc.scrollWidth, doc.offsetWidth),\n clientHeight: element.innerHeight,\n clientWidth: element.innerWidth,\n scrollTop: element.scrollY,\n scrollLeft: element.scrollX,\n };\n }\n\n return {\n scrollHeight: element.scrollHeight,\n scrollWidth: element.scrollWidth,\n clientHeight: element.clientHeight,\n clientWidth: element.clientWidth,\n scrollTop: element.scrollTop,\n scrollLeft: element.scrollLeft,\n };\n};\n\n// Enhanced useScroll hook with better performance and iframe support\nexport const useScroll = ({\n container,\n offset = DEFAULT_SCROLL_OFFSET,\n throttleMs = 100,\n disabled = false,\n}: UseScrollOptions = DEFAULT_SCROLL_OPTIONS): ScrollPosition => {\n const [scrollPosition, setScrollPosition] = useState<ScrollPosition>({\n x: 0,\n y: 0,\n xProgress: 0,\n yProgress: 0,\n elementY: 0,\n elementProgress: 0,\n });\n\n const lastUpdateRef = useRef<number>(0);\n const frameRef = useRef<number>();\n const ticking = useRef(false);\n\n // Resolve the window/document context. If the container is an iframe element, use its contentWindow.\n const getContext = useCallback(() => {\n const targetEl = container?.current ?? null;\n\n if (targetEl && targetEl instanceof HTMLIFrameElement) {\n const frameWindow = targetEl.contentWindow ?? null;\n const frameDoc =\n targetEl.contentDocument ?? frameWindow?.document ?? null;\n return {\n targetEl,\n targetWindow: frameWindow,\n targetDocument: frameDoc,\n } as const;\n }\n\n const targetDocument = targetEl?.ownerDocument ?? null;\n const targetWindow =\n targetDocument?.defaultView ??\n (typeof window !== 'undefined' ? window : null);\n\n return { targetEl, targetWindow, targetDocument } as const;\n }, [container]);\n\n const updateScrollPosition = useCallback(() => {\n const { targetEl, targetWindow } = getContext();\n const hasScrollableElement = targetEl && isElementScrollable(targetEl);\n const scrollTarget = hasScrollableElement\n ? targetEl\n : targetWindow || targetEl;\n\n if (!scrollTarget) {\n ticking.current = false;\n return;\n }\n\n const now = Date.now();\n // Verify throttle constraints inside the RAF to skip frame if needed\n if (throttleMs > 0 && now - lastUpdateRef.current < throttleMs) {\n ticking.current = false;\n return;\n }\n\n const dimensions = getScrollDimensions(scrollTarget);\n\n const x = dimensions.scrollLeft + offset[0];\n const y = dimensions.scrollTop + offset[1];\n const maxScrollX = dimensions.scrollWidth - dimensions.clientWidth;\n const maxScrollY = dimensions.scrollHeight - dimensions.clientHeight;\n\n const xProgress =\n maxScrollX <= 0 ? 1 : Math.min(Math.max(x / maxScrollX, 0), 1);\n const yProgress =\n maxScrollY <= 0 ? 1 : Math.min(Math.max(y / maxScrollY, 0), 1);\n\n // Calculate element-specific stats if we are tracking a specific element container\n // that is NOT the main scroller itself.\n let elementY = 0;\n let elementProgress = 0;\n\n if (targetEl && targetEl !== scrollTarget) {\n const rect = targetEl.getBoundingClientRect();\n elementY = rect.top;\n\n const viewportHeight = dimensions.clientHeight;\n const scrollDistance = rect.height - viewportHeight;\n\n if (scrollDistance > 0) {\n // Calculate progress consistent with sticky scrolling behavior\n // 0 when hitting top, 1 when finished scrolling\n const scrolled = -rect.top;\n elementProgress = Math.max(0, Math.min(1, scrolled / scrollDistance));\n } else {\n elementProgress = 0;\n }\n }\n\n setScrollPosition((prev) => {\n if (\n prev.elementProgress !== elementProgress ||\n prev.y !== y ||\n prev.x !== x ||\n prev.yProgress !== yProgress\n ) {\n lastUpdateRef.current = now;\n return { x, y, xProgress, yProgress, elementY, elementProgress };\n }\n return prev;\n });\n\n ticking.current = false;\n }, [offset, throttleMs, getContext]);\n\n const handleScroll = useCallback(() => {\n if (disabled) return;\n\n if (!ticking.current) {\n frameRef.current = requestAnimationFrame(updateScrollPosition);\n ticking.current = true;\n }\n }, [disabled, updateScrollPosition]);\n\n useEffect(() => {\n if (disabled) return;\n\n const { targetEl, targetWindow, targetDocument } = getContext();\n const hasScrollableElement = targetEl && isElementScrollable(targetEl);\n const scrollTarget = hasScrollableElement\n ? targetEl\n : targetWindow || targetEl;\n\n if (!scrollTarget) return;\n\n // Initial scroll position\n updateScrollPosition();\n\n const options = { passive: true } as const;\n\n scrollTarget.addEventListener('scroll', handleScroll, options);\n\n if (targetWindow) {\n targetWindow.addEventListener('resize', handleScroll, options);\n }\n\n // If we are using a window (main or iframe), also listen to its document\n if (targetWindow && targetDocument) {\n targetDocument.addEventListener('scroll', handleScroll, options);\n }\n\n return () => {\n scrollTarget.removeEventListener('scroll', handleScroll);\n if (targetWindow) {\n targetWindow.removeEventListener('resize', handleScroll);\n }\n if (targetWindow && targetDocument) {\n targetDocument.removeEventListener('scroll', handleScroll);\n }\n if (frameRef.current) {\n cancelAnimationFrame(frameRef.current);\n }\n ticking.current = false;\n };\n }, [handleScroll, disabled, getContext, updateScrollPosition]);\n\n return scrollPosition;\n};\n\n// Enhanced useScrollAnimation with callback support and iframe support\nexport const useScrollAnimation = (\n ref: RefObject<HTMLElement>,\n options: UseScrollAnimationOptions = DEFAULT_SCROLL_ANIMATION_OPTIONS\n) => {\n const [isInView, setIsInView] = useState(false);\n const [progress, setProgress] = useState(0);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n // Auto-detect iframe context from element's ownerDocument\n const elementWindow = element.ownerDocument?.defaultView;\n const targetWindow = options.targetWindow ?? elementWindow;\n\n // If no valid window context, bail out\n if (!targetWindow) return;\n\n // Use the IntersectionObserver from the target window context\n // This is crucial for iframe support - we need to use the iframe's\n // IntersectionObserver, not the parent window's\n const ObserverClass = (targetWindow as Window & typeof globalThis)\n .IntersectionObserver;\n if (!ObserverClass) return;\n\n // Determine effective root:\n // 1. If explicit root provided, use it\n // 2. Otherwise use null (default viewport of the target window)\n // Note: When using the iframe's IntersectionObserver with null root,\n // it correctly observes relative to the iframe's viewport\n const effectiveRoot = options.root !== undefined ? options.root : null;\n\n const observer = new ObserverClass(\n (entries: IntersectionObserverEntry[]) => {\n const entry = entries[0];\n setIsInView(entry.isIntersecting);\n setProgress(entry.intersectionRatio);\n if (options.onIntersectionChange)\n options.onIntersectionChange(\n entry.isIntersecting,\n entry.intersectionRatio\n );\n },\n {\n threshold: options.threshold ?? 0,\n rootMargin: options.rootMargin ?? '0px',\n root: effectiveRoot,\n }\n );\n\n observer.observe(element);\n return () => observer.disconnect();\n }, [\n ref,\n options.threshold,\n options.rootMargin,\n options.root,\n options.targetWindow,\n options.onIntersectionChange,\n ]);\n\n return { isInView, progress };\n};\n\n// Enhanced useSmoothScroll with error handling\nexport const useSmoothScroll = (targetWindow?: Window) => {\n return useCallback(\n (element: HTMLElement | null, offset = 0) => {\n if (!element) return;\n\n try {\n const win =\n targetWindow || element.ownerDocument?.defaultView || window;\n const top =\n element.getBoundingClientRect().top +\n (win.scrollY || win.pageYOffset) -\n offset;\n\n if ('scrollBehavior' in win.document.documentElement.style) {\n win.scrollTo({ top, behavior: 'smooth' });\n } else {\n // Fallback for browsers that don't support smooth scrolling\n win.scrollTo(0, top);\n }\n } catch (error) {\n console.error('Error during smooth scroll:', error);\n }\n },\n [targetWindow]\n );\n};\n\n// Enhanced useInfiniteScroll with debouncing\nexport const useInfiniteScroll = (\n callback: () => void,\n options: UseInfiniteScrollOptions = DEFAULT_INFINITE_SCROLL_OPTIONS\n) => {\n const [sentinel, setSentinel] = useState<HTMLDivElement | null>(null);\n const callbackRef = useRef(callback);\n const timeoutRef = useRef<NodeJS.Timeout>();\n\n useEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (!sentinel || options.isLoading) return;\n\n const handleIntersection = (entries: IntersectionObserverEntry[]) => {\n if (entries[0].isIntersecting) {\n if (options.debounceMs) {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n timeoutRef.current = setTimeout(\n callbackRef.current,\n options.debounceMs\n );\n } else {\n callbackRef.current();\n }\n }\n };\n\n const observer = new IntersectionObserver(handleIntersection, {\n threshold: options.threshold ?? 0,\n root: options.root ?? null,\n rootMargin: options.rootMargin ?? '0px',\n });\n\n observer.observe(sentinel);\n\n return () => {\n observer.disconnect();\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [\n sentinel,\n options.threshold,\n options.isLoading,\n options.root,\n options.rootMargin,\n options.debounceMs,\n ]);\n\n return { sentinelRef: setSentinel };\n};\n\nexport const useScrollDirection = (threshold = 5, targetWindow?: Window) => {\n const [scrollDirection, setScrollDirection] = useState<'up' | 'down'>('up');\n const lastScrollY = useRef(0);\n const lastDirection = useRef<'up' | 'down'>('up');\n const animationFrame = useRef<number>();\n const ticking = useRef(false);\n\n const updateDirection = useCallback(() => {\n const win = targetWindow || (typeof window !== 'undefined' ? window : null);\n if (!win) return;\n\n const doc = win.document.documentElement;\n const scrollY = win.scrollY || doc.scrollTop;\n const direction = scrollY > lastScrollY.current ? 'down' : 'up';\n const scrollDelta = Math.abs(scrollY - lastScrollY.current);\n\n // Vérifier si on est au bas de la page\n const isAtBottom = win.innerHeight + scrollY >= doc.scrollHeight - 1;\n\n // Logique principale\n if (scrollDelta > threshold || (direction === 'down' && isAtBottom)) {\n if (direction !== lastDirection.current) {\n lastDirection.current = direction;\n setScrollDirection(direction);\n }\n }\n\n // Mise à jour de la position avec un minimum de 0\n lastScrollY.current = Math.max(scrollY, 0);\n ticking.current = false;\n }, [threshold, targetWindow]);\n\n useEffect(() => {\n const win = targetWindow || (typeof window !== 'undefined' ? window : null);\n if (!win) return;\n\n const handleScroll = () => {\n if (!ticking.current) {\n animationFrame.current = requestAnimationFrame(() => {\n updateDirection();\n ticking.current = false;\n });\n ticking.current = true;\n }\n };\n\n win.addEventListener('scroll', handleScroll, { passive: true });\n return () => {\n win.removeEventListener('scroll', handleScroll);\n if (animationFrame.current) {\n cancelAnimationFrame(animationFrame.current);\n }\n };\n }, [updateDirection, targetWindow]);\n\n return scrollDirection;\n};\n","import { useContext } from 'react';\nimport { WindowSizeContext } from '../providers/WindowSize';\n\nexport const useWindowSize = () => useContext(WindowSizeContext);\n","import { useRef, useState, useEffect } from 'react';\n\ninterface InViewOptions extends IntersectionObserverInit {\n triggerOnce?: boolean;\n /** Optional target window to use (for iframe support). Defaults to global window. */\n targetWindow?: Window;\n}\n\nconst DEFAULT_IN_VIEW_OPTIONS: InViewOptions = {};\n\nexport function useInView(options?: InViewOptions) {\n const {\n triggerOnce = false,\n targetWindow,\n ...observerOptions\n } = options || DEFAULT_IN_VIEW_OPTIONS;\n const ref = useRef<HTMLElement>(null);\n const [inView, setInView] = useState(false);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n // If targetWindow is provided and root is not explicitly set,\n // use the target window's document as the root\n const win = targetWindow || element.ownerDocument?.defaultView || window;\n const effectiveRoot =\n observerOptions.root !== undefined\n ? observerOptions.root\n : targetWindow\n ? win.document.documentElement\n : undefined;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n setInView(true);\n\n // If triggerOnce is true, disconnect the observer once the element is in view\n if (triggerOnce) {\n observer.disconnect();\n }\n } else if (!triggerOnce) {\n // Only update to false if not using triggerOnce\n setInView(false);\n }\n },\n { ...observerOptions, root: effectiveRoot }\n );\n\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, [\n triggerOnce,\n targetWindow,\n observerOptions.root,\n observerOptions.rootMargin,\n observerOptions.threshold,\n ]);\n\n return { ref, inView };\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { useStyleRegistry } from '../providers/StyleRegistry';\n\n/**\n * Hook to register an iframe's document with the style manager.\n * This ensures that all CSS utility classes are automatically injected into the iframe.\n *\n * @param iframeRef - Reference to the iframe element\n *\n * @example\n * ```tsx\n * const iframeRef = useRef<HTMLIFrameElement>(null);\n * useIframeStyles(iframeRef);\n *\n * return <iframe ref={iframeRef} src=\"/content\" />;\n * ```\n */\nexport function useIframeStyles(iframeRef: React.RefObject<HTMLIFrameElement>) {\n const { manager } = useStyleRegistry();\n const registeredDocRef = useRef<Document | null>(null);\n\n useEffect(() => {\n const iframe = iframeRef.current;\n if (!iframe) return;\n\n const registerDocument = () => {\n const iframeDoc =\n iframe.contentDocument || iframe.contentWindow?.document;\n if (!iframeDoc) return;\n\n // Only register if not already registered\n if (registeredDocRef.current !== iframeDoc) {\n manager.addDocument(iframeDoc);\n registeredDocRef.current = iframeDoc;\n }\n };\n\n // Try to register immediately if document is ready\n if (iframe.contentDocument) {\n registerDocument();\n }\n\n // Also register on load event (for external sources)\n iframe.addEventListener('load', registerDocument);\n\n return () => {\n iframe.removeEventListener('load', registerDocument);\n\n // Clean up when unmounting\n if (registeredDocRef.current) {\n manager.removeDocument(registeredDocRef.current);\n registeredDocRef.current = null;\n }\n };\n }, [manager, iframeRef]);\n}\n\n/**\n * Hook to get an iframe's window and document, and automatically register styles.\n * This is a convenience hook that combines iframe access with style registration.\n *\n * @param iframeRef - Reference to the iframe element\n * @returns Object containing iframeWindow, iframeDocument, and isLoaded flag\n *\n * @example\n * ```tsx\n * const iframeRef = useRef<HTMLIFrameElement>(null);\n * const { iframeWindow, iframeDocument, isLoaded } = useIframe(iframeRef);\n *\n * return (\n * <>\n * <iframe ref={iframeRef} src=\"/content\" />\n * {isLoaded && <div>Iframe loaded!</div>}\n * </>\n * );\n * ```\n */\nexport function useIframe(iframeRef: React.RefObject<HTMLIFrameElement>) {\n const [iframeWindow, setIframeWindow] = useState<Window | null>(null);\n const [iframeDocument, setIframeDocument] = useState<Document | null>(null);\n const [isLoaded, setIsLoaded] = useState(false);\n\n // Register styles\n useIframeStyles(iframeRef);\n\n useEffect(() => {\n const iframe = iframeRef.current;\n if (!iframe) return;\n\n const updateState = () => {\n const win = iframe.contentWindow;\n const doc = win?.document || iframe.contentDocument;\n\n if (win && doc) {\n setIframeWindow(win);\n setIframeDocument(doc);\n setIsLoaded(true);\n }\n };\n\n // Try immediately\n updateState();\n\n // Listen for load event\n iframe.addEventListener('load', updateState);\n\n return () => {\n iframe.removeEventListener('load', updateState);\n };\n }, [iframeRef]);\n\n return {\n iframeWindow,\n iframeDocument,\n isLoaded,\n };\n}\n","/**\n * View Animation Utilities\n *\n * Create performant CSS scroll-driven animations using view() timeline.\n * These animations are pure CSS - no JavaScript state or IntersectionObserver needed!\n */\n\nimport {\n ViewAnimationConfig,\n ViewAnimationOptions,\n SlideAnimationOptions,\n ScaleAnimationOptions,\n BlurAnimationOptions,\n RotateAnimationOptions,\n} from '../types/scrollAnimation.types';\nimport { AnimationProps } from './constants';\n\n/**\n * Convert ViewAnimationConfig to AnimationProps with view() timeline\n * This enables CSS-only animations without JavaScript state\n *\n * @example\n * <View animate={createViewAnimation({\n * keyframes: { from: { opacity: 0 }, to: { opacity: 1 } },\n * range: 'entry'\n * })} />\n */\nexport const createViewAnimation = (\n config: ViewAnimationConfig\n): AnimationProps => {\n const { keyframes, timing = {}, range = 'entry' } = config;\n\n return {\n ...keyframes,\n duration: timing.duration || '0.6s',\n timingFunction: timing.timingFunction || 'ease',\n fillMode: timing.fillMode || 'both',\n delay: timing.delay,\n timeline: 'view()', // CSS view() timeline - pure CSS, no JS!\n range,\n };\n};\n\n/**\n * Create an animation that triggers when element enters viewport\n * Uses CSS view() timeline - NO JavaScript state required!\n *\n * @example\n * <View animate={animateOnView({\n * keyframes: { from: { opacity: 0 }, to: { opacity: 1 } },\n * range: 'entry'\n * })} />\n */\nexport const animateOnView = (config: ViewAnimationConfig): AnimationProps => {\n return createViewAnimation(config);\n};\n\n/**\n * Preset: Fade in when entering viewport\n *\n * @example\n * <View animate={fadeInOnView()} />\n * <View animate={fadeInOnView({ duration: '1s' })} />\n */\nexport const fadeInOnView = (\n options: ViewAnimationOptions = {}\n): AnimationProps =>\n animateOnView({\n keyframes: { from: { opacity: 0 }, to: { opacity: 1 } },\n timing: {\n duration: options.duration || '0.5s',\n timingFunction: options.timingFunction || 'ease',\n delay: options.delay,\n },\n range: options.range || 'entry',\n });\n\n/**\n * Preset: Fade out when exiting viewport\n *\n * @example\n * <View animate={fadeOutOnView()} />\n */\nexport const fadeOutOnView = (\n options: ViewAnimationOptions = {}\n): AnimationProps =>\n animateOnView({\n keyframes: { from: { opacity: 1 }, to: { opacity: 0 } },\n timing: {\n duration: options.duration || '0.5s',\n timingFunction: options.timingFunction || 'ease',\n delay: options.delay,\n },\n range: options.range || 'exit',\n });\n\n/**\n * Preset: Slide up and fade in when entering viewport\n *\n * @example\n * <View animate={slideUpOnView()} />\n * <View animate={slideUpOnView({ distance: '50px', duration: '0.8s' })} />\n */\nexport const slideUpOnView = (\n options: SlideAnimationOptions = {}\n): AnimationProps =>\n animateOnView({\n keyframes: {\n from: {\n opacity: 0,\n transform: `translateY(${options.distance || '30px'})`,\n },\n to: { opacity: 1, transform: 'translateY(0)' },\n },\n timing: {\n duration: options.duration || '0.6s',\n timingFunction: options.timingFunction || 'ease-out',\n delay: options.delay,\n },\n range: options.range || 'entry',\n });\n\n/**\n * Preset: Slide down and fade in when entering viewport\n *\n * @example\n * <View animate={slideDownOnView()} />\n */\nexport const slideDownOnView = (\n options: SlideAnimationOptions = {}\n): AnimationProps =>\n animateOnView({\n keyframes: {\n from: {\n opacity: 0,\n transform: `translateY(-${options.distance || '30px'})`,\n },\n to: { opacity: 1, transform: 'translateY(0)' },\n },\n timing: {\n duration: options.duration || '0.6s',\n timingFunction: options.timingFunction || 'ease-out',\n delay: options.delay,\n },\n range: options.range || 'entry',\n });\n\n/**\n * Preset: Slide in from left when entering viewport\n *\n * @example\n * <View animate={slideLeftOnView()} />\n */\nexport const slideLeftOnView = (\n options: SlideAnimationOptions = {}\n): AnimationProps =>\n animateOnView({\n keyframes: {\n from: {\n opacity: 0,\n transform: `translateX(-${options.distance || '50px'})`,\n },\n to: { opacity: 1, transform: 'translateX(0)' },\n },\n timing: {\n duration: options.duration || '0.6s',\n timingFunction: options.timingFunction || 'ease-out',\n delay: options.delay,\n },\n range: options.range || 'entry',\n });\n\n/**\n * Preset: Slide in from right when entering viewport\n *\n * @example\n * <View animate={slideRightOnView()} />\n */\nexport const slideRightOnView = (\n options: SlideAnimationOptions = {}\n): AnimationProps =>\n animateOnView({\n keyframes: {\n from: {\n opacity: 0,\n transform: `translateX(${options.distance || '50px'})`,\n },\n to: { opacity: 1, transform: 'translateX(0)' },\n },\n timing: {\n duration: options.duration || '0.6s',\n timingFunction: options.timingFunction || 'ease-out',\n delay: options.delay,\n },\n range: options.range || 'entry',\n });\n\n/**\n * Preset: Scale up when entering viewport\n *\n * @example\n * <View animate={scaleUpOnView()} />\n * <View animate={scaleUpOnView({ scale: 0.8 })} />\n */\nexport const scaleUpOnView = (\n options: ScaleAnimationOptions = {}\n): AnimationProps =>\n animateOnView({\n keyframes: {\n from: { opacity: 0, transform: `scale(${options.scale || 0.9})` },\n to: { opacity: 1, transform: 'scale(1)' },\n },\n timing: {\n duration: options.duration || '0.5s',\n timingFunction: options.timingFunction || 'ease',\n delay: options.delay,\n },\n range: options.range || 'entry',\n });\n\n/**\n * Preset: Scale down when entering viewport\n *\n * @example\n * <View animate={scaleDownOnView({ scale: 1.1 })} />\n */\nexport const scaleDownOnView = (\n options: ScaleAnimationOptions = {}\n): AnimationProps =>\n animateOnView({\n keyframes: {\n from: { opacity: 0, transform: `scale(${options.scale || 1.1})` },\n to: { opacity: 1, transform: 'scale(1)' },\n },\n timing: {\n duration: options.duration || '0.5s',\n timingFunction: options.timingFunction || 'ease',\n delay: options.delay,\n },\n range: options.range || 'entry',\n });\n\n/**\n * Preset: Blur in when entering viewport\n *\n * @example\n * <View animate={blurInOnView()} />\n * <View animate={blurInOnView({ blur: '15px' })} />\n */\nexport const blurInOnView = (\n options: BlurAnimationOptions = {}\n): AnimationProps =>\n animateOnView({\n keyframes: {\n from: { opacity: 0, filter: `blur(${options.blur || '10px'})` },\n to: { opacity: 1, filter: 'blur(0)' },\n },\n timing: {\n duration: options.duration || '0.6s',\n timingFunction: options.timingFunction || 'ease-out',\n delay: options.delay,\n },\n range: options.range || 'entry',\n });\n\n/**\n * Preset: Blur out when exiting viewport\n *\n * @example\n * <View animate={blurOutOnView()} />\n */\nexport const blurOutOnView = (\n options: BlurAnimationOptions = {}\n): AnimationProps =>\n animateOnView({\n keyframes: {\n from: { opacity: 1, filter: 'blur(0)' },\n to: { opacity: 0, filter: `blur(${options.blur || '10px'})` },\n },\n timing: {\n duration: options.duration || '0.5s',\n timingFunction: options.timingFunction || 'ease-in',\n delay: options.delay,\n },\n range: options.range || 'exit',\n });\n\n/**\n * Preset: Rotate in when entering viewport\n *\n * @example\n * <View animate={rotateInOnView()} />\n * <View animate={rotateInOnView({ angle: '-15deg' })} />\n */\nexport const rotateInOnView = (\n options: RotateAnimationOptions = {}\n): AnimationProps =>\n animateOnView({\n keyframes: {\n from: {\n opacity: 0,\n transform: `rotate(${options.angle || '-10deg'}) scale(0.9)`,\n },\n to: { opacity: 1, transform: 'rotate(0) scale(1)' },\n },\n timing: {\n duration: options.duration || '0.6s',\n timingFunction: options.timingFunction || 'ease-out',\n delay: options.delay,\n },\n range: options.range || 'entry',\n });\n\n/**\n * Preset: Reveal with clip-path from bottom\n *\n * @example\n * <View animate={revealOnView()} />\n */\nexport const revealOnView = (\n options: ViewAnimationOptions = {}\n): AnimationProps =>\n animateOnView({\n keyframes: {\n from: { clipPath: 'inset(100% 0 0 0)' },\n to: { clipPath: 'inset(0 0 0 0)' },\n },\n timing: {\n duration: options.duration || '0.7s',\n timingFunction: options.timingFunction || 'ease-out',\n delay: options.delay,\n },\n range: options.range || 'entry 0% entry 80%',\n });\n\n/**\n * Preset: Flip in on X axis\n *\n * @example\n * <View animate={flipXOnView()} />\n */\nexport const flipXOnView = (\n options: ViewAnimationOptions = {}\n): AnimationProps =>\n animateOnView({\n keyframes: {\n from: {\n opacity: 0,\n transform: 'perspective(400px) rotateX(90deg)',\n },\n to: {\n opacity: 1,\n transform: 'perspective(400px) rotateX(0)',\n },\n },\n timing: {\n duration: options.duration || '0.6s',\n timingFunction: options.timingFunction || 'ease-out',\n delay: options.delay,\n },\n range: options.range || 'entry',\n });\n\n/**\n * Preset: Flip in on Y axis\n *\n * @example\n * <View animate={flipYOnView()} />\n */\nexport const flipYOnView = (\n options: ViewAnimationOptions = {}\n): AnimationProps =>\n animateOnView({\n keyframes: {\n from: {\n opacity: 0,\n transform: 'perspective(400px) rotateY(90deg)',\n },\n to: {\n opacity: 1,\n transform: 'perspective(400px) rotateY(0)',\n },\n },\n timing: {\n duration: options.duration || '0.6s',\n timingFunction: options.timingFunction || 'ease-out',\n delay: options.delay,\n },\n range: options.range || 'entry',\n });\n\n/**\n * Preset JSON configurations for common view animations\n * Use with createViewAnimation() or animateOnView()\n */\nexport const viewAnimationPresets: Record<string, ViewAnimationConfig> = {\n fadeIn: {\n keyframes: { from: { opacity: 0 }, to: { opacity: 1 } },\n timing: { duration: '0.5s', timingFunction: 'ease' },\n range: 'entry',\n },\n\n fadeOut: {\n keyframes: { from: { opacity: 1 }, to: { opacity: 0 } },\n timing: { duration: '0.5s', timingFunction: 'ease' },\n range: 'exit',\n },\n\n slideUp: {\n keyframes: {\n from: { opacity: 0, transform: 'translateY(30px)' },\n to: { opacity: 1, transform: 'translateY(0)' },\n },\n timing: { duration: '0.6s', timingFunction: 'ease-out' },\n range: 'entry',\n },\n\n slideDown: {\n keyframes: {\n from: { opacity: 0, transform: 'translateY(-30px)' },\n to: { opacity: 1, transform: 'translateY(0)' },\n },\n timing: { duration: '0.6s', timingFunction: 'ease-out' },\n range: 'entry',\n },\n\n scaleUp: {\n keyframes: {\n from: { opacity: 0, transform: 'scale(0.9)' },\n to: { opacity: 1, transform: 'scale(1)' },\n },\n timing: { duration: '0.5s', timingFunction: 'ease' },\n range: 'entry',\n },\n\n blurIn: {\n keyframes: {\n from: { opacity: 0, filter: 'blur(10px)' },\n to: { opacity: 1, filter: 'blur(0)' },\n },\n timing: { duration: '0.6s', timingFunction: 'ease-out' },\n range: 'entry',\n },\n\n reveal: {\n keyframes: {\n from: { clipPath: 'inset(100% 0 0 0)' },\n to: { clipPath: 'inset(0 0 0 0)' },\n },\n timing: { duration: '0.7s', timingFunction: 'ease-out' },\n range: 'entry 0% entry 80%',\n },\n};\n"],"mappings":"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,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAWD,IAAM,sBAAsB,oBAAI,IAAI;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGD,IAAM,kBAAkB,oBAAI,IAAqB;AAIjD,IAAM,qBAAqB,oBAAI,IAAI;AAAA;AAAA,EAEjC;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGM,IAAM,cAAc,CAAC,SAA0B;AAEpD,MAAI,oBAAoB,IAAI,IAAI,GAAG;AACjC,WAAO;AAAA,EACT;AAGA,MAAI,mBAAmB,IAAI,IAAI,GAAG;AAChC,WAAO;AAAA,EACT;AAKA,MACE,KAAK,SAAS,GAAG,KACjB,CAAC,KAAK,WAAW,IAAI,KACrB,CAAC,KAAK,WAAW,aAAa,GAC9B;AACA,WAAO;AAAA,EACT;AAGA,MACE,cAAc,IAAI,IAAI,KACtB,UAAU,IAAI,IAAI,KAClB,KAAK,WAAW,IAAI,KACnB,KAAK,WAAW,aAAa,KAAK,CAAC,YAAY,IAAI,IAAI,GACxD;AACA,WAAO;AAAA,EACT;AAIA,MAAI,OAAO,QAAQ,eAAe,IAAI,UAAU;AAC9C,UAAM,SAAS,gBAAgB,IAAI,IAAI;AACvC,QAAI,WAAW,OAAW,QAAO;AAEjC,QAAI;AACF,YAAM,YAAY,wBAAwB,IAAI;AAC9C,YAAM,SAAS,IAAI,SAAS,WAAW,SAAS;AAChD,sBAAgB,IAAI,MAAM,MAAM;AAChC,aAAO;AAAA,IACT,QAAQ;AACN,sBAAgB,IAAI,MAAM,KAAK;AAC/B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAQO,SAAS,iBAAiB,aAA0C;AACzE,SAAO,OAAO,QAAQ,WAAW,EAC9B,OAAO,CAAC,CAAC,GAAG,MAAM,YAAY,GAAG,CAAC,EAClC,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM;AAC1B,QAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAGlD,UAAM,cAAc,oBAAoB,QAAQ;AAGhD,WAAO,GAAG,WAAW,KAAK,KAAK;AAAA,EACjC,CAAC,EACA,OAAO,OAAO,EACd,KAAK,GAAG;AACb;AAEO,IAAM,cAAc,CAAC,QAAwB;AAClD,SAAO,wBAAwB,GAAG;AACpC;AAGO,IAAM,uBAAuB,CAClC,UACA,OACA,aACoB;AAEpB,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,EACT;AAGA,MAAI,SAAS,WAAW,IAAI,GAAG;AAE7B,WAAO;AAAA,EACT;AAGA,QAAM,gBAAgB,YAAY,QAAQ;AAG1C,MAAI,OAAO,UAAU,UAAU;AAE7B,QAAI,aAAa,gBAAgB,OAAO,UAAU,KAAK,KAAK,SAAS,GAAG;AACtE,aAAO;AAAA,IACT;AAIA,UAAM,cACJ,CAAC,YAAY,IAAI,QAAQ,MACxB,qBAAqB,IAAI,aAAa;AAAA,KAEnC,uBAAuB,KAAK,aAAa,KACzC,uBAAuB,KAAK,aAAa,MACzC,qBAAqB;AAAA,MACnB,cAAc,QAAQ,wCAAwC,EAAE;AAAA,IAClE;AAEN,QAAI,aAAa;AACf,aAAO,GAAG,KAAK;AAAA,IACjB;AACA,WAAO;AAAA,EACT;AAGA,MACE,SAAS,YAAY,EAAE,QAAQ,OAAO,KAAK,KAC3C,aAAa,UACb,aAAa,UACb;AACA,WAAO,SAAS,KAAK;AAAA,EACvB;AAGA,MAAI,OAAO,UAAU,YAAY,MAAM,SAAS,GAAG;AACjD,QAAI,cAAc,KAAK,GAAG;AACxB,aAAO,mBAAmB,OAAO,CAAC,UAAU,SAAS,KAAK,CAAC;AAAA,IAC7D;AAAA,EACF;AAGA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,KAAK,GAAG;AAAA,EACvB;AAGA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B;AAEA,SAAO;AACT;AAGO,IAAM,aAAuB,MAAM,KAAK,aAAa;;;AChkB5D,IAAI,mBAAmB;AACvB,IAAM,iBAAiB,oBAAI,IAAoB;AAExC,IAAM,oBAAoB,CAC/B,cACiD;AAEjD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,eAAe,qBAAqB;AAG1C,QAAM,wBAAwB,KAAK,UAAU,YAAY;AAEzD,MAAI,eAAe,IAAI,qBAAqB,GAAG;AAC7C,UAAMC,iBAAgB,eAAe,IAAI,qBAAqB;AAC9D,WAAO,EAAE,eAAAA,gBAAe,WAAW,GAAG;AAAA,EACxC;AAEA,QAAM,gBAAgB,aAAa,kBAAkB;AACrD,iBAAe,IAAI,uBAAuB,aAAa;AAEvD,QAAM,mBAA6B,CAAC;AAGpC,QAAM,eAAe,OAAO,KAAK,YAAY,EAAE,KAAK,CAAC,GAAG,MAAM;AAC5D,UAAM,gBAAgB,CAAC,QAAwB;AAC7C,UAAI,QAAQ,OAAQ,QAAO;AAC3B,UAAI,QAAQ,QAAQ,QAAQ,QAAS,QAAO;AAC5C,aAAO,SAAS,IAAI,QAAQ,KAAK,EAAE,GAAG,EAAE;AAAA,IAC1C;AACA,WAAO,cAAc,CAAC,IAAI,cAAc,CAAC;AAAA,EAC3C,CAAC;AAED,eAAa,QAAQ,CAAC,QAAQ;AAC5B,UAAM,SAAS,QAAQ,UAAU,OAAO;AACxC,UAAM,SAAS,aAAa,GAAG;AAC/B,qBAAiB,KAAK,GAAG,MAAM,MAAM,iBAAiB,MAAM,CAAC,IAAI;AAAA,EACnE,CAAC;AAED,QAAM,eAAe;AAAA,iBACN,aAAa;AAAA,QACtB,iBAAiB,KAAK,IAAI,CAAC;AAAA;AAAA;AAIjC,SAAO,EAAE,eAAe,WAAW,aAAa;AAClD;;;AC9CO,IAAM,2BAAqD;AAAA;AAAA,EAEhE,gBAAgB,CAAC,yBAAyB;AAAA,EAC1C,WAAW,CAAC,oBAAoB;AAAA;AAAA,EAGhC,eAAe,CAAC,yBAAyB;AAAA,EACzC,YAAY,CAAC,qBAAqB;AAAA,EAClC,iBAAiB,CAAC,2BAA2B;AAAA,EAC7C,iBAAiB,CAAC,2BAA2B;AAAA,EAC7C,mBAAmB,CAAC,6BAA6B;AAAA,EACjD,cAAc,CAAC,uBAAuB;AAAA,EACtC,UAAU,CAAC,mBAAmB;AAAA,EAC9B,WAAW,CAAC,oBAAoB;AAAA,EAChC,mBAAmB,CAAC,4BAA4B;AAClD;AAGO,IAAM,mBAAmB,CAAC,aAA6B;AAC5D,SAAO,SAAS,QAAQ,YAAY,KAAK,EAAE,YAAY;AACzD;AAGO,IAAM,8BAA8B,CAAC,aAA+B;AACzE,QAAM,gBAAgB,iBAAiB,QAAQ;AAC/C,QAAM,qBAAqB,yBAAyB,QAAQ,KAAK,CAAC;AAGlE,SAAO,CAAC,eAAe,GAAG,kBAAkB;AAC9C;AAGO,IAAM,oBAAoB,CAAC,aAA8B;AAC9D,SAAO,YAAY;AACrB;;;AChDO,SAAS,KAAK,KAAqB;AACxC,MAAIC,QAAO;AACX,MAAI,IAAI,IAAI;AAEZ,SAAO,GAAG;AACR,IAAAA,QAAQA,QAAO,KAAM,IAAI,WAAW,EAAE,CAAC;AAAA,EACzC;AAGA,UAAQA,UAAS,GAAG,SAAS,EAAE;AACjC;;;ANwBA,IAAM,mBAAmB,oBAAI,IAAY;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMD,IAAM,wBAAwB,oBAAI,IAAY;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAOD,IAAM,yBAAyB,oBAAI,IAAY;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,uBAAuB,UAAgC;AAC9D,MAAI,iBAAiB,IAAI,QAAQ,EAAG,QAAO;AAC3C,MAAI,sBAAsB,IAAI,QAAQ,EAAG,QAAO;AAChD,MAAI,uBAAuB,IAAI,QAAQ,EAAG,QAAO;AACjD,SAAO;AACT;AAEA,SAAS,2BAA2B,UAAgC;AAClE,MAAI,iBAAiB,IAAI,QAAQ,EAAG,QAAO;AAC3C,MAAI,sBAAsB,IAAI,QAAQ,EAAG,QAAO;AAChD,MAAI,uBAAuB,IAAI,QAAQ,EAAG,QAAO;AACjD,SAAO;AACT;AAGA,IAAM,WAAN,MAAqB;AAAA,EAInB,YAAY,SAAiB;AAC3B,SAAK,UAAU;AACf,SAAK,QAAQ,oBAAI,IAAI;AAAA,EACvB;AAAA,EAEA,IAAI,KAAuB;AACzB,UAAM,OAAO,KAAK,MAAM,IAAI,GAAG;AAC/B,QAAI,MAAM;AAER,WAAK,MAAM,OAAO,GAAG;AACrB,WAAK,MAAM,IAAI,KAAK,IAAI;AACxB,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,KAAQ,OAAgB;AAC1B,QAAI,KAAK,MAAM,IAAI,GAAG,GAAG;AAEvB,WAAK,MAAM,OAAO,GAAG;AAAA,IACvB,WAAW,KAAK,MAAM,QAAQ,KAAK,SAAS;AAE1C,YAAM,WAAW,KAAK,MAAM,KAAK,EAAE,KAAK,EAAE;AAC1C,UAAI,UAAU;AACZ,aAAK,MAAM,OAAO,QAAQ;AAAA,MAC5B;AAAA,IACF;AACA,SAAK,MAAM,IAAI,KAAK,KAAK;AAAA,EAC3B;AAAA,EAEA,QAAc;AACZ,SAAK,MAAM,MAAM;AAAA,EACnB;AAAA,EAEA,OAAO,KAAc;AACnB,SAAK,MAAM,OAAO,GAAG;AAAA,EACvB;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,OAA4B;AAC1B,WAAO,KAAK,MAAM,KAAK;AAAA,EACzB;AAAA,EAEA,SAA8B;AAC5B,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B;AAAA,EAEA,IAAI,KAAiB;AACnB,WAAO,KAAK,MAAM,IAAI,GAAG;AAAA,EAC3B;AACF;AAGA,IAAM,cAAc,oBAAI,IAAoB;AAK5C,IAAM,kBAA0C;AAAA;AAAA,EAE9C,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AAAA;AAAA,EAET,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS;AAAA,EACT,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA;AAAA,EAEV,UAAU;AAAA;AAAA,EAEV,QAAQ;AAAA;AAAA,EAER,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AAAA,EACb,YAAY;AAAA;AAAA,EAEZ,OAAO;AAAA;AAAA,EAEP,cAAc;AAAA,EACd,aAAa;AAAA;AAAA,EAEb,aAAa;AAAA;AAAA,EAEb,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,aAAa;AAAA,EACb,WAAW;AAAA,EACX,WAAW;AAAA,EACX,UAAU;AAAA,EACV,QAAQ;AAAA;AAAA,EAER,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,eAAe;AAAA;AAAA,EAEf,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,aAAa;AACf;AAKO,IAAM,iBAAiB;AAAA,EAC5B,cAAc,UAA0B;AACtC,UAAM,QAAQ,SAAS,MAAM,kBAAkB;AAC/C,QAAI,CAAC,MAAO,QAAO;AACnB,UAAM,QAAQ,WAAW,MAAM,CAAC,CAAC;AACjC,UAAM,OAAO,MAAM,CAAC;AACpB,WAAO,SAAS,MAAM,QAAQ,MAAO;AAAA,EACvC;AAAA,EAEA,eAAe,IAAoB;AACjC,QAAI,MAAM,OAAQ,KAAK,QAAS,GAAG;AACjC,aAAO,GAAG,KAAK,GAAI;AAAA,IACrB;AACA,WAAO,GAAG,EAAE;AAAA,EACd;AAAA,EAEA,kBAAkB,YAAmB,SAA+B;AAClE,UAAM,SAAS;AAAA,MACb,OAAO,CAAC;AAAA,MACR,WAAW,CAAC;AAAA,MACZ,iBAAiB,CAAC;AAAA,MAClB,QAAQ,CAAC;AAAA,MACT,iBAAiB,CAAC;AAAA,MAClB,YAAY,CAAC;AAAA,MACb,WAAW,CAAC;AAAA,MACZ,YAAY,CAAC;AAAA,MACb,WAAW,CAAC;AAAA,MACZ,QAAQ,CAAC;AAAA,IACX;AAEA,QAAI,iBAAiB;AAErB,eAAW,QAAQ,CAAC,cAAc;AAChC,YAAM,EAAE,eAAe,UAAU,IAAI,kBAAkB,SAAS;AAChE,UAAI,WAAW;AAEb,SAAC,WAAW,qBAAqB,WAAW,SAAS;AAAA,MACvD;AAEA,aAAO,MAAM,KAAK,aAAa;AAI/B,YAAM,cAAc,CAAC,CAAC,UAAU;AAEhC,UAAI,aAAa;AAGf,eAAO,UAAU,KAAK,UAAU,YAAY,MAAM;AAElD,eAAO,OAAO,KAAK,UAAU,SAAS,IAAI;AAAA,MAC5C,OAAO;AACL,cAAM,aAAa,KAAK,cAAc,UAAU,YAAY,IAAI;AAChE,cAAM,UAAU,KAAK,cAAc,UAAU,SAAS,IAAI;AAC1D,cAAM,eAAe,iBAAiB;AAEtC,yBAAiB,eAAe;AAEhC,eAAO,UAAU,KAAK,KAAK,eAAe,UAAU,CAAC;AACrD,eAAO,OAAO,KAAK,KAAK,eAAe,YAAY,CAAC;AAAA,MACtD;AAEA,aAAO,gBAAgB,KAAK,UAAU,kBAAkB,MAAM;AAC9D,aAAO,gBAAgB;AAAA,QACrB,UAAU,mBAAmB,SACzB,GAAG,UAAU,cAAc,KAC3B;AAAA,MACN;AACA,aAAO,WAAW,KAAK,UAAU,aAAa,QAAQ;AAEtD,aAAO,UAAU;AAAA,QACf,UAAU,aAAa,cAAc,SAAS;AAAA,MAChD;AACA,aAAO,WAAW,KAAK,UAAU,aAAa,SAAS;AACvD,aAAO,UAAU,KAAK,UAAU,YAAY,EAAE;AAC9C,aAAO,OAAO,KAAK,UAAU,SAAS,EAAE;AAAA,IAC1C,CAAC;AAED,WAAO;AAAA,MACL,eAAe,OAAO,MAAM,KAAK,IAAI;AAAA,MACrC,mBAAmB,OAAO,UAAU,KAAK,IAAI;AAAA,MAC7C,yBAAyB,OAAO,gBAAgB,KAAK,IAAI;AAAA,MACzD,gBAAgB,OAAO,OAAO,KAAK,IAAI;AAAA,MACvC,yBAAyB,OAAO,gBAAgB,KAAK,IAAI;AAAA,MACzD,oBAAoB,OAAO,WAAW,KAAK,IAAI;AAAA,MAC/C,mBAAmB,OAAO,UAAU,KAAK,IAAI;AAAA,MAC7C,oBAAoB,OAAO,WAAW,KAAK,IAAI;AAAA,MAC/C,GAAI,OAAO,UAAU,KAAK,CAAC,MAAM,CAAC,KAAK;AAAA,QACrC,mBAAmB,OAAO,UAAU,KAAK,IAAI;AAAA,MAC/C;AAAA,MACA,GAAI,OAAO,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK;AAAA,QAClC,gBAAgB,OAAO,OAAO,KAAK,IAAI;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AACF;AAKA,IAAM,aAAa;AAAA,EACjB,YACE,OACA,UACA,UACK;AAEL,WAAO,qBAAqB,UAAU,OAAO,QAAQ;AAAA,EACvD;AAAA,EAEA,kBAAkB,OAAoB;AACpC,UAAM,MAAM,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK;AAG5D,QAAI,IAAI,WAAW,CAAC,MAAM,MAAM,IAAI,WAAW,CAAC,MAAM,IAAI;AAExD,aAAO,OAAO,IAAI,UAAU,CAAC,CAAC;AAAA,IAChC;AAGA,QAAI,IAAI,WAAW,UAAU,GAAG;AAC9B,aAAO,UAAU,IACd,UAAU,CAAC,EACX,QAAQ,OAAO,GAAG,EAClB,QAAQ,QAAQ,GAAG,EACnB,QAAQ,kBAAkB,EAAE,CAAC;AAAA,IAClC;AAGA,WAAO,IACJ,QAAQ,OAAO,GAAG,EAClB,QAAQ,QAAQ,GAAG,EACnB,QAAQ,kBAAkB,EAAE;AAAA,EACjC;AAAA,EAEA,wBAAwB,KAAqB;AAC3C,QAAI,YAAY,IAAI,GAAG,GAAG;AACxB,aAAO,YAAY,IAAI,GAAG;AAAA,IAC5B;AAEA,UAAM,YAAY,KAAK,GAAG;AAC1B,UAAM,eAAe,WAAW,SAAS;AAEzC,gBAAY,IAAI,KAAK,YAAY;AACjC,WAAO;AAAA,EACT;AACF;AAEO,IAAM,sBAAN,MAA0B;AAAA,EAgB/B,YACEC,oBACA,eAAuB,KACvB;AAlBF,SAAQ,cACN,oBAAI,IAAI;AAYV,SAAQ,eAAgC;AAsGxC,SAAQ,cAA2C,oBAAI,IAAI;AAhGzD,SAAK,oBAAoBA;AACzB,SAAK,aAAa,IAAI,SAAS,YAAY;AAE3C,QAAI,OAAO,aAAa,aAAa;AACnC,WAAK,eAAe;AACpB,WAAK,gBAAgB,QAAQ;AAAA,IAC/B;AAAA,EACF;AAAA,EAEQ,gBAAgB,gBAA0B;AAChD,QAAI,CAAC,KAAK,YAAY,IAAI,cAAc,GAAG;AACzC,YAAM,WAAgD,CAAC;AAQvD,YAAM,aAA2C;AAAA,QAC/C,kBAAkB;AAAA,QAClB,aAAa;AAAA,QACb,cAAc;AAAA,QACd,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,UAAU;AAAA,QACV,sBAAsB;AAAA,QACtB,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,QAClB,UAAU;AAAA,MACZ;AAEA,iBAAW,CAAC,SAAS,EAAE,KAAK,OAAO,QAAQ,UAAU,GAAG;AACtD,YAAI,WAAW,eAAe,eAAe,EAAE;AAE/C,YAAI,CAAC,UAAU;AACb,qBAAW,eAAe,cAAc,OAAO;AAC/C,mBAAS,KAAK;AACd,yBAAe,KAAK,YAAY,QAAQ;AAAA,QAC1C;AAEA,iBAAS,OAAuB,IAAI,SAAS;AAAA,MAC/C;AAEA,WAAK,YAAY,IAAI,gBAAgB,QAAQ;AAAA,IAC/C;AAAA,EACF;AAAA,EAEQ,iBAAiB,gBAGtB;AACD,UAAM,QAA2D,CAAC;AAClE,UAAM,iBAAiB,KAAK,YAAY,IAAI,cAAc;AAE1D,QAAI,CAAC,eAAgB,QAAO;AAG5B,eAAW,CAAC,SAAS,KAAK,KAAK,OAAO,QAAQ,cAAc,GAAG;AAC7D,YAAM,KAAK,MAAM,QAAQ,EAAE,QAAQ,CAAC,SAAS;AAC3C,cAAM,KAAK,EAAE,SAAS,KAAK,SAAS,QAAiC,CAAC;AAAA,MACxE,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA,EAEO,YAAY,gBAA0B;AAC3C,QAAI,mBAAmB,KAAK,aAAc;AAE1C,SAAK,gBAAgB,cAAc;AACnC,SAAK,wBAAwB,cAAc;AAG3C,QAAI,KAAK,cAAc;AACrB,YAAM,YAAY,KAAK,iBAAiB,KAAK,YAAY;AACzD,gBAAU,QAAQ,CAAC,EAAE,SAAS,QAAQ,MAAM;AAC1C,aAAK,qBAAqB,SAAS,SAAS,cAAc;AAAA,MAC5D,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,wBAAwB,gBAA0B;AACxD,UAAM,iBAAiB,KAAK,YAAY,IAAI,cAAc;AAC1D,QAAI,CAAC,eAAgB;AAErB,eAAW,SAAS,OAAO,OAAO,cAAc,GAAG;AACjD,WAAK,gBAAgB,KAAK;AAAA,IAC5B;AAAA,EACF;AAAA,EAEQ,gBAAgB,WAA2B;AACjD,WAAO,UAAU,QAAQ,MAAM,KAAK;AAAA,EACtC;AAAA,EAIO,WAAW,SAAiB,UAAwB,QAAQ;AAEjE,QAAI,KAAK,cAAc;AACrB,WAAK,qBAAqB,SAAS,SAAS,KAAK,YAAY;AAAA,IAC/D,OAAO;AACL,UAAI,CAAC,KAAK,YAAY,IAAI,OAAO,GAAG;AAClC,aAAK,YAAY,IAAI,SAAS,CAAC,CAAC;AAAA,MAClC;AACA,WAAK,YAAY,IAAI,OAAO,GAAG,KAAK,OAAO;AAAA,IAC7C;AAGA,eAAWC,aAAY,KAAK,0BAA0B,GAAG;AACvD,UAAIA,cAAa,KAAK,cAAc;AAClC,aAAK,qBAAqB,SAAS,SAASA,SAAQ;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEO,kBAA0B;AAC/B,UAAM,WAA2B;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,MAAM;AAEV,aAAS,QAAQ,CAAC,YAAY;AAC5B,YAAM,QAAQ,KAAK,YAAY,IAAI,OAAO;AAC1C,UAAI,OAAO;AACT,eAAO,MAAM,KAAK,IAAI,IAAI;AAAA,MAC5B;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,4BAAwC;AAC9C,WAAO,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC;AAAA,EAC3C;AAAA,EAEQ,WACN,KACA,WACA,OACA;AACA,SAAK,WAAW,IAAI,KAAK,EAAE,WAAW,MAAM,CAAC;AAAA,EAC/C;AAAA,EAEO,cACL,UACA,OACA,UAAwB,QACxB,WAAmB,IACnB,UACA,eAAyB,CAAC,GAChB;AAEV,QAAI,iBAAiB,WAAW,YAAY,OAAO,UAAU,QAAQ;AAErE,QAAI,iBAAiB,eAAe,SAAS,EAAE,MAAM,GAAG,EAAE,KAAK,GAAG;AAClE,QAAI,MAAM,GAAG,QAAQ,IAAI,cAAc;AACvC,QAAI,YAAY,YAAY,QAAQ;AAClC,YAAM,GAAG,QAAQ,IAAI,cAAc,IAAI,OAAO,IAAI,QAAQ;AAAA,IAC5D;AAGA,UAAM,SAAS,KAAK,WAAW,IAAI,GAAG;AACtC,QAAI,QAAQ;AACV,aAAO,CAAC,OAAO,SAAS;AAAA,IAC1B;AAGA,QAAI,YACF,KAAK,kBAAkB,QAAQ,MAC9B,SAAS,WAAW,IAAI,IAAI,WAAW,YAAY,QAAQ;AAG9D,QAAI,UAAU,WAAW,UAAU,GAAG;AACpC,kBAAY,WAAW,UAAU,UAAU,CAAC;AAAA,IAC9C,WAAW,UAAU,WAAW,OAAO,GAAG;AACxC,kBAAY,QAAQ,UAAU,UAAU,CAAC;AAAA,IAC3C,WAAW,UAAU,WAAW,MAAM,GAAG;AACvC,kBAAY,OAAO,UAAU,UAAU,CAAC;AAAA,IAC1C,WAAW,UAAU,WAAW,KAAK,GAAG;AACtC,kBAAY,MAAM,UAAU,UAAU,CAAC;AAAA,IACzC;AAGA,QAAI,kBAAkB,WAAW,kBAAkB,cAAc;AAGjE,QAAI,gBAAgB,GAAG,SAAS,IAAI,eAAe;AACnD,QAAI,aAAuB,CAAC,aAAa;AACzC,QAAI,QAAwD,CAAC;AAG7D,UAAM,cAAc,oBAAoB,QAAQ;AAChD,QAAI,cAAc;AAGlB,QAAI,OAAO,gBAAgB,UAAU;AAEnC,UAAI,aAAa,gBAAgB,OAAO,UAAU,WAAW,GAAG;AAAA,MAEhE,WAAW,qBAAqB,IAAI,WAAW,GAAG;AAChD,sBAAc,GAAG,WAAW;AAAA,MAC9B;AAAA,IACF;AAGA,UAAM,gBAAgB,kBAAkB,QAAQ;AAChD,UAAMC,iBAAgB,gBAClB,4BAA4B,QAAQ,IACpC,CAAC,WAAW;AAGhB,QAAI,YAAY,YAAY,UAAU;AACpC,YAAM,kBAAkB,GAAG,aAAa,KAAK,QAAQ;AACrD,mBAAa,CAAC,eAAe;AAC7B,YAAM,mBAAmB,KAAK,gBAAgB,eAAe;AAG7D,UAAI,SAAS,WAAW,QAAQ,GAAG;AACjC,cAAM,aAAa,SAAS,QAAQ,UAAU,EAAE;AAChD,QAAAA,eAAc,QAAQ,CAAC,qBAAqB;AAC1C,gBAAM,KAAK;AAAA,YACT,MAAM,UAAU,UAAU,KAAK,gBAAgB,MAAM,gBAAgB,KAAK,WAAW;AAAA,YACrF,SAAS;AAAA,UACX,CAAC;AAAA,QACH,CAAC;AAAA,MACH,WAAW,SAAS,WAAW,OAAO,GAAG;AACvC,cAAM,YAAY,SAAS,QAAQ,SAAS,EAAE;AAC9C,QAAAA,eAAc,QAAQ,CAAC,qBAAqB;AAC1C,gBAAM,KAAK;AAAA,YACT,MAAM,SAAS,SAAS,OAAO,gBAAgB,MAAM,gBAAgB,KAAK,WAAW;AAAA,YACrF,SAAS;AAAA,UACX,CAAC;AAAA,QACH,CAAC;AAAA,MACH,OAAO;AAEL,QAAAA,eAAc,QAAQ,CAAC,qBAAqB;AAC1C,gBAAM,KAAK;AAAA,YACT,MAAM,IAAI,gBAAgB,IAAI,QAAQ,MAAM,gBAAgB,KAAK,WAAW;AAAA,YAC5E,SAAS;AAAA,UACX,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF,WAAW,YAAY,WAAW,UAAU;AAC1C,YAAM,iBAAiB,GAAG,QAAQ,KAAK,aAAa;AACpD,mBAAa,CAAC,cAAc;AAC5B,YAAM,mBAAmB,KAAK,gBAAgB,cAAc;AAE5D,mBAAa,QAAQ,CAAC,OAAO;AAE3B,QAAAA,eAAc,QAAQ,CAAC,qBAAqB;AAC1C,gBAAM,KAAK;AAAA,YACT,MAAM,UAAU,EAAE,OAAO,gBAAgB,MAAM,gBAAgB,KAAK,WAAW;AAAA,YAC/E,SAAS;AAAA,UACX,CAAC;AAAA,QACH,CAAC;AAAA,MACH,CAAC;AAAA,IACH,OAAO;AACL,YAAM,mBAAmB,KAAK,gBAAgB,aAAa;AAO3D,YAAM,OACJ,YAAY,aACR,2BAA2B,QAAQ,IACnC,uBAAuB,QAAQ;AACrC,MAAAA,eAAc,QAAQ,CAAC,qBAAqB;AAC1C,cAAM,KAAK;AAAA,UACT,MAAM,IAAI,gBAAgB,MAAM,gBAAgB,KAAK,WAAW;AAAA,UAChE,SAAS;AAAA,QACX,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAGA,UAAM,QAAQ,CAAC,EAAE,MAAM,SAAAC,SAAQ,MAAM;AACnC,WAAK,WAAW,MAAMA,QAAO;AAAA,IAC/B,CAAC;AAGD,SAAK,WAAW,KAAK,WAAW,CAAC,GAAG,KAAK;AAEzC,WAAO;AAAA,EACT;AAAA,EAEO,eAAe,gBAA0B;AAC9C,QAAI,mBAAmB,KAAK,aAAc;AAC1C,SAAK,YAAY,OAAO,cAAc;AAAA,EACxC;AAAA,EAEO,aAAa;AAClB,SAAK,WAAW,MAAM;AAAA,EACxB;AAAA,EAEQ,gBAAgB,YAA2B;AACjD,WAAO,WAAW,SAAS,SAAS,GAAG;AACrC,iBAAW,WAAW,CAAC;AAAA,IACzB;AAAA,EACF;AAAA,EAEO,iBAAiB,gBAA0B;AAChD,QAAI,mBAAmB,KAAK,cAAc;AAExC,WAAK,wBAAwB,cAAc;AAC3C,YAAM,SAAS,MAAM,KAAK,KAAK,WAAW,OAAO,CAAC;AAClD,iBAAW,EAAE,MAAM,KAAK,QAAQ;AAC9B,cAAM;AAAA,UACJ,CAAC,EAAE,MAAM,QAAQ,MAA+C;AAC9D,iBAAK,qBAAqB,MAAM,SAAS,cAAc;AAAA,UACzD;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AAEL,WAAK,YAAY,cAAc;AAAA,IACjC;AAAA,EACF;AAAA,EAEO,sBAAsB;AAC3B,eAAWF,aAAY,KAAK,0BAA0B,GAAG;AACvD,WAAK,iBAAiBA,SAAQ;AAAA,IAChC;AAAA,EACF;AAAA,EAEQ,qBACN,SACA,SACA,gBACA;AACA,UAAM,iBAAiB,KAAK,YAAY,IAAI,cAAc;AAC1D,QAAI,CAAC,eAAgB;AAErB,UAAM,aAAa,eAAe,OAAO;AAEzC,QAAI,YAAY;AACd,UAAI;AACF,mBAAW,WAAW,SAAS,WAAW,SAAS,MAAM;AAAA,MAC3D,SAAS,GAAG;AACV,gBAAQ,MAAM,0CAA0C,OAAO,KAAK,CAAC;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGO,YAAY,gBAA0B;AAC3C,YAAQ,MAAM,8BAA8B;AAE5C,UAAM,iBAAiB,KAAK,YAAY,IAAI,cAAc;AAC1D,QAAI,CAAC,gBAAgB;AACnB,cAAQ,IAAI,mCAAmC;AAC/C,cAAQ,SAAS;AACjB;AAAA,IACF;AAEA,eAAW,CAAC,SAAS,KAAK,KAAK,OAAO,QAAQ,cAAc,GAAG;AAC7D,cAAQ,MAAM,GAAG,OAAO,UAAU;AAClC,YAAM,KAAK,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,MAAM;AAC9C,gBAAQ,IAAI,GAAG,CAAC,KAAK,KAAK,OAAO,EAAE;AAAA,MACrC,CAAC;AACD,cAAQ,SAAS;AAAA,IACnB;AAEA,YAAQ,SAAS;AAAA,EACnB;AACF;AAKA,SAAS,0BACP,aACwB;AACxB,QAAMD,qBAA4C,CAAC;AACnD,QAAM,oBAAoB,oBAAI,IAAY;AAE1C,WAAS,qBAAqB,MAAsB;AAClD,UAAM,QAAQ,KAAK,CAAC,EAAE,YAAY;AAClC,UAAM,OAAO,KAAK,KAAK,SAAS,CAAC,EAAE,YAAY;AAC/C,UAAM,SAAS,KAAK,MAAM,GAAG,EAAE,EAAE,QAAQ,UAAU,EAAE,EAAE,YAAY;AACnE,QAAI,OAAO,QAAQ,SAAS;AAC5B,QAAI,KAAK,SAAS,GAAG;AACnB,aAAO,KAAK,MAAM,GAAG,CAAC,EAAE,YAAY;AAAA,IACtC;AACA,QAAI,IAAI;AACR,QAAI,aAAa;AACjB,WAAO,kBAAkB,IAAI,UAAU,GAAG;AACxC;AACA,mBAAa,OAAO,KAAK,MAAM,CAAC,CAAC,EAAE,YAAY;AAAA,IACjD;AACA,sBAAkB,IAAI,UAAU;AAChC,WAAO;AAAA,EACT;AAEA,aAAW,QAAQ,aAAa;AAC9B,IAAAA,mBAAkB,IAAI,IAAI,qBAAqB,IAAI;AAAA,EACrD;AACA,SAAOA;AACT;AAEO,IAAM,oBAAoB,0BAA0B,UAAU;AAC9D,IAAM,sBAAsB,IAAI;AAAA,EACrC;AAAA,EACA;AACF;AAKA,SAAS,cACP,QACA,UAAwB,QACxB,WAAmB,IACnB,UACA,eAAuC,CAAC,GACxC,UAAoC,CAAC,GACrC,SACU;AACV,QAAM,UAAoB,CAAC;AAC3B,QAAM,gBAAgB,WAAW;AAGjC,MAAI,uBAAiC,CAAC;AACtC,MAAI,YAAY,SAAS;AACvB,QAAI,aAAa,QAAQ,GAAG;AAC1B,6BAAuB,CAAC,aAAa,QAAQ,CAAC;AAAA,IAChD,WAAW,QAAQ,QAAQ,GAAG;AAC5B,6BAAuB,QAAQ,QAAQ,EACpC,IAAI,CAAC,OAAO,aAAa,EAAE,CAAC,EAC5B,OAAO,CAAC,OAAO,EAAE;AAAA,IACtB;AAAA,EACF;AAEA,QAAM,iBAAiB,sBAAsB,MAAM;AAEnD,QAAM,OAAO,OAAO,KAAK,cAAc;AACvC,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,QAAQ,eAAe,KAAK,CAAC,CAAC;AACpC,QAAI,UAAU,UAAa,UAAU,IAAI;AACvC,YAAM,aAAa,cAAc;AAAA,QAC/B,KAAK,CAAC;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,cAAQ,KAAK,GAAG,UAAU;AAAA,IAC5B;AAAA,EACF;AAEA,SAAO;AACT;AAOA,SAAS,sBACP,QACqB;AACrB,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,OAAO;AAElB,MACE,OAAO,UACP,OAAO,UACP,OAAO,UACP,OAAO,UACP,OAAO,QACP;AACA,WAAO;AAAA,EACT;AAEA,QAAM,MAA2B,CAAC;AAClC,QAAM,OAAO,OAAO,KAAK,MAAM;AAC/B,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,IAAI,KAAK,CAAC;AAChB,QACE,MAAM,iBACN,MAAM,uBACN,MAAM,qBACN,MAAM,sBACN,MAAM,kBACN;AACA;AAAA,IACF;AACA,QAAI,CAAC,IAAI,OAAO,CAAC;AAAA,EACnB;AAEA,MAAI,OAAO,QAAW;AACpB,UAAM,IAAI,OAAO,OAAO,WAAW,GAAG,EAAE,OAAO;AAC/C,QAAI,IAAI,UAAU,OAAW,KAAI,QAAQ;AACzC,QAAI,IAAI,WAAW,OAAW,KAAI,SAAS;AAAA,EAC7C;AACA,MAAI,OAAO,QAAW;AACpB,UAAM,IAAI,OAAO,OAAO,WAAW,GAAG,EAAE,OAAO;AAC/C,QAAI,IAAI,gBAAgB,OAAW,KAAI,cAAc;AACrD,QAAI,IAAI,iBAAiB,OAAW,KAAI,eAAe;AAAA,EACzD;AACA,MAAI,OAAO,QAAW;AACpB,UAAM,IAAI,OAAO,OAAO,WAAW,GAAG,EAAE,OAAO;AAC/C,QAAI,IAAI,eAAe,OAAW,KAAI,aAAa;AACnD,QAAI,IAAI,kBAAkB,OAAW,KAAI,gBAAgB;AAAA,EAC3D;AACA,MAAI,OAAO,QAAW;AACpB,UAAM,IAAI,OAAO,OAAO,WAAW,GAAG,EAAE,OAAO;AAC/C,QAAI,IAAI,eAAe,OAAW,KAAI,aAAa;AACnD,QAAI,IAAI,gBAAgB,OAAW,KAAI,cAAc;AAAA,EACvD;AACA,MAAI,OAAO,QAAW;AACpB,UAAM,IAAI,OAAO,OAAO,WAAW,GAAG,EAAE,OAAO;AAC/C,QAAI,IAAI,cAAc,OAAW,KAAI,YAAY;AACjD,QAAI,IAAI,iBAAiB,OAAW,KAAI,eAAe;AAAA,EACzD;AAEA,SAAO;AACT;AAGA,SAAS,oBACP,QACA,eAAuB,IACvB,UACA,SACU;AACV,QAAM,UAAoB,CAAC;AAG3B,SAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,QAAQ;AACnC,UAAM,QAAQ,OAAO,GAAG;AAGxB,QAAI,IAAI,WAAW,GAAG,KAAK,OAAO,UAAU,UAAU;AACpD,YAAM,aAAa,IAAI,UAAU,CAAC;AAClC,YAAM,SAAS,gBAAgB,UAAU;AAEzC,UAAI,QAAQ;AAEV,cAAM,iBAAiB,eACnB,GAAG,YAAY,KAAK,MAAM,KAC1B,GAAG,MAAM;AAGb,gBAAQ;AAAA,UACN,GAAG,oBAAoB,OAAO,gBAAgB,UAAU,OAAO;AAAA,QACjE;AAAA,MACF;AAAA,IACF,WAAW,OAAO,UAAU,YAAY,UAAU,MAAM;AAEtD,UAAI,cAAc;AAEhB,cAAM,kBAAkB,GAAG,GAAG,IAAI,WAAW;AAAA,UAC3C;AAAA,QACF,CAAC,IAAI,aAAa,QAAQ,MAAM,GAAG,CAAC;AACpC,cAAM,mBAAmB,gBAAgB,QAAQ,WAAW,GAAG;AAG/D,cAAM,iBAAiB,WAAW,YAAY,OAAO,KAAK,QAAQ;AAGlE,cAAM,OAAO,IAAI,gBAAgB,KAAK,YAAY,MAAM;AAAA,UACtD;AAAA,QACF,CAAC,KAAK,cAAc;AACpB,SAAC,WAAW,qBAAqB,WAAW,MAAM,QAAQ;AAE1D,gBAAQ,KAAK,gBAAgB;AAAA,MAC/B;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAKA,SAAS,mBACP,WACA,aACA,UACA,SACU;AACV,QAAM,UAAoB,CAAC;AAG3B,MAAI,OAAO,gBAAgB,UAAU;AACnC,kBAAc,EAAE,OAAO,YAAY;AAAA,EACrC;AAGA,MAAI,OAAO,gBAAgB,YAAY,gBAAgB,MAAM;AAC3D,WAAO;AAAA,EACT;AAEA,QAAM;AAAA,IACJ,UAAU;AAAA,IACV,SAAS;AAAA,IACT,GAAG;AAAA,EACL,IAAI;AAGJ,MAAI,SAAS;AACX,UAAM,aAAa,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;AAC9D,UAAM,kBAAkB,eAAe;AAAA,MACrC;AAAA,MACA;AAAA,IACF;AACA,WAAO,OAAO,kBAAkB,eAAe;AAAA,EACjD;AAGA,MAAI,WAAW,QAAW;AACxB,QAAI;AAEJ,QAAI,OAAO,WAAW,YAAY,QAAQ,MAAM,MAAM,QAAW;AAC/D,oBAAc;AAAA,IAChB,WAAW,OAAO,WAAW,WAAW;AACtC,oBAAc,SAAS,IAAI;AAAA,IAC7B,OAAO;AACL,oBAAc;AAAA,IAChB;AAEA,QAAI,QAAQ,WAAW,GAAG;AACxB,YAAM,EAAE,aAAa,eAAe,cAAc,aAAa,IAC7D,QAAQ,WAAW;AACrB,YAAM,MAAM,qBAAAI,QAAM,IAAI,IAAI,WAAW;AACrC,YAAM,YAAY,QAAQ,IAAI,KAAK,GAAG,CAAC,KAAK,aAAa;AACzD,uBAAiB,YAAY,GAAG,aAAa,MAAM,MAAM,aAAa,KAAK,MAAM,YAAY,MAAM,SAAS;AAAA,IAC9G;AAAA,EACF;AAGA,QAAM,gBAAgB,OAAO,KAAK,gBAAgB,EAAE;AAAA,IAClD,CAAC,QAAQ,IAAI,WAAW,GAAG,KAAK,OAAO,iBAAiB,GAAG,MAAM;AAAA,EACnE;AAEA,MAAI,cAAc,SAAS,GAAG;AAE5B,UAAM,SAAS,gBAAgB,SAAS;AACxC,QAAI,QAAQ;AACV,oBAAc,QAAQ,CAAC,cAAc;AACnC,cAAM,mBAAmB,UAAU,UAAU,CAAC;AAC9C,cAAM,eAAe,gBAAgB,gBAAgB;AAErD,YAAI,cAAc;AAChB,gBAAM,iBAAiB,GAAG,MAAM,KAAK,YAAY;AACjD,kBAAQ;AAAA,YACN,GAAG;AAAA,cACD,iBAAiB,SAAS;AAAA,cAC1B;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAGD,oBAAc,QAAQ,CAAC,QAAQ;AAC7B,eAAO,iBAAiB,GAAG;AAAA,MAC7B,CAAC;AAAA,IACH;AAAA,EACF;AAGA,MAAI,OAAO,KAAK,gBAAgB,EAAE,SAAS,GAAG;AAC5C,UAAM,SAAS,gBAAgB,SAAS;AACxC,QAAI,QAAQ;AACV,cAAQ;AAAA,QACN,GAAG;AAAA,UACD;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC;AAAA,UACD,CAAC;AAAA,UACD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,wBAAwB,CACnC,OACA,UACA,cACA,SACA,YACa;AACb,QAAM,UAAoB,CAAC;AAC3B,QAAM,iBAAsC,CAAC;AAC7C,QAAM,gBAAgB,WAAW;AAGjC,MACE,MAAM,eACL,MAAM,WAAW,UAChB,MAAM,UAAU,UAChB,MAAM,WAAW,MAAM,OACzB;AACA,UAAM,mBAAmB,MAAM,eAAe,MAAM;AACpD,UAAM,iBACJ,OAAO,qBAAqB,WACxB,GAAG,gBAAgB,OACnB;AACN,mBAAe,QAAQ;AACvB,mBAAe,SAAS;AAAA,EAC1B;AAEA,MAAI,MAAM,YAAY;AACpB,UAAM,KAAK,MAAM;AACjB,QAAI,OAAO,OAAO,UAAU;AAC1B,qBAAe,aAAa,GAAG,GAAG,QAAQ,CAAC,CAAC;AAAA,IAC9C,WAAW,GAAG,QAAQ,IAAI,MAAM,IAAI;AAClC,YAAM,eAAe,WAAW,EAAE;AAClC,UAAI,CAAC,MAAM,YAAY,KAAK,OAAO,UAAU,YAAY,GAAG;AAC1D,uBAAe,aAAa,GAAG,aAAa,QAAQ,CAAC,CAAC;AAAA,MACxD,OAAO;AACL,uBAAe,aAAa;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAGA,QAAM,KAAM,MAAc;AAC1B,MAAI,OAAO,QAAW;AACpB,UAAM,IAAI,OAAO,OAAO,WAAW,GAAG,EAAE,OAAO;AAC/C,mBAAe,cAAc;AAC7B,mBAAe,eAAe;AAAA,EAChC;AACA,QAAM,KAAM,MAAc;AAC1B,MAAI,OAAO,QAAW;AACpB,UAAM,IAAI,OAAO,OAAO,WAAW,GAAG,EAAE,OAAO;AAC/C,mBAAe,aAAa;AAC5B,mBAAe,gBAAgB;AAAA,EACjC;AACA,QAAM,KAAM,MAAc;AAC1B,MAAI,OAAO,QAAW;AACpB,UAAM,IAAI,OAAO,OAAO,WAAW,GAAG,EAAE,OAAO;AAC/C,mBAAe,aAAa;AAC5B,mBAAe,cAAc;AAAA,EAC/B;AACA,QAAM,KAAM,MAAc;AAC1B,MAAI,OAAO,QAAW;AACpB,UAAM,IAAI,OAAO,OAAO,WAAW,GAAG,EAAE,OAAO;AAC/C,mBAAe,YAAY;AAC3B,mBAAe,eAAe;AAAA,EAChC;AAGA,MAAI,MAAM,WAAW,QAAW;AAC9B,QAAI;AAEJ,QACE,OAAO,MAAM,WAAW,YACxB,QAAQ,MAAM,MAAM,MAAM,QAC1B;AACA,oBAAc,MAAM;AAAA,IACtB,WAAW,OAAO,MAAM,WAAW,WAAW;AAC5C,oBAAc,MAAM,SAAS,IAAI;AAAA,IACnC,OAAO;AACL,oBAAc;AAAA,IAChB;AAEA,QAAI,QAAQ,WAAW,GAAG;AACxB,YAAM,EAAE,aAAa,eAAe,cAAc,aAAa,IAC7D,QAAQ,WAAW;AACrB,YAAM,MAAM,qBAAAA,QAAM,IAAI,IAAI,WAAW;AACrC,YAAM,YAAY,QAAQ,IAAI,KAAK,GAAG,CAAC,KAAK,aAAa;AACzD,qBAAe,YAAY,GAAG,aAAa,MAAM,MAAM,aAAa,KAAK,MAAM,YAAY,MAAM,SAAS;AAAA,IAC5G;AAAA,EACF;AAGA,MAAI,MAAM,SAAS;AACjB,UAAM,aAAa,MAAM,QAAQ,MAAM,OAAO,IAC1C,MAAM,UACN,CAAC,MAAM,OAAO;AAClB,WAAO;AAAA,MACL;AAAA,MACA,eAAe,kBAAkB,YAAY,OAAO;AAAA,IACtD;AAAA,EACF;AAGA,MAAI,MAAM,UAAU,MAAM;AACxB,QAAK,MAAc,SAAS;AAC1B,qBAAe,eAAe;AAC9B,qBAAe,QAAQ;AAAA,IACzB,OAAO;AACL,qBAAe,eAAe;AAC9B,qBAAe,QAAQ;AAAA,IACzB;AAAA,EACF;AAGA,UAAQ;AAAA,IACN,GAAG,cAAc,gBAAgB,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO;AAAA,EACxE;AAGA,QAAM,WAAW,OAAO,KAAK,KAAK;AAClC,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,UAAM,WAAW,SAAS,CAAC;AAC3B,UAAM,QAAS,MAAc,QAAQ;AAGrC,QAAI,SAAS,WAAW,CAAC,MAAM,MAAM,SAAS,SAAS,GAAG;AAExD,YAAM,YAAY,SAAS,UAAU,CAAC;AACtC,cAAQ,KAAK,GAAG,mBAAmB,WAAW,OAAO,UAAU,OAAO,CAAC;AAGvE,UAAI,MAAM,UAAU,QAAQ,OAAO,UAAU,QAAW;AACtD,YAAK,MAAc,SAAS;AAC1B,gBAAM,eAAe;AACrB,gBAAM,QAAQ;AAAA,QAChB,OAAO;AACL,gBAAM,eAAe;AACrB,gBAAM,QAAQ;AAAA,QAChB;AAAA,MACF;AACA;AAAA,IACF;AAGA,QAAI,aAAa,WAAW,aAAa,MAAO;AAEhD,QAAI,aAAa,MAAM;AAErB,UAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,cAAM,SAAS,OAAO,KAAK,KAAK;AAChC,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,kBAAQ;AAAA,YACN,GAAG;AAAA,cACD,OAAO,CAAC;AAAA,cACR,MAAM,OAAO,CAAC,CAAC;AAAA,cACf;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAGA,YAAI,MAAM,UAAU,QAAQ,OAAO,UAAU,QAAW;AACtD,cAAK,MAAc,SAAS;AAC1B,kBAAM,eAAe;AACrB,kBAAM,QAAQ;AAAA,UAChB,OAAO;AACL,kBAAM,eAAe;AACrB,kBAAM,QAAQ;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AACA;AAAA,IACF;AAEA,QAAI,aAAa,SAAS;AAExB,UAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,cAAM,UAAU,OAAO,KAAK,KAAK;AACjC,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,kBAAQ;AAAA,YACN,GAAG;AAAA,cACD,MAAM,QAAQ,CAAC,CAAC;AAAA,cAChB;AAAA,cACA,QAAQ,CAAC;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAGA,YAAI,MAAM,UAAU,QAAQ,OAAO,UAAU,QAAW;AACtD,cAAK,MAAc,SAAS;AAC1B,kBAAM,eAAe;AACrB,kBAAM,QAAQ;AAAA,UAChB,OAAO;AACL,kBAAM,eAAe;AACrB,kBAAM,QAAQ;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AACA;AAAA,IACF;AAGA,QAAI,YAAY,QAAQ,GAAG;AACzB,UAAI,UAAU,UAAa,UAAU,IAAI;AACvC,YAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAE/C;AAAA,QACF;AACA,gBAAQ;AAAA,UACN,GAAG,cAAc;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,MAAM,KAAK;AACb,QAAI,OAAO,MAAM,QAAQ,UAAU;AACjC,cAAQ;AAAA,QACN,GAAG,cAAc,MAAM,KAAK,YAAY,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO;AAAA,MACvE;AAAA,IACF,WAAW,OAAO,MAAM,QAAQ,UAAU;AACxC,YAAM,kBAAkB,WAAW,wBAAwB,MAAM,GAAG;AACpE,oBAAc;AAAA,QACZ,IAAI,eAAe,MAAM,MAAM,GAAG;AAAA,QAClC;AAAA,MACF;AACA,cAAQ,KAAK,eAAe;AAAA,IAC9B;AAAA,EACF;AAEA,SAAO;AACT;;;AF/yCA,IAAM,2BAAuB,6BAAyC;AAAA,EACpE,SAAS;AACX,CAAC;AAKM,IAAM,mBAAmB,UAAM,0BAAW,oBAAoB;AAW9D,IAAM,gBAAgB,CAAC,EAAE,UAAU,SAAS,MAA0B;AAC3E,QAAM,YAAQ;AAAA,IACZ,OAAO;AAAA;AAAA,MAEL,SAAS,YAAY;AAAA,IACvB;AAAA,IACA,CAAC,QAAQ;AAAA,EACX;AAEA,SACE,8BAAAC,QAAA,cAAC,qBAAqB,UAArB,EAA8B,SAC5B,QACH;AAEJ;AAMO,IAAM,sBAAsB,MAAM;AACvC,SAAO,IAAI,oBAAoB,mBAAmB,GAAK;AACzD;AAMO,IAAM,wBAAwB,CAAC,aAAkC;AACtE,SAAO,MAAM;AACX,WACE,8BAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,yBAAyB,EAAE,QAAQ,SAAS,gBAAgB,EAAE;AAAA;AAAA,IAChE;AAAA,EAEJ;AACF;;;ASpEA,IAAAC,gBAAqE;AAO9D,IAAM,uBAAmB,6BAA+B,CAAC,CAAC;AAE1D,IAAM,eAAe,UAAuB,0BAAW,gBAAgB;AAEvE,IAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AACF,MAE0B;AACxB,QAAM,YAAQ,uBAAQ,OAAO,EAAE,WAAW,IAAI,CAAC,UAAU,CAAC;AAE1D,SACE,8BAAAC,QAAA,cAAC,iBAAiB,UAAjB,EAA0B,SACxB,QACH;AAEJ;;;AbNA,IAAM,qBAAqB,oBAAI,IAAI;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGD,IAAM,gBAAgB,oBAAI,IAAI,CAAC,YAAY,OAAO,OAAO,OAAO,CAAC;AAMjE,SAAS,cAAc,OAAoB;AACzC,MAAI,UAAU,KAAM,QAAO;AAC3B,QAAM,IAAI,OAAO;AACjB,MAAI,MAAM,SAAU,QAAO,IAAI,KAAK;AACpC,MAAI,MAAM,SAAU,QAAO,IAAI,KAAK;AACpC,MAAI,MAAM,UAAW,QAAO,QAAQ,MAAM;AAE1C,SAAO,KAAK,UAAU,KAAK;AAC7B;AAMA,SAAS,eAAe,OAAoC;AAG1D,MAAI,YAAY;AAEhB,QAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,MAAM,KAAK,CAAC;AAGlB,QAAI,cAAc,IAAI,GAAG,EAAG;AAG5B,QACE,YAAY,GAAG,KACf,IAAI,WAAW,CAAC,MAAM;AAAA,IACtB,mBAAmB,IAAI,GAAG,GAC1B;AACA,YAAM,QAAQ,MAAM,GAAG;AACvB,UAAI,UAAU,QAAW;AACvB,qBAAa,IAAI,GAAG,IAAI,cAAc,KAAK,CAAC;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AAEA,SAAO,KAAK,SAAS;AACvB;AAMA,SAAS,mBACP,gBACA,UACA,cACA,SACA,SACA,OACU;AACV,QAAM,eAAW,sBAAmD,IAAI;AAKxE,QAAM,YAAY,QAAQ,KAAK,OAAO,OAAO,KAAK,EAAE,KAAK,GAAG,CAAC,IAAI;AACjE,QAAM,cAAc,eAAe,cAAc,IAAI,MAAM;AAG3D,MAAI,CAAC,SAAS,WAAW,SAAS,QAAQ,SAAS,aAAa;AAC9D,UAAM,UAAU;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,aAAS,UAAU,EAAE,MAAM,aAAa,QAAQ;AAAA,EAClD;AAEA,SAAO,SAAS,QAAQ;AAC1B;AAMA,IAAMC,gBAAe;AAMrB,SAAS,mBACP,gBACA,cAC0B;AAC1B,SAAO,CAAC,SAAiB;AACvB,QAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO,OAAO,IAAI;AACzD,QAAI,CAAC,KAAK,WAAWA,aAAY,EAAG,QAAO,aAAa,IAAI;AAE5D,UAAM,QAAQ,KAAK,UAAUA,cAAa,MAAM,EAAE,MAAM,GAAG;AAC3D,UAAM,WAAW,MAAM,MAAM,SAAS,CAAC;AACvC,UAAM,aAAa,SAAS,UAAU,EAAE;AACxC,UAAM,WACJ,MAAM,UAAU,KAChB,CAAC,MAAM,UAAU,KACjB,cAAc,KACd,cAAc;AAEhB,UAAM,WACJ,WAAW,MAAM,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;AAG1D,UAAM,gBAAgB,eAAe,QAAQ;AAC7C,QAAI,OAAO,kBAAkB,SAAU,QAAO,aAAa,IAAI;AAE/D,UAAM,WAAW,aAAa,aAAa;AAC3C,QAAI,CAAC,SAAU,QAAO;AAEtB,UAAM,aAAa,KAAK,MAAO,aAAa,MAAQ,GAAG;AACvD,WAAO,sBAAsB,QAAQ,IAAI,UAAU;AAAA,EACrD;AACF;AAEO,IAAM,UAAU,cAAAC,QAAM;AAAA,MAC3B;AAAA,IACE,CAAC,EAAE,KAAK,OAAO,WAAW,YAAY,GAAG,MAAM,GAAiB,QAAQ;AACtE,WAAK,MAAM,WAAW,MAAM,YAAY,MAAM,UAAU,QAAW;AACjE,cAAM,SAAS;AAAA,MACjB;AAEA,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,iBAAa,sBAA2B,IAAI;AAClD,YAAM,aAAS;AAAA,QACb,CAAC,SAA6B;AAC5B,qBAAW,UAAU;AACrB,cAAI,OAAO,QAAQ,YAAY;AAC7B,gBAAI,IAAI;AAAA,UACV,WAAW,KAAK;AACd,YAAC,IAAmD,UAAU;AAAA,UAChE;AAAA,QACF;AAAA,QACA,CAAC,GAAG;AAAA,MACN;AACA,YAAM,EAAE,UAAU,MAAM,IAAI,SAAS;AAMrC,YAAM,oBAAoB,iBACtB,OAAO,QAAQ,cAAc,EAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,EAC3B,KAAK,GAAG,IACX;AACJ,YAAM,qBAAiB;AAAA,QACrB,MACE,iBACI,mBAAmB,gBAAgB,QAAQ,IAC3C;AAAA,QACN,CAAC,gBAAgB,mBAAmB,QAAQ;AAAA,MAC9C;AACA,YAAM,EAAE,WAAW,IAAI,aAAa;AACpC,YAAM,EAAE,cAAc,QAAQ,IAAI,qBAAqB;AACvD,YAAM,EAAE,QAAQ,IAAI,iBAAiB;AACrC,YAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,KAAK;AAEhD,mCAAU,MAAM;AACd,YAAI,CAAC,WAAW;AACd,uBAAa,IAAI;AACjB;AAAA,QACF;AAEA,YACE,OAAO,yBAAyB,eAChC,CAAC,WAAW,SACZ;AACA,uBAAa,IAAI;AACjB;AAAA,QACF;AAEA,cAAM,WAAW,IAAI;AAAA,UACnB,CAAC,CAAC,KAAK,MAAM;AACX,gBAAI,MAAM,gBAAgB;AACxB,2BAAa,IAAI;AACjB,uBAAS,WAAW;AAAA,YACtB;AAAA,UACF;AAAA,UACA,EAAE,WAAW,IAAI;AAAA,QACnB;AAEA,iBAAS,QAAQ,WAAW,OAAO;AAEnC,eAAO,MAAM;AACX,mBAAS,WAAW;AAAA,QACtB;AAAA,MACF,GAAG,CAAC,SAAS,CAAC;AAEd,mCAAU,MAAM;AACd,YAAI,aAAa,WAAW,WAAW,WAAW;AAChD,gBAAM,aAAa,MAAM,QAAQ,SAAS,IAAI,YAAY,CAAC,SAAS;AACpE,gBAAM,SAAS,eAAe,kBAAkB,YAAY,OAAO;AACnE,iBAAO,OAAO,WAAW,QAAQ,OAAO,MAAM;AAAA,QAChD;AAAA,MACF,GAAG,CAAC,WAAW,WAAW,OAAO,CAAC;AAElC,mCAAU,MAAM;AACd,cAAM,OAAO,WAAW;AACxB,eAAO,MAAM;AACX,cAAI,cAAc,MAAM;AACtB,kBAAM,aAAa,MAAM,QAAQ,UAAU,IACvC,aACA,CAAC,UAAU;AACf,kBAAM,SAAS,eAAe;AAAA,cAC5B;AAAA,cACA;AAAA,YACF;AACA,mBAAO,OAAO,KAAK,OAAO,MAAM;AAAA,UAClC;AAAA,QACF;AAAA,MACF,GAAG,CAAC,YAAY,OAAO,CAAC;AAMxB,YAAM,iBAAsC;AAAA,QAC1C,GAAG;AAAA,QACH;AAAA,MACF;AAGA,UAAI,cAAc,UAAU,eAAe,SAAS;AAClD,cAAM,aAAa,MAAM,QAAQ,eAAe,OAAO,IACnD,eAAe,UACf,CAAC,eAAe,OAAO;AAE3B,uBAAe,UAAU,WAAW,IAAI,CAAC,SAAc;AAErD,cAAI,CAAC,KAAK,UAAU;AAClB,mBAAO;AAAA,cACL,GAAG;AAAA,cACH,UAAU;AAAA,cACV,OAAO,KAAK,SAAS;AAAA,cACrB,UAAU,KAAK,YAAY;AAAA,YAC7B;AAAA,UACF;AACA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAGA,UAAI,cAAc,YAAY,eAAe,SAAS;AACpD,cAAM,aAAa,MAAM,QAAQ,eAAe,OAAO,IACnD,eAAe,UACf,CAAC,eAAe,OAAO;AAE3B,uBAAe,UAAU,WAAW,IAAI,CAAC,SAAc;AAErD,cAAI,CAAC,KAAK,UAAU;AAClB,mBAAO;AAAA,cACL,GAAG;AAAA,cACH,UAAU;AAAA,cACV,UAAU,KAAK,YAAY;AAAA,YAC7B;AAAA,UACF;AACA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAKA,YAAM,iBAAiB;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,iBAAiB,EAAE,GAAG,OAAO,SAAS,kBAAkB,IAAI;AAAA,MAC9D;AAEA,YAAM,WAAgB,EAAE,KAAK,OAAO;AACpC,UAAI,SAAS;AACX,iBAAS,UAAU;AAAA,MACrB;AAEA,UAAI,eAAe,SAAS,GAAG;AAC7B,iBAAS,YAAY,eAAe,KAAK,GAAG;AAAA,MAC9C;AAEA,UAAI,MAAM,WAAW;AACnB,iBAAS,YAAY,SAAS,YAC1B,GAAG,SAAS,SAAS,IAAI,MAAM,SAAS,KACxC,MAAM;AAAA,MACZ;AAGA,UAAI,cAAc,MAAM,SAAS;AAC/B,YAAI;AACJ,YAAI,OAAO,OAAO,UAAU;AAC1B,0BAAgB;AAAA,QAClB,OAAO;AACL,0BACG,GAAgC,eAChC,GAAgC,QACjC;AAAA,QACJ;AACA,YAAI;AACJ,YAAI,OAAO,MAAM,aAAa,UAAU;AACtC,iBAAO,MAAM,SAAS,MAAM,GAAG,GAAG;AAAA,QACpC;AACA,iBAAS,UAAU,CAAC,UAAe;AACjC,qBAAW;AAAA,YACT,MAAM;AAAA,YACN,QAAQ,kBAAkB,QAAQ,gBAAgB;AAAA,YAClD;AAAA,UACF,CAAC;AACD,cAAI,MAAM,SAAS;AACjB,kBAAM,QAAQ,KAAK;AAAA,UACrB;AAAA,QACF;AAAA,MACF,WAAW,MAAM,WAAW,CAAC,SAAS;AAEpC,iBAAS,UAAU,MAAM;AAAA,MAC3B;AAEA,YAAM,EAAE,OAAO,UAAU,QAAQ,OAAO,GAAG,WAAW,IAAI;AAG1D,YAAM,YAAY,OAAO,KAAK,UAAU;AACxC,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,cAAM,MAAM,UAAU,CAAC;AAEvB,YACE,IAAI,WAAW,CAAC,MAAM;AAAA,QACtB,IAAI,WAAW,CAAC,MAAM;AAAA,QACtB,IAAI,SAAS,KACb,IAAI,WAAW,CAAC,KAAK,MACrB,IAAI,WAAW,CAAC,KAAK,IACrB;AACA,mBAAS,GAAG,IAAK,WAAmB,GAAG;AAAA,QACzC,WAGG,CAAC,aAAa,IAAI,GAAG,KAAK,CAAC,YAAY,GAAG,KAC3C,YAAY,IAAI,GAAG,GACnB;AACA,mBAAS,GAAG,IAAK,WAAmB,GAAG;AAAA,QACzC;AAAA,MACF;AAEA,UAAI,OAAO;AACT,iBAAS,QAAQ;AAAA,MACnB;AAEA,UAAI,aAAa,CAAC,WAAW;AAC3B,iBAAS,QAAQ;AAAA,UACf,GAAG,SAAS;AAAA,UACZ,SAAS;AAAA,QACX;AAAA,MACF;AAEA,YAAM,YAAY;AAClB,aAAO,WACL,8BAAAA,QAAA,cAAC,aAAW,GAAG,YACZ,QACA,UACA,KACH,IAEA,8BAAAA,QAAA,cAAC,aAAW,GAAG,UAAU;AAAA,IAE7B;AAAA,EACF;AACF;;;ADvZO,IAAM,OAAO,cAAAC,QAAM,WAGxB,CAAC,OAAO,QACR,8BAAAA,QAAA,cAAC,WAAS,GAAG,OAAO,KAAU,CAC/B;AAMM,IAAM,aAAa,cAAAA,QAAM,WAG9B,CAAC,OAAO,QACR,8BAAAA,QAAA,cAAC,WAAQ,SAAQ,QAAO,eAAc,OAAO,GAAG,OAAO,KAAU,CAClE;AAMM,IAAM,SAAS,cAAAA,QAAM,WAG1B,CAAC,OAAO,QACR,8BAAAA,QAAA;AAAA,EAAC;AAAA;AAAA,IACC,SAAQ;AAAA,IACR,gBAAe;AAAA,IACf,YAAW;AAAA,IACV,GAAG;AAAA,IACJ;AAAA;AACF,CACD;AAMM,IAAM,WAAW,cAAAA,QAAM,WAG5B,CAAC,OAAO,QACR,8BAAAA,QAAA,cAAC,WAAQ,SAAQ,QAAO,eAAc,UAAU,GAAG,OAAO,KAAU,CACrE;AAMM,IAAM,uBAAuB,cAAAA,QAAM,WAGxC,CAAC,EAAE,QAAQ,CAAC,GAAG,GAAG,MAAM,GAAG,QAC3B,8BAAAA,QAAA;AAAA,EAAC;AAAA;AAAA,IACC,OAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ;AAAA,QACN,GAAI,OAAe;AAAA,QACnB,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,IACC,GAAG;AAAA,IACJ;AAAA;AACF,CACD;AAMM,IAAM,qBAAqB,cAAAA,QAAM,WAGtC,CAAC,EAAE,QAAQ,CAAC,GAAG,GAAG,MAAM,GAAG,QAC3B,8BAAAA,QAAA;AAAA,EAAC;AAAA;AAAA,IACC,OAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ;AAAA,QACN,GAAI,OAAe;AAAA,QACnB,eAAe;AAAA,MACjB;AAAA,IACF;AAAA,IACC,GAAG;AAAA,IACJ;AAAA;AACF,CACD;AAMM,IAAM,SAAS,cAAAA,QAAM,WAG1B,CAAC,OAAO,QACR,8BAAAA,QAAA,cAAC,WAAS,GAAG,OAAO,KAAU,CAC/B;AAMM,IAAM,WAAW,cAAAA,QAAM,WAG5B,CAAC,OAAO,QACR,8BAAAA,QAAA,cAAC,WAAQ,UAAS,QAAQ,GAAG,OAAO,KAAU,CAC/C;AAMM,IAAM,MAAM,cAAAA,QAAM,WAGvB,CAAC,OAAO,QACR,8BAAAA,QAAA,cAAC,WAAS,GAAG,OAAO,KAAU,CAC/B;AAMM,IAAM,OAAO,cAAAA,QAAM,WAGxB,CAAC,OAAO,QACR,8BAAAA,QAAA,cAAC,WAAQ,IAAG,QAAQ,GAAG,OAAO,KAAU,CACzC;;;Ae3ID,IAAAC,gBAAkB;AAUX,IAAM,QAAQ,cAAAC,QAAM,WAGzB,CAAC,OAAO,QAAQ;AAChB,QAAM,aAAa,EAAE,GAAG,OAAO,KAAK,MAAM,OAAO,GAAG;AACpD,SAAO,8BAAAA,QAAA,cAAC,WAAQ,IAAG,OAAO,GAAG,YAAY,KAAU;AACrD,CAAC;AAMM,IAAM,kBAAkB,cAAAA,QAAM,WAGnC,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,QACpB,8BAAAA,QAAA;AAAA,EAAC;AAAA;AAAA,IACC,iBAAiB,OAAO,GAAG;AAAA,IAC3B,gBAAe;AAAA,IACf,kBAAiB;AAAA,IAChB,GAAG;AAAA,IACJ;AAAA;AACF,CACD;;;ACjCD,IAAAC,gBAAkB;;;ACMlB,IAAAC,gBAAkB;AAmBlB,IAAM,WAAW,cAAAC,QAAM;AAAA,EACrB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,eAAe;AAAA,IACf,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AAGH,UAAM,cAAc,SAAS,QAAQ,EAAE,SAAS,SAAS,IAAI,CAAC;AAE9D,UAAM,gBAAgB,cAClB,cAAAA,QAAM,SAAS;AAAA,MAAI;AAAA,MAAU,CAAC,UAC5B,OAAO,UAAU,WAAW,MAAM,YAAY,IAAI;AAAA,IACpD,IACA;AAEJ,UAAM,SAA8B;AAAA,MAClC,GAAI;AAAA,MACJ,GAAI,WACA;AAAA,QACE,SAAS;AAAA,QACT,iBAAiB;AAAA,QACjB,iBAAiB;AAAA,QACjB,UAAU;AAAA,MACZ,IACA,CAAC;AAAA,IACP;AAGA,UAAM,cAAc;AAAA,MAClB,IAAK,QACD,QACA,QACE,QACA;AAAA,MACN,WAAW,WAAW,WAAW;AAAA,MACjC,gBAAgB,YACZ,iBACA,eACE,cACA;AAAA,MACN,OAAO;AAAA,MACP,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG,OAAO;AAAA,IACZ;AAEA,QAAI,SAAS,OAAO;AAClB,aACE,8BAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ;AAAA,UACA,IAAI,QAAQ,QAAQ;AAAA,UACpB,UAAS;AAAA,UACT,YAAW;AAAA,UACX,UAAS;AAAA,UACT,QAAQ,QAAQ,YAAY;AAAA,UAC5B,KAAK,QAAQ,WAAW;AAAA,UACvB,GAAG,OAAO;AAAA;AAAA,QAEV;AAAA,MACH;AAAA,IAEJ;AAIA,WACE,8BAAAA,QAAA,cAAC,WAAS,GAAG,aAAa,OACvB,aACH;AAAA,EAEJ;AACF;AAEA,IAAO,oBAAQ;;;AD3Gf,IAAM,gBAAgB,cAAAC,QAAM;AAAA,EAC1B,CAAC,OAAO,QAAQ;AACd,WAAO,8BAAAA,QAAA,cAAC,qBAAU,GAAG,OAAO,KAAU;AAAA,EACxC;AACF;AAKO,IAAM,OAAO;;;AEbpB,IAAAC,iBAAkB;AA6BX,IAAM,OAAO,eAAAC,QAAM,WAGxB,CAAC,OAAO,QACR,+BAAAA,QAAA,cAAC,WAAQ,IAAG,QAAQ,GAAG,OAAO,KAAU,CACzC;AAMM,IAAM,QAAQ,eAAAA,QAAM,WAGzB,CAAC,OAAO,QACR,+BAAAA,QAAA,cAAC,WAAQ,IAAG,SAAS,GAAG,OAAO,KAAU,CAC1C;AAMM,IAAM,SAAS,eAAAA,QAAM,WAG1B,CAAC,OAAO,QAAQ;AAChB,MAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,QAAI,CAAC,MAAM,YAAY,CAAC,MAAM,YAAY,GAAG;AAC3C,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO,+BAAAA,QAAA,cAAC,WAAQ,IAAG,UAAU,GAAG,OAAO,KAAU;AACnD,CAAC;;;AC/DD,IAAAC,iBAAkB;;;ACAlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIO,IAAM,SAAS,CACpB,EAAE,WAAW,MAAM,iBAAiB,QAAQ,GAAG,MAAM,IAAoB;AAAA,EACvE,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,SAAS,EAAE;AAAA,EACnB,IAAI,EAAE,SAAS,EAAE;AAAA,EACjB;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,UAAU,CACrB,EAAE,WAAW,MAAM,iBAAiB,QAAQ,GAAG,MAAM,IAAoB;AAAA,EACvE,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,SAAS,EAAE;AAAA,EACnB,IAAI,EAAE,SAAS,EAAE;AAAA,EACjB;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,cAAc,CACzB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,oBAAoB;AAAA,EACvC,IAAI,EAAE,WAAW,gBAAgB;AAAA,EACjC;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,eAAe,CAC1B;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,mBAAmB;AAAA,EACtC,IAAI,EAAE,WAAW,gBAAgB;AAAA,EACjC;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,cAAc,CACzB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,oBAAoB;AAAA,EACvC,IAAI,EAAE,WAAW,gBAAgB;AAAA,EACjC;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,YAAY,CACvB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,mBAAmB;AAAA,EACtC,IAAI,EAAE,WAAW,gBAAgB;AAAA,EACjC;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,SAAS,CACpB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,gBAAgB;AAAA,EACnC,OAAO,EAAE,WAAW,oBAAoB;AAAA,EACxC,OAAO,EAAE,WAAW,gBAAgB;AAAA,EACpC,OAAO,EAAE,WAAW,oBAAoB;AAAA,EACxC,OAAO,EAAE,WAAW,gBAAgB;AAAA,EACpC,IAAI,EAAE,WAAW,gBAAgB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,SAAS,CACpB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,eAAe;AAAA,EAClC,IAAI,EAAE,WAAW,iBAAiB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,QAAQ,CACnB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,WAAW;AAAA,EAC9B,OAAO,EAAE,WAAW,cAAc;AAAA,EAClC,IAAI,EAAE,WAAW,WAAW;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,SAAS,CACpB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,WAAW;AAAA,EAC9B,IAAI,EAAE,WAAW,WAAW;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,UAAU,CACrB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,WAAW;AAAA,EAC9B,IAAI,EAAE,WAAW,WAAW;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,QAAQ,CACnB,EAAE,WAAW,MAAM,iBAAiB,YAAY,GAAG,MAAM,IAAoB;AAAA,EAC3E,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,SAAS,EAAE;AAAA,EACnB,OAAO,EAAE,SAAS,EAAE;AAAA,EACpB,IAAI,EAAE,SAAS,EAAE;AAAA,EACjB;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,QAAQ,CACnB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,WAAW;AAAA,EAC9B,OAAO,EAAE,WAAW,cAAc;AAAA,EAClC,IAAI,EAAE,WAAW,WAAW;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,QAAQ,CACnB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,gBAAgB;AAAA,EACnC,OAAO,EAAE,WAAW,oBAAoB;AAAA,EACxC,OAAO,EAAE,WAAW,mBAAmB;AAAA,EACvC,OAAO,EAAE,WAAW,oBAAoB;AAAA,EACxC,OAAO,EAAE,WAAW,mBAAmB;AAAA,EACvC,OAAO,EAAE,WAAW,oBAAoB;AAAA,EACxC,OAAO,EAAE,WAAW,mBAAmB;AAAA,EACvC,OAAO,EAAE,WAAW,oBAAoB;AAAA,EACxC,OAAO,EAAE,WAAW,mBAAmB;AAAA,EACvC,OAAO,EAAE,WAAW,oBAAoB;AAAA,EACxC,IAAI,EAAE,WAAW,gBAAgB;AAAA,EACjC;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,QAAQ,CACnB,EAAE,WAAW,MAAM,iBAAiB,YAAY,GAAG,MAAM,IAAoB;AAAA,EAC3E,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,eAAe;AAAA,EAClC,OAAO,EAAE,WAAW,gBAAgB;AAAA,EACpC,OAAO,EAAE,WAAW,iBAAiB;AAAA,EACrC,OAAO,EAAE,WAAW,eAAe;AAAA,EACnC,OAAO,EAAE,WAAW,gBAAgB;AAAA,EACpC,IAAI,EAAE,WAAW,eAAe;AAAA,EAChC;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,aAAa,CACxB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,mBAAmB;AAAA,EACtC,OAAO,EAAE,WAAW,yBAAyB;AAAA,EAC7C,OAAO,EAAE,WAAW,yBAAyB;AAAA,EAC7C,OAAO,EAAE,WAAW,yBAAyB;AAAA,EAC7C,OAAO,EAAE,WAAW,yBAAyB;AAAA,EAC7C,OAAO,EAAE,WAAW,yBAAyB;AAAA,EAC7C,IAAI,EAAE,WAAW,mBAAmB;AAAA,EACpC;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,SAAS,CACpB,EAAE,WAAW,MAAM,GAAG,MAAM,IAAoB;AAAA,EAC9C,UAAU;AACZ,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,iBAAiB;AAAA,EACpC,OAAO,EAAE,WAAW,iCAAiC;AAAA,EACrD,OAAO,EAAE,WAAW,+BAA+B;AAAA,EACnD,OAAO,EAAE,WAAW,iCAAiC;AAAA,EACrD,OAAO,EAAE,WAAW,+BAA+B;AAAA,EACnD,OAAO,EAAE,WAAW,gCAAgC;AAAA,EACpD,IAAI,EAAE,WAAW,iBAAiB;AAAA,EAClC;AAAA,EACA,GAAG;AACL;AAEO,IAAM,OAAO,CAClB,EAAE,WAAW,MAAM,GAAG,MAAM,IAAoB;AAAA,EAC9C,UAAU;AACZ,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,WAAW;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,YAAY,CACvB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,WAAW;AAAA,EAC9B,OAAO,EAAE,WAAW,aAAa;AAAA,EACjC,OAAO,EAAE,WAAW,WAAW;AAAA,EAC/B,OAAO,EAAE,WAAW,aAAa;AAAA,EACjC,OAAO,EAAE,WAAW,WAAW;AAAA,EAC/B,IAAI,EAAE,WAAW,WAAW;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,SAAS,CACpB,EAAE,WAAW,MAAM,GAAG,MAAM,IAAoB;AAAA,EAC9C,UAAU;AACZ,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,UAAU,CACrB,EAAE,WAAW,MAAM,GAAG,MAAM,IAAoB;AAAA,EAC9C,UAAU;AACZ,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,eAAe,CAC1B,EAAE,WAAW,MAAM,iBAAiB,YAAY,GAAG,MAAM,IAAoB;AAAA,EAC3E,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,gBAAgB,CAC3B,EAAE,WAAW,MAAM,iBAAiB,WAAW,GAAG,MAAM,IAAoB;AAAA,EAC1E,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,QAAQ,CACnB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,IAAI;AAAA,IACF,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,eAAe,CAC1B,EAAE,WAAW,MAAM,iBAAiB,QAAQ,GAAG,MAAM,IAAoB;AAAA,EACvE,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,WAAW;AAAA,IACX,iBAAiB;AAAA,EACnB;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,UAAU,CACrB,EAAE,WAAW,MAAM,iBAAiB,WAAW,GAAG,MAAM,IAAoB;AAAA,EAC1E,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,IAAI;AAAA,IACF,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,UAAU,CACrB,EAAE,WAAW,MAAM,iBAAiB,WAAW,GAAG,MAAM,IAAoB;AAAA,EAC1E,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,IAAI;AAAA,IACF,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,YAAY,CACvB,EAAE,WAAW,MAAM,iBAAiB,YAAY,GAAG,MAAM,IAAoB;AAAA,EAC3E,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,WAAW;AAAA,EACb;AAAA,EACA,QAAQ;AAAA,IACN,WAAW;AAAA,EACb;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,EACb;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,EACb;AAAA,EACA,SAAS;AAAA,IACP,WAAW;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,OAAO,CAClB,EAAE,WAAW,MAAM,iBAAiB,YAAY,GAAG,MAAM,IAAoB;AAAA,EAC3E,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,oBAAoB,SAAS,EAAE;AAAA,EAClD,YAAY;AAAA,IACV,WAAW;AAAA,EACb;AAAA,EACA,sBAAsB;AAAA,IACpB,WAAW;AAAA,EACb;AAAA,EACA,iBAAiB;AAAA,IACf,WAAW;AAAA,EACb;AAAA,EACA,IAAI,EAAE,WAAW,oBAAoB,SAAS,EAAE;AAAA,EAChD;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,QAAQ,CACnB,EAAE,WAAW,MAAM,iBAAiB,YAAY,GAAG,MAAM,IAAoB;AAAA,EAC3E,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,OAAO;AAAA,EAC1B,SAAS,EAAE,WAAW,kCAAkC;AAAA,EACxD,SAAS,EAAE,WAAW,gCAAgC;AAAA,EACtD,SAAS,EAAE,WAAW,oCAAoC;AAAA,EAC1D,SAAS,EAAE,WAAW,oCAAoC;AAAA,EAC1D,SAAS,EAAE,WAAW,wCAAwC;AAAA,EAC9D,SAAS,EAAE,WAAW,wCAAwC;AAAA,EAC9D,SAAS,EAAE,WAAW,4CAA4C;AAAA,EAClE,SAAS,EAAE,WAAW,4CAA4C;AAAA,EAClE,IAAI,EAAE,WAAW,OAAO;AAAA,EACxB;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,aAAa,CACxB,EAAE,WAAW,MAAM,iBAAiB,YAAY,GAAG,MAAM,IAAoB;AAAA,EAC3E,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,WAAW,CACtB,EAAE,WAAW,MAAM,iBAAiB,YAAY,GAAG,MAAM,IAAoB;AAAA,EAC3E,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,WAAW,CACtB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,YAAY,CACvB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,WAAW;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,WAAW;AAAA,EACb;AAAA,EACA,YAAY;AAAA,IACV,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,eAAe,CAC1B;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,gBAAgB,CAC3B;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,aAAa,CACxB,EAAE,WAAW,MAAM,iBAAiB,YAAY,GAAG,MAAM,IAAoB;AAAA,EAC3E,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,YAAY,CACvB,EAAE,WAAW,MAAM,iBAAiB,WAAW,GAAG,MAAM,IAAoB;AAAA,EAC1E,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,aAAa,CACxB,EAAE,WAAW,MAAM,iBAAiB,WAAW,GAAG,MAAM,IAAoB;AAAA,EAC1E,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,YAAY,CACvB,EAAE,WAAW,MAAM,iBAAiB,WAAW,GAAG,MAAM,IAAoB;AAAA,EAC1E,UAAU;AAAA,EACV,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACF,SAAS;AAAA,IACT,WAAW;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,UAAU,CACrB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,gBAAgB;AAClB,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,oBAAoB;AAAA,EACvC,OAAO,EAAE,WAAW,mBAAmB;AAAA,EACvC,IAAI,EAAE,WAAW,mBAAmB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,WAAW,CACtB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,OAAO,EAAE,OAAO,KAAK;AAAA,EACrB,KAAK,EAAE,OAAO,OAAO;AAAA,EACrB,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,MAAM,EAAE,OAAO,KAAK;AAAA,EACpB,IAAI,EAAE,OAAO,OAAO;AACtB,OACI;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,aAAa,CACxB;AAAA,EACE,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,QAAQ;AAAA,EACR,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,OAAO;AACT,OACI;AAAA,EACJ,MAAM,EAAE,OAAO,MAAM;AAAA,EACrB,IAAI,EAAE,OAAO,GAAG,KAAK,KAAK;AAAA,EAC1B,gBAAgB,SAAS,KAAK;AAAA,EAC9B;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,cAAc,CACzB;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,QAAQ;AAAA,EACR,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,OAAO;AACT,OACI;AAAA,EACJ,MAAM,EAAE,MAAa;AAAA,EACrB,IAAI,EAAE,MAAa;AAAA,EACnB,MAAM,EAAE,MAAa;AAAA,EACrB,OAAO,EAAE,OAAO,cAAc;AAAA,EAC9B,QAAQ,EAAE,MAAa;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AACO,IAAM,eAAe,CAC1B;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,OAAO;AACT,OACI;AAAA,EACJ,MAAM,EAAE,SAAS,EAAE;AAAA,EACnB,IAAI,EAAE,SAAS,EAAE;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,oBAAoB,CAC/B;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,OAAO;AACT,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,oBAAoB;AAAA,EACvC,IAAI,EAAE,WAAW,gBAAgB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAEO,IAAM,kBAAkB,CAC7B;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,OAAO;AACT,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,WAAW;AAAA,EAC9B,IAAI,EAAE,WAAW,WAAW;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAIO,IAAM,iBAAiB,CAC5B;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,OAAO;AACT,OACI;AAAA,EACJ,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,OAAO;AAAA,IACP,qBACE;AAAA,EACJ;AAAA,EACA,OAAO,EAAE,UAAU,IAAI;AAAA,EACvB,IAAI;AAAA,IACF,UAAU;AAAA,IACV,qBAAqB;AAAA,IACrB,OAAO;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAIO,IAAM,oBAAoB,CAC/B;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,OAAO;AACT,OACI;AAAA,EACJ,MAAM,EAAE,OAAO,qBAAqB;AAAA,EACpC,IAAI,EAAE,OAAO,OAAO;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAGO,IAAM,iBAAiB,CAC5B;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,OAAO;AACT,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,eAAe;AAAA,EAClC,OAAO,EAAE,WAAW,gBAAgB;AAAA,EACpC,IAAI,EAAE,WAAW,eAAe;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAGO,IAAM,iBAAiB,CAC5B;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,OAAO;AACT,OACI;AAAA,EACJ,IAAI,EAAE,SAAS,GAAG,QAAQ,aAAa;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAGO,IAAM,eAAe,CAC1B;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,OAAO;AACT,OACI;AAAA,EACJ,IAAI,EAAE,UAAU,iCAAiC;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAGO,IAAM,yBAAyB,CACpC;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,OAAO;AACT,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,WAAW;AAAA,EAC9B,IAAI,EAAE,WAAW,WAAW;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;AAGO,IAAM,sBAAsB,CACjC;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,GAAG;AACL,IAAoB;AAAA,EAClB,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,OAAO;AACT,OACI;AAAA,EACJ,MAAM,EAAE,WAAW,aAAa;AAAA,EAChC,OAAO,EAAE,WAAW,WAAW;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL;;;ADrpCO,IAAM,WAAW,eAAAC,QAAM;AAAA,EAC5B,CAAC;AAAA,IACC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,GAAG;AAAA,EACL,MACE,+BAAAA,QAAA,cAAC,QAAK,iBAAgB,mBAAmB,GAAG,OAAO,UAAS,YAC1D,+BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS,QAAQ,EAAE,UAAU,gBAAgB,eAAe,CAAC;AAAA,MAC7D,YAAW;AAAA;AAAA,EACb,CACF;AAEJ;;;AEvBO,IAAM,aAAa;AAAA,EACxB,gBAAgB;AAAA,IACd,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA,aAAa;AAAA,IACX,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,WAAW;AAAA,IACX,OAAO;AAAA,EACT;AAAA,EACA,WAAW;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AACF;;;ACzCO,IAAM,YAAY,MACvB,OAAO,WAAW,eAClB,OAAO,OAAO,aAAa,eAC3B,OAAO,OAAO,SAAS,kBAAkB;AAKpC,IAAM,wBAAwB,MACnC,UAAU,IAAK,OAAe,iBAAiB;AAK1C,IAAM,QAAQ,CAAC,UAAU;AAEzB,SAAS,QAAQ;AACtB,MAAI,MAAM;AAEV,MAAI,UAAU,GAAG;AACf,UAAM,EAAE,OAAO,SAAS,SAAS,QAAQ,WAAW,MAAM;AAAA,EAC5D;AACA,SAAO;AACT;AAEO,SAAS,SAAS;AACvB,MAAI,UAAU,GAAG;AACf,QAAI,UAAU,OAAO,YAAY,OAAO,SAAS,UAAU;AACzD,aACE,OAAO,SAAS,SAAS,SAAS,WAAW,KAC7C,OAAO,SAAS,SAAS,SAAS,SAAS;AAAA,IAE/C;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,WAAW;AACzB,SAAO,UAAU,UAAU,MAAM,iCAAiC;AACpE;;;AC1CA,IAAAC,iBAMO;AAEA,IAAM,wBAAoB,8BAAc,EAAE,OAAO,GAAG,QAAQ,EAAE,CAAC;AAQ/D,IAAM,qBAAqB,CAAC;AAAA,EACjC;AAAA,EACA;AACF,MAA+B;AAC7B,QAAM,MAAM,iBAAiB,OAAO,WAAW,cAAc,SAAS;AAEtE,QAAM,CAAC,MAAM,OAAO,QAAI,yBAAS;AAAA,IAC/B,OAAO,KAAK,cAAc;AAAA,IAC1B,QAAQ,KAAK,eAAe;AAAA,EAC9B,CAAC;AAED,QAAM,iBAAa,uBAAuB;AAE1C,gCAAU,MAAM;AACd,QAAI,CAAC,IAAK;AAEV,UAAM,eAAe,MAAM;AACzB,UAAI,WAAW,QAAS,cAAa,WAAW,OAAO;AACvD,iBAAW,UAAU,WAAW,MAAM;AACpC,cAAM,WAAW,IAAI;AACrB,cAAM,YAAY,IAAI;AACtB,gBAAQ,CAAC,SAAS;AAChB,cAAI,KAAK,UAAU,YAAY,KAAK,WAAW,UAAW,QAAO;AACjE,iBAAO,EAAE,OAAO,UAAU,QAAQ,UAAU;AAAA,QAC9C,CAAC;AAAA,MACH,GAAG,GAAG;AAAA,IACR;AAEA,QAAI,iBAAiB,UAAU,YAAY;AAC3C,WAAO,MAAM;AACX,UAAI,oBAAoB,UAAU,YAAY;AAC9C,UAAI,WAAW,QAAS,cAAa,WAAW,OAAO;AAAA,IACzD;AAAA,EACF,GAAG,CAAC,GAAG,CAAC;AAER,SACE,+BAAAC,QAAA,cAAC,kBAAkB,UAAlB,EAA2B,OAAO,QAChC,QACH;AAEJ;;;ACxDA,IAAAC,iBAA4C;AAErC,SAAS,YAGd;AACA,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,KAAK;AAC1C,QAAM,UAAM,uBAAU,IAAI;AAE1B,gCAAU,MAAM;AACd,UAAM,OAAO,IAAI;AACjB,QAAI,CAAC,KAAM;AAEX,UAAM,kBAAkB,MAAM,UAAU,IAAI;AAC5C,UAAM,gBAAgB,MAAM,UAAU,KAAK;AAC3C,UAAM,mBAAmB,MAAM,UAAU,IAAI;AAC7C,UAAM,iBAAiB,MAAM,UAAU,KAAK;AAE5C,SAAK,iBAAiB,aAAa,eAAe;AAClD,SAAK,iBAAiB,WAAW,aAAa;AAC9C,SAAK,iBAAiB,cAAc,aAAa;AACjD,SAAK,iBAAiB,cAAc,gBAAgB;AACpD,SAAK,iBAAiB,YAAY,cAAc;AAEhD,WAAO,MAAM;AACX,WAAK,oBAAoB,aAAa,eAAe;AACrD,WAAK,oBAAoB,WAAW,aAAa;AACjD,WAAK,oBAAoB,cAAc,aAAa;AACpD,WAAK,oBAAoB,cAAc,gBAAgB;AACvD,WAAK,oBAAoB,YAAY,cAAc;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,CAAC,KAAK,MAAM;AACrB;;;AClCA,IAAAC,iBAA4C;AAO5C,IAAM,gCAAwD,CAAC;AAExD,SAAS,gBACd,SAC+B;AAC/B,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,yBAAS,KAAK;AAC1D,QAAM,UAAM,uBAAU,IAAI;AAC1B,QAAM,EAAE,aAAa,IAAI,WAAW;AAEpC,gCAAU,MAAM;AACd,UAAM,MAAM,iBAAiB,OAAO,WAAW,cAAc,SAAS;AACtE,QAAI,CAAC,IAAK;AAEV,UAAM,MAAM,IAAI;AAEhB,UAAM,cAAc,CAAC,MAAkB;AACrC,UAAI,IAAI,WAAW,CAAC,IAAI,QAAQ,SAAS,EAAE,MAAc,GAAG;AAC1D,0BAAkB,IAAI;AAAA,MACxB,OAAO;AACL,0BAAkB,KAAK;AAAA,MACzB;AAAA,IACF;AAEA,QAAI,iBAAiB,aAAa,WAAW;AAC7C,WAAO,MAAM;AACX,UAAI,oBAAoB,aAAa,WAAW;AAAA,IAClD;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,SAAO,CAAC,KAAK,cAAc;AAC7B;;;ACrCA,IAAAC,iBAAyD;AA0CzD,IAAM,mCAA8D,CAAC;AAM9D,SAAS,mBACd,UAAqC,kCACX;AAC1B,QAAM;AAAA,IACJ,eAAe;AAAA,IACf,aAAa;AAAA,IACb,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB;AAAA,EACF,IAAI;AAEJ,QAAM,iBAAa,uBAAU,IAAI;AACjC,QAAM,CAAC,UAAU,WAAW,QAAI,yBAAiC,IAAI;AACrE,QAAM,uBAAmB,uBAA8B,IAAI;AAE3D,QAAM,wBAAoB,4BAAY,MAAM;AAC1C,UAAM,UAAU,WAAW;AAC3B,QAAI,CAAC,SAAS;AACZ;AAAA,QAAY,CAAC,oBACX,oBAAoB,OAAO,OAAO;AAAA,MACpC;AACA;AAAA,IACF;AAEA,UAAM,MAAM,gBAAgB,QAAQ,eAAe,eAAe;AAElE,UAAM,OAAO,QAAQ,sBAAsB;AAC3C,UAAM,iBAAiB,IAAI;AAC3B,UAAM,gBAAgB,IAAI;AAG1B,UAAM,iBAAiB,KAAK,MAAM,KAAK,SAAS;AAChD,UAAM,iBAAiB,KAAK,OAAO,KAAK,QAAQ;AAEhD,UAAM,mBACJ,iBAAiB,iBAAiB,IAAI,QAAQ;AAChD,UAAM,qBACJ,iBAAiB,gBAAgB,IAAI,SAAS;AAGhD,UAAM,aAAa,KAAK;AACxB,UAAM,aAAa,iBAAiB,KAAK;AACzC,UAAM,YAAY,KAAK;AACvB,UAAM,aAAa,gBAAgB,KAAK;AAExC,UAAM,gBAAgB,cAAc,aAAa,QAAQ;AACzD,UAAM,kBAAkB,aAAa,aAAa,SAAS;AAE3D,UAAM,cAA+B;AAAA,MACnC,UAAU,EAAE,UAAU,kBAAkB,YAAY,mBAAmB;AAAA,MACvE,OAAO,EAAE,UAAU,eAAe,YAAY,gBAAgB;AAAA,IAChE;AAEA,gBAAY,CAAC,oBAAoB;AAC/B,UACE,mBACA,gBAAgB,SAAS,aAAa,YAAY,SAAS,YAC3D,gBAAgB,SAAS,eACvB,YAAY,SAAS,cACvB,gBAAgB,MAAM,aAAa,YAAY,MAAM,YACrD,gBAAgB,MAAM,eAAe,YAAY,MAAM,YACvD;AACA,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,sBAAkB,4BAAY,MAAM;AACxC,QAAI,iBAAiB,SAAS;AAC5B,mBAAa,iBAAiB,OAAO;AAAA,IACvC;AACA,qBAAiB,UAAU,WAAW,MAAM;AAC1C,wBAAkB;AAAA,IACpB,GAAG,UAAU;AAAA,EACf,GAAG,CAAC,mBAAmB,UAAU,CAAC;AAElC,gCAAU,MAAM;AAEd,sBAAkB;AAElB,QAAI,CAAC,cAAc;AACjB,UAAI,iBAAiB,QAAS,cAAa,iBAAiB,OAAO;AACnE;AAAA,IACF;AAEA,UAAM,UAAU,WAAW;AAC3B,QAAI,CAAC,QAAS;AAEd,UAAM,MAAM,gBAAgB,QAAQ,eAAe,eAAe;AAClE,UAAM,UAAU;AAChB,UAAM,mBAAmB;AAGzB,UAAM,mBAAmC,CAAC;AAG1C,QAAI,cAAc;AAChB,cAAQ,iBAAiB,cAAc,gBAAgB;AACvD,cAAQ,iBAAiB,cAAc,gBAAgB;AACvD,uBAAiB,KAAK,MAAM;AAC1B,gBAAQ,oBAAoB,cAAc,gBAAgB;AAC1D,gBAAQ,oBAAoB,cAAc,gBAAgB;AAAA,MAC5D,CAAC;AAAA,IACH;AAGA,QAAI,eAAe;AACjB,UAAI,iBAAiB,UAAU,SAAS,EAAE,SAAS,KAAK,CAAC;AACzD,uBAAiB,KAAK,MAAM;AAC1B,YAAI,oBAAoB,UAAU,OAAO;AAAA,MAC3C,CAAC;AAAA,IACH;AAGA,QAAI,eAAe;AACjB,UAAI,iBAAiB,UAAU,OAAO;AACtC,uBAAiB,KAAK,MAAM;AAC1B,YAAI,oBAAoB,UAAU,OAAO;AAAA,MAC3C,CAAC;AAAA,IACH;AAEA,WAAO,MAAM;AACX,UAAI,iBAAiB,SAAS;AAC5B,qBAAa,iBAAiB,OAAO;AAAA,MACvC;AACA,uBAAiB,QAAQ,CAAC,YAAY,QAAQ,CAAC;AAAA,IACjD;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,2BAAuB,4BAAY,MAAM;AAC7C,sBAAkB;AAAA,EACpB,GAAG,CAAC,iBAAiB,CAAC;AAEtB,SAAO;AAAA,IACL,KAAK;AAAA,IACL;AAAA,IACA,gBAAgB;AAAA,EAClB;AACF;;;ACpMA,IAAAC,iBAA4C;AAErC,SAAS,WAGd;AACA,QAAM,CAAC,SAAS,UAAU,QAAI,yBAAS,KAAK;AAC5C,QAAM,UAAM,uBAAU,IAAI;AAE1B,gCAAU,MAAM;AACd,UAAM,OAAO,IAAI;AACjB,QAAI,CAAC,KAAM;AAEX,UAAM,cAAc,MAAM,WAAW,IAAI;AACzC,UAAM,aAAa,MAAM,WAAW,KAAK;AAEzC,SAAK,iBAAiB,SAAS,WAAW;AAC1C,SAAK,iBAAiB,QAAQ,UAAU;AAExC,WAAO,MAAM;AACX,WAAK,oBAAoB,SAAS,WAAW;AAC7C,WAAK,oBAAoB,QAAQ,UAAU;AAAA,IAC7C;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,CAAC,KAAK,OAAO;AACtB;;;AC1BA,IAAAC,iBAA4C;AAErC,SAAS,WAGd;AACA,QAAM,CAAC,OAAO,QAAQ,QAAI,yBAAS,KAAK;AACxC,QAAM,UAAM,uBAAU,IAAI;AAE1B,gCAAU,MAAM;AACd,UAAM,OAAO,IAAI;AACjB,QAAI,CAAC,KAAM;AAEX,UAAM,mBAAmB,MAAM,SAAS,IAAI;AAC5C,UAAM,mBAAmB,MAAM,SAAS,KAAK;AAE7C,SAAK,iBAAiB,cAAc,gBAAgB;AACpD,SAAK,iBAAiB,cAAc,gBAAgB;AAEpD,WAAO,MAAM;AACX,WAAK,oBAAoB,cAAc,gBAAgB;AACvD,WAAK,oBAAoB,cAAc,gBAAgB;AAAA,IACzD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,CAAC,KAAK,KAAK;AACpB;;;AC1BA,IAAAC,iBAAoC;AAE7B,SAAS,YAAY,WAA4B;AACtD,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,KAAK;AAElD,gCAAU,MAAM;AACd,UAAM,cAAc,CAAC,MAAqB;AACxC,UAAI,EAAE,QAAQ,UAAW,eAAc,IAAI;AAAA,IAC7C;AACA,UAAM,YAAY,CAAC,MAAqB;AACtC,UAAI,EAAE,QAAQ,UAAW,eAAc,KAAK;AAAA,IAC9C;AAEA,WAAO,iBAAiB,WAAW,WAAW;AAC9C,WAAO,iBAAiB,SAAS,SAAS;AAC1C,WAAO,MAAM;AACX,aAAO,oBAAoB,WAAW,WAAW;AACjD,aAAO,oBAAoB,SAAS,SAAS;AAAA,IAC/C;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,SAAO;AACT;;;ACtBA,IAAAC,iBAAkC;AAC3B,IAAM,WAAW,CAAC,aAAyB;AAChD,QAAM,kBAAc,uBAAO,QAAQ;AACnC,cAAY,UAAU;AAEtB,gCAAU,MAAM;AACd,gBAAY,QAAQ;AAAA,EACtB,GAAG,CAAC,CAAC;AACP;;;ACRA,IAAAC,iBAA4C;AAO5C,IAAM,4BAAgD,CAAC;AAEhD,SAAS,YACd,SAC+B;AAC/B,QAAM,UAAM,uBAAU,IAAI;AAC1B,QAAM,CAAC,YAAY,WAAW,QAAI,yBAAS,KAAK;AAChD,QAAM,EAAE,cAAc,GAAG,gBAAgB,IACvC,WAAW;AAEb,gCAAU,MAAM;AACd,UAAM,OAAO,IAAI;AACjB,QAAI,CAAC,KAAM;AAIX,UAAM,MAAM,gBAAgB,KAAK,eAAe,eAAe;AAC/D,UAAM,gBACJ,gBAAgB,SAAS,SACrB,gBAAgB,OAChB,eACE,IAAI,SAAS,kBACb;AAER,UAAM,WAAW,IAAI;AAAA,MACnB,CAAC,CAAC,KAAK,MAAM;AACX,oBAAY,MAAM,cAAc;AAAA,MAClC;AAAA,MACA,EAAE,GAAG,iBAAiB,MAAM,cAAc;AAAA,IAC5C;AAEA,aAAS,QAAQ,IAAI;AAErB,WAAO,MAAM;AACX,eAAS,WAAW;AAAA,IACtB;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,EAClB,CAAC;AAED,SAAO,CAAC,KAAK,UAAU;AACzB;;;ACnDA,IAAAC,iBAAqC;AAsB9B,IAAM,gBAAgB,MAAM;AACjC,QAAM,UAAU,qBAAqB;AACrC,QAAM,EAAE,mBAAmB,QAAQ,aAAa,QAAQ,IAAI;AAG5D,QAAM,SAAK;AAAA,IACT,CAAC,MAAe,QAAQ,CAAC,IAAI,QAAQ,CAAC,EAAE,SAAS,MAAM,IAAI,MAAM;AAAA,IACjE,CAAC,SAAS,MAAM;AAAA,EAClB;AAEA,aAAO;AAAA,IACL,OAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI;AAAA,IACN;AAAA,IACA,CAAC,SAAS,QAAQ,aAAa,EAAE;AAAA,EACnC;AACF;AAUO,IAAM,sBAAsB,MAAwB;AACzD,SAAO,2BAA2B;AACpC;AAaO,IAAM,gBAAgB,MAAM;AACjC,QAAM,UAAU,qBAAqB;AACrC,QAAM,EAAE,mBAAmB,QAAQ,aAAa,QAAQ,IAAI;AAE5D,QAAM,SAAK;AAAA,IACT,CAAC,MAAe,QAAQ,CAAC,IAAI,QAAQ,CAAC,EAAE,SAAS,MAAM,IAAI,MAAM;AAAA,IACjE,CAAC,SAAS,MAAM;AAAA,EAClB;AAEA,aAAO;AAAA,IACL,OAAO,EAAE,GAAG,SAAS,QAAQ,aAAa,IAAI,IAAI,GAAG;AAAA,IACrD,CAAC,SAAS,QAAQ,aAAa,EAAE;AAAA,EACnC;AACF;;;AChFA,IAAAC,iBAAoE;AAyDpE,IAAM,wBAA0C,CAAC,GAAG,CAAC;AACrD,IAAM,yBAA2C,CAAC;AAClD,IAAM,mCAA8D,CAAC;AACrE,IAAM,kCAA4D,CAAC;AAGnE,IAAM,WAAW,CAAC,QAA4B;AAC5C,SAAO,OAAO,IAAI,WAAW;AAC/B;AAEA,IAAM,sBAAsB,CAAC,OAAoB;AAC/C,SAAO,GAAG,eAAe,GAAG,gBAAgB,GAAG,cAAc,GAAG;AAClE;AAGA,IAAM,sBAAsB,CAC1B,YACqB;AACrB,MAAI,SAAS,OAAO,GAAG;AACrB,UAAM,MAAM,QAAQ,SAAS;AAC7B,WAAO;AAAA,MACL,cAAc,KAAK,IAAI,IAAI,cAAc,IAAI,YAAY;AAAA,MACzD,aAAa,KAAK,IAAI,IAAI,aAAa,IAAI,WAAW;AAAA,MACtD,cAAc,QAAQ;AAAA,MACtB,aAAa,QAAQ;AAAA,MACrB,WAAW,QAAQ;AAAA,MACnB,YAAY,QAAQ;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,cAAc,QAAQ;AAAA,IACtB,aAAa,QAAQ;AAAA,IACrB,cAAc,QAAQ;AAAA,IACtB,aAAa,QAAQ;AAAA,IACrB,WAAW,QAAQ;AAAA,IACnB,YAAY,QAAQ;AAAA,EACtB;AACF;AAGO,IAAM,YAAY,CAAC;AAAA,EACxB;AAAA,EACA,SAAS;AAAA,EACT,aAAa;AAAA,EACb,WAAW;AACb,IAAsB,2BAA2C;AAC/D,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,yBAAyB;AAAA,IACnE,GAAG;AAAA,IACH,GAAG;AAAA,IACH,WAAW;AAAA,IACX,WAAW;AAAA,IACX,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB,CAAC;AAED,QAAM,oBAAgB,uBAAe,CAAC;AACtC,QAAM,eAAW,uBAAe;AAChC,QAAM,cAAU,uBAAO,KAAK;AAG5B,QAAM,iBAAa,4BAAY,MAAM;AACnC,UAAM,WAAW,WAAW,WAAW;AAEvC,QAAI,YAAY,oBAAoB,mBAAmB;AACrD,YAAM,cAAc,SAAS,iBAAiB;AAC9C,YAAM,WACJ,SAAS,mBAAmB,aAAa,YAAY;AACvD,aAAO;AAAA,QACL;AAAA,QACA,cAAc;AAAA,QACd,gBAAgB;AAAA,MAClB;AAAA,IACF;AAEA,UAAM,iBAAiB,UAAU,iBAAiB;AAClD,UAAM,eACJ,gBAAgB,gBACf,OAAO,WAAW,cAAc,SAAS;AAE5C,WAAO,EAAE,UAAU,cAAc,eAAe;AAAA,EAClD,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,2BAAuB,4BAAY,MAAM;AAC7C,UAAM,EAAE,UAAU,aAAa,IAAI,WAAW;AAC9C,UAAM,uBAAuB,YAAY,oBAAoB,QAAQ;AACrE,UAAM,eAAe,uBACjB,WACA,gBAAgB;AAEpB,QAAI,CAAC,cAAc;AACjB,cAAQ,UAAU;AAClB;AAAA,IACF;AAEA,UAAM,MAAM,KAAK,IAAI;AAErB,QAAI,aAAa,KAAK,MAAM,cAAc,UAAU,YAAY;AAC9D,cAAQ,UAAU;AAClB;AAAA,IACF;AAEA,UAAM,aAAa,oBAAoB,YAAY;AAEnD,UAAM,IAAI,WAAW,aAAa,OAAO,CAAC;AAC1C,UAAM,IAAI,WAAW,YAAY,OAAO,CAAC;AACzC,UAAM,aAAa,WAAW,cAAc,WAAW;AACvD,UAAM,aAAa,WAAW,eAAe,WAAW;AAExD,UAAM,YACJ,cAAc,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC;AAC/D,UAAM,YACJ,cAAc,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC;AAI/D,QAAI,WAAW;AACf,QAAI,kBAAkB;AAEtB,QAAI,YAAY,aAAa,cAAc;AACzC,YAAM,OAAO,SAAS,sBAAsB;AAC5C,iBAAW,KAAK;AAEhB,YAAM,iBAAiB,WAAW;AAClC,YAAM,iBAAiB,KAAK,SAAS;AAErC,UAAI,iBAAiB,GAAG;AAGtB,cAAM,WAAW,CAAC,KAAK;AACvB,0BAAkB,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,WAAW,cAAc,CAAC;AAAA,MACtE,OAAO;AACL,0BAAkB;AAAA,MACpB;AAAA,IACF;AAEA,sBAAkB,CAAC,SAAS;AAC1B,UACE,KAAK,oBAAoB,mBACzB,KAAK,MAAM,KACX,KAAK,MAAM,KACX,KAAK,cAAc,WACnB;AACA,sBAAc,UAAU;AACxB,eAAO,EAAE,GAAG,GAAG,WAAW,WAAW,UAAU,gBAAgB;AAAA,MACjE;AACA,aAAO;AAAA,IACT,CAAC;AAED,YAAQ,UAAU;AAAA,EACpB,GAAG,CAAC,QAAQ,YAAY,UAAU,CAAC;AAEnC,QAAM,mBAAe,4BAAY,MAAM;AACrC,QAAI,SAAU;AAEd,QAAI,CAAC,QAAQ,SAAS;AACpB,eAAS,UAAU,sBAAsB,oBAAoB;AAC7D,cAAQ,UAAU;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,UAAU,oBAAoB,CAAC;AAEnC,gCAAU,MAAM;AACd,QAAI,SAAU;AAEd,UAAM,EAAE,UAAU,cAAc,eAAe,IAAI,WAAW;AAC9D,UAAM,uBAAuB,YAAY,oBAAoB,QAAQ;AACrE,UAAM,eAAe,uBACjB,WACA,gBAAgB;AAEpB,QAAI,CAAC,aAAc;AAGnB,yBAAqB;AAErB,UAAM,UAAU,EAAE,SAAS,KAAK;AAEhC,iBAAa,iBAAiB,UAAU,cAAc,OAAO;AAE7D,QAAI,cAAc;AAChB,mBAAa,iBAAiB,UAAU,cAAc,OAAO;AAAA,IAC/D;AAGA,QAAI,gBAAgB,gBAAgB;AAClC,qBAAe,iBAAiB,UAAU,cAAc,OAAO;AAAA,IACjE;AAEA,WAAO,MAAM;AACX,mBAAa,oBAAoB,UAAU,YAAY;AACvD,UAAI,cAAc;AAChB,qBAAa,oBAAoB,UAAU,YAAY;AAAA,MACzD;AACA,UAAI,gBAAgB,gBAAgB;AAClC,uBAAe,oBAAoB,UAAU,YAAY;AAAA,MAC3D;AACA,UAAI,SAAS,SAAS;AACpB,6BAAqB,SAAS,OAAO;AAAA,MACvC;AACA,cAAQ,UAAU;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,cAAc,UAAU,YAAY,oBAAoB,CAAC;AAE7D,SAAO;AACT;AAGO,IAAM,qBAAqB,CAChC,KACA,UAAqC,qCAClC;AACH,QAAM,CAAC,UAAU,WAAW,QAAI,yBAAS,KAAK;AAC9C,QAAM,CAACC,WAAU,WAAW,QAAI,yBAAS,CAAC;AAE1C,gCAAU,MAAM;AACd,UAAM,UAAU,IAAI;AACpB,QAAI,CAAC,QAAS;AAGd,UAAM,gBAAgB,QAAQ,eAAe;AAC7C,UAAM,eAAe,QAAQ,gBAAgB;AAG7C,QAAI,CAAC,aAAc;AAKnB,UAAM,gBAAiB,aACpB;AACH,QAAI,CAAC,cAAe;AAOpB,UAAM,gBAAgB,QAAQ,SAAS,SAAY,QAAQ,OAAO;AAElE,UAAM,WAAW,IAAI;AAAA,MACnB,CAAC,YAAyC;AACxC,cAAM,QAAQ,QAAQ,CAAC;AACvB,oBAAY,MAAM,cAAc;AAChC,oBAAY,MAAM,iBAAiB;AACnC,YAAI,QAAQ;AACV,kBAAQ;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,MACJ;AAAA,MACA;AAAA,QACE,WAAW,QAAQ,aAAa;AAAA,QAChC,YAAY,QAAQ,cAAc;AAAA,QAClC,MAAM;AAAA,MACR;AAAA,IACF;AAEA,aAAS,QAAQ,OAAO;AACxB,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG;AAAA,IACD;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV,CAAC;AAED,SAAO,EAAE,UAAU,UAAAA,UAAS;AAC9B;AAGO,IAAM,kBAAkB,CAAC,iBAA0B;AACxD,aAAO;AAAA,IACL,CAAC,SAA6B,SAAS,MAAM;AAC3C,UAAI,CAAC,QAAS;AAEd,UAAI;AACF,cAAM,MACJ,gBAAgB,QAAQ,eAAe,eAAe;AACxD,cAAM,MACJ,QAAQ,sBAAsB,EAAE,OAC/B,IAAI,WAAW,IAAI,eACpB;AAEF,YAAI,oBAAoB,IAAI,SAAS,gBAAgB,OAAO;AAC1D,cAAI,SAAS,EAAE,KAAK,UAAU,SAAS,CAAC;AAAA,QAC1C,OAAO;AAEL,cAAI,SAAS,GAAG,GAAG;AAAA,QACrB;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,+BAA+B,KAAK;AAAA,MACpD;AAAA,IACF;AAAA,IACA,CAAC,YAAY;AAAA,EACf;AACF;AAGO,IAAM,oBAAoB,CAC/B,UACA,UAAoC,oCACjC;AACH,QAAM,CAAC,UAAU,WAAW,QAAI,yBAAgC,IAAI;AACpE,QAAM,kBAAc,uBAAO,QAAQ;AACnC,QAAM,iBAAa,uBAAuB;AAE1C,gCAAU,MAAM;AACd,gBAAY,UAAU;AAAA,EACxB,GAAG,CAAC,QAAQ,CAAC;AAEb,gCAAU,MAAM;AACd,QAAI,CAAC,YAAY,QAAQ,UAAW;AAEpC,UAAM,qBAAqB,CAAC,YAAyC;AACnE,UAAI,QAAQ,CAAC,EAAE,gBAAgB;AAC7B,YAAI,QAAQ,YAAY;AACtB,cAAI,WAAW,SAAS;AACtB,yBAAa,WAAW,OAAO;AAAA,UACjC;AACA,qBAAW,UAAU;AAAA,YACnB,YAAY;AAAA,YACZ,QAAQ;AAAA,UACV;AAAA,QACF,OAAO;AACL,sBAAY,QAAQ;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,IAAI,qBAAqB,oBAAoB;AAAA,MAC5D,WAAW,QAAQ,aAAa;AAAA,MAChC,MAAM,QAAQ,QAAQ;AAAA,MACtB,YAAY,QAAQ,cAAc;AAAA,IACpC,CAAC;AAED,aAAS,QAAQ,QAAQ;AAEzB,WAAO,MAAM;AACX,eAAS,WAAW;AACpB,UAAI,WAAW,SAAS;AACtB,qBAAa,WAAW,OAAO;AAAA,MACjC;AAAA,IACF;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV,CAAC;AAED,SAAO,EAAE,aAAa,YAAY;AACpC;AAEO,IAAM,qBAAqB,CAAC,YAAY,GAAG,iBAA0B;AAC1E,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAAwB,IAAI;AAC1E,QAAM,kBAAc,uBAAO,CAAC;AAC5B,QAAM,oBAAgB,uBAAsB,IAAI;AAChD,QAAM,qBAAiB,uBAAe;AACtC,QAAM,cAAU,uBAAO,KAAK;AAE5B,QAAM,sBAAkB,4BAAY,MAAM;AACxC,UAAM,MAAM,iBAAiB,OAAO,WAAW,cAAc,SAAS;AACtE,QAAI,CAAC,IAAK;AAEV,UAAM,MAAM,IAAI,SAAS;AACzB,UAAM,UAAU,IAAI,WAAW,IAAI;AACnC,UAAM,YAAY,UAAU,YAAY,UAAU,SAAS;AAC3D,UAAM,cAAc,KAAK,IAAI,UAAU,YAAY,OAAO;AAG1D,UAAM,aAAa,IAAI,cAAc,WAAW,IAAI,eAAe;AAGnE,QAAI,cAAc,aAAc,cAAc,UAAU,YAAa;AACnE,UAAI,cAAc,cAAc,SAAS;AACvC,sBAAc,UAAU;AACxB,2BAAmB,SAAS;AAAA,MAC9B;AAAA,IACF;AAGA,gBAAY,UAAU,KAAK,IAAI,SAAS,CAAC;AACzC,YAAQ,UAAU;AAAA,EACpB,GAAG,CAAC,WAAW,YAAY,CAAC;AAE5B,gCAAU,MAAM;AACd,UAAM,MAAM,iBAAiB,OAAO,WAAW,cAAc,SAAS;AACtE,QAAI,CAAC,IAAK;AAEV,UAAM,eAAe,MAAM;AACzB,UAAI,CAAC,QAAQ,SAAS;AACpB,uBAAe,UAAU,sBAAsB,MAAM;AACnD,0BAAgB;AAChB,kBAAQ,UAAU;AAAA,QACpB,CAAC;AACD,gBAAQ,UAAU;AAAA,MACpB;AAAA,IACF;AAEA,QAAI,iBAAiB,UAAU,cAAc,EAAE,SAAS,KAAK,CAAC;AAC9D,WAAO,MAAM;AACX,UAAI,oBAAoB,UAAU,YAAY;AAC9C,UAAI,eAAe,SAAS;AAC1B,6BAAqB,eAAe,OAAO;AAAA,MAC7C;AAAA,IACF;AAAA,EACF,GAAG,CAAC,iBAAiB,YAAY,CAAC;AAElC,SAAO;AACT;;;ACtdA,IAAAC,iBAA2B;AAGpB,IAAM,gBAAgB,UAAM,2BAAW,iBAAiB;;;ACH/D,IAAAC,iBAA4C;AAQ5C,IAAM,0BAAyC,CAAC;AAEzC,SAAS,UAAU,SAAyB;AACjD,QAAM;AAAA,IACJ,cAAc;AAAA,IACd;AAAA,IACA,GAAG;AAAA,EACL,IAAI,WAAW;AACf,QAAM,UAAM,uBAAoB,IAAI;AACpC,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,KAAK;AAE1C,gCAAU,MAAM;AACd,UAAM,UAAU,IAAI;AACpB,QAAI,CAAC,QAAS;AAId,UAAM,MAAM,gBAAgB,QAAQ,eAAe,eAAe;AAClE,UAAM,gBACJ,gBAAgB,SAAS,SACrB,gBAAgB,OAChB,eACE,IAAI,SAAS,kBACb;AAER,UAAM,WAAW,IAAI;AAAA,MACnB,CAAC,CAAC,KAAK,MAAM;AACX,YAAI,MAAM,gBAAgB;AACxB,oBAAU,IAAI;AAGd,cAAI,aAAa;AACf,qBAAS,WAAW;AAAA,UACtB;AAAA,QACF,WAAW,CAAC,aAAa;AAEvB,oBAAU,KAAK;AAAA,QACjB;AAAA,MACF;AAAA,MACA,EAAE,GAAG,iBAAiB,MAAM,cAAc;AAAA,IAC5C;AAEA,aAAS,QAAQ,OAAO;AAExB,WAAO,MAAM;AACX,eAAS,WAAW;AAAA,IACtB;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,EAClB,CAAC;AAED,SAAO,EAAE,KAAK,OAAO;AACvB;;;AChEA,IAAAC,iBAA4C;AAiBrC,SAAS,gBAAgB,WAA+C;AAC7E,QAAM,EAAE,QAAQ,IAAI,iBAAiB;AACrC,QAAM,uBAAmB,uBAAwB,IAAI;AAErD,gCAAU,MAAM;AACd,UAAM,SAAS,UAAU;AACzB,QAAI,CAAC,OAAQ;AAEb,UAAM,mBAAmB,MAAM;AAC7B,YAAM,YACJ,OAAO,mBAAmB,OAAO,eAAe;AAClD,UAAI,CAAC,UAAW;AAGhB,UAAI,iBAAiB,YAAY,WAAW;AAC1C,gBAAQ,YAAY,SAAS;AAC7B,yBAAiB,UAAU;AAAA,MAC7B;AAAA,IACF;AAGA,QAAI,OAAO,iBAAiB;AAC1B,uBAAiB;AAAA,IACnB;AAGA,WAAO,iBAAiB,QAAQ,gBAAgB;AAEhD,WAAO,MAAM;AACX,aAAO,oBAAoB,QAAQ,gBAAgB;AAGnD,UAAI,iBAAiB,SAAS;AAC5B,gBAAQ,eAAe,iBAAiB,OAAO;AAC/C,yBAAiB,UAAU;AAAA,MAC7B;AAAA,IACF;AAAA,EACF,GAAG,CAAC,SAAS,SAAS,CAAC;AACzB;AAsBO,SAAS,UAAU,WAA+C;AACvE,QAAM,CAAC,cAAc,eAAe,QAAI,yBAAwB,IAAI;AACpE,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,yBAA0B,IAAI;AAC1E,QAAM,CAAC,UAAU,WAAW,QAAI,yBAAS,KAAK;AAG9C,kBAAgB,SAAS;AAEzB,gCAAU,MAAM;AACd,UAAM,SAAS,UAAU;AACzB,QAAI,CAAC,OAAQ;AAEb,UAAM,cAAc,MAAM;AACxB,YAAM,MAAM,OAAO;AACnB,YAAM,MAAM,KAAK,YAAY,OAAO;AAEpC,UAAI,OAAO,KAAK;AACd,wBAAgB,GAAG;AACnB,0BAAkB,GAAG;AACrB,oBAAY,IAAI;AAAA,MAClB;AAAA,IACF;AAGA,gBAAY;AAGZ,WAAO,iBAAiB,QAAQ,WAAW;AAE3C,WAAO,MAAM;AACX,aAAO,oBAAoB,QAAQ,WAAW;AAAA,IAChD;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACzFO,IAAM,sBAAsB,CACjC,WACmB;AACnB,QAAM,EAAE,WAAW,SAAS,CAAC,GAAG,QAAQ,QAAQ,IAAI;AAEpD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU,OAAO,YAAY;AAAA,IAC7B,gBAAgB,OAAO,kBAAkB;AAAA,IACzC,UAAU,OAAO,YAAY;AAAA,IAC7B,OAAO,OAAO;AAAA,IACd,UAAU;AAAA;AAAA,IACV;AAAA,EACF;AACF;AAYO,IAAM,gBAAgB,CAAC,WAAgD;AAC5E,SAAO,oBAAoB,MAAM;AACnC;AASO,IAAM,eAAe,CAC1B,UAAgC,CAAC,MAEjC,cAAc;AAAA,EACZ,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,EAAE;AAAA,EACtD,QAAQ;AAAA,IACN,UAAU,QAAQ,YAAY;AAAA,IAC9B,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,OAAO,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO,QAAQ,SAAS;AAC1B,CAAC;AAQI,IAAM,gBAAgB,CAC3B,UAAgC,CAAC,MAEjC,cAAc;AAAA,EACZ,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,EAAE;AAAA,EACtD,QAAQ;AAAA,IACN,UAAU,QAAQ,YAAY;AAAA,IAC9B,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,OAAO,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO,QAAQ,SAAS;AAC1B,CAAC;AASI,IAAM,gBAAgB,CAC3B,UAAiC,CAAC,MAElC,cAAc;AAAA,EACZ,WAAW;AAAA,IACT,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,WAAW,cAAc,QAAQ,YAAY,MAAM;AAAA,IACrD;AAAA,IACA,IAAI,EAAE,SAAS,GAAG,WAAW,gBAAgB;AAAA,EAC/C;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,QAAQ,YAAY;AAAA,IAC9B,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,OAAO,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO,QAAQ,SAAS;AAC1B,CAAC;AAQI,IAAM,kBAAkB,CAC7B,UAAiC,CAAC,MAElC,cAAc;AAAA,EACZ,WAAW;AAAA,IACT,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,WAAW,eAAe,QAAQ,YAAY,MAAM;AAAA,IACtD;AAAA,IACA,IAAI,EAAE,SAAS,GAAG,WAAW,gBAAgB;AAAA,EAC/C;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,QAAQ,YAAY;AAAA,IAC9B,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,OAAO,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO,QAAQ,SAAS;AAC1B,CAAC;AAQI,IAAM,kBAAkB,CAC7B,UAAiC,CAAC,MAElC,cAAc;AAAA,EACZ,WAAW;AAAA,IACT,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,WAAW,eAAe,QAAQ,YAAY,MAAM;AAAA,IACtD;AAAA,IACA,IAAI,EAAE,SAAS,GAAG,WAAW,gBAAgB;AAAA,EAC/C;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,QAAQ,YAAY;AAAA,IAC9B,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,OAAO,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO,QAAQ,SAAS;AAC1B,CAAC;AAQI,IAAM,mBAAmB,CAC9B,UAAiC,CAAC,MAElC,cAAc;AAAA,EACZ,WAAW;AAAA,IACT,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,WAAW,cAAc,QAAQ,YAAY,MAAM;AAAA,IACrD;AAAA,IACA,IAAI,EAAE,SAAS,GAAG,WAAW,gBAAgB;AAAA,EAC/C;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,QAAQ,YAAY;AAAA,IAC9B,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,OAAO,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO,QAAQ,SAAS;AAC1B,CAAC;AASI,IAAM,gBAAgB,CAC3B,UAAiC,CAAC,MAElC,cAAc;AAAA,EACZ,WAAW;AAAA,IACT,MAAM,EAAE,SAAS,GAAG,WAAW,SAAS,QAAQ,SAAS,GAAG,IAAI;AAAA,IAChE,IAAI,EAAE,SAAS,GAAG,WAAW,WAAW;AAAA,EAC1C;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,QAAQ,YAAY;AAAA,IAC9B,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,OAAO,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO,QAAQ,SAAS;AAC1B,CAAC;AAQI,IAAM,kBAAkB,CAC7B,UAAiC,CAAC,MAElC,cAAc;AAAA,EACZ,WAAW;AAAA,IACT,MAAM,EAAE,SAAS,GAAG,WAAW,SAAS,QAAQ,SAAS,GAAG,IAAI;AAAA,IAChE,IAAI,EAAE,SAAS,GAAG,WAAW,WAAW;AAAA,EAC1C;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,QAAQ,YAAY;AAAA,IAC9B,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,OAAO,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO,QAAQ,SAAS;AAC1B,CAAC;AASI,IAAM,eAAe,CAC1B,UAAgC,CAAC,MAEjC,cAAc;AAAA,EACZ,WAAW;AAAA,IACT,MAAM,EAAE,SAAS,GAAG,QAAQ,QAAQ,QAAQ,QAAQ,MAAM,IAAI;AAAA,IAC9D,IAAI,EAAE,SAAS,GAAG,QAAQ,UAAU;AAAA,EACtC;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,QAAQ,YAAY;AAAA,IAC9B,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,OAAO,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO,QAAQ,SAAS;AAC1B,CAAC;AAQI,IAAM,gBAAgB,CAC3B,UAAgC,CAAC,MAEjC,cAAc;AAAA,EACZ,WAAW;AAAA,IACT,MAAM,EAAE,SAAS,GAAG,QAAQ,UAAU;AAAA,IACtC,IAAI,EAAE,SAAS,GAAG,QAAQ,QAAQ,QAAQ,QAAQ,MAAM,IAAI;AAAA,EAC9D;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,QAAQ,YAAY;AAAA,IAC9B,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,OAAO,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO,QAAQ,SAAS;AAC1B,CAAC;AASI,IAAM,iBAAiB,CAC5B,UAAkC,CAAC,MAEnC,cAAc;AAAA,EACZ,WAAW;AAAA,IACT,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,WAAW,UAAU,QAAQ,SAAS,QAAQ;AAAA,IAChD;AAAA,IACA,IAAI,EAAE,SAAS,GAAG,WAAW,qBAAqB;AAAA,EACpD;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,QAAQ,YAAY;AAAA,IAC9B,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,OAAO,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO,QAAQ,SAAS;AAC1B,CAAC;AAQI,IAAM,eAAe,CAC1B,UAAgC,CAAC,MAEjC,cAAc;AAAA,EACZ,WAAW;AAAA,IACT,MAAM,EAAE,UAAU,oBAAoB;AAAA,IACtC,IAAI,EAAE,UAAU,iBAAiB;AAAA,EACnC;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,QAAQ,YAAY;AAAA,IAC9B,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,OAAO,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO,QAAQ,SAAS;AAC1B,CAAC;AAQI,IAAM,cAAc,CACzB,UAAgC,CAAC,MAEjC,cAAc;AAAA,EACZ,WAAW;AAAA,IACT,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,IAAI;AAAA,MACF,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,QAAQ,YAAY;AAAA,IAC9B,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,OAAO,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO,QAAQ,SAAS;AAC1B,CAAC;AAQI,IAAM,cAAc,CACzB,UAAgC,CAAC,MAEjC,cAAc;AAAA,EACZ,WAAW;AAAA,IACT,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,IAAI;AAAA,MACF,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,UAAU,QAAQ,YAAY;AAAA,IAC9B,gBAAgB,QAAQ,kBAAkB;AAAA,IAC1C,OAAO,QAAQ;AAAA,EACjB;AAAA,EACA,OAAO,QAAQ,SAAS;AAC1B,CAAC;AAMI,IAAM,uBAA4D;AAAA,EACvE,QAAQ;AAAA,IACN,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,EAAE;AAAA,IACtD,QAAQ,EAAE,UAAU,QAAQ,gBAAgB,OAAO;AAAA,IACnD,OAAO;AAAA,EACT;AAAA,EAEA,SAAS;AAAA,IACP,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,EAAE;AAAA,IACtD,QAAQ,EAAE,UAAU,QAAQ,gBAAgB,OAAO;AAAA,IACnD,OAAO;AAAA,EACT;AAAA,EAEA,SAAS;AAAA,IACP,WAAW;AAAA,MACT,MAAM,EAAE,SAAS,GAAG,WAAW,mBAAmB;AAAA,MAClD,IAAI,EAAE,SAAS,GAAG,WAAW,gBAAgB;AAAA,IAC/C;AAAA,IACA,QAAQ,EAAE,UAAU,QAAQ,gBAAgB,WAAW;AAAA,IACvD,OAAO;AAAA,EACT;AAAA,EAEA,WAAW;AAAA,IACT,WAAW;AAAA,MACT,MAAM,EAAE,SAAS,GAAG,WAAW,oBAAoB;AAAA,MACnD,IAAI,EAAE,SAAS,GAAG,WAAW,gBAAgB;AAAA,IAC/C;AAAA,IACA,QAAQ,EAAE,UAAU,QAAQ,gBAAgB,WAAW;AAAA,IACvD,OAAO;AAAA,EACT;AAAA,EAEA,SAAS;AAAA,IACP,WAAW;AAAA,MACT,MAAM,EAAE,SAAS,GAAG,WAAW,aAAa;AAAA,MAC5C,IAAI,EAAE,SAAS,GAAG,WAAW,WAAW;AAAA,IAC1C;AAAA,IACA,QAAQ,EAAE,UAAU,QAAQ,gBAAgB,OAAO;AAAA,IACnD,OAAO;AAAA,EACT;AAAA,EAEA,QAAQ;AAAA,IACN,WAAW;AAAA,MACT,MAAM,EAAE,SAAS,GAAG,QAAQ,aAAa;AAAA,MACzC,IAAI,EAAE,SAAS,GAAG,QAAQ,UAAU;AAAA,IACtC;AAAA,IACA,QAAQ,EAAE,UAAU,QAAQ,gBAAgB,WAAW;AAAA,IACvD,OAAO;AAAA,EACT;AAAA,EAEA,QAAQ;AAAA,IACN,WAAW;AAAA,MACT,MAAM,EAAE,UAAU,oBAAoB;AAAA,MACtC,IAAI,EAAE,UAAU,iBAAiB;AAAA,IACnC;AAAA,IACA,QAAQ,EAAE,UAAU,QAAQ,gBAAgB,WAAW;AAAA,IACvD,OAAO;AAAA,EACT;AACF;","names":["import_react","import_react","themeKey","React","import_react","React","import_react","hyphenate","keyframesName","hash","propertyShorthand","document","cssProperties","context","Color","React","import_react","React","THEME_PREFIX","React","React","import_react","React","import_react","import_react","React","React","import_react","React","import_react","React","import_react","React","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_react","import_react","progress","import_react","import_react","import_react"]}
|