{"version":3,"file":"ngx-com-components-carousel.mjs","sources":["../../../projects/com/components/carousel/carousel.variants.ts","../../../projects/com/components/carousel/carousel-item.directive.ts","../../../projects/com/components/carousel/carousel-prev-tpl.directive.ts","../../../projects/com/components/carousel/carousel-next-tpl.directive.ts","../../../projects/com/components/carousel/carousel-pagination-tpl.directive.ts","../../../projects/com/components/carousel/carousel.component.ts","../../../projects/com/components/carousel/index.ts","../../../projects/com/components/carousel/ngx-com-components-carousel.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n// ─── Container ───\n\nexport const carouselContainerVariants: () => string = cva('relative overflow-hidden');\n\n// ─── Navigation Button ───\n\nexport const carouselNavButtonVariants: (props?: {\n  position?: 'prev' | 'next';\n}) => string = cva(\n  [\n    'absolute top-1/2 -translate-y-1/2 z-10',\n    'inline-flex items-center justify-center',\n    'h-10 w-10 rounded-control',\n    'bg-background text-foreground',\n    'border border-border-subtle shadow-sm',\n    'transition-colors duration-normal',\n    'hover:bg-muted-hover',\n    'outline-none focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n    'disabled:bg-disabled disabled:text-disabled-foreground disabled:cursor-not-allowed disabled:shadow-none',\n  ],\n  {\n    variants: {\n      position: {\n        prev: 'left-2',\n        next: 'right-2',\n      },\n    },\n    defaultVariants: {\n      position: 'prev',\n    },\n  }\n);\n\nexport type CarouselNavButtonVariants = VariantProps<typeof carouselNavButtonVariants>;\n\n// ─── Pagination Dot ───\n\nexport const carouselDotVariants: (props?: {\n  active?: boolean;\n}) => string = cva(\n  [\n    'inline-block h-2 w-2 rounded-pill',\n    'transition-colors duration-normal',\n    'outline-none focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n  ],\n  {\n    variants: {\n      active: {\n        true: 'bg-primary',\n        false: 'bg-muted hover:bg-muted-hover',\n      },\n    },\n    defaultVariants: {\n      active: false,\n    },\n  }\n);\n\nexport type CarouselDotVariants = VariantProps<typeof carouselDotVariants>;\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n/**\n * Marks an element as a carousel slide item.\n *\n * Apply this directive to each direct child element that should be\n * treated as a slide within `<com-carousel>`.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-carousel>\n *   <div comCarouselItem>Slide 1</div>\n *   <div comCarouselItem>Slide 2</div>\n * </com-carousel>\n * ```\n */\n@Directive({\n  selector: '[comCarouselItem]',\n})\nexport class ComCarouselItem {\n  readonly elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { CarouselPrevContext } from './carousel.models';\n\n/**\n * Template directive for a custom \"previous\" navigation button.\n *\n * The template receives a boolean context (`$implicit`) indicating\n * whether the carousel can navigate backward.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-carousel>\n *   <div comCarouselItem>Slide 1</div>\n *   <ng-template comCarouselPrev let-canGo>\n *     <button [disabled]=\"!canGo\">Back</button>\n *   </ng-template>\n * </com-carousel>\n * ```\n */\n@Directive({\n  selector: 'ng-template[comCarouselPrev]',\n})\nexport class ComCarouselPrevTpl {\n  readonly templateRef: TemplateRef<CarouselPrevContext> = inject(TemplateRef);\n\n  static ngTemplateContextGuard(\n    _dir: ComCarouselPrevTpl,\n    _ctx: unknown\n  ): _ctx is CarouselPrevContext {\n    return true;\n  }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { CarouselNextContext } from './carousel.models';\n\n/**\n * Template directive for a custom \"next\" navigation button.\n *\n * The template receives a boolean context (`$implicit`) indicating\n * whether the carousel can navigate forward.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-carousel>\n *   <div comCarouselItem>Slide 1</div>\n *   <ng-template comCarouselNext let-canGo>\n *     <button [disabled]=\"!canGo\">Forward</button>\n *   </ng-template>\n * </com-carousel>\n * ```\n */\n@Directive({\n  selector: 'ng-template[comCarouselNext]',\n})\nexport class ComCarouselNextTpl {\n  readonly templateRef: TemplateRef<CarouselNextContext> = inject(TemplateRef);\n\n  static ngTemplateContextGuard(\n    _dir: ComCarouselNextTpl,\n    _ctx: unknown\n  ): _ctx is CarouselNextContext {\n    return true;\n  }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { CarouselPaginationContext } from './carousel.models';\n\n/**\n * Template directive for custom pagination indicators.\n *\n * Rendered once per \"page\" in the carousel. The template receives\n * a context with the page index, active state, and total count.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-carousel>\n *   <div comCarouselItem>Slide 1</div>\n *   <div comCarouselItem>Slide 2</div>\n *   <ng-template comCarouselPagination let-idx let-active=\"active\">\n *     <span\n *       class=\"inline-block h-3 w-3 rounded-pill transition-colors\"\n *       [class]=\"active ? 'bg-primary' : 'bg-muted'\"\n *     ></span>\n *   </ng-template>\n * </com-carousel>\n * ```\n */\n@Directive({\n  selector: 'ng-template[comCarouselPagination]',\n})\nexport class ComCarouselPaginationTpl {\n  readonly templateRef: TemplateRef<CarouselPaginationContext> = inject(TemplateRef);\n\n  static ngTemplateContextGuard(\n    _dir: ComCarouselPaginationTpl,\n    _ctx: unknown\n  ): _ctx is CarouselPaginationContext {\n    return true;\n  }\n}\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  contentChild,\n  contentChildren,\n  DestroyRef,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  linkedSignal,\n  model,\n  Renderer2,\n  signal,\n  viewChild,\n} from '@angular/core';\nimport type {\n  InputSignal,\n  InputSignalWithTransform,\n  ModelSignal,\n  Signal,\n  WritableSignal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { Platform } from '@angular/cdk/platform';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport { ComCarouselItem } from './carousel-item.directive';\nimport { ComCarouselPrevTpl } from './carousel-prev-tpl.directive';\nimport { ComCarouselNextTpl } from './carousel-next-tpl.directive';\nimport { ComCarouselPaginationTpl } from './carousel-pagination-tpl.directive';\nimport type { CarouselNextContext, CarouselPaginationContext, CarouselPrevContext } from './carousel.models';\nimport {\n  carouselContainerVariants,\n  carouselNavButtonVariants,\n  carouselDotVariants,\n} from './carousel.variants';\n\n/**\n * Carousel component — a horizontal slider that navigates content screens\n * using percentage-based CSS `transform: translateX()`.\n *\n * Items are projected via `ng-content` and marked with `comCarouselItem`.\n * Navigation is screen-based: each index step moves one full viewport of items.\n * Supports multi-item views, auto-play, loop, touch/swipe, keyboard\n * navigation, and custom templates for navigation and pagination.\n *\n * @tokens `--color-background`, `--color-foreground`, `--color-muted`,\n *         `--color-muted-hover`, `--color-primary`, `--color-border-subtle`,\n *         `--color-ring`, `--color-disabled`, `--color-disabled-foreground`\n *\n * @example Basic usage\n * ```html\n * <com-carousel>\n *   <div comCarouselItem>Slide 1</div>\n *   <div comCarouselItem>Slide 2</div>\n *   <div comCarouselItem>Slide 3</div>\n * </com-carousel>\n * ```\n *\n * @example Multiple items per view\n * ```html\n * <com-carousel [slidesPerView]=\"3\">\n *   @for (product of products(); track product.id) {\n *     <com-card comCarouselItem>{{ product.name }}</com-card>\n *   }\n * </com-carousel>\n * ```\n *\n * @example Auto-play with loop\n * ```html\n * <com-carousel autoPlay loop [autoPlayInterval]=\"4000\">\n *   @for (img of images(); track img.url) {\n *     <img comCarouselItem [src]=\"img.url\" [alt]=\"img.alt\" />\n *   }\n * </com-carousel>\n * ```\n *\n * @example Two-way index binding\n * ```html\n * <com-carousel [(index)]=\"currentSlide\">\n *   <div comCarouselItem>A</div>\n *   <div comCarouselItem>B</div>\n * </com-carousel>\n * ```\n *\n * @example Custom navigation\n * ```html\n * <com-carousel>\n *   <div comCarouselItem>Slide 1</div>\n *   <ng-template comCarouselPrev let-canGo>\n *     <button [disabled]=\"!canGo\">Back</button>\n *   </ng-template>\n *   <ng-template comCarouselNext let-canGo>\n *     <button [disabled]=\"!canGo\">Forward</button>\n *   </ng-template>\n * </com-carousel>\n * ```\n *\n * @example Custom pagination\n * ```html\n * <com-carousel>\n *   <div comCarouselItem>Slide 1</div>\n *   <ng-template comCarouselPagination let-idx let-active=\"active\">\n *     <span [class]=\"active ? 'bg-primary' : 'bg-muted'\" class=\"h-3 w-3 rounded-pill inline-block\"></span>\n *   </ng-template>\n * </com-carousel>\n * ```\n */\n@Component({\n  selector: 'com-carousel',\n  template: `\n    <div [class]=\"containerClasses()\">\n      <!-- Slide track -->\n      <div\n        #track\n        class=\"flex\"\n        [style.transform]=\"translateX()\"\n        [style.transition]=\"animating() ? 'transform ' + transitionDuration() + 'ms ease-out' : 'none'\"\n        [attr.aria-live]=\"ariaLiveMode()\"\n      >\n        <ng-content select=\"[comCarouselItem]\" />\n      </div>\n\n      <!-- Navigation: Previous -->\n      @if (showNavigation()) {\n        @if (customPrev(); as prevTpl) {\n          <ng-container\n            [ngTemplateOutlet]=\"prevTpl.templateRef\"\n            [ngTemplateOutletContext]=\"prevContext()\"\n          />\n        } @else {\n          <button\n            type=\"button\"\n            [class]=\"prevButtonClasses()\"\n            [disabled]=\"!canGoPrev()\"\n            [attr.aria-label]=\"'Previous slide'\"\n            (click)=\"prev()\"\n          >\n            <com-icon name=\"chevron-left\" size=\"md\" />\n          </button>\n        }\n      }\n\n      <!-- Navigation: Next -->\n      @if (showNavigation()) {\n        @if (customNext(); as nextTpl) {\n          <ng-container\n            [ngTemplateOutlet]=\"nextTpl.templateRef\"\n            [ngTemplateOutletContext]=\"nextContext()\"\n          />\n        } @else {\n          <button\n            type=\"button\"\n            [class]=\"nextButtonClasses()\"\n            [disabled]=\"!canGoNext()\"\n            [attr.aria-label]=\"'Next slide'\"\n            (click)=\"next()\"\n          >\n            <com-icon name=\"chevron-right\" size=\"md\" />\n          </button>\n        }\n      }\n    </div>\n\n    <!-- Pagination -->\n    @if (showPagination() && totalScreens() > 1) {\n      <div\n        class=\"flex items-center justify-center gap-2 py-3\"\n        role=\"tablist\"\n        [attr.aria-label]=\"'Slide navigation'\"\n      >\n        @for (page of pages(); track page; let i = $index) {\n          @if (customPagination(); as paginationTpl) {\n            <button\n              type=\"button\"\n              role=\"tab\"\n              [attr.aria-selected]=\"i === clampedIndex()\"\n              [attr.aria-label]=\"'Go to slide ' + (i + 1)\"\n              [tabindex]=\"i === clampedIndex() ? 0 : -1\"\n              (click)=\"goToPage(i)\"\n              (keydown)=\"onPaginationKeydown($event, i)\"\n            >\n              <ng-container\n                [ngTemplateOutlet]=\"paginationTpl.templateRef\"\n                [ngTemplateOutletContext]=\"getPaginationContext(i)\"\n              />\n            </button>\n          } @else {\n            <button\n              type=\"button\"\n              role=\"tab\"\n              [attr.aria-selected]=\"i === clampedIndex()\"\n              [attr.aria-label]=\"'Go to slide ' + (i + 1)\"\n              [tabindex]=\"i === clampedIndex() ? 0 : -1\"\n              [class]=\"getDotClasses(i)\"\n              (click)=\"goToPage(i)\"\n              (keydown)=\"onPaginationKeydown($event, i)\"\n            ></button>\n          }\n        }\n      </div>\n    }\n  `,\n  styles: `\n    :host {\n      display: block;\n    }\n  `,\n  imports: [NgTemplateOutlet, ComIcon],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    'class': 'com-carousel',\n    'role': 'region',\n    '[attr.aria-roledescription]': '\"carousel\"',\n    '[attr.aria-label]': 'ariaLabel()',\n    '(mouseenter)': 'pauseAutoPlay()',\n    '(mouseleave)': 'resumeAutoPlay()',\n    '(focusin)': 'pauseAutoPlay()',\n    '(focusout)': 'resumeAutoPlay()',\n  },\n})\nexport class ComCarouselComponent {\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly renderer = inject(Renderer2);\n  private readonly platform = inject(Platform);\n  private readonly hostEl = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  // ─── Inputs ───\n\n  /** Number of items visible at once. */\n  readonly slidesPerView: InputSignal<number> = input<number>(1);\n\n  /** Wrap from last to first and vice versa. */\n  readonly loop: InputSignalWithTransform<boolean, unknown> = input(false, {\n    transform: booleanAttribute,\n  });\n\n  /** Enable auto-advancing slides. */\n  readonly autoPlay: InputSignalWithTransform<boolean, unknown> = input(false, {\n    transform: booleanAttribute,\n  });\n\n  /** Auto-play interval in milliseconds. */\n  readonly autoPlayInterval: InputSignal<number> = input<number>(5000);\n\n  /** Slide transition duration in milliseconds. */\n  readonly transitionDuration: InputSignal<number> = input<number>(300);\n\n  /** Show prev/next navigation buttons. */\n  readonly showNavigation: InputSignalWithTransform<boolean, unknown> = input(true, {\n    transform: booleanAttribute,\n  });\n\n  /** Show pagination dot indicators. */\n  readonly showPagination: InputSignalWithTransform<boolean, unknown> = input(true, {\n    transform: booleanAttribute,\n  });\n\n  /** Accessible label for the carousel region. */\n  readonly ariaLabel: InputSignal<string> = input<string>('Carousel', {\n    alias: 'aria-label',\n  });\n\n  // ─── Model ───\n\n  /** Two-way bindable current screen index. */\n  readonly index: ModelSignal<number> = model<number>(0);\n\n  // ─── Content Children ───\n\n  readonly items: Signal<readonly ComCarouselItem[]> = contentChildren<ComCarouselItem>(ComCarouselItem);\n  readonly customPrev: Signal<ComCarouselPrevTpl | undefined> = contentChild<ComCarouselPrevTpl>(ComCarouselPrevTpl);\n  readonly customNext: Signal<ComCarouselNextTpl | undefined> = contentChild<ComCarouselNextTpl>(ComCarouselNextTpl);\n  readonly customPagination: Signal<ComCarouselPaginationTpl | undefined> = contentChild<ComCarouselPaginationTpl>(ComCarouselPaginationTpl);\n\n  // ─── View Children ───\n\n  readonly trackEl: Signal<ElementRef<HTMLElement> | undefined> = viewChild<ElementRef<HTMLElement>>('track');\n\n  // ─── Internal State ───\n\n  private readonly paused: WritableSignal<boolean> = signal(false);\n  readonly animating: WritableSignal<boolean> = signal(true);\n  private autoPlayTimerId: ReturnType<typeof setInterval> | null = null;\n\n  // ─── Computed ───\n\n  readonly totalSlides: Signal<number> = computed(() => this.items().length);\n\n  /** Total number of screens (pages). */\n  readonly totalScreens: Signal<number> = computed(() =>\n    Math.max(1, Math.ceil(this.totalSlides() / this.slidesPerView()))\n  );\n\n  readonly maxIndex: Signal<number> = computed(() =>\n    Math.max(0, this.totalScreens() - 1)\n  );\n\n  /** Clamp index when items or slidesPerView changes. */\n  readonly clampedIndex: Signal<number> = linkedSignal(() => {\n    const idx = this.index();\n    const max = this.maxIndex();\n    return Math.max(0, Math.min(idx, max));\n  });\n\n  readonly canGoPrev: Signal<boolean> = computed(() =>\n    this.loop() || this.clampedIndex() > 0\n  );\n\n  readonly canGoNext: Signal<boolean> = computed(() =>\n    this.loop() || this.clampedIndex() < this.maxIndex()\n  );\n\n  readonly pages: Signal<number[]> = computed(() =>\n    Array.from({ length: this.totalScreens() }, (_, i) => i)\n  );\n\n  /** Percentage-based translateX — each screen step moves by 100%. */\n  readonly translateX: Signal<string> = computed(() =>\n    `translateX(${-this.clampedIndex() * 100}%)`\n  );\n\n  /** Item width as a percentage string. */\n  private readonly itemWidth: Signal<string> = computed(() =>\n    `${100 / this.slidesPerView()}%`\n  );\n\n  readonly ariaLiveMode: Signal<string> = computed(() =>\n    this.autoPlay() && !this.paused() ? 'off' : 'polite'\n  );\n\n  // ─── CVA Classes ───\n\n  readonly containerClasses: Signal<string> = computed(() => carouselContainerVariants());\n\n  readonly prevButtonClasses: Signal<string> = computed(() =>\n    carouselNavButtonVariants({ position: 'prev' })\n  );\n\n  readonly nextButtonClasses: Signal<string> = computed(() =>\n    carouselNavButtonVariants({ position: 'next' })\n  );\n\n  // ─── Template Contexts ───\n\n  readonly prevContext: Signal<CarouselPrevContext> = computed(() => ({\n    $implicit: this.canGoPrev(),\n    prev: () => this.prev(),\n  }));\n\n  readonly nextContext: Signal<CarouselNextContext> = computed(() => ({\n    $implicit: this.canGoNext(),\n    next: () => this.next(),\n  }));\n\n  constructor() {\n    // Sync clamped index back to the model\n    effect(() => {\n      const clamped = this.clampedIndex();\n      if (this.index() !== clamped) {\n        this.index.set(clamped);\n      }\n    });\n\n    // Apply percentage-based width and ARIA attributes to each projected item\n    effect(() => {\n      const allItems = this.items();\n      const total = allItems.length;\n      const width = this.itemWidth();\n\n      allItems.forEach((item, i) => {\n        const el = item.elementRef.nativeElement;\n        this.renderer.setStyle(el, 'min-width', width);\n        this.renderer.setStyle(el, 'max-width', width);\n        this.renderer.setStyle(el, 'flex-shrink', '0');\n        this.renderer.setStyle(el, 'box-sizing', 'border-box');\n        this.renderer.setAttribute(el, 'role', 'group');\n        this.renderer.setAttribute(el, 'aria-roledescription', 'slide');\n        this.renderer.setAttribute(el, 'aria-label', `${i + 1} of ${total}`);\n      });\n    });\n\n    // Auto-play effect\n    effect(() => {\n      const shouldAutoPlay = this.autoPlay();\n      const isPaused = this.paused();\n      const interval = this.autoPlayInterval();\n\n      this.clearAutoPlay();\n\n      if (!this.platform.isBrowser) return; // SSR guard\n\n      if (shouldAutoPlay && !isPaused) {\n        this.autoPlayTimerId = setInterval(() => {\n          this.next();\n        }, interval);\n      }\n    });\n\n    this.destroyRef.onDestroy(() => {\n      this.clearAutoPlay();\n      this.cleanupSwipe();\n    });\n\n    // Set up touch/swipe after view init\n    if (this.platform.isBrowser) {\n      effect(() => {\n        const track = this.trackEl();\n        if (track) {\n          this.setupSwipe(track.nativeElement);\n        }\n      });\n    }\n  }\n\n  // ─── Public Methods ───\n\n  /** Navigate to the next screen. */\n  next(): void {\n    const current = this.clampedIndex();\n    const max = this.maxIndex();\n\n    if (current < max) {\n      this.goToPage(current + 1);\n    } else if (this.loop()) {\n      this.goToPage(0);\n    }\n  }\n\n  /** Navigate to the previous screen. */\n  prev(): void {\n    const current = this.clampedIndex();\n\n    if (current > 0) {\n      this.goToPage(current - 1);\n    } else if (this.loop()) {\n      this.goToPage(this.maxIndex());\n    }\n  }\n\n  /** Navigate to a specific page index. */\n  goToPage(pageIndex: number): void {\n    if (pageIndex >= 0 && pageIndex <= this.maxIndex()) {\n      this.animating.set(true);\n      this.index.set(pageIndex);\n    }\n  }\n\n  /** Get CVA classes for a pagination dot at the given index. */\n  getDotClasses(pageIndex: number): string {\n    return carouselDotVariants({ active: pageIndex === this.clampedIndex() });\n  }\n\n  /** Build template context for a custom pagination dot. */\n  getPaginationContext(pageIndex: number): CarouselPaginationContext {\n    return {\n      $implicit: pageIndex,\n      active: pageIndex === this.clampedIndex(),\n      total: this.totalScreens(),\n      index: pageIndex,\n    };\n  }\n\n  /** Handle keyboard navigation on pagination dots. */\n  onPaginationKeydown(event: KeyboardEvent, currentIndex: number): void {\n    const total = this.totalScreens();\n    let targetIndex: number;\n\n    switch (event.key) {\n      case 'ArrowRight':\n      case 'ArrowDown':\n        targetIndex = (currentIndex + 1) % total;\n        break;\n      case 'ArrowLeft':\n      case 'ArrowUp':\n        targetIndex = (currentIndex - 1 + total) % total;\n        break;\n      case 'Home':\n        targetIndex = 0;\n        break;\n      case 'End':\n        targetIndex = total - 1;\n        break;\n      default:\n        return;\n    }\n\n    event.preventDefault();\n    this.goToPage(targetIndex);\n    this.focusDotAt(targetIndex);\n  }\n\n  // ─── Host Event Handlers ───\n\n  protected pauseAutoPlay(): void {\n    if (this.autoPlay()) {\n      this.paused.set(true);\n    }\n  }\n\n  protected resumeAutoPlay(): void {\n    if (this.autoPlay()) {\n      this.paused.set(false);\n    }\n  }\n\n  // ─── Private: Auto-play ───\n\n  private clearAutoPlay(): void {\n    if (this.autoPlayTimerId !== null) {\n      clearInterval(this.autoPlayTimerId);\n      this.autoPlayTimerId = null;\n    }\n  }\n\n  // ─── Private: Touch/Swipe ───\n\n  private swipeCleanupFns: Array<() => void> = [];\n  private pointerStartX = 0;\n  private pointerStartY = 0;\n  private isSwiping = false;\n\n  private setupSwipe(trackElement: HTMLElement): void {\n    this.cleanupSwipe();\n\n    const unlistenDown = this.renderer.listen(trackElement, 'pointerdown', (e: PointerEvent) => {\n      this.pointerStartX = e.clientX;\n      this.pointerStartY = e.clientY;\n      this.isSwiping = true;\n      this.animating.set(false);\n    });\n\n    const unlistenMove = this.renderer.listen(trackElement, 'pointermove', (e: PointerEvent) => {\n      if (!this.isSwiping) return;\n      // Prevent vertical scroll when swiping horizontally\n      const dx = Math.abs(e.clientX - this.pointerStartX);\n      const dy = Math.abs(e.clientY - this.pointerStartY);\n      if (dx > dy && dx > 10) {\n        e.preventDefault();\n      }\n    });\n\n    const unlistenUp = this.renderer.listen(trackElement, 'pointerup', (e: PointerEvent) => {\n      if (!this.isSwiping) return;\n      this.isSwiping = false;\n      this.animating.set(true);\n\n      const delta = e.clientX - this.pointerStartX;\n      const threshold = 50;\n\n      if (delta < -threshold) {\n        this.next();\n      } else if (delta > threshold) {\n        this.prev();\n      }\n    });\n\n    const unlistenCancel = this.renderer.listen(trackElement, 'pointercancel', () => {\n      this.isSwiping = false;\n      this.animating.set(true);\n    });\n\n    this.swipeCleanupFns = [unlistenDown, unlistenMove, unlistenUp, unlistenCancel];\n  }\n\n  private cleanupSwipe(): void {\n    this.swipeCleanupFns.forEach((fn) => fn());\n    this.swipeCleanupFns = [];\n  }\n\n  // ─── Private: Focus Management ───\n\n  private focusDotAt(index: number): void {\n    const host = this.hostEl.nativeElement;\n    const dots = host.querySelectorAll('[role=\"tab\"]');\n    const dot = dots[index] as HTMLElement | undefined;\n    dot?.focus();\n  }\n}\n","// Public API for the carousel component\n\n// Types\nexport type {\n  CarouselPrevContext,\n  CarouselNextContext,\n  CarouselPaginationContext,\n} from './carousel.models';\n\n// Variants\nexport {\n  carouselContainerVariants,\n  carouselNavButtonVariants,\n  carouselDotVariants,\n} from './carousel.variants';\nexport type {\n  CarouselNavButtonVariants,\n  CarouselDotVariants,\n} from './carousel.variants';\n\n// Template directives\nexport { ComCarouselItem } from './carousel-item.directive';\nexport { ComCarouselPrevTpl } from './carousel-prev-tpl.directive';\nexport { ComCarouselNextTpl } from './carousel-next-tpl.directive';\nexport { ComCarouselPaginationTpl } from './carousel-pagination-tpl.directive';\n\n// Main component\nexport { ComCarouselComponent } from './carousel.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAEA;MAEa,yBAAyB,GAAiB,GAAG,CAAC,0BAA0B;AAErF;AAEO,MAAM,yBAAyB,GAEvB,GAAG,CAChB;IACE,wCAAwC;IACxC,yCAAyC;IACzC,2BAA2B;IAC3B,+BAA+B;IAC/B,uCAAuC;IACvC,mCAAmC;IACnC,sBAAsB;IACtB,oGAAoG;IACpG,yGAAyG;CAC1G,EACD;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,QAAQ,EAAE;AACR,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,IAAI,EAAE,SAAS;AAChB,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,QAAQ,EAAE,MAAM;AACjB,KAAA;AACF,CAAA;AAKH;AAEO,MAAM,mBAAmB,GAEjB,GAAG,CAChB;IACE,mCAAmC;IACnC,mCAAmC;IACnC,oGAAoG;CACrG,EACD;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,MAAM,EAAE;AACN,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,KAAK,EAAE,+BAA+B;AACvC,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,MAAM,EAAE,KAAK;AACd,KAAA;AACF,CAAA;;ACvDH;;;;;;;;;;;;;;;AAeG;MAIU,eAAe,CAAA;AACjB,IAAA,UAAU,GAA4B,MAAM,CAAC,UAAU,CAAC;uGADtD,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC9B,iBAAA;;;ACjBD;;;;;;;;;;;;;;;;;AAiBG;MAIU,kBAAkB,CAAA;AACpB,IAAA,WAAW,GAAqC,MAAM,CAAC,WAAW,CAAC;AAE5E,IAAA,OAAO,sBAAsB,CAC3B,IAAwB,EACxB,IAAa,EAAA;AAEb,QAAA,OAAO,IAAI;IACb;uGARW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,8BAA8B;AACzC,iBAAA;;;ACpBD;;;;;;;;;;;;;;;;;AAiBG;MAIU,kBAAkB,CAAA;AACpB,IAAA,WAAW,GAAqC,MAAM,CAAC,WAAW,CAAC;AAE5E,IAAA,OAAO,sBAAsB,CAC3B,IAAwB,EACxB,IAAa,EAAA;AAEb,QAAA,OAAO,IAAI;IACb;uGARW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,8BAA8B;AACzC,iBAAA;;;ACpBD;;;;;;;;;;;;;;;;;;;;;AAqBG;MAIU,wBAAwB,CAAA;AAC1B,IAAA,WAAW,GAA2C,MAAM,CAAC,WAAW,CAAC;AAElF,IAAA,OAAO,sBAAsB,CAC3B,IAA8B,EAC9B,IAAa,EAAA;AAEb,QAAA,OAAO,IAAI;IACb;uGARW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oCAAoC;AAC/C,iBAAA;;;ACYD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEG;MAkHU,oBAAoB,CAAA;AACd,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,MAAM,GAAG,MAAM,CAA0B,UAAU,CAAC;;;AAK5D,IAAA,aAAa,GAAwB,KAAK,CAAS,CAAC,yDAAC;;IAGrD,IAAI,GAA+C,KAAK,CAAC,KAAK,iDACrE,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;IAGO,QAAQ,GAA+C,KAAK,CAAC,KAAK,qDACzE,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;AAGO,IAAA,gBAAgB,GAAwB,KAAK,CAAS,IAAI,4DAAC;;AAG3D,IAAA,kBAAkB,GAAwB,KAAK,CAAS,GAAG,8DAAC;;IAG5D,cAAc,GAA+C,KAAK,CAAC,IAAI,2DAC9E,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;IAGO,cAAc,GAA+C,KAAK,CAAC,IAAI,2DAC9E,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;IAGO,SAAS,GAAwB,KAAK,CAAS,UAAU,sDAChE,KAAK,EAAE,YAAY,EAAA,CACnB;;;AAKO,IAAA,KAAK,GAAwB,KAAK,CAAS,CAAC,iDAAC;;AAI7C,IAAA,KAAK,GAAuC,eAAe,CAAkB,eAAe,iDAAC;AAC7F,IAAA,UAAU,GAA2C,YAAY,CAAqB,kBAAkB,sDAAC;AACzG,IAAA,UAAU,GAA2C,YAAY,CAAqB,kBAAkB,sDAAC;AACzG,IAAA,gBAAgB,GAAiD,YAAY,CAA2B,wBAAwB,4DAAC;;AAIjI,IAAA,OAAO,GAAgD,SAAS,CAA0B,OAAO,mDAAC;;AAI1F,IAAA,MAAM,GAA4B,MAAM,CAAC,KAAK,kDAAC;AACvD,IAAA,SAAS,GAA4B,MAAM,CAAC,IAAI,qDAAC;IAClD,eAAe,GAA0C,IAAI;;AAI5D,IAAA,WAAW,GAAmB,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,uDAAC;;AAGjE,IAAA,YAAY,GAAmB,QAAQ,CAAC,MAC/C,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAClE;IAEQ,QAAQ,GAAmB,QAAQ,CAAC,MAC3C,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,oDACrC;;AAGQ,IAAA,YAAY,GAAmB,YAAY,CAAC,MAAK;AACxD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACxC,IAAA,CAAC,wDAAC;AAEO,IAAA,SAAS,GAAoB,QAAQ,CAAC,MAC7C,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,qDACvC;IAEQ,SAAS,GAAoB,QAAQ,CAAC,MAC7C,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACrD;AAEQ,IAAA,KAAK,GAAqB,QAAQ,CAAC,MAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,iDACzD;;AAGQ,IAAA,UAAU,GAAmB,QAAQ,CAAC,MAC7C,CAAA,WAAA,EAAc,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,GAAG,CAAA,EAAA,CAAI,sDAC7C;;AAGgB,IAAA,SAAS,GAAmB,QAAQ,CAAC,MACpD,CAAA,EAAG,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA,CAAA,CAAG,qDACjC;IAEQ,YAAY,GAAmB,QAAQ,CAAC,MAC/C,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,QAAQ,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACrD;;IAIQ,gBAAgB,GAAmB,QAAQ,CAAC,MAAM,yBAAyB,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAE9E,IAAA,iBAAiB,GAAmB,QAAQ,CAAC,MACpD,yBAAyB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,6DAChD;AAEQ,IAAA,iBAAiB,GAAmB,QAAQ,CAAC,MACpD,yBAAyB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,6DAChD;;AAIQ,IAAA,WAAW,GAAgC,QAAQ,CAAC,OAAO;AAClE,QAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,QAAA,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE;AACxB,KAAA,CAAC,uDAAC;AAEM,IAAA,WAAW,GAAgC,QAAQ,CAAC,OAAO;AAClE,QAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,QAAA,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE;AACxB,KAAA,CAAC,uDAAC;AAEH,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AACnC,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,OAAO,EAAE;AAC5B,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;YACzB;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM;AAC7B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;YAE9B,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AAC3B,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;gBACxC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC;gBAC9C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC;gBAC9C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,aAAa,EAAE,GAAG,CAAC;gBAC9C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,YAAY,EAAE,YAAY,CAAC;gBACtD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC;gBAC/C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,sBAAsB,EAAE,OAAO,CAAC;AAC/D,gBAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,CAAA,EAAG,CAAC,GAAG,CAAC,OAAO,KAAK,CAAA,CAAE,CAAC;AACtE,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE;AACtC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE;AAC9B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;YAExC,IAAI,CAAC,aAAa,EAAE;AAEpB,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS;AAAE,gBAAA,OAAO;AAErC,YAAA,IAAI,cAAc,IAAI,CAAC,QAAQ,EAAE;AAC/B,gBAAA,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,MAAK;oBACtC,IAAI,CAAC,IAAI,EAAE;gBACb,CAAC,EAAE,QAAQ,CAAC;YACd;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC7B,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,YAAY,EAAE;AACrB,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;YAC3B,MAAM,CAAC,MAAK;AACV,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE;gBAC5B,IAAI,KAAK,EAAE;AACT,oBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC;gBACtC;AACF,YAAA,CAAC,CAAC;QACJ;IACF;;;IAKA,IAAI,GAAA;AACF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AACnC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE;AAE3B,QAAA,IAAI,OAAO,GAAG,GAAG,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;QAC5B;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClB;IACF;;IAGA,IAAI,GAAA;AACF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE;AAEnC,QAAA,IAAI,OAAO,GAAG,CAAC,EAAE;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;QAC5B;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC;IACF;;AAGA,IAAA,QAAQ,CAAC,SAAiB,EAAA;QACxB,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AAClD,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QAC3B;IACF;;AAGA,IAAA,aAAa,CAAC,SAAiB,EAAA;AAC7B,QAAA,OAAO,mBAAmB,CAAC,EAAE,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;IAC3E;;AAGA,IAAA,oBAAoB,CAAC,SAAiB,EAAA;QACpC,OAAO;AACL,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC,YAAY,EAAE;AACzC,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE;AAC1B,YAAA,KAAK,EAAE,SAAS;SACjB;IACH;;IAGA,mBAAmB,CAAC,KAAoB,EAAE,YAAoB,EAAA;AAC5D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AACjC,QAAA,IAAI,WAAmB;AAEvB,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,YAAY;AACjB,YAAA,KAAK,WAAW;gBACd,WAAW,GAAG,CAAC,YAAY,GAAG,CAAC,IAAI,KAAK;gBACxC;AACF,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,SAAS;gBACZ,WAAW,GAAG,CAAC,YAAY,GAAG,CAAC,GAAG,KAAK,IAAI,KAAK;gBAChD;AACF,YAAA,KAAK,MAAM;gBACT,WAAW,GAAG,CAAC;gBACf;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,WAAW,GAAG,KAAK,GAAG,CAAC;gBACvB;AACF,YAAA;gBACE;;QAGJ,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;IAC9B;;IAIU,aAAa,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB;IACF;IAEU,cAAc,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB;IACF;;IAIQ,aAAa,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE;AACjC,YAAA,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;AACnC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC7B;IACF;;IAIQ,eAAe,GAAsB,EAAE;IACvC,aAAa,GAAG,CAAC;IACjB,aAAa,GAAG,CAAC;IACjB,SAAS,GAAG,KAAK;AAEjB,IAAA,UAAU,CAAC,YAAyB,EAAA;QAC1C,IAAI,CAAC,YAAY,EAAE;AAEnB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,CAAe,KAAI;AACzF,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,OAAO;AAC9B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,OAAO;AAC9B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AAC3B,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC,CAAe,KAAI;YACzF,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE;;AAErB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;AACnD,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;YACnD,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;gBACtB,CAAC,CAAC,cAAc,EAAE;YACpB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAe,KAAI;YACrF,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE;AACrB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAExB,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa;YAC5C,MAAM,SAAS,GAAG,EAAE;AAEpB,YAAA,IAAI,KAAK,GAAG,CAAC,SAAS,EAAE;gBACtB,IAAI,CAAC,IAAI,EAAE;YACb;AAAO,iBAAA,IAAI,KAAK,GAAG,SAAS,EAAE;gBAC5B,IAAI,CAAC,IAAI,EAAE;YACb;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,EAAE,MAAK;AAC9E,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,CAAC;IACjF;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;AAC1C,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;IAC3B;;AAIQ,IAAA,UAAU,CAAC,KAAa,EAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;AAClD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAA4B;QAClD,GAAG,EAAE,KAAK,EAAE;IACd;uGApWW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,2BAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAiDuD,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACN,kBAAkB,6FAClB,kBAAkB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACA,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnK/H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAMS,gBAAgB,oJAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAaxB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAjHhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,QAAA,EACd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FT,EAAA,OAAA,EAMQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,EAAA,eAAA,EACnB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,OAAO,EAAE,cAAc;AACvB,wBAAA,MAAM,EAAE,QAAQ;AAChB,wBAAA,6BAA6B,EAAE,YAAY;AAC3C,wBAAA,mBAAmB,EAAE,aAAa;AAClC,wBAAA,cAAc,EAAE,iBAAiB;AACjC,wBAAA,cAAc,EAAE,kBAAkB;AAClC,wBAAA,WAAW,EAAE,iBAAiB;AAC9B,wBAAA,YAAY,EAAE,kBAAkB;AACjC,qBAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;AAmDqF,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,eAAe,4FACN,kBAAkB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAClB,kBAAkB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MACA,wBAAwB,kEAItC,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACvR5G;AASA;;ACTA;;AAEG;;;;"}