{"version":3,"file":"serene-dev-ng-carousel.mjs","sources":["../../../../projects/ng-carousel/src/lib/ng-carousel.component.ts","../../../../projects/ng-carousel/src/lib/ng-carousel.component.html","../../../../projects/ng-carousel/src/public-api.ts","../../../../projects/ng-carousel/src/serene-dev-ng-carousel.ts"],"sourcesContent":["import {\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  SimpleChange,\n  SimpleChanges,\n  TemplateRef,\n  computed,\n  input,\n  signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Vanilla Carousel for Angular\n */\n@Component({\n    selector: 'ng-carousel',\n    imports: [CommonModule],\n    templateUrl: './ng-carousel.component.html',\n    styleUrls: ['./ng-carousel.component.scss']\n})\nexport class NgCarouselComponent {\n  /**\n   * Items to show in the slideshow\n   */\n  @Input({ required: true }) items?: ICarouselItem[];\n  /**\n   * Template to show if the items array is empty\n   */\n  readonly noItemsTemplate = input<TemplateRef<any>>();\n  /**\n   * It should be set when you select template as an item type. It will be used to render the custom content for the item's slide.\n   *\n   * A reference of the slide will be sent as a parameter into the template\n   */\n  readonly customItemTemplate = input<TemplateRef<any>>();\n  /**\n   * It will be embedded inside the buttons.\n   *\n   * A reference of the arrow navigation button will be sent as a parameter into the template\n   */\n  readonly customArrowContentTemplate = input<TemplateRef<any>>();\n  /**\n   * Number of items to show per view\n   */\n  readonly numberPerView = input(1);\n  /**\n   * Use the current index indicators\n   */\n  readonly useIndicators = input(true);\n  /**\n   * Use the arrow buttons\n   */\n  readonly useArrowButtons = input(true);\n  /**\n   * Automatically play carousel\n   */\n  @Input() autoplay = true;\n  /**\n   * Speed of autoplay in milliseconds\n   */\n  @Input() autoplaySpeed = 2000;\n  /**\n   * Automatically play videos\n   */\n  readonly autoplayVideo = input(true);\n  /**\n   * Make slide show restart at the end of the show\n   */\n  readonly continuous = input(true);\n  /**\n   * Custom class on the navigation buttons\n   */\n  readonly navBtnClass = input<string>();\n  /**\n   * Custom class for the item label\n   */\n  readonly labelClass = input<string>();\n  /**\n   * Pause slider on hover\n   */\n  @Input() pauseOnHover: boolean = true;\n  /**\n   * Custom class for the item sublabel\n   */\n  readonly subLabelClass = input<string>();\n  /**\n   * Object fit for the items in the slide show\n   */\n  readonly contentFit = input<'contain' | 'cover'>('cover');\n  /**\n   * Emitted when the current index changes. The current index and items are emitted.\n   */\n  @Output() slideChanged = new EventEmitter<{\n    index: number;\n    currentItems: ICarouselItem[];\n  }>();\n\n  /**\n   * The current index.\n   */\n  protected readonly currentIndex = signal(0);\n  /**\n   * Group of items\n   */\n  protected readonly itemsGroup = signal<{ isActive?: boolean; group: ICarouselItem[] }[]>([]);\n  protected readonly hasItemsGroup = computed(() => this.itemsGroup()?.length > 0);\n  protected readonly itemsGroupLength = computed(() => this.itemsGroup()?.length);\n  protected readonly disableNext = computed(() => {\n    const currentIndex = this.currentIndex(),\n      itemsGroupLength = this.itemsGroupLength(),\n      continuous = this.continuous();\n    return currentIndex == itemsGroupLength && !continuous;\n  });\n\n  protected intervaler?: any;\n\n  protected onHover = false;\n\n  protected ngOnChanges(changes: {\n    [x in keyof NgCarouselComponent]: SimpleChange;\n  }): void {\n    this.calculateGroup();\n    // debugger\n    // if(changes.items.)\n    // this.items?.forEach((item) => {\n    //   if (item.type == 'template' && !this.customItemTemplate)\n    //     throw (\n    //       item.src +\n    //       ` needs a custom template because the item type is template`\n    //     );\n    // });\n    this.resetInterval();\n  }\n\n  protected resetInterval() {\n    if (this.intervaler) clearInterval(this.intervaler);\n    if (this.autoplay)\n      this.intervaler = setInterval(() => {\n        if (!this.onHover) this.next();\n      }, this.autoplaySpeed);\n  }\n\n  protected ngOnDestroy(): void {\n    if (this.intervaler) clearInterval(this.intervaler);\n  }\n\n  protected handleMouseOver() {\n    if (this.pauseOnHover) this.onHover = true;\n  }\n  protected handleMouseOut() {\n    if (this.pauseOnHover) this.onHover = false;\n  }\n\n  protected calculateGroup() {\n    const numberPerView = this.numberPerView();\n    if (this.items)\n      this.itemsGroup.set(\n        new Array(Math.ceil((this.items.length || 0) / (numberPerView || 1)))\n          .fill(null)\n          .map((x, index) => {\n            const end = index * (numberPerView || 1) + (numberPerView || 1);\n            // debugger;\n            return {\n              group: this.items!.slice(\n                index * (numberPerView || 1),\n                index * (numberPerView || 1) + (numberPerView || 1),\n              ),\n            };\n          }),\n      );\n    else this.itemsGroup.set([]);\n\n    // debugger;\n  }\n\n  /**\n   * Show the next slide\n   */\n  next() {\n    const currentIndex = this.currentIndex();\n    if (this.itemsGroupLength() > currentIndex + 1) this.currentIndex.set(currentIndex + 1);\n    else if (this.continuous()) this.currentIndex.set(0);\n    this.slideChanged.emit({\n      index: this.currentIndex(),\n      currentItems: this.itemsGroup()[this.currentIndex()]?.group,\n    });\n  }\n\n  /**\n   * Show the previous slide\n   */\n  previous() {\n    const currentIndex = this.currentIndex();\n    if (this.itemsGroupLength() > currentIndex + 1) this.currentIndex.set(currentIndex - 1);\n    else if (this.continuous()) this.currentIndex.set(this.itemsGroupLength() - 1);\n    this.slideChanged.emit({\n      index: this.currentIndex(),\n      currentItems: this.itemsGroup()[this.currentIndex()]?.group,\n    });\n  }\n\n  /**Set the current index directly */\n  setCurrentIndex(index: number) {\n    if (this.itemsGroup()?.length > index) this.currentIndex.set(index);\n  }\n}\n\n/**\n * Carousel Item config\n */\nexport interface ICarouselItem<TData = any> {\n  /**\n   * Path to slide content\n   */\n  src?: string;\n  /**\n   * Item label\n   */\n  label?: string;\n  /**\n   * Item sub label\n   */\n  subLabel?: string;\n  /**\n   * Content type.\n   *\n   * Choose template to use custom html content in the slides.\n   * @default \"image\"\n   */\n  type?: 'image' | 'video' | 'template';\n  /**The contextual data to pass with the slide when using a custom slide template */\n  data?: TData;\n}\n","@if (hasItemsGroup()) {\n  <div class=\"ng-carousel\" (mouseover)=\"handleMouseOver()\" (mouseout)=\"handleMouseOut()\" #cont>\n    @for (group of itemsGroup(); track group; let index = $index) {\n      <div class=\"ng-carousel-item-group\" [hidden]=\"currentIndex() != index\">\n        @for (item of group.group; track item) {\n          <div class=\"ng-carousel-item\" [style.width.px]=\"cont.offsetWidth / numberPerView()\">\n            @switch (item.type) {\n              @case ('template') {\n                <ng-container\n                  *ngTemplateOutlet=\"customItemTemplate()!; context: { $implicit: item }\"\n                />\n              }\n              @case ('video') {\n                <video\n                  src=\"{{ item.src }}\"\n                  [autoplay]=\"autoplayVideo()\"\n                  [controls]=\"false\"\n                  attr.aria-label=\"{{ item.label || 'slide ' }}\"\n                  class=\"{{ contentFit() }}\"\n                ></video>\n              }\n              @default {\n                <img\n                  src=\"{{ item.src }}\"\n                  attr.aria-label=\"{{ item.label || 'slide ' }}\"\n                  class=\"{{ contentFit() }}\"\n                />\n              }\n            }\n            @if (item.label) {\n              <div class=\"ng-carousel-label-cont {{ labelClass() }}\">\n                <div>\n                  <div class=\"ng-carousel-label\">{{ item.label }}</div>\n                  @if (item.subLabel) {\n                    <div class=\"ng-carousel-sub-label {{ subLabelClass() }} \">\n                      {{ item.subLabel }}\n                    </div>\n                  }\n                </div>\n              </div>\n            }\n          </div>\n        }\n      </div>\n    }\n    @if (useIndicators()) {\n      <div class=\"indicators\">\n        @for (item of itemsGroup(); track item; let index = $index) {\n          <div\n            (click)=\"setCurrentIndex(index)\"\n            class=\"indicator-item\"\n            [ngClass]=\"{ active: currentIndex() == index }\"\n          ></div>\n        }\n      </div>\n    }\n    @if (useArrowButtons()) {\n      <div class=\"nav-btn-cont left\">\n        <button\n          (click)=\"previous();resetInterval()\"\n          #btnLeft\n          [disabled]=\"currentIndex() == 0\"\n          class=\"nav-btn left {{ navBtnClass() }}\"\n        >\n          @if (customArrowContentTemplate()) {\n            <ng-container\n              *ngTemplateOutlet=\"\n                customArrowContentTemplate();\n                context: { $implicit: { isBack: true, isForward: false } }\n              \"\n            />\n          } @else {\n            <\n          }\n        </button>\n      </div>\n      <div class=\"nav-btn-cont right\">\n        <button\n          (click)=\"next();resetInterval()\"\n          #btnRight\n          [disabled]=\"disableNext()\"\n          class=\"nav-btn   {{ navBtnClass() }}\"\n        >\n          @if (customArrowContentTemplate()) {\n            <ng-container\n              *ngTemplateOutlet=\"\n                customArrowContentTemplate();\n                context: { $implicit: { isBack: false, isForward: true } }\n              \"\n            />\n          } @else {\n            >\n          }\n        </button>\n      </div>\n    }\n  </div>\n} @else {\n  <ng-template [ngTemplateOutlet]=\"noItemsTemplate() || _noItemsTemplate\"></ng-template>\n}\n\n<ng-template #_noItemsTemplate> There are no items to show </ng-template>\n<!-- <div>{{ currentIndex }}</div> -->\n","/*\n * Public API Surface of ng-carousel\n */\n \nexport * from './lib/ng-carousel.component'; \n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAcA;;AAEG;MAOU,mBAAmB,CAAA;AANhC,IAAA,WAAA,GAAA;AAWE;;AAEG;QACM,IAAe,CAAA,eAAA,GAAG,KAAK,EAAoB;AACpD;;;;AAIG;QACM,IAAkB,CAAA,kBAAA,GAAG,KAAK,EAAoB;AACvD;;;;AAIG;QACM,IAA0B,CAAA,0BAAA,GAAG,KAAK,EAAoB;AAC/D;;AAEG;AACM,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC;AACjC;;AAEG;AACM,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC;AACpC;;AAEG;AACM,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC;AACtC;;AAEG;QACM,IAAQ,CAAA,QAAA,GAAG,IAAI;AACxB;;AAEG;QACM,IAAa,CAAA,aAAA,GAAG,IAAI;AAC7B;;AAEG;AACM,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC;AACpC;;AAEG;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;AACjC;;AAEG;QACM,IAAW,CAAA,WAAA,GAAG,KAAK,EAAU;AACtC;;AAEG;QACM,IAAU,CAAA,UAAA,GAAG,KAAK,EAAU;AACrC;;AAEG;QACM,IAAY,CAAA,YAAA,GAAY,IAAI;AACrC;;AAEG;QACM,IAAa,CAAA,aAAA,GAAG,KAAK,EAAU;AACxC;;AAEG;AACM,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAsB,OAAO,CAAC;AACzD;;AAEG;AACO,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAGrC;AAEJ;;AAEG;AACgB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC;AAC3C;;AAEG;AACgB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAmD,EAAE,CAAC;AACzE,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AAC7D,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC;AAC5D,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,EACtC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAC1C,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,YAAA,OAAO,YAAY,IAAI,gBAAgB,IAAI,CAAC,UAAU;AACxD,SAAC,CAAC;QAIQ,IAAO,CAAA,OAAA,GAAG,KAAK;AAyF1B;AAvFW,IAAA,WAAW,CAAC,OAErB,EAAA;QACC,IAAI,CAAC,cAAc,EAAE;;;;;;;;;;QAUrB,IAAI,CAAC,aAAa,EAAE;;IAGZ,aAAa,GAAA;QACrB,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;QACnD,IAAI,IAAI,CAAC,QAAQ;AACf,YAAA,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,MAAK;gBACjC,IAAI,CAAC,IAAI,CAAC,OAAO;oBAAE,IAAI,CAAC,IAAI,EAAE;AAChC,aAAC,EAAE,IAAI,CAAC,aAAa,CAAC;;IAGhB,WAAW,GAAA;QACnB,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;;IAG3C,eAAe,GAAA;QACvB,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;;IAElC,cAAc,GAAA;QACtB,IAAI,IAAI,CAAC,YAAY;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;;IAGnC,cAAc,GAAA;AACtB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;QAC1C,IAAI,IAAI,CAAC,KAAK;AACZ,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CACjB,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,CAAC,CAAC;iBACjE,IAAI,CAAC,IAAI;AACT,iBAAA,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAI;AAChB,gBAAA,MAAM,GAAG,GAAG,KAAK,IAAI,aAAa,IAAI,CAAC,CAAC,IAAI,aAAa,IAAI,CAAC,CAAC;;gBAE/D,OAAO;AACL,oBAAA,KAAK,EAAE,IAAI,CAAC,KAAM,CAAC,KAAK,CACtB,KAAK,IAAI,aAAa,IAAI,CAAC,CAAC,EAC5B,KAAK,IAAI,aAAa,IAAI,CAAC,CAAC,IAAI,aAAa,IAAI,CAAC,CAAC,CACpD;iBACF;aACF,CAAC,CACL;;AACE,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;;;AAK9B;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,GAAG,YAAY,GAAG,CAAC;YAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC;aAClF,IAAI,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE;AAC1B,YAAA,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK;AAC5D,SAAA,CAAC;;AAGJ;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,GAAG,YAAY,GAAG,CAAC;YAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC;aAClF,IAAI,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;AAC9E,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE;AAC1B,YAAA,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,KAAK;AAC5D,SAAA,CAAC;;;AAIJ,IAAA,eAAe,CAAC,KAAa,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,GAAG,KAAK;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;;8GAvL1D,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,0BAAA,EAAA,EAAA,iBAAA,EAAA,4BAAA,EAAA,UAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBhC,ogHAuGA,EAAA,MAAA,EAAA,CAAA,68EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpFc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAIb,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;+BACI,aAAa,EAAA,OAAA,EACd,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,ogHAAA,EAAA,MAAA,EAAA,CAAA,68EAAA,CAAA,EAAA;8BAQE,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAgChB,QAAQ,EAAA,CAAA;sBAAhB;gBAIQ,aAAa,EAAA,CAAA;sBAArB;gBAoBQ,YAAY,EAAA,CAAA;sBAApB;gBAYS,YAAY,EAAA,CAAA;sBAArB;;;AE/FH;;AAEG;;ACFH;;AAEG;;;;"}