{"version":3,"sources":["../src/index.ts","../src/icon.tsx"],"sourcesContent":["\"use client\";\r\n// Auto-load base CSS so consumers don't need a separate import\r\nimport './icon.css';\r\nexport { Icon } from './icon';\r\nexport type { IconProps, IconVariant, IconKit } from './icon';\r\n","\"use client\";\r\nimport * as React from 'react';\r\nimport * as LucideIcons from 'lucide-react';\r\nimport * as LucideLabIcons from '@lucide/lab';\r\nimport { createLucideIcon } from 'lucide-react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport * as FaBrands from '@fortawesome/free-brands-svg-icons';\r\nimport { motion, useReducedMotion } from 'framer-motion';\r\n\r\nexport type IconVariant = 'default' | 'circle' | 'circleFilled';\r\nexport type IconKit = 'lucide' | 'lucide-lab' | 'fa-brands';\r\n\r\nexport interface IconProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'color'> {\r\n  name: string;\r\n  kit?: IconKit;\r\n  size?: number;\r\n  strokeWidth?: number;\r\n  /** Optional expliziter Rahmen (Border) für circle Varianten; überschreibt Auto-Berechnung */\r\n  circleBorderWidth?: number;\r\n  color?: string;\r\n  variant?: IconVariant;\r\n  className?: string;\r\n  iconClassName?: string;\r\n  /** Accessible text label. If provided, wrapper will get role=\"img\" & aria-label. */\r\n  ariaLabel?: string;\r\n  /** Mark icon as decorative; adds aria-hidden unless ariaLabel is provided. */\r\n  decorative?: boolean;\r\n  /** Fallback content when icon name cannot be resolved */\r\n  fallback?: React.ReactNode;\r\n  circleColor?: string;\r\n  circleFilledColor?: string;\r\n  animation?: 'spin' | 'pulse' | 'bounce' | 'wiggle' | 'float' | 'draw' | 'scale' | 'lift';\r\n  hoverAnimation?: 'scale' | 'lift' | 'rotate' | 'wiggle' | 'pulse';\r\n  repeat?: number | 'infinite';\r\n  animationDuration?: number;\r\n  animationDelay?: number;\r\n  ease?: any;\r\n  draw?: boolean;\r\n  drawDuration?: number;\r\n  drawDelay?: number;\r\n  drawEasing?: string;\r\n  disableAnimations?: boolean;\r\n  debugAnimations?: boolean;\r\n  respectReducedMotion?: boolean;\r\n  forceAnimations?: boolean;\r\n  /** Optional external trigger ID: animation only runs while any element with data-icon-trigger=triggerId is hovered */\r\n  triggerId?: string;\r\n}\r\n\r\nfunction normalize(name: string) {\r\n  return name\r\n    .replace(/[-_ ]+(.)/g, (_, c: string) => c.toUpperCase())\r\n    .replace(/^(.)/, (c) => c.toUpperCase());\r\n}\r\n\r\nconst labCache = new Map<string, React.ComponentType<any>>();\r\n\r\nfunction resolveLucide(name: string, lab = false) {\r\n  const normalizedPascal = normalize(name);\r\n  if (!lab) {\r\n    return (LucideIcons as Record<string, any>)[normalizedPascal] ?? null;\r\n  }\r\n  const attempts: string[] = [];\r\n  const pushUnique = (k: string) => { if (!attempts.includes(k)) attempts.push(k); };\r\n  pushUnique(normalizedPascal);\r\n  pushUnique(normalizedPascal.charAt(0).toLowerCase() + normalizedPascal.slice(1));\r\n  pushUnique(name);\r\n  pushUnique(name.toLowerCase());\r\n  pushUnique(name.replace(/[-_ ]+/g, ''));\r\n  for (let i = 0; i < attempts.length; i++) {\r\n    const key = attempts[i];\r\n    if (labCache.has(key)) return labCache.get(key)!;\r\n    const raw = (LucideLabIcons as Record<string, any>)[key];\r\n    if (!raw) continue;\r\n    const iconNode = Array.isArray(raw) ? raw : raw.iconNode;\r\n    if (!iconNode) continue;\r\n    const Comp = createLucideIcon(normalizedPascal, iconNode as any);\r\n    labCache.set(key, Comp);\r\n    return Comp;\r\n  }\r\n  return null;\r\n}\r\n\r\nfunction resolveFaBrands(name: string) {\r\n  const pascal = normalize(name);\r\n  const key = `fa${pascal}`;\r\n  return (FaBrands as Record<string, any>)[key] ?? null;\r\n}\r\n\r\nexport const Icon: React.FC<IconProps> = ({\r\n  name,\r\n  kit,\r\n  size = 20,\r\n  strokeWidth = 2,\r\n  circleBorderWidth,\r\n  color,\r\n  variant = 'default',\r\n  className,\r\n  iconClassName,\r\n  ariaLabel,\r\n  decorative,\r\n  fallback,\r\n  circleColor,\r\n  circleFilledColor,\r\n  animation,\r\n  hoverAnimation,\r\n  repeat = 'infinite',\r\n  animationDuration = 1.5,\r\n  animationDelay = 0,\r\n  ease = undefined,\r\n  draw,\r\n  drawDuration = 1.2,\r\n  drawDelay = 0,\r\n  drawEasing = 'ease',\r\n  disableAnimations = false,\r\n  debugAnimations = false,\r\n  respectReducedMotion = true,\r\n  forceAnimations = false,\r\n  triggerId,\r\n  style,\r\n  ...rest\r\n}) => {\r\n  const IconComp = React.useMemo(() => {\r\n    const effectiveKit: IconKit = kit || 'lucide';\r\n    switch (effectiveKit) {\r\n      case 'lucide':\r\n        return resolveLucide(name, false);\r\n      case 'lucide-lab':\r\n        return resolveLucide(name, true);\r\n      case 'fa-brands':\r\n        return resolveFaBrands(name);\r\n      default:\r\n        return null;\r\n    }\r\n  }, [name, kit]);\r\n\r\n  if (!IconComp) {\r\n    if (process.env.NODE_ENV !== 'production') {\r\n      console.warn(`[Icon] Unknown icon: name=\"${name}\" kit=\"${kit || 'lucide'}\"`);\r\n    }\r\n    if (fallback) {\r\n      return (\r\n        <span\r\n          className={['elunar-icon', className].filter(Boolean).join(' ')}\r\n          data-missing-icon={name}\r\n          aria-hidden={decorative && !ariaLabel ? true : undefined}\r\n          role={ariaLabel ? 'img' : undefined}\r\n          aria-label={ariaLabel}\r\n          {...rest}\r\n        >{fallback}</span>\r\n      );\r\n    }\r\n    return null;\r\n  }\r\n\r\n  // Stroke clamped for consistency across sizes\r\n  const iconStroke = Math.min(3, Math.max(1, strokeWidth));\r\n  const isCircleVariant = (variant === 'circle' || variant === 'circleFilled');\r\n  const BASE_RING_PCT = 7;       // base ring thickness (% of diameter) (increased for more prominent donut)\r\n  const BASE_PADDING_PCT = 12;   // inner spacing between ring and icon box\r\n  const BASE_CIRCLE_STROKE_REF = 2;\r\n  let ringPct = circleBorderWidth != null\r\n    ? (circleBorderWidth / (size || 1)) * 100\r\n    : BASE_RING_PCT * (iconStroke / BASE_CIRCLE_STROKE_REF);\r\n  ringPct = Math.max(4.5, Math.min(20, ringPct));\r\n  const maxRingForContent = 50 - (BASE_PADDING_PCT + 4); // mind. Iconradius 4 erhalten\r\n  ringPct = Math.min(ringPct, maxRingForContent);\r\n  const innerRadius = 50 - ringPct; // Innenkante Ring\r\n\r\n  // Gap between ring and icon scales with ring thickness + stroke (more generous for extra spacing)\r\n  const gapPct = (ringPct * 0.25) + (iconStroke * 0.45);\r\n  const effectiveGapPct = Math.min(innerRadius, gapPct); // nicht größer als innerRadius\r\n\r\n  function hexToLuma(hex?: string) {\r\n    if (!hex) return 0;\r\n    let h = hex.trim();\r\n    if (h.startsWith('#')) h = h.slice(1);\r\n    if (h.length === 3) {\r\n      h = h.split('').map(c => c + c).join('');\r\n    }\r\n    if (h.length !== 6) return 0;\r\n    const r = parseInt(h.slice(0,2),16);\r\n    const g = parseInt(h.slice(2,4),16);\r\n    const b = parseInt(h.slice(4,6),16);\r\n    return 0.2126*r + 0.7152*g + 0.0722*b;\r\n  }\r\n\r\n  const effectiveFilledBg = circleFilledColor || color;\r\n  const effectiveOutlineBorder = circleColor || color;\r\n\r\n  const luma = hexToLuma(effectiveFilledBg || effectiveOutlineBorder);\r\n  const needsDarkText = luma > 180;\r\n  const effectiveIconColor = variant === 'circleFilled'\r\n    ? (circleFilledColor\r\n        ? (needsDarkText ? '#111' : '#fff')\r\n        : (color || circleColor)\r\n      )\r\n    : (color || circleColor);\r\n\r\n  const hasExplicitFilled = !!effectiveFilledBg;\r\n  const circleBg = variant === 'circleFilled' && hasExplicitFilled ? effectiveFilledBg : undefined;\r\n  const circleBorderColor = effectiveOutlineBorder || effectiveFilledBg || color;\r\n  const circleTextColor = effectiveIconColor;\r\n\r\n  const variantClasses: Record<IconVariant, string> = {\r\n    default: '',\r\n    circle: 'elunar-icon--circle',\r\n    circleFilled: 'elunar-icon--circleFilled'\r\n  };\r\n\r\n  const outerSizeStyle = isCircleVariant ? { width: `${size}px`, height: `${size}px` } : {};\r\n  const SCALE_FACTOR = 0.75; // slightly smaller inner glyph for more breathing room\r\n  let innerSize = !isCircleVariant\r\n    ? size\r\n    : ((innerRadius - effectiveGapPct) / 50) * size * SCALE_FACTOR;\r\n  // Verhindere Subpixel-Jitter: runde auf .5 Schritte\r\n  innerSize = Math.max(4, Math.round(innerSize * 2) / 2);\r\n  const pxInner = `${innerSize}px`;\r\n  // (pxInner bereits oben berechnet)\r\n\r\n  const prefersReducedMotion = useReducedMotion();\r\n  const effectiveDisable = disableAnimations || (respectReducedMotion && prefersReducedMotion && !forceAnimations);\r\n  const wantsDraw = (draw || animation === 'draw');\r\n  const isDrawCapable = !effectiveDisable && wantsDraw;\r\n  const enableBaseAnimation = !effectiveDisable && animation && animation !== 'draw';\r\n\r\n  const motionProps: any = React.useMemo(() => {\r\n    if (!enableBaseAnimation && !hoverAnimation && !isDrawCapable) return {};\r\n    const mp: any = {};\r\n    const rep = repeat === 'infinite' ? Infinity : repeat;\r\n    const baseTransition = { repeat: rep, repeatType: 'loop' as const, delay: animationDelay };\r\n\r\n    if (enableBaseAnimation) {\r\n      switch (animation) {\r\n        case 'spin':\r\n          mp.initial = { rotate: 0 };\r\n          mp.animate = { rotate: 360 };\r\n          mp.transition = { ...baseTransition, ease: 'linear', duration: animationDuration };\r\n          break;\r\n        case 'pulse':\r\n          mp.initial = { scale: 1 };\r\n          mp.animate = { scale: [1, 1.08, 1] };\r\n          mp.transition = { ...baseTransition, duration: animationDuration, ease: ease || 'easeInOut' };\r\n          break;\r\n        case 'bounce':\r\n          mp.initial = { y: 0 };\r\n          mp.animate = { y: [0, -6, 0] };\r\n          mp.transition = { ...baseTransition, duration: animationDuration, ease: ease || 'easeInOut' };\r\n          break;\r\n        case 'wiggle':\r\n          mp.initial = { rotate: 0 };\r\n          mp.animate = { rotate: [0, -10, 10, -6, 6, -2, 2, 0] };\r\n          mp.transition = { ...baseTransition, duration: animationDuration, ease: ease || 'easeInOut' };\r\n          break;\r\n        case 'float':\r\n          mp.initial = { y: 0 };\r\n          mp.animate = { y: [0, -4, 0, -2, 0] };\r\n          mp.transition = { ...baseTransition, duration: animationDuration * 1.8, ease: ease || 'easeInOut' };\r\n          break;\r\n        case 'scale':\r\n          mp.initial = { scale: 1 };\r\n          mp.animate = { scale: [1, 1.1, 1] };\r\n          mp.transition = { ...baseTransition, duration: animationDuration, ease: ease || 'easeInOut' };\r\n          break;\r\n        case 'lift':\r\n          mp.initial = { y: 0, scale: 1 };\r\n          mp.animate = { y: [0, -6, 0], scale: [1, 1.05, 1] };\r\n          mp.transition = { ...baseTransition, duration: animationDuration, ease: ease || 'easeInOut' };\r\n          break;\r\n      }\r\n    }\r\n\r\n    if (!effectiveDisable && hoverAnimation) {\r\n      const whileHover: any = {};\r\n      if (hoverAnimation === 'scale') whileHover.scale = 1.1;\r\n      if (hoverAnimation === 'lift') { whileHover.y = -4; whileHover.scale = 1.05; }\r\n      if (hoverAnimation === 'rotate') whileHover.rotate = 12;\r\n      if (hoverAnimation === 'wiggle') whileHover.rotate = [0, -10, 10, -6, 6, -2, 2, 0];\r\n      if (hoverAnimation === 'pulse') whileHover.scale = [1, 1.08, 1];\r\n      mp.whileHover = whileHover;\r\n      mp.transition = mp.transition || { duration: 0.5 };\r\n    }\r\n\r\n    if (enableBaseAnimation) {\r\n      mp.style = { willChange: 'transform' };\r\n      if (animation === 'spin') {\r\n        mp.animate = { rotate: 360 };\r\n      }\r\n    }\r\n    return mp;\r\n  }, [enableBaseAnimation, hoverAnimation, animation, repeat, animationDelay, animationDuration, ease, effectiveDisable, isDrawCapable]);\r\n\r\n  const [triggerActive, setTriggerActive] = React.useState(false);\r\n\r\n  // External trigger handling\r\n  React.useEffect(() => {\r\n    if (!triggerId) return;\r\n    const selector = `[data-icon-trigger=\"${triggerId}\"]`;\r\n  const handleEnter = () => { setTriggerActive(true); };\r\n  const handleLeave = () => { setTriggerActive(false); };\r\n    const attach = () => {\r\n      const nodes = document.querySelectorAll(selector);\r\n      nodes.forEach(n => {\r\n        n.addEventListener('mouseenter', handleEnter);\r\n        n.addEventListener('focusin', handleEnter);\r\n        n.addEventListener('mouseleave', handleLeave);\r\n        n.addEventListener('focusout', handleLeave);\r\n      });\r\n      return nodes;\r\n    };\r\n    const nodes = attach();\r\n    const mo = new MutationObserver(() => {\r\n      // Re-attach in case DOM changed\r\n      nodes.forEach(n => {\r\n        n.removeEventListener('mouseenter', handleEnter);\r\n        n.removeEventListener('focusin', handleEnter);\r\n        n.removeEventListener('mouseleave', handleLeave);\r\n        n.removeEventListener('focusout', handleLeave);\r\n      });\r\n      attach();\r\n    });\r\n    mo.observe(document.documentElement, { subtree: true, childList: true });\r\n    return () => {\r\n      mo.disconnect();\r\n      const current = document.querySelectorAll(selector);\r\n      current.forEach(n => {\r\n        n.removeEventListener('mouseenter', handleEnter);\r\n        n.removeEventListener('focusin', handleEnter);\r\n        n.removeEventListener('mouseleave', handleLeave);\r\n        n.removeEventListener('focusout', handleLeave);\r\n      });\r\n    };\r\n  }, [triggerId]);\r\n\r\n  const externallyControlled = !!triggerId;\r\n  const activeAnimation = externallyControlled ? triggerActive : true;\r\n  const runBase = activeAnimation && enableBaseAnimation;\r\n  const runHover = activeAnimation && hoverAnimation;\r\n  const runDraw = activeAnimation && isDrawCapable;\r\n  const useMotion = (runBase || runHover || runDraw); // draw itself is manual stroke animation, not motion transforms\r\n  const Wrapper: any = 'span'; // wrapper now always static layout\r\n  const wrapperRef = React.useRef<HTMLSpanElement | null>(null);\r\n  const Inner: any = useMotion ? motion.span : 'span';\r\n  const wrapperKey = React.useMemo(() => `${name}-${animation || 'none'}-${hoverAnimation || 'nohover'}`, [name, animation, hoverAnimation]);\r\n\r\n  // Draw animation effect (only when runDraw true). Ensure initial state is fully hidden (stroke not visible).\r\n  React.useEffect(() => {\r\n    if (!runDraw) return;\r\n    if (kit === 'fa-brands') return;\r\n    const el = wrapperRef.current;\r\n    if (!el) return;\r\n    const svgs = el.querySelectorAll('svg');\r\n    svgs.forEach(svg => {\r\n      const targets = svg.querySelectorAll('path, line, polyline, polygon, circle, rect, ellipse');\r\n      targets.forEach((p: any, index) => {\r\n        try {\r\n          let length = 0;\r\n          if (p.getTotalLength) {\r\n            length = p.getTotalLength();\r\n          } else {\r\n            length = 100;\r\n          }\r\n          if (!isFinite(length) || length === 0) length = 100; // fallback\r\n          p.style.strokeDasharray = length + 'px';\r\n          p.style.strokeDashoffset = length + 'px';\r\n          // Hide stroke completely before animation kicks in\r\n          p.style.transition = 'none';\r\n          p.style.strokeOpacity = '0';\r\n          // Force a reflow to make sure transition applies after we set initial hidden state\r\n          p.getBoundingClientRect();\r\n          const totalDelay = (drawDelay * 1000) + (index * ((drawDuration * 1000) / (targets.length + 1)));\r\n          setTimeout(() => {\r\n            p.style.transition = `stroke-dashoffset ${drawDuration}s ${drawEasing}, stroke-opacity 0.2s linear`;\r\n            p.style.strokeOpacity = '1';\r\n            p.style.strokeDashoffset = '0px';\r\n          }, totalDelay);\r\n        } catch { /* ignore */ }\r\n      });\r\n    });\r\n  }, [runDraw, kit, name, drawDuration, drawDelay, drawEasing]);\r\n\r\n  // Reset stroke when draw deactivates so it can replay (and hide again)\r\n  React.useEffect(() => {\r\n    if (!wantsDraw) return;\r\n    if (runDraw) return; // only reset when turned off\r\n    const el = wrapperRef.current;\r\n    if (!el) return;\r\n    const svgs = el.querySelectorAll('svg');\r\n    svgs.forEach(svg => {\r\n      const targets = svg.querySelectorAll('path, line, polyline, polygon, circle, rect, ellipse');\r\n      targets.forEach((p: any) => {\r\n        try {\r\n          if (p.getTotalLength) {\r\n            const length = p.getTotalLength();\r\n            p.style.strokeDasharray = length + 'px';\r\n            p.style.strokeDashoffset = length + 'px';\r\n            p.style.strokeOpacity = '0';\r\n          }\r\n        } catch { /* ignore */ }\r\n      });\r\n    });\r\n  }, [runDraw, wantsDraw]);\r\n\r\n  if (debugAnimations && typeof window !== 'undefined') {\r\n  console.log('[Icon debug]', { name, animation, motionProps, enableBaseAnimation, runDraw, wantsDraw, effectiveDisable, prefersReducedMotion });\r\n  }\r\n\r\n  const accessibilityProps: any = {};\r\n  if (ariaLabel) {\r\n    accessibilityProps.role = 'img';\r\n    accessibilityProps['aria-label'] = ariaLabel;\r\n  } else if (decorative) {\r\n    accessibilityProps['aria-hidden'] = true;\r\n  }\r\n\r\n  return (\r\n    <Wrapper\r\n      key={wrapperKey}\r\n      ref={wrapperRef}\r\n      data-variant={variant}\r\n      className={[\r\n        'elunar-icon',\r\n        variantClasses[variant],\r\n        className\r\n      ].filter(Boolean).join(' ')}\r\n      style={{\r\n        // Inline fallback layout styles (so that missing CSS import still yields correct appearance)\r\n        position: 'relative',\r\n        display: 'inline-flex',\r\n        alignItems: 'center',\r\n        justifyContent: 'center',\r\n        lineHeight: 1,\r\n        ...outerSizeStyle,\r\n        ...(isCircleVariant ? {\r\n          position: 'relative',\r\n          borderRadius: 9999,\r\n          background: circleBg,\r\n          color: circleTextColor,\r\n          boxSizing: 'border-box'\r\n        } : null),\r\n        ...(style || {}), // user styles last for overriding\r\n      }}\r\n      {...accessibilityProps}\r\n      {...rest}\r\n    >\r\n      {isCircleVariant && (\r\n        <svg\r\n          className=\"elunar-icon__ring\"\r\n          width={size}\r\n          height={size}\r\n          viewBox=\"0 0 100 100\"\r\n          preserveAspectRatio=\"xMidYMid meet\"\r\n          style={{ position: 'absolute', inset: 0, display: 'block' }}\r\n          aria-hidden=\"true\"\r\n          focusable=\"false\"\r\n        >\r\n          <defs>\r\n            <mask id={`ik-ring-${name}`}> \r\n              <rect x=\"0\" y=\"0\" width=\"100\" height=\"100\" fill=\"white\" />\r\n              <circle cx={50} cy={50} r={innerRadius} fill=\"black\" />\r\n            </mask>\r\n          </defs>\r\n          <circle cx={50} cy={50} r={50} fill={circleBorderColor} mask={`url(#ik-ring-${name})`} />\r\n          {variant === 'circleFilled' && (\r\n            <circle cx={50} cy={50} r={innerRadius} fill={circleBg || 'transparent'} />\r\n          )}\r\n        </svg>\r\n      )}\r\n      <Inner\r\n        className={[\r\n          'elunar-icon__inner',\r\n          iconClassName\r\n        ].filter(Boolean).join(' ')}\r\n  data-trigger={triggerId || undefined}\r\n  data-anim={runBase && animation ? animation : undefined}\r\n  data-hover-anim={runHover ? hoverAnimation : undefined}\r\n        style={{\r\n          width: pxInner,\r\n          height: pxInner,\r\n          display: 'flex',\r\n          alignItems: 'center',\r\n          justifyContent: 'center',\r\n          position: isCircleVariant ? 'relative' : undefined,\r\n          ...(useMotion ? {} : {}),\r\n        }}\r\n        {...(useMotion ? motionProps : {})}\r\n      >\r\n        {kit === 'fa-brands' && IconComp ? (\r\n          <FontAwesomeIcon\r\n            icon={IconComp}\r\n            className={['elunar-icon__svg'].join(' ')}\r\n            style={{ width: '100%', height: '100%', fontSize: pxInner, color: circleTextColor ?? color }}\r\n          />\r\n        ) : IconComp ? (\r\n          <IconComp\r\n            className={['elunar-icon__svg'].filter(Boolean).join(' ')}\r\n            width={pxInner}\r\n            height={pxInner}\r\n            strokeWidth={iconStroke}\r\n            color={circleTextColor}\r\n          />\r\n        ) : null}\r\n      </Inner>\r\n    </Wrapper>\r\n  );\r\n};\r\n\r\nIcon.displayName = 'Icon';\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,YAAuB;AACvB,kBAA6B;AAC7B,qBAAgC;AAChC,0BAAiC;AACjC,+BAAgC;AAChC,eAA0B;AAC1B,2BAAyC;AAuIjC;AA7FR,SAAS,UAAU,MAAc;AAC/B,SAAO,KACJ,QAAQ,cAAc,CAAC,GAAG,MAAc,EAAE,YAAY,CAAC,EACvD,QAAQ,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;AAC3C;AAEA,IAAM,WAAW,oBAAI,IAAsC;AAE3D,SAAS,cAAc,MAAc,MAAM,OAAO;AAzDlD;AA0DE,QAAM,mBAAmB,UAAU,IAAI;AACvC,MAAI,CAAC,KAAK;AACR,YAAQ,iBAAoC,gBAAgB,MAApD,YAAyD;AAAA,EACnE;AACA,QAAM,WAAqB,CAAC;AAC5B,QAAM,aAAa,CAAC,MAAc;AAAE,QAAI,CAAC,SAAS,SAAS,CAAC,EAAG,UAAS,KAAK,CAAC;AAAA,EAAG;AACjF,aAAW,gBAAgB;AAC3B,aAAW,iBAAiB,OAAO,CAAC,EAAE,YAAY,IAAI,iBAAiB,MAAM,CAAC,CAAC;AAC/E,aAAW,IAAI;AACf,aAAW,KAAK,YAAY,CAAC;AAC7B,aAAW,KAAK,QAAQ,WAAW,EAAE,CAAC;AACtC,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,UAAM,MAAM,SAAS,CAAC;AACtB,QAAI,SAAS,IAAI,GAAG,EAAG,QAAO,SAAS,IAAI,GAAG;AAC9C,UAAM,MAAO,eAAuC,GAAG;AACvD,QAAI,CAAC,IAAK;AACV,UAAM,WAAW,MAAM,QAAQ,GAAG,IAAI,MAAM,IAAI;AAChD,QAAI,CAAC,SAAU;AACf,UAAM,WAAO,sCAAiB,kBAAkB,QAAe;AAC/D,aAAS,IAAI,KAAK,IAAI;AACtB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,MAAc;AAnFvC;AAoFE,QAAM,SAAS,UAAU,IAAI;AAC7B,QAAM,MAAM,KAAK,MAAM;AACvB,UAAQ,cAAiC,GAAG,MAApC,YAAyC;AACnD;AAEO,IAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP;AAAA,EACA,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,WAAiB,cAAQ,MAAM;AACnC,UAAM,eAAwB,OAAO;AACrC,YAAQ,cAAc;AAAA,MACpB,KAAK;AACH,eAAO,cAAc,MAAM,KAAK;AAAA,MAClC,KAAK;AACH,eAAO,cAAc,MAAM,IAAI;AAAA,MACjC,KAAK;AACH,eAAO,gBAAgB,IAAI;AAAA,MAC7B;AACE,eAAO;AAAA,IACX;AAAA,EACF,GAAG,CAAC,MAAM,GAAG,CAAC;AAEd,MAAI,CAAC,UAAU;AACb,QAAI,QAAQ,IAAI,aAAa,cAAc;AACzC,cAAQ,KAAK,8BAA8B,IAAI,UAAU,OAAO,QAAQ,GAAG;AAAA,IAC7E;AACA,QAAI,UAAU;AACZ,aACE;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,CAAC,eAAe,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,UAC9D,qBAAmB;AAAA,UACnB,eAAa,cAAc,CAAC,YAAY,OAAO;AAAA,UAC/C,MAAM,YAAY,QAAQ;AAAA,UAC1B,cAAY;AAAA,UACX,GAAG;AAAA,UACJ;AAAA;AAAA,MAAS;AAAA,IAEf;AACA,WAAO;AAAA,EACT;AAGA,QAAM,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,WAAW,CAAC;AACvD,QAAM,kBAAmB,YAAY,YAAY,YAAY;AAC7D,QAAM,gBAAgB;AACtB,QAAM,mBAAmB;AACzB,QAAM,yBAAyB;AAC/B,MAAI,UAAU,qBAAqB,OAC9B,qBAAqB,QAAQ,KAAM,MACpC,iBAAiB,aAAa;AAClC,YAAU,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC;AAC7C,QAAM,oBAAoB,MAAM,mBAAmB;AACnD,YAAU,KAAK,IAAI,SAAS,iBAAiB;AAC7C,QAAM,cAAc,KAAK;AAGzB,QAAM,SAAU,UAAU,OAAS,aAAa;AAChD,QAAM,kBAAkB,KAAK,IAAI,aAAa,MAAM;AAEpD,WAAS,UAAU,KAAc;AAC/B,QAAI,CAAC,IAAK,QAAO;AACjB,QAAI,IAAI,IAAI,KAAK;AACjB,QAAI,EAAE,WAAW,GAAG,EAAG,KAAI,EAAE,MAAM,CAAC;AACpC,QAAI,EAAE,WAAW,GAAG;AAClB,UAAI,EAAE,MAAM,EAAE,EAAE,IAAI,OAAK,IAAI,CAAC,EAAE,KAAK,EAAE;AAAA,IACzC;AACA,QAAI,EAAE,WAAW,EAAG,QAAO;AAC3B,UAAM,IAAI,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE;AAClC,UAAM,IAAI,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE;AAClC,UAAM,IAAI,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE;AAClC,WAAO,SAAO,IAAI,SAAO,IAAI,SAAO;AAAA,EACtC;AAEA,QAAM,oBAAoB,qBAAqB;AAC/C,QAAM,yBAAyB,eAAe;AAE9C,QAAM,OAAO,UAAU,qBAAqB,sBAAsB;AAClE,QAAM,gBAAgB,OAAO;AAC7B,QAAM,qBAAqB,YAAY,iBAClC,oBACI,gBAAgB,SAAS,SACzB,SAAS,cAEb,SAAS;AAEd,QAAM,oBAAoB,CAAC,CAAC;AAC5B,QAAM,WAAW,YAAY,kBAAkB,oBAAoB,oBAAoB;AACvF,QAAM,oBAAoB,0BAA0B,qBAAqB;AACzE,QAAM,kBAAkB;AAExB,QAAM,iBAA8C;AAAA,IAClD,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,cAAc;AAAA,EAChB;AAEA,QAAM,iBAAiB,kBAAkB,EAAE,OAAO,GAAG,IAAI,MAAM,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;AACxF,QAAM,eAAe;AACrB,MAAI,YAAY,CAAC,kBACb,QACE,cAAc,mBAAmB,KAAM,OAAO;AAEpD,cAAY,KAAK,IAAI,GAAG,KAAK,MAAM,YAAY,CAAC,IAAI,CAAC;AACrD,QAAM,UAAU,GAAG,SAAS;AAG5B,QAAM,2BAAuB,uCAAiB;AAC9C,QAAM,mBAAmB,qBAAsB,wBAAwB,wBAAwB,CAAC;AAChG,QAAM,YAAa,QAAQ,cAAc;AACzC,QAAM,gBAAgB,CAAC,oBAAoB;AAC3C,QAAM,sBAAsB,CAAC,oBAAoB,aAAa,cAAc;AAE5E,QAAM,cAAyB,cAAQ,MAAM;AAC3C,QAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,cAAe,QAAO,CAAC;AACvE,UAAM,KAAU,CAAC;AACjB,UAAM,MAAM,WAAW,aAAa,WAAW;AAC/C,UAAM,iBAAiB,EAAE,QAAQ,KAAK,YAAY,QAAiB,OAAO,eAAe;AAEzF,QAAI,qBAAqB;AACvB,cAAQ,WAAW;AAAA,QACjB,KAAK;AACH,aAAG,UAAU,EAAE,QAAQ,EAAE;AACzB,aAAG,UAAU,EAAE,QAAQ,IAAI;AAC3B,aAAG,aAAa,EAAE,GAAG,gBAAgB,MAAM,UAAU,UAAU,kBAAkB;AACjF;AAAA,QACF,KAAK;AACH,aAAG,UAAU,EAAE,OAAO,EAAE;AACxB,aAAG,UAAU,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,EAAE;AACnC,aAAG,aAAa,EAAE,GAAG,gBAAgB,UAAU,mBAAmB,MAAM,QAAQ,YAAY;AAC5F;AAAA,QACF,KAAK;AACH,aAAG,UAAU,EAAE,GAAG,EAAE;AACpB,aAAG,UAAU,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE;AAC7B,aAAG,aAAa,EAAE,GAAG,gBAAgB,UAAU,mBAAmB,MAAM,QAAQ,YAAY;AAC5F;AAAA,QACF,KAAK;AACH,aAAG,UAAU,EAAE,QAAQ,EAAE;AACzB,aAAG,UAAU,EAAE,QAAQ,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE;AACrD,aAAG,aAAa,EAAE,GAAG,gBAAgB,UAAU,mBAAmB,MAAM,QAAQ,YAAY;AAC5F;AAAA,QACF,KAAK;AACH,aAAG,UAAU,EAAE,GAAG,EAAE;AACpB,aAAG,UAAU,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE;AACpC,aAAG,aAAa,EAAE,GAAG,gBAAgB,UAAU,oBAAoB,KAAK,MAAM,QAAQ,YAAY;AAClG;AAAA,QACF,KAAK;AACH,aAAG,UAAU,EAAE,OAAO,EAAE;AACxB,aAAG,UAAU,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,EAAE;AAClC,aAAG,aAAa,EAAE,GAAG,gBAAgB,UAAU,mBAAmB,MAAM,QAAQ,YAAY;AAC5F;AAAA,QACF,KAAK;AACH,aAAG,UAAU,EAAE,GAAG,GAAG,OAAO,EAAE;AAC9B,aAAG,UAAU,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,MAAM,CAAC,EAAE;AAClD,aAAG,aAAa,EAAE,GAAG,gBAAgB,UAAU,mBAAmB,MAAM,QAAQ,YAAY;AAC5F;AAAA,MACJ;AAAA,IACF;AAEA,QAAI,CAAC,oBAAoB,gBAAgB;AACvC,YAAM,aAAkB,CAAC;AACzB,UAAI,mBAAmB,QAAS,YAAW,QAAQ;AACnD,UAAI,mBAAmB,QAAQ;AAAE,mBAAW,IAAI;AAAI,mBAAW,QAAQ;AAAA,MAAM;AAC7E,UAAI,mBAAmB,SAAU,YAAW,SAAS;AACrD,UAAI,mBAAmB,SAAU,YAAW,SAAS,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC;AACjF,UAAI,mBAAmB,QAAS,YAAW,QAAQ,CAAC,GAAG,MAAM,CAAC;AAC9D,SAAG,aAAa;AAChB,SAAG,aAAa,GAAG,cAAc,EAAE,UAAU,IAAI;AAAA,IACnD;AAEA,QAAI,qBAAqB;AACvB,SAAG,QAAQ,EAAE,YAAY,YAAY;AACrC,UAAI,cAAc,QAAQ;AACxB,WAAG,UAAU,EAAE,QAAQ,IAAI;AAAA,MAC7B;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAG,CAAC,qBAAqB,gBAAgB,WAAW,QAAQ,gBAAgB,mBAAmB,MAAM,kBAAkB,aAAa,CAAC;AAErI,QAAM,CAAC,eAAe,gBAAgB,IAAU,eAAS,KAAK;AAG9D,EAAM,gBAAU,MAAM;AACpB,QAAI,CAAC,UAAW;AAChB,UAAM,WAAW,uBAAuB,SAAS;AACnD,UAAM,cAAc,MAAM;AAAE,uBAAiB,IAAI;AAAA,IAAG;AACpD,UAAM,cAAc,MAAM;AAAE,uBAAiB,KAAK;AAAA,IAAG;AACnD,UAAM,SAAS,MAAM;AACnB,YAAMA,SAAQ,SAAS,iBAAiB,QAAQ;AAChD,MAAAA,OAAM,QAAQ,OAAK;AACjB,UAAE,iBAAiB,cAAc,WAAW;AAC5C,UAAE,iBAAiB,WAAW,WAAW;AACzC,UAAE,iBAAiB,cAAc,WAAW;AAC5C,UAAE,iBAAiB,YAAY,WAAW;AAAA,MAC5C,CAAC;AACD,aAAOA;AAAA,IACT;AACA,UAAM,QAAQ,OAAO;AACrB,UAAM,KAAK,IAAI,iBAAiB,MAAM;AAEpC,YAAM,QAAQ,OAAK;AACjB,UAAE,oBAAoB,cAAc,WAAW;AAC/C,UAAE,oBAAoB,WAAW,WAAW;AAC5C,UAAE,oBAAoB,cAAc,WAAW;AAC/C,UAAE,oBAAoB,YAAY,WAAW;AAAA,MAC/C,CAAC;AACD,aAAO;AAAA,IACT,CAAC;AACD,OAAG,QAAQ,SAAS,iBAAiB,EAAE,SAAS,MAAM,WAAW,KAAK,CAAC;AACvE,WAAO,MAAM;AACX,SAAG,WAAW;AACd,YAAM,UAAU,SAAS,iBAAiB,QAAQ;AAClD,cAAQ,QAAQ,OAAK;AACnB,UAAE,oBAAoB,cAAc,WAAW;AAC/C,UAAE,oBAAoB,WAAW,WAAW;AAC5C,UAAE,oBAAoB,cAAc,WAAW;AAC/C,UAAE,oBAAoB,YAAY,WAAW;AAAA,MAC/C,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,uBAAuB,CAAC,CAAC;AAC/B,QAAM,kBAAkB,uBAAuB,gBAAgB;AAC/D,QAAM,UAAU,mBAAmB;AACnC,QAAM,WAAW,mBAAmB;AACpC,QAAM,UAAU,mBAAmB;AACnC,QAAM,YAAa,WAAW,YAAY;AAC1C,QAAM,UAAe;AACrB,QAAM,aAAmB,aAA+B,IAAI;AAC5D,QAAM,QAAa,YAAY,4BAAO,OAAO;AAC7C,QAAM,aAAmB,cAAQ,MAAM,GAAG,IAAI,IAAI,aAAa,MAAM,IAAI,kBAAkB,SAAS,IAAI,CAAC,MAAM,WAAW,cAAc,CAAC;AAGzI,EAAM,gBAAU,MAAM;AACpB,QAAI,CAAC,QAAS;AACd,QAAI,QAAQ,YAAa;AACzB,UAAM,KAAK,WAAW;AACtB,QAAI,CAAC,GAAI;AACT,UAAM,OAAO,GAAG,iBAAiB,KAAK;AACtC,SAAK,QAAQ,SAAO;AAClB,YAAM,UAAU,IAAI,iBAAiB,sDAAsD;AAC3F,cAAQ,QAAQ,CAAC,GAAQ,UAAU;AACjC,YAAI;AACF,cAAI,SAAS;AACb,cAAI,EAAE,gBAAgB;AACpB,qBAAS,EAAE,eAAe;AAAA,UAC5B,OAAO;AACL,qBAAS;AAAA,UACX;AACA,cAAI,CAAC,SAAS,MAAM,KAAK,WAAW,EAAG,UAAS;AAChD,YAAE,MAAM,kBAAkB,SAAS;AACnC,YAAE,MAAM,mBAAmB,SAAS;AAEpC,YAAE,MAAM,aAAa;AACrB,YAAE,MAAM,gBAAgB;AAExB,YAAE,sBAAsB;AACxB,gBAAM,aAAc,YAAY,MAAS,SAAU,eAAe,OAAS,QAAQ,SAAS;AAC5F,qBAAW,MAAM;AACf,cAAE,MAAM,aAAa,qBAAqB,YAAY,KAAK,UAAU;AACrE,cAAE,MAAM,gBAAgB;AACxB,cAAE,MAAM,mBAAmB;AAAA,UAC7B,GAAG,UAAU;AAAA,QACf,QAAQ;AAAA,QAAe;AAAA,MACzB,CAAC;AAAA,IACH,CAAC;AAAA,EACH,GAAG,CAAC,SAAS,KAAK,MAAM,cAAc,WAAW,UAAU,CAAC;AAG5D,EAAM,gBAAU,MAAM;AACpB,QAAI,CAAC,UAAW;AAChB,QAAI,QAAS;AACb,UAAM,KAAK,WAAW;AACtB,QAAI,CAAC,GAAI;AACT,UAAM,OAAO,GAAG,iBAAiB,KAAK;AACtC,SAAK,QAAQ,SAAO;AAClB,YAAM,UAAU,IAAI,iBAAiB,sDAAsD;AAC3F,cAAQ,QAAQ,CAAC,MAAW;AAC1B,YAAI;AACF,cAAI,EAAE,gBAAgB;AACpB,kBAAM,SAAS,EAAE,eAAe;AAChC,cAAE,MAAM,kBAAkB,SAAS;AACnC,cAAE,MAAM,mBAAmB,SAAS;AACpC,cAAE,MAAM,gBAAgB;AAAA,UAC1B;AAAA,QACF,QAAQ;AAAA,QAAe;AAAA,MACzB,CAAC;AAAA,IACH,CAAC;AAAA,EACH,GAAG,CAAC,SAAS,SAAS,CAAC;AAEvB,MAAI,mBAAmB,OAAO,WAAW,aAAa;AACtD,YAAQ,IAAI,gBAAgB,EAAE,MAAM,WAAW,aAAa,qBAAqB,SAAS,WAAW,kBAAkB,qBAAqB,CAAC;AAAA,EAC7I;AAEA,QAAM,qBAA0B,CAAC;AACjC,MAAI,WAAW;AACb,uBAAmB,OAAO;AAC1B,uBAAmB,YAAY,IAAI;AAAA,EACrC,WAAW,YAAY;AACrB,uBAAmB,aAAa,IAAI;AAAA,EACtC;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MAEC,KAAK;AAAA,MACL,gBAAc;AAAA,MACd,WAAW;AAAA,QACT;AAAA,QACA,eAAe,OAAO;AAAA,QACtB;AAAA,MACF,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAC1B,OAAO;AAAA;AAAA,QAEL,UAAU;AAAA,QACV,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,GAAG;AAAA,QACH,GAAI,kBAAkB;AAAA,UACpB,UAAU;AAAA,UACV,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,WAAW;AAAA,QACb,IAAI;AAAA,QACJ,GAAI,SAAS,CAAC;AAAA;AAAA,MAChB;AAAA,MACC,GAAG;AAAA,MACH,GAAG;AAAA,MAEH;AAAA,2BACC;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,SAAQ;AAAA,YACR,qBAAoB;AAAA,YACpB,OAAO,EAAE,UAAU,YAAY,OAAO,GAAG,SAAS,QAAQ;AAAA,YAC1D,eAAY;AAAA,YACZ,WAAU;AAAA,YAEV;AAAA,0DAAC,UACC,uDAAC,UAAK,IAAI,WAAW,IAAI,IACvB;AAAA,4DAAC,UAAK,GAAE,KAAI,GAAE,KAAI,OAAM,OAAM,QAAO,OAAM,MAAK,SAAQ;AAAA,gBACxD,4CAAC,YAAO,IAAI,IAAI,IAAI,IAAI,GAAG,aAAa,MAAK,SAAQ;AAAA,iBACvD,GACF;AAAA,cACA,4CAAC,YAAO,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,MAAM,mBAAmB,MAAM,gBAAgB,IAAI,KAAK;AAAA,cACtF,YAAY,kBACX,4CAAC,YAAO,IAAI,IAAI,IAAI,IAAI,GAAG,aAAa,MAAM,YAAY,eAAe;AAAA;AAAA;AAAA,QAE7E;AAAA,QAEF;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA;AAAA,YACF,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,YAChC,gBAAc,aAAa;AAAA,YAC3B,aAAW,WAAW,YAAY,YAAY;AAAA,YAC9C,mBAAiB,WAAW,iBAAiB;AAAA,YACvC,OAAO;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,UAAU,kBAAkB,aAAa;AAAA,cACzC,GAAI,YAAY,CAAC,IAAI,CAAC;AAAA,YACxB;AAAA,YACC,GAAI,YAAY,cAAc,CAAC;AAAA,YAE/B,kBAAQ,eAAe,WACtB;AAAA,cAAC;AAAA;AAAA,gBACC,MAAM;AAAA,gBACN,WAAW,CAAC,kBAAkB,EAAE,KAAK,GAAG;AAAA,gBACxC,OAAO,EAAE,OAAO,QAAQ,QAAQ,QAAQ,UAAU,SAAS,OAAO,4CAAmB,MAAM;AAAA;AAAA,YAC7F,IACE,WACF;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,CAAC,kBAAkB,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,gBACxD,OAAO;AAAA,gBACP,QAAQ;AAAA,gBACR,aAAa;AAAA,gBACb,OAAO;AAAA;AAAA,YACT,IACE;AAAA;AAAA,QACN;AAAA;AAAA;AAAA,IArFK;AAAA,EAsFP;AAEJ;AAEA,KAAK,cAAc;","names":["nodes"]}