{"version":3,"file":"sebgroup-green-angular-src-lib-sortable-list.mjs","sources":["../../../../libs/angular/src/lib/sortable-list/sortable-list.component.ts","../../../../libs/angular/src/lib/sortable-list/sortable-list.component.html","../../../../libs/angular/src/lib/sortable-list/sortable-list.module.ts","../../../../libs/angular/src/lib/sortable-list/sebgroup-green-angular-src-lib-sortable-list.ts"],"sourcesContent":["import {\n  CdkDragDrop,\n  moveItemInArray,\n  transferArrayItem,\n} from '@angular/cdk/drag-drop'\nimport {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  Output,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core'\n\nimport '@sebgroup/green-core/components/icon/icons/dot-grid-two.js'\n\nexport interface SortableListItem {\n  id: any\n  name: string\n  description?: string\n  selected?: boolean\n  hasCustomSuffix?: boolean\n}\n\nexport interface SortableListGroup {\n  items: SortableListItem[]\n  title: string\n  description?: string\n}\n\n@Component({\n    selector: 'ngg-sortable-list',\n    templateUrl: './sortable-list.component.html',\n    styleUrls: ['./sortable-list.component.scss'],\n    standalone: false\n})\nexport class NggSortableListComponent {\n  @Input() groups: SortableListGroup[] = []\n  @Input() shouldDisplayCheckboxes = false\n  @Input() isReadOnly = false\n  @Input() isDraggable = true\n  @Input() description = ''\n  @Input() suffixTemplate: TemplateRef<any> | null = null\n\n  @Output() itemSelectionChanged = new EventEmitter<{\n    changedItem: SortableListItem\n    groups: SortableListGroup[]\n  }>()\n  @Output() itemOrderChanged = new EventEmitter<{\n    previousIndex: [number, number]\n    currentIndex: [number, number]\n    groups: SortableListGroup[]\n  }>()\n\n  @ViewChild('sortableListGroups') sortableListGroups!: ElementRef\n\n  focusedIndex: Record<number, number> = { 0: 0 }\n\n  /**\n   * Toggles the selection of a checklist item and updates its position in the list.\n   *\n   * @param item - The checklist item to update.\n   */\n  toggleSelection(item: SortableListItem) {\n    item.selected = !item.selected\n    this.emitCheckListItem(item)\n  }\n\n  /**\n   * Handles the onDragDrop event.\n   *\n   * @param event - The drag and drop event.\n   */\n  onDragDrop(event: CdkDragDrop<SortableListItem[]>) {\n    if (event.previousContainer === event.container) {\n      moveItemInArray(\n        event.container.data,\n        event.previousIndex,\n        event.currentIndex,\n      )\n    } else {\n      transferArrayItem(\n        event.previousContainer.data,\n        event.container.data,\n        event.previousIndex,\n        event.currentIndex,\n      )\n    }\n\n    this.emitItemOrderChanged(\n      [Number(event.previousContainer.id), event.previousIndex],\n      [Number(event.container.id), event.currentIndex],\n    )\n  }\n\n  /**\n   * Handles moving items up or down using the alt + arrow up or alt + arrow down keys.\n   *\n   * @param groupIndex - The index of the group.\n   * @param currentItemIndex - The current index of the item.\n   * @param newItemIndex - The new index of the item.\n   */\n  onAltArrowKeydown(\n    groupIndex: number,\n    currentItemIndex: number,\n    newItemIndex: number,\n    event: any,\n  ) {\n    event.preventDefault()\n\n    let newIndex = newItemIndex\n    let newGroupIndex = groupIndex\n    let transfer = false\n\n    if (newIndex > this.groups[groupIndex].items.length - 1) {\n      newIndex = 0\n      newGroupIndex = groupIndex + 1\n      transfer = true\n      this.focusedIndex[groupIndex] = this.groups[groupIndex].items.length - 2\n    } else if (newIndex < 0) {\n      newGroupIndex = groupIndex - 1\n      newIndex = this.groups[newGroupIndex].items.length\n      transfer = true\n      this.focusedIndex[groupIndex] = 0\n    }\n\n    if (transfer) {\n      transferArrayItem(\n        this.groups[groupIndex].items,\n        this.groups[newGroupIndex].items,\n        currentItemIndex,\n        newIndex,\n      )\n    } else {\n      moveItemInArray(this.groups[groupIndex].items, currentItemIndex, newIndex)\n    }\n\n    this.emitItemOrderChanged(\n      [groupIndex, currentItemIndex],\n      [newGroupIndex, newIndex],\n    )\n\n    setTimeout(() => {\n      this.focusItem(newGroupIndex, newIndex)\n    })\n  }\n\n  /**\n   * Handles focus by arrow keydown event.\n   *\n   * @param groupIndex - The index of the group.\n   * @param itemIndex - The index of the item.\n   * @param event - The keyboard event.\n   */\n  onArrowKeydown(groupIndex: number, itemIndex: number, event: Event) {\n    event.preventDefault()\n    setTimeout(() => {\n      let gi = groupIndex\n\n      if (itemIndex > this.groups[groupIndex].items.length - 1) {\n        gi = groupIndex + 1\n        itemIndex = 0\n      }\n\n      if (itemIndex < 0) {\n        gi = groupIndex - 1\n        if (gi < 0) {\n          return\n        }\n        itemIndex = this.groups[gi].items.length - 1\n      }\n\n      this.focusItem(gi, itemIndex)\n    })\n  }\n\n  /**\n   * Emits the item order changed event.\n   *\n   * @param previousIndex - The previous index of the item.\n   * @param currentIndex - The current index of the item.\n   */\n  private emitItemOrderChanged(\n    previousIndex: [number, number],\n    currentIndex: [number, number],\n  ) {\n    this.itemOrderChanged.emit({\n      previousIndex,\n      currentIndex,\n      groups: [...this.groups],\n    })\n  }\n\n  /**\n   * Emits the selected checklist item through an event.\n   *\n   * @param item - The checklist item to emit.\n   */\n  private emitCheckListItem(item: SortableListItem) {\n    this.itemSelectionChanged.emit({ changedItem: item, groups: this.groups })\n  }\n\n  /**\n   * Focuses on a specific item in the sortable list.\n   *\n   * @param groupIndex - The index of the group.\n   * @param itemIndex - The index of the item.\n   */\n  private focusItem(groupIndex: number, itemIndex: number): void {\n    const groupElements =\n      this.sortableListGroups.nativeElement.querySelectorAll('.item-list-group')\n\n    if (groupElements && groupElements.length > groupIndex) {\n      const itemElements = groupElements[groupIndex].querySelectorAll('.item')\n      if (itemElements && itemElements.length > itemIndex) {\n        if (this.shouldDisplayCheckboxes) {\n          itemElements[itemIndex].querySelector('input').focus()\n        } else {\n          itemElements[itemIndex].focus()\n        }\n        this.focusedIndex[groupIndex] = itemIndex\n      }\n    }\n  }\n\n  /**\n   * Checks if an item has focus.\n   *\n   * @param groupIndex - The index of the group.\n   * @param itemIndex - The index of the item.\n   */\n  itemHasFocus(groupIndex: number, itemIndex: number) {\n    if (!this.focusedIndex[groupIndex]) {\n      this.focusedIndex[groupIndex] = 0\n    }\n    return this.focusedIndex[groupIndex] === itemIndex\n  }\n}\n","<div class=\"gds-sortable-list\">\n  <ng-container>\n    <p class=\"gds-sortable-list-header\">\n      <span class=\"gds-sortable-list-header-title\">{{ description }}</span>\n    </p>\n    <div #sortableListGroups cdkDropListGroup>\n      <div\n        *ngFor=\"let group of groups; let g_i = index\"\n        class=\"gds-sortable-list-group\"\n        [class.drag-enabled]=\"isDraggable && !isReadOnly\"\n        role=\"list\"\n        cdkDropList\n        [cdkDropListData]=\"group.items\"\n        [id]=\"g_i.toString()\"\n        (cdkDropListDropped)=\"onDragDrop($event)\"\n      >\n        <p\n          *ngIf=\"group.title && group.title.length > 0\"\n          class=\"gds-sortable-list-header\"\n        >\n          <span class=\"gds-sortable-list-header-title\">{{ group.title }}</span>\n        </p>\n        <p\n          *ngIf=\"group.description && group.description.length > 0\"\n          class=\"gds-sortable-list-header-description\"\n        >\n          {{ group.description }}\n        </p>\n        <div\n          *ngFor=\"let checklistItem of group.items; let i = index\"\n          [cdkDragDisabled]=\"!isDraggable || isReadOnly\"\n          [cdkDragData]=\"checklistItem\"\n          cdkDrag\n          cdkDragLockAxis=\"y\"\n          class=\"item-box\"\n          role=\"listitem\"\n        >\n          <div *cdkDragPlaceholder class=\"item-custom-placeholder\"></div>\n          <label\n            (keydown.alt.arrowDown)=\"onAltArrowKeydown(g_i, i, i + 1, $event)\"\n            (keydown.alt.arrowUp)=\"onAltArrowKeydown(g_i, i, i - 1, $event)\"\n            (keydown.arrowDown)=\"onArrowKeydown(g_i, i + 1, $event)\"\n            (keydown.arrowUp)=\"onArrowKeydown(g_i, i - 1, $event)\"\n            class=\"gds-form-control item-control align-items-center item\"\n            [tabindex]=\"shouldDisplayCheckboxes ? '-1' : '0'\"\n          >\n            <div class=\"gds-form-control\">\n              <input\n                (change)=\"toggleSelection(checklistItem)\"\n                [checked]=\"checklistItem.selected\"\n                [disabled]=\"isReadOnly\"\n                [type]=\"shouldDisplayCheckboxes ? 'checkbox' : 'hidden'\"\n              />\n              <div class=\"item-box-title\">\n                <span name=\"agendaItemName\"\n                  >{{ checklistItem.name }}\n                  <span\n                    *ngIf=\"checklistItem.hasCustomSuffix\"\n                    class=\"gds-sortable-list-suffix\"\n                  >\n                    <ng-container\n                      *ngTemplateOutlet=\"\n                        suffixTemplate;\n                        context: { $implicit: checklistItem }\n                      \"\n                      class=\"user-icon\"\n                    >\n                    </ng-container>\n                  </span>\n                </span>\n                <br />\n                <span *ngIf=\"!!checklistItem.description\">\n                  <span\n                    class=\"gds-sortable-list-suffix\"\n                    name=\"agendaItemToolTip\"\n                  >\n                    {{ checklistItem.description }}\n                  </span>\n                  <br />\n                </span>\n              </div>\n              <i></i>\n            </div>\n            <div *ngIf=\"isDraggable && !isReadOnly\" class=\"item-grip-icon\">\n              <gds-icon-dot-grid-two *nggCoreElement></gds-icon-dot-grid-two>\n            </div>\n          </label>\n        </div>\n      </div>\n    </div>\n  </ng-container>\n</div>\n","import { DragDropModule } from '@angular/cdk/drag-drop'\nimport { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { FormsModule } from '@angular/forms'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggSortableListComponent } from './sortable-list.component'\n\n@NgModule({\n  imports: [CommonModule, FormsModule, DragDropModule, NggCoreWrapperModule],\n  exports: [NggSortableListComponent],\n  declarations: [NggSortableListComponent],\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NggSortableListModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;MAqCa,wBAAwB,CAAA;AANrC,IAAA,WAAA,GAAA;QAOW,IAAA,CAAA,MAAM,GAAwB,EAAE;QAChC,IAAA,CAAA,uBAAuB,GAAG,KAAK;QAC/B,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,WAAW,GAAG,IAAI;QAClB,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,cAAc,GAA4B,IAAI;AAE7C,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAG7C;AACM,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAIzC;AAIJ,QAAA,IAAA,CAAA,YAAY,GAA2B,EAAE,CAAC,EAAE,CAAC,EAAE;AAqLhD,IAAA;AAnLC;;;;AAIG;AACH,IAAA,eAAe,CAAC,IAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;AAC9B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC9B;AAEA;;;;AAIG;AACH,IAAA,UAAU,CAAC,KAAsC,EAAA;QAC/C,IAAI,KAAK,CAAC,iBAAiB,KAAK,KAAK,CAAC,SAAS,EAAE;AAC/C,YAAA,eAAe,CACb,KAAK,CAAC,SAAS,CAAC,IAAI,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,YAAY,CACnB;QACH;aAAO;YACL,iBAAiB,CACf,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAC5B,KAAK,CAAC,SAAS,CAAC,IAAI,EACpB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,YAAY,CACnB;QACH;AAEA,QAAA,IAAI,CAAC,oBAAoB,CACvB,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,EACzD,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CACjD;IACH;AAEA;;;;;;AAMG;AACH,IAAA,iBAAiB,CACf,UAAkB,EAClB,gBAAwB,EACxB,YAAoB,EACpB,KAAU,EAAA;QAEV,KAAK,CAAC,cAAc,EAAE;QAEtB,IAAI,QAAQ,GAAG,YAAY;QAC3B,IAAI,aAAa,GAAG,UAAU;QAC9B,IAAI,QAAQ,GAAG,KAAK;AAEpB,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACvD,QAAQ,GAAG,CAAC;AACZ,YAAA,aAAa,GAAG,UAAU,GAAG,CAAC;YAC9B,QAAQ,GAAG,IAAI;AACf,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QAC1E;AAAO,aAAA,IAAI,QAAQ,GAAG,CAAC,EAAE;AACvB,YAAA,aAAa,GAAG,UAAU,GAAG,CAAC;YAC9B,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,MAAM;YAClD,QAAQ,GAAG,IAAI;AACf,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;QACnC;QAEA,IAAI,QAAQ,EAAE;YACZ,iBAAiB,CACf,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAC7B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,EAChC,gBAAgB,EAChB,QAAQ,CACT;QACH;aAAO;AACL,YAAA,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,CAAC;QAC5E;AAEA,QAAA,IAAI,CAAC,oBAAoB,CACvB,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAC9B,CAAC,aAAa,EAAE,QAAQ,CAAC,CAC1B;QAED,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,QAAQ,CAAC;AACzC,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;;AAMG;AACH,IAAA,cAAc,CAAC,UAAkB,EAAE,SAAiB,EAAE,KAAY,EAAA;QAChE,KAAK,CAAC,cAAc,EAAE;QACtB,UAAU,CAAC,MAAK;YACd,IAAI,EAAE,GAAG,UAAU;AAEnB,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACxD,gBAAA,EAAE,GAAG,UAAU,GAAG,CAAC;gBACnB,SAAS,GAAG,CAAC;YACf;AAEA,YAAA,IAAI,SAAS,GAAG,CAAC,EAAE;AACjB,gBAAA,EAAE,GAAG,UAAU,GAAG,CAAC;AACnB,gBAAA,IAAI,EAAE,GAAG,CAAC,EAAE;oBACV;gBACF;AACA,gBAAA,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAC9C;AAEA,YAAA,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC;AAC/B,QAAA,CAAC,CAAC;IACJ;AAEA;;;;;AAKG;IACK,oBAAoB,CAC1B,aAA+B,EAC/B,YAA8B,EAAA;AAE9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACzB,aAAa;YACb,YAAY;AACZ,YAAA,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACzB,SAAA,CAAC;IACJ;AAEA;;;;AAIG;AACK,IAAA,iBAAiB,CAAC,IAAsB,EAAA;AAC9C,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5E;AAEA;;;;;AAKG;IACK,SAAS,CAAC,UAAkB,EAAE,SAAiB,EAAA;AACrD,QAAA,MAAM,aAAa,GACjB,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,gBAAgB,CAAC,kBAAkB,CAAC;QAE5E,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,UAAU,EAAE;YACtD,MAAM,YAAY,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC;YACxE,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,SAAS,EAAE;AACnD,gBAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE;oBAChC,YAAY,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE;gBACxD;qBAAO;AACL,oBAAA,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE;gBACjC;AACA,gBAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,SAAS;YAC3C;QACF;IACF;AAEA;;;;;AAKG;IACH,YAAY,CAAC,UAAkB,EAAE,SAAiB,EAAA;QAChD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;QACnC;QACA,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,SAAS;IACpD;+GAxMW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,+eCrCrC,8+GA4FA,EAAA,MAAA,EAAA,CAAA,w6DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,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,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,0BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDvDa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cAGjB,KAAK,EAAA,QAAA,EAAA,8+GAAA,EAAA,MAAA,EAAA,CAAA,w6DAAA,CAAA,EAAA;8BAGV,MAAM,EAAA,CAAA;sBAAd;gBACQ,uBAAuB,EAAA,CAAA;sBAA/B;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBAES,oBAAoB,EAAA,CAAA;sBAA7B;gBAIS,gBAAgB,EAAA,CAAA;sBAAzB;gBAMgC,kBAAkB,EAAA,CAAA;sBAAlD,SAAS;uBAAC,oBAAoB;;;MEzCpB,qBAAqB,CAAA;+GAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAArB,qBAAqB,EAAA,YAAA,EAAA,CAHjB,wBAAwB,CAAA,EAAA,OAAA,EAAA,CAF7B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,CAAA,EAAA,OAAA,EAAA,CAC/D,wBAAwB,CAAA,EAAA,CAAA,CAAA;AAIvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YALtB,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,CAAA,EAAA,CAAA,CAAA;;4FAK9D,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,CAAC;oBAC1E,OAAO,EAAE,CAAC,wBAAwB,CAAC;oBACnC,YAAY,EAAE,CAAC,wBAAwB,CAAC;oBACxC,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA;;;ACbD;;AAEG;;;;"}