@sarasanalytics-com/design-system 0.0.193 → 0.0.194

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"sarasanalytics-com-design-system.mjs","sources":["../../../projects/component-library/src/lib/card/card-custom-header/card-custom-header.component.ts","../../../projects/component-library/src/lib/card/card-custom-header/card-custom-header.component.html","../../../projects/component-library/src/lib/chips/chips.component.ts","../../../projects/component-library/src/lib/chips/chips.component.html","../../../projects/component-library/src/lib/icon/icon.service.ts","../../../projects/component-library/src/lib/icon/icon.component.ts","../../../projects/component-library/src/lib/icon/icon.component.html","../../../projects/component-library/src/lib/avatar/avatar.component.ts","../../../projects/component-library/src/lib/avatar/avatar.component.html","../../../projects/component-library/src/lib/card/card.component.ts","../../../projects/component-library/src/lib/card/card.component.html","../../../projects/component-library/src/lib/spinner/spinner.component.ts","../../../projects/component-library/src/lib/spinner/spinner.component.html","../../../projects/component-library/src/lib/button/button.component.ts","../../../projects/component-library/src/lib/button/button.component.html","../../../projects/component-library/src/lib/accordion/accordion.component.ts","../../../projects/component-library/src/lib/accordion/accordion.component.html","../../../projects/component-library/src/lib/calendar-header/calendar-header.component.ts","../../../projects/component-library/src/lib/calendar-header/calendar-header.component.html","../../../projects/component-library/src/lib/card/card-body/card-body.component.ts","../../../projects/component-library/src/lib/card/card-body/card-body.component.html","../../../projects/component-library/src/lib/card/card-footer-actions/card-footer-actions.component.ts","../../../projects/component-library/src/lib/card/card-footer-actions/card-footer-actions.component.html","../../../projects/component-library/src/lib/card/card-icon/card-icon.component.ts","../../../projects/component-library/src/lib/card/card-icon/card-icon.component.html","../../../projects/component-library/src/lib/card/card-title-actions/card-title-actions.component.ts","../../../projects/component-library/src/lib/card/card-title-actions/card-title-actions.component.html","../../../projects/component-library/src/lib/list/list.component.ts","../../../projects/component-library/src/lib/list/list.component.html","../../../projects/component-library/src/lib/card/checkbox-card/checkbox-card.component.ts","../../../projects/component-library/src/lib/card/checkbox-card/checkbox-card.component.html","../../../projects/component-library/src/lib/card/guide-card/guide-card.component.ts","../../../projects/component-library/src/lib/card/guide-card/guide-card.component.html","../../../projects/component-library/src/lib/message-banner/message-banner.component.ts","../../../projects/component-library/src/lib/message-banner/message-banner.component.html","../../../projects/component-library/src/lib/card/menu-card/menu-card.component.ts","../../../projects/component-library/src/lib/card/menu-card/menu-card.component.html","../../../projects/component-library/src/lib/card/thumbnail-card/thumbnail-card.component.ts","../../../projects/component-library/src/lib/card/thumbnail-card/thumbnail-card.component.html","../../../projects/component-library/src/lib/card-carousel/card-carousel.component.ts","../../../projects/component-library/src/lib/card-carousel/card-carousel.component.html","../../../projects/component-library/src/lib/categories-nav/categories-nav.component.ts","../../../projects/component-library/src/lib/categories-nav/categories-nav.component.html","../../../projects/component-library/src/lib/checkbox/checkbox.component.ts","../../../projects/component-library/src/lib/checkbox/checkbox.component.html","../../../projects/component-library/src/lib/component-library.component.ts","../../../projects/component-library/src/lib/dashboard-loader/dashboard-loader.component.ts","../../../projects/component-library/src/lib/dashboard-loader/dashboard-loader.component.html","../../../projects/component-library/src/lib/tool-tip/tool-tip.component.ts","../../../projects/component-library/src/lib/tool-tip/tool-tip.component.html","../../../projects/component-library/src/lib/grid-cell/grid-cell.component.ts","../../../projects/component-library/src/lib/grid-cell/grid-cell.component.html","../../../projects/component-library/src/lib/data-grid/data-grid.component.ts","../../../projects/component-library/src/lib/data-grid/data-grid.component.html","../../../projects/component-library/src/lib/datepicker/datepicker.component.ts","../../../projects/component-library/src/lib/datepicker/datepicker.component.html","../../../projects/component-library/src/utils/validators.ts","../../../projects/component-library/src/lib/form-input/form-input.component.ts","../../../projects/component-library/src/lib/form-input/form-input.component.html","../../../projects/component-library/src/lib/form-select/form-select.component.ts","../../../projects/component-library/src/lib/form-select/form-select.component.html","../../../projects/component-library/src/lib/message-banner-v2/message-banner-v2.component.ts","../../../projects/component-library/src/lib/message-banner-v2/message-banner-v2.component.html","../../../projects/component-library/src/lib/dialog/dialog.component.ts","../../../projects/component-library/src/lib/dialog/dialog.component.html","../../../projects/component-library/src/lib/dropdown/category-dropdown/category-dropdown.component.ts","../../../projects/component-library/src/lib/dropdown/category-dropdown/category-dropdown.component.html","../../../projects/component-library/src/lib/dropdown/ng-select/ng-select.component.ts","../../../projects/component-library/src/lib/dropdown/ng-select/ng-select.component.html","../../../projects/component-library/src/lib/dropdown-menu/dropdown-menu.component.ts","../../../projects/component-library/src/lib/dropdown-menu/dropdown-menu.component.html","../../../projects/component-library/src/lib/filter/filter.component.ts","../../../projects/component-library/src/lib/filter/filter.component.html","../../../projects/component-library/src/lib/grid-header/grid-header.component.ts","../../../projects/component-library/src/lib/grid-header/grid-header.component.html","../../../projects/component-library/src/lib/header/header.component.ts","../../../projects/component-library/src/lib/header/header.component.html","../../../projects/component-library/src/lib/layout-section/layout-section.component.ts","../../../projects/component-library/src/lib/layout-section/layout-section.component.html","../../../projects/component-library/src/lib/status-dot/status-dot.component.ts","../../../projects/component-library/src/lib/menu/menu-list/menu-item.component.ts","../../../projects/component-library/src/lib/menu/menu-list/menu-item.component.html","../../../projects/component-library/src/lib/skeleton/skeleton-base.component.ts","../../../projects/component-library/src/lib/skeleton/skeleton-shapes.component.ts","../../../projects/component-library/src/lib/skeleton/skeleton-container.component.ts","../../../projects/component-library/src/lib/skeleton/skeleton-presets.ts","../../../projects/component-library/src/lib/skeleton/skeleton-loader.component.ts","../../../projects/component-library/src/lib/menu/menu.component.ts","../../../projects/component-library/src/lib/menu/menu.component.html","../../../projects/component-library/src/lib/menu/menu.directive.ts","../../../projects/component-library/src/lib/left-nav/left-nav.component.ts","../../../projects/component-library/src/lib/left-nav/left-nav.component.html","../../../projects/component-library/src/lib/mini-card/mini-card.component.ts","../../../projects/component-library/src/lib/mini-card/mini-card.component.html","../../../projects/component-library/src/lib/page-layout/page-layout.component.ts","../../../projects/component-library/src/lib/page-layout/page-layout.component.html","../../../projects/component-library/src/lib/progress-bar/progress-bar.component.ts","../../../projects/component-library/src/lib/progress-bar/progress-bar.component.html","../../../projects/component-library/src/lib/query-builder/query-builder.component.ts","../../../projects/component-library/src/lib/query-builder/query-builder.component.html","../../../projects/component-library/src/lib/query-builder/query-builder.service.ts","../../../projects/component-library/src/lib/query-builder/query-builder-demo.component.ts","../../../projects/component-library/src/lib/query-builder-formly/query-builder-formly.component.ts","../../../projects/component-library/src/lib/query-builder-formly/query-builder-formly.component.html","../../../projects/component-library/src/lib/query-builder-textarea/query-builder-textarea.component.ts","../../../projects/component-library/src/lib/query-builder-textarea/query-builder-textarea.component.html","../../../projects/component-library/src/lib/query-builder-textarea/query-builder-textarea-demo.component.ts","../../../projects/component-library/src/lib/radio-button/radio-button.component.ts","../../../projects/component-library/src/lib/radio-button/radio-button.component.html","../../../projects/component-library/src/lib/scrolling-cards/scrolling-cards.component.ts","../../../projects/component-library/src/lib/scrolling-cards/scrolling-cards.component.html","../../../projects/component-library/src/lib/stepper/stepper.component.ts","../../../projects/component-library/src/lib/stepper/stepper.component.html","../../../projects/component-library/src/lib/tabs/tabs.component.ts","../../../projects/component-library/src/lib/tabs/tabs.component.html","../../../projects/component-library/src/lib/toast/toast.component.ts","../../../projects/component-library/src/lib/toast/toast.component.html","../../../projects/component-library/src/lib/typography-animation/typography-animation.component.ts","../../../projects/component-library/src/lib/typography-animation/typography-animation.component.html","../../../projects/component-library/src/lib/component-library.service.ts","../../../projects/component-library/src/interfaces/button-interface.ts","../../../projects/component-library/src/interfaces/icon-interface.ts","../../../projects/component-library/src/interfaces/left-nav-interface.ts","../../../projects/component-library/src/public-api.ts","../../../projects/component-library/src/sarasanalytics-com-design-system.ts"],"sourcesContent":["import { Component, ViewEncapsulation } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-card-title-header',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './card-custom-header.component.html',\r\n styleUrl: './card-custom-header.component.css',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class CardCustomHeaderComponent {\r\n\r\n}\r\n","<div class=\"sa-card-title-header\"><ng-content></ng-content></div>","import { CommonModule } from '@angular/common';\r\nimport { Component } from '@angular/core';\r\nimport { Input } from '@angular/core';\r\nimport { Output } from '@angular/core';\r\nimport { EventEmitter } from '@angular/core';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nlet nextId = 0; // used to give unique ids to inputs used in html\r\n\r\n@Component({\r\n selector: 'sa-chip',\r\n standalone: true,\r\n imports: [CommonModule, MatTooltipModule],\r\n templateUrl: './chips.component.html',\r\n styleUrl: './chips.component.css'\r\n})\r\nexport class ChipsComponent {\r\n @Input() id: string | number;\r\n @Input() iconPath: string;\r\n @Input() text: string | number;\r\n @Input() type: string;\r\n @Input() state: string;\r\n @Input() filling: string;\r\n @Input() iconPosition: string;\r\n @Input() largeStateIcon: string;\r\n @Input() largeStateText: string;\r\n @Input() tooltip: string;\r\n @Input() className: string;\r\n\r\n @Output() onClickEvent = new EventEmitter();\r\n\r\n svgStyle = {}\r\n secondSvgStyle = {}\r\n eventEmitObject = {}\r\n uuid: number = nextId++;\r\n\r\n ngOnChanges(): void {\r\n this.svgStyle = {\r\n '-webkit-mask-image': `url(${this.iconPath})`,\r\n 'mask-image': `url(${this.iconPath})`,\r\n }\r\n this.secondSvgStyle = {\r\n '-webkit-mask-image': `url(${this.largeStateIcon})`,\r\n 'mask-image': `url(${this.largeStateIcon})`,\r\n }\r\n this.eventEmitObject = {\r\n id: this.id\r\n }\r\n }\r\n\r\n buttonClicked(evt: Event) {\r\n this.onClickEvent.emit({\r\n ...this.eventEmitObject,\r\n evt\r\n });\r\n }\r\n}\r\n\r\nexport interface IChip {\r\n id?: string | number;\r\n text: string;\r\n status?: 'active' | 'inactive' | 'disabled';\r\n type?: 'small' | 'regular' | 'large';\r\n state?: 'primary' | 'secondary' | 'neutral' | 'error' | 'warning' | 'success';\r\n filling?: 'filled' | 'outline';\r\n}\r\n","<div class=\"chip {{type}} {{state}} {{filling}} {{className}}\" [matTooltip]=\"tooltip\">\r\n <button type=\"button\" (click)=\"buttonClicked($event)\" id=\"icon-button_{{uuid}}\" class=\"btn_hide\"></button>\r\n <!-- (click)=\"buttonClicked()\" on button instead of label breaks whole thing -->\r\n <label for=\"icon-button_{{uuid}}\" class=\"svg-icon\" [style]=\"svgStyle\"\r\n [style.display]=\"((iconPosition == 'left' || iconPosition == 'both') && type != 'large') ? 'block' : 'none'\">\r\n </label>\r\n\r\n {{text}}\r\n\r\n <div class=\"second-svg-icon\" [style]=\"secondSvgStyle\" [style.display]=\"(type == 'large') ? 'block' : 'none'\"></div>\r\n\r\n {{type == 'large' ? largeStateText : \"\"}}\r\n\r\n <label for=\"icon-button_{{uuid}}\" class=\"svg-icon\" [style]=\"svgStyle\"\r\n [style.display]=\"((iconPosition == 'right' || iconPosition == 'both') && type != 'large') ? 'block' : 'none'\">\r\n </label>\r\n</div>\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable, Injector } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class IconService {\r\n\r\n // http = inject(HttpClient);\r\n private path: string = 'assets/';\r\n\r\n private httpClient: HttpClient | null = null;\r\n\r\n constructor(private injector: Injector) {}\r\n\r\n private get http(): HttpClient {\r\n if (!this.httpClient) {\r\n this.httpClient = this.injector.get(HttpClient);\r\n }\r\n return this.httpClient;\r\n }\r\n\r\n getSvg(iconName: string, customPath?: string): Observable<string> {\r\n const isUrl = /^https?:\\/\\//.test(iconName);\r\n const customSvgUrl = customPath ? customPath + (iconName ? iconName + '.svg' : '') : '';\r\n const svgUrl = isUrl ? iconName : `${this.path}${iconName}.svg`;\r\n\r\n return this.http.get(customSvgUrl || svgUrl, { headers: { 'skip': 'true' }, responseType: 'text' });\r\n }\r\n\r\n setIconPath(path: string) {\r\n if (path) this.path = path;\r\n }\r\n}","import { ChangeDetectorRef, Component, EventEmitter, inject, Input, Output, SimpleChanges, ViewEncapsulation } from '@angular/core';\r\nimport { IconService } from './icon.service';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconName } from '../../interfaces/icon-interface';\r\n\r\n@Component({\r\n selector: 'sa-icon',\r\n standalone: true,\r\n imports: [CommonModule],\r\n providers: [IconService],\r\n templateUrl: './icon.component.html',\r\n styleUrl: './icon.component.css',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class IconComponent {\r\n iconService = inject(IconService);\r\n sanitizer = inject(DomSanitizer);\r\n\r\n @Input('img') img: string;\r\n @Input('imgWidth') imgWidth: string;\r\n @Input('imgHeight') imgHeight: string;\r\n\r\n @Input() icon?: IconName;\r\n @Input('size') size: string;\r\n @Input('color') color: string;\r\n @Input('iconPath') iconPath: string = \"\";\r\n @Input() iconUrl: string = \"\";\r\n @Input('customClass') customClass: string = \"\";\r\n @Input() href: string;\r\n @Input() hrefTarget: string;\r\n @Input() iconPosition: string;\r\n\r\n @Output() onClickEvent = new EventEmitter();\r\n\r\n svgIcon: any;\r\n eventEmitObject = {}\r\n iconStyles: any = {\r\n // fontSize: '44px',\r\n // color: 'red'\r\n };\r\n\r\n constructor(private cdr: ChangeDetectorRef) { }\r\n ngOnInit() {\r\n }\r\n ngOnChanges(changes: SimpleChanges) {\r\n\r\n\r\n if (changes['iconPath'] && !!this.iconPath.trim()) {\r\n this.iconService.getSvg(this.icon || \"\", this.iconPath).subscribe((svg) => {\r\n this.svgIcon = this.sanitizer.bypassSecurityTrustHtml(svg);\r\n })\r\n }\r\n if (changes['icon'] || changes['iconUrl']) {\r\n const icon = this.icon || this.iconUrl;\r\n if (icon) {\r\n this.iconService.getSvg(icon).subscribe((svg) => {\r\n this.svgIcon = this.sanitizer.bypassSecurityTrustHtml(svg);\r\n this.cdr.detectChanges()\r\n })\r\n } else {\r\n this.svgIcon = '';\r\n }\r\n }\r\n if (changes['size'] || changes['color']) {\r\n this.iconStyles.fontSize = this.size + 'px';\r\n this.iconStyles.width = this.iconUrl ? \"fit-content\" : '1em';\r\n this.iconStyles.height = this.iconUrl ? \"fit-content\" : '1em';\r\n this.iconStyles.color = this.color;\r\n }\r\n\r\n \r\n }\r\n iconClicked(evt: Event) {\r\n this.onClickEvent.emit({\r\n ...this.eventEmitObject,\r\n evt\r\n });\r\n if (this.href != \"\") {\r\n if (this.hrefTarget == \"blank\") window.open(this.href);\r\n else if (this.hrefTarget == \"self\") location.href = this.href;\r\n }\r\n }\r\n\r\n}","@if(img){\r\n<img [src]=\"img\" [height]=\"imgHeight || size\" [width]=\"imgWidth || size\" (click)=\"iconClicked($event)\">\r\n}@else{\r\n<span class=\"sa-icon\" [ngClass]=\"{\r\n 'url-icon': iconUrl\r\n }\" [ngClass]=\"customClass ? [customClass] : []\" [innerHTML]=\"svgIcon\" [ngStyle]=\"iconStyles\" (click)=\"iconClicked($event)\">\r\n\r\n</span>\r\n}","import { Component, EventEmitter } from '@angular/core';\r\nimport { Input, Output } from '@angular/core';\r\nimport { NgIf } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'sa-avatar',\r\n standalone: true,\r\n imports: [NgIf],\r\n templateUrl: './avatar.component.html',\r\n styleUrl: './avatar.component.css'\r\n})\r\nexport class AvatarComponent {\r\n @Input() id: string | number;\r\n @Input() imagePath: string;\r\n @Input() altText: string;\r\n @Input() size: string;\r\n\r\n @Output() onClickEvent = new EventEmitter\r\n @Output() onMouseInEvent = new EventEmitter\r\n @Output() onMouseOutEvent = new EventEmitter\r\n\r\n eventEmitObject = {}\r\n\r\n ngOnChanges(): void {\r\n this.eventEmitObject = {\r\n id: this.id\r\n }\r\n }\r\n\r\n avatarClicked(evt: Event) {\r\n this.onClickEvent.emit({\r\n ...this.eventEmitObject,\r\n evt\r\n })\r\n }\r\n\r\n mouseEnter(evt: Event) {\r\n this.onMouseInEvent.emit({\r\n ...this.eventEmitObject,\r\n evt\r\n })\r\n }\r\n\r\n mouseLeave(evt: Event) {\r\n this.onMouseOutEvent.emit({\r\n ...this.eventEmitObject,\r\n evt\r\n })\r\n }\r\n}\r\n","<div class=\"avatar {{size}}\" (click)=\"avatarClicked($event)\" (mouseenter)=\"mouseEnter($event)\"\r\n (mouseleave)=\"mouseLeave($event)\">\r\n <img *ngIf=\"imagePath\" class=\"avatar-img\" alt=\"{{altText}}\" src=\"{{imagePath}}\">\r\n <span *ngIf=\"!imagePath\" class=\"avatar-img\">{{altText}}</span>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, SimpleChanges } from '@angular/core';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { ChipInterface } from '../../interfaces/chip-interface';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { AvatarComponent } from \"../avatar/avatar.component\";\r\n\r\n@Component({\r\n selector: 'sa-card',\r\n standalone: true,\r\n imports: [CommonModule, ChipsComponent, IconComponent, AvatarComponent],\r\n templateUrl: './card.component.html',\r\n styleUrl: './card.component.css'\r\n})\r\nexport class CardComponent {\r\n @Input('title') title: string = '';\r\n @Input('showCardHeader') showCardHeader: boolean = false;\r\n @Input('showCardBody') showCardBody: boolean = false;\r\n @Input('showHeaderBodyDivider') showHeaderBodyDivider: boolean = false;\r\n @Input('showCustomCardBody') showCustomCardBody: boolean = false;\r\n @Input('customWrapperClass') customWrapperClass: string = '';\r\n @Input('chip') chip: ChipInterface | null = null;\r\n @Input('body') body: string = '';\r\n @Input('avatar') avatar: string = '';\r\n @Input('image') image: string = '';\r\n @Input('imageWidth') imageWidth: string = '';\r\n @Input('avatarSize') avatarSize: string;\r\n @Input('href') href: string;\r\n @Input('hrefTarget') hrefTarget: string;\r\n\r\n @Input('icon') icon: string = '';\r\n @Input('iconSize') iconSize: string;\r\n\r\n @Input('subtitle') subtitle: string = '';\r\n @Input('logoIcon') logoIcon: string = '';\r\n\r\n @Input('width') width: string | number;\r\n @Input('height') height: string | number;\r\n @Input('column') column: boolean = false;\r\n\r\n cardStyles: any = {};\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['width']?.currentValue || changes['height']?.currentValue) {\r\n this.cardStyles['width'] = typeof changes['width']?.currentValue === 'string' ? changes['width']?.currentValue : changes['width']?.currentValue + '%';\r\n this.cardStyles['height'] = typeof changes['height']?.currentValue === 'string' ? changes['height']?.currentValue : changes['height']?.currentValue + '%';\r\n }\r\n }\r\n cardClicked(evt: Event) {\r\n if (this.href != \"\") {\r\n if (this.hrefTarget == \"blank\") window.open(this.href);\r\n else if (this.hrefTarget == \"self\") location.href = this.href;\r\n }\r\n }\r\n}\r\n","<div class=\"sa-card\" [ngStyle]=\"cardStyles\" (click)=\"cardClicked($event)\">\r\n <div class=\"sa-card-wrapper\" [ngClass]=\"[column ? 'column' : '', customWrapperClass]\">\r\n <div class=\"\" [ngClass]=\"avatar || image ? 'sa-card-img' : 'sa-card-icon'\">\r\n @if(avatar){\r\n <sa-avatar [imagePath]=\"avatar\" [size]=\"avatarSize\"></sa-avatar>\r\n <!-- <img [src]=\"avatar\" /> -->\r\n }@else if(image){\r\n <img [src]=\"image\" [width]=\"imageWidth\" />\r\n }@else if(icon){\r\n <sa-icon [icon]=\"icon\" [size]=\"iconSize\"></sa-icon>\r\n }@else{\r\n <ng-content select=\"sa-card-icon\"></ng-content>\r\n }\r\n @if(column){\r\n <ng-content select=\"sa-card-title-actions\"></ng-content>\r\n }\r\n </div>\r\n <div class=\"sa-card-container\" [ngClass]=\"showCardHeader ? 'sa-card-custom-container' : ''\">\r\n @if(showCardHeader){\r\n <ng-content select=\"sa-card-title-header\"></ng-content>\r\n @if (showHeaderBodyDivider && body) {\r\n <div class=\"custom-divider\"></div>\r\n }\r\n }\r\n @else if(title){\r\n <div class=\"sa-card-title-container\">\r\n <div class=\"sa-card-title\">{{title}}</div>\r\n @if(chip){\r\n <sa-chip [text]=\"chip.text\" [type]=\"chip.type\" [state]=\"chip.state\" [filling]=\"chip.filling\"></sa-chip>\r\n }\r\n <ng-content select=\"[sa-card-title-actions]\"></ng-content>\r\n </div>\r\n }\r\n @if (showCustomCardBody) {\r\n <ng-content select=\"sa-card-custom-body\"></ng-content>\r\n }\r\n @if(showCardBody && body){\r\n <div class=\"sa-card-body\">\r\n {{body}}\r\n </div>\r\n }\r\n <ng-content select=\"sa-card-footer-actions\"></ng-content>\r\n </div>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-spinner',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './spinner.component.html',\r\n styleUrl: './spinner.component.css'\r\n})\r\nexport class SpinnerComponent {\r\n @Input('default') default: boolean = false;\r\n @Input('size') size: any;\r\n\r\n}\r\n","<span class=\"sa-spinner\" [ngClass]=\"default ? 'default' : ''\" [ngStyle]=\"{'fontSize': size+'px'}\"></span>","import { Component, Output, SimpleChanges } from '@angular/core';\r\nimport { Input } from '@angular/core';\r\nimport { EventEmitter } from '@angular/core';\r\nimport { NgIf } from '@angular/common';\r\nimport { NgStyle } from '@angular/common';\r\nimport { SpinnerComponent } from '../spinner/spinner.component';\r\nimport { IconName } from '../../interfaces/icon-interface';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { IconService } from '../icon/icon.service';\r\n\r\nlet nextId = 0; // used to give unique ids to inputs used in html\r\n\r\n@Component({\r\n selector: 'sa-button',\r\n standalone: true,\r\n imports: [NgIf, NgStyle, SpinnerComponent, HttpClientModule, IconComponent],\r\n providers: [IconService],\r\n templateUrl: './button.component.html',\r\n styleUrl: './button.component.css'\r\n})\r\n\r\nexport class ButtonComponent {\r\n @Input() id: string | number;\r\n @Input() type: string;\r\n @Input() state: string;\r\n @Input() size: string;\r\n @Input() text: string | number;\r\n @Input() ImagePath: string;\r\n @Input() icon: IconName;\r\n @Input() iconPosition: string;\r\n @Input() href: string;\r\n @Input() hrefTarget: string;\r\n @Input() width: string;\r\n @Input() isSubmit: boolean = false;\r\n @Input() buttonIconSize: string;\r\n\r\n @Input() showSpinner: boolean = false;\r\n\r\n @Output() onClickEvent = new EventEmitter();\r\n @Output() onMouseInEvent = new EventEmitter();\r\n @Output() onMouseOutEvent = new EventEmitter();\r\n\r\n svgStyle = {}\r\n eventEmitObject = {}\r\n uuid: number = nextId++;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.svgStyle = {\r\n '-webkit-mask-image': `url(${this.ImagePath})`,\r\n 'mask-image': `url(${this.ImagePath})`,\r\n }\r\n this.eventEmitObject = {\r\n id: this.id\r\n }\r\n if (changes && changes['width'] && changes['width'].currentValue) {\r\n console.log(this.width)\r\n }\r\n }\r\n\r\n buttonClicked(evt: Event) {\r\n if (this.state == \"disabled\") return;\r\n this.onClickEvent.emit({\r\n ...this.eventEmitObject,\r\n evt\r\n });\r\n if (this.href != \"\") {\r\n if (this.hrefTarget == \"blank\") window.open(this.href);\r\n else if (this.hrefTarget == \"self\") location.href = this.href;\r\n }\r\n }\r\n\r\n mouseIn() {\r\n if (this.state == \"disabled\") return;\r\n this.onMouseInEvent.emit();\r\n }\r\n\r\n mouseOut() {\r\n if (this.state == \"disabled\") return;\r\n this.onMouseOutEvent.emit();\r\n }\r\n}\r\n","<button (click)=\"buttonClicked($event)\" id=\"sa-button-{{uuid}}\" class=\"btn-hide\"\r\n [type]=\"isSubmit ? 'submit' : 'button'\"></button>\r\n<!-- (click)=\"buttonClicked()\" on button instead of label breaks whole thing -->\r\n<label for=\"sa-button-{{uuid}}\" [ngStyle]=\"{'width':width}\" role=\"button\" tabindex=\"0\" (mouseenter)=\"mouseIn()\"\r\n (mouseleave)=\"mouseOut()\" (keydown.enter)=\"buttonClicked($event)\" for=\"sa-button\"\r\n class=\"sa-button {{state}} {{type}} {{size}}\">\r\n @if(showSpinner){\r\n <sa-spinner [default]=\"true\"></sa-spinner>\r\n }\r\n @if(ImagePath) {\r\n <div class=\"svg-icon\" [style]=\"svgStyle\"\r\n [style.display]=\"(iconPosition == 'left' || iconPosition == 'both') ? 'block' : 'none'\"></div>\r\n {{text}}\r\n <div class=\"svg-icon\" [style]=\"svgStyle\"\r\n [style.display]=\"(iconPosition == 'right' || iconPosition == 'both') ? 'block' : 'none'\"></div>\r\n } @else if (icon) {\r\n <sa-icon [icon]=\"icon\" [size]=\"buttonIconSize\"\r\n [style.display]=\"(iconPosition == 'left' || iconPosition == 'both') ? 'flex' : 'none'\"></sa-icon>\r\n {{text}}\r\n <sa-icon [icon]=\"icon\" [size]=\"buttonIconSize\"\r\n [style.display]=\"(iconPosition == 'right' || iconPosition == 'both') ? 'flex' : 'none'\"></sa-icon>\r\n } @else {\r\n {{text}}\r\n }\r\n</label>\r\n","import { Component, EventEmitter, Input, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CardCustomHeaderComponent } from '../card/card-custom-header/card-custom-header.component';\r\nimport { CardComponent } from '../card/card.component'\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { ChipsComponent } from '../chips/chips.component'\r\nimport { FieldType, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { includes as _includes, replace as _replace, toString as _toString, get as _get, filter as _filter, map as _map } from 'lodash';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'sa-accordion',\r\n standalone: true,\r\n imports: [CardCustomHeaderComponent, CardComponent, FormsModule, MatCheckboxModule, CommonModule, IconComponent, MatTooltipModule, MatExpansionModule, ChipsComponent, ButtonComponent],\r\n templateUrl: './accordion.component.html',\r\n styleUrl: './accordion.component.css'\r\n})\r\nexport class AccordionComponent extends FieldType implements OnChanges {\r\n selectedCount: number = 0;\r\n private initialChipState: string = 'neutral';\r\n showingAdvancedFeatures: boolean = false;\r\n advancedFeatureHeading: string = ''\r\n parentField: FormlyFieldConfig;\r\n private buttonClick = new Subject<any>();\r\n\r\n ngOnInit() {\r\n this.parentField = _get(this.field, 'parent')\r\n if (this.props?.['titleChip']?.['state']) {\r\n this.initialChipState = this.props['titleChip']['state'];\r\n }\r\n this.showingAdvancedFeatures = this.props?.['showAdvancedFeatures'];\r\n this.checkForPreselectedFeatures();\r\n this.buttonClick.pipe(\r\n debounceTime(300)\r\n ).subscribe(button => {\r\n this.field?.props?.['onButtonClick'](button);\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['field'] || changes['model']) {\r\n this.parentField = _get(this.field, 'parent');\r\n if (this.props?.['titleChip']?.['state']) {\r\n this.initialChipState = this.props['titleChip']['state'];\r\n }\r\n this.showingAdvancedFeatures = this.props?.['showAdvancedFeatures'];\r\n this.checkForPreselectedFeatures();\r\n }\r\n }\r\n\r\n checkForPreselectedFeatures() {\r\n // Initialize count\r\n let count = 0;\r\n \r\n // Count selected features directly without creating intermediate arrays\r\n if (this.props['featuresList']) {\r\n for (let i = 0; i < this.props['featuresList'].length; i++) {\r\n if (this.props['featuresList'][i].isSelected) {\r\n count++;\r\n }\r\n }\r\n }\r\n \r\n // Count selected advanced features\r\n if (this.props['advancedFeatures']) {\r\n for (let i = 0; i < this.props['advancedFeatures'].length; i++) {\r\n if (this.props['advancedFeatures'][i].isSelected) {\r\n count++;\r\n }\r\n }\r\n }\r\n \r\n this.selectedCount = count;\r\n this.updateChipState();\r\n }\r\n\r\n getChipText(): string {\r\n const text = this.props?.['titleChip']?.['text'] || '';\r\n if (_includes(text, '{count}')) {\r\n return _replace(text, '{count}', _toString(this.selectedCount));\r\n }\r\n return text;\r\n }\r\n\r\n onCardClick(cardDetails: any): void {\r\n cardDetails.isSelected = cardDetails?.disabled ? cardDetails.isSelected : !cardDetails.isSelected;\r\n this.notifyCheckboxChange(cardDetails);\r\n }\r\n\r\n onCheckboxClick(event: any, cardDetails: any): void {\r\n event.stopPropagation();\r\n this.notifyCheckboxChange(cardDetails);\r\n }\r\n\r\n onAccordionOpened() {\r\n if (!this.props['accordionExpanded']) {\r\n this.props['accordionExpanded'] = true;\r\n }\r\n }\r\n\r\n onAccordionClosed() {\r\n if (this.props['accordionExpanded']) {\r\n this.props['accordionExpanded'] = false;\r\n }\r\n }\r\n\r\n notifyCheckboxChange(cardDetails: any) {\r\n if (cardDetails?.disabled) {\r\n return;\r\n }\r\n\r\n // Update the selected count\r\n if (cardDetails.isSelected) {\r\n this.selectedCount++;\r\n } else {\r\n this.selectedCount--;\r\n }\r\n\r\n // Update chip state based on the selection\r\n this.updateChipState();\r\n\r\n // Pre-allocate array with estimated capacity to avoid resizing\r\n const featuresList = this.props['featuresList'] || [];\r\n const advancedFeatures = this.props['advancedFeatures'] || [];\r\n const selectedFeatures = [];\r\n \r\n // Use local variables to avoid repeated property access\r\n let feature;\r\n \r\n // Single pass through featuresList\r\n for (let i = 0, len = featuresList.length; i < len; i++) {\r\n feature = featuresList[i];\r\n if (feature.isSelected) {\r\n selectedFeatures.push(feature);\r\n }\r\n }\r\n \r\n // Single pass through advancedFeatures\r\n for (let i = 0, len = advancedFeatures.length; i < len; i++) {\r\n feature = advancedFeatures[i];\r\n if (feature.isSelected) {\r\n selectedFeatures.push(feature);\r\n }\r\n }\r\n\r\n // Update the form control with the collected selected features\r\n this.formControl.setValue(selectedFeatures);\r\n }\r\n\r\n\r\n updateChipState() {\r\n if (this.props['titleChip'] && this.props['titleChip']['changeStateTo']) {\r\n this.props['titleChip']['state'] = this.selectedCount > 0 ? this.props['titleChip']['changeStateTo'] : this.initialChipState;\r\n }\r\n }\r\n\r\n onAdvancedFeaturesOpened(): void {\r\n this.props['advancedFeaturesExpanded'] = true;\r\n }\r\n\r\n onAdvancedFeaturesClosed(): void {\r\n this.props['advancedFeaturesExpanded'] = false;\r\n }\r\n\r\n actionHandler(button: any, event: Event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n this.buttonClick.next(button);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.buttonClick.complete();\r\n }\r\n\r\n //pending work on preselected data\r\n}\r\n","<mat-accordion class=\"accordion-container\">\r\n <mat-expansion-panel hideToggle [expanded]=\"props?.['accordionExpanded'] || false\" (opened)=\"onAccordionOpened()\"\r\n (closed)=\"onAccordionClosed()\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <div class=\"panel-container\">\r\n @if(props?.['accordionExpanded']){\r\n <span class=\"d-flex align-center\">\r\n <sa-icon [icon]=\"props?.['expandedIcon'] || 'downChevronOutlined'\" class=\"d-flex info-icon\"\r\n size=\"20\"></sa-icon>\r\n </span>\r\n }@else{\r\n <span class=\"d-flex align-center\">\r\n <sa-icon [icon]=\"props?.['collapsedIcon'] || 'rightChevronOutlined'\" class=\"d-flex info-icon\"\r\n size=\"20\"></sa-icon>\r\n </span>\r\n }\r\n <span class=\"panel-title\">{{props?.['panelTitle']}}</span>\r\n <div>\r\n <sa-chip *ngIf=\"props?.['titleChip']\" [type]=\"props['titleChip']?.['type']\"\r\n [state]=\"props['titleChip']?.['state']\" [filling]=\"props['titleChip']?.['filling']\"\r\n [text]=\"getChipText()\"></sa-chip>\r\n </div>\r\n </div>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div class=\"custom-divider\"></div>\r\n <div class=\"accordion-cards-container\">\r\n <div *ngFor=\"let subFeature of props?.['featuresList']\">\r\n <sa-card [column]=\"false\" [showCardHeader]=\"true\" [showCardBody]=\"false\"\r\n [width]=\"props?.['featureCardWidth'] || '632px'\" [showHeaderBodyDivider]=\"false\"\r\n [customWrapperClass]=\"props?.['customWrapperClass']\" (click)=\"onCardClick(subFeature)\"\r\n class=\"{{subFeature?.['disabled'] && subFeature?.['isSelected'] ? 'card-selected' : ''}} {{subFeature?.['disabled'] ? 'disabled-card': ''}}\">\r\n <sa-card-title-header>\r\n <div class=\"sa-card-accordion-title-container\">\r\n @if(subFeature?.['disabled']){\r\n <span class=\"disabled-icon\">\r\n <sa-icon icon=\"disabledCheckboxFilled\"\r\n customClass=\"auto-dimensions disabled-checkbox-icon\" class=\"d-flex\"></sa-icon>\r\n </span>\r\n }@else{\r\n <mat-checkbox class=\"checkbox-style\" [(ngModel)]=\"subFeature.isSelected\"\r\n (click)=\"onCheckboxClick($event, subFeature)\"></mat-checkbox>\r\n }\r\n <div class=\"sa-card-title-icon-container\">\r\n <div class=\"sa-card-custom-title\">\r\n {{subFeature?.title}}\r\n </div>\r\n @if(subFeature?.tooltip){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\"\r\n customClass=\"info-icon\" [matTooltip]=\"subFeature?.tooltip\"\r\n matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon\"></sa-icon>\r\n </span>\r\n }\r\n @if(subFeature?.featureChip && subFeature?.featureChip?.length > 0){\r\n <div class=\"chips-container\">\r\n @for(chip of subFeature.featureChip; track chip) {\r\n <sa-chip [type]=\"chip?.['type']\"\r\n [state]=\"chip?.['state']\"\r\n [filling]=\"chip?.['filling']\"\r\n [tooltip]=\"chip?.['tooltip']\"\r\n [text]=\"chip?.['label']\"></sa-chip>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </sa-card-title-header>\r\n </sa-card>\r\n </div>\r\n </div>\r\n <!-- Advanced Features accordion -->\r\n <div *ngIf=\"props?.['advancedFeatures'] && props['advancedFeatures'].length > 0\"\r\n class=\"advanced-features-section\">\r\n <mat-expansion-panel hideToggle [expanded]=\"props?.['advancedFeaturesExpanded'] || false\"\r\n (opened)=\"onAdvancedFeaturesOpened()\" (closed)=\"onAdvancedFeaturesClosed()\" class=\"advancedAccordion\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <div class=\"panel-container\">\r\n @if(!props?.['advancedFeaturesExpanded']){\r\n <span class=\"d-flex align-center source-icon\">\r\n <sa-icon [icon]=\"props?.['advancedFeatureCollapsedIcon'] || 'sourcesOutlined'\"\r\n class=\"d-flex\" customClass=\"colored-icon\" size=\"16\"></sa-icon>\r\n </span>\r\n }@else{\r\n <span class=\"d-flex align-center\">\r\n <sa-icon [icon]=\"props?.['advancedFeatureExpandedIcon'] || 'downChevronOutlined'\"\r\n class=\"d-flex\" size=\"20\"></sa-icon>\r\n </span>\r\n }\r\n <span class=\"advanced-title\">{{ props?.['advancedFeaturesExpanded'] ?\r\n props?.['advancedFeatureToggleTitle'] :\r\n props?.['advancedFeatureTitle'] }}</span>\r\n </div>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div class=\"accordion-advanced-container\">\r\n <div class=\"disclaimer-container\">\r\n <span class=\"tooltip-container\">\r\n <sa-icon icon=\"infoCircleOutlined\" customClass=\"info-icon\" class=\"tooltip-icon\"></sa-icon>\r\n </span>\r\n <span class=\"disclaimer-style\">{{props?.['advancedFeatureDisclaimer']}}</span>\r\n @if(props?.['advancedFeatureDisclaimerButtons']) {\r\n <div class=\"disclaimer-buttons-container\">\r\n <ng-container *ngFor=\"let button of props['advancedFeatureDisclaimerButtons']\">\r\n <sa-button [text]=\"button.text\" [type]=\"button.type\" [size]=\"button.size\"\r\n [state]=\"button.state\" [iconPosition]=\"button.iconPosition\" [icon]=\"button.icon\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (click)=\"actionHandler(button, $event)\"></sa-button>\r\n </ng-container>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"accordion-cards-container\">\r\n <div *ngFor=\"let subFeature of props?.['advancedFeatures']\">\r\n <sa-card [column]=\"false\" [showCardHeader]=\"true\" [showCardBody]=\"false\"\r\n [width]=\"props?.['advancedFeatureCardWidth'] || '632px'\" [showHeaderBodyDivider]=\"false\"\r\n [customWrapperClass]=\"props?.['customWrapperClass']\" (click)=\"onCardClick(subFeature)\"\r\n class=\"{{subFeature?.['disabled'] && subFeature?.['isSelected'] ? 'card-selected' : ''}} {{subFeature?.['disabled'] ? 'disabled-card': ''}}\">\r\n <sa-card-title-header>\r\n <div class=\"sa-card-accordion-title-container\">\r\n @if(subFeature?.['disabled']){\r\n <span class=\"disabled-icon\">\r\n <sa-icon icon=\"disabledCheckboxFilled\"\r\n customClass=\"auto-dimensions disabled-checkbox-icon\"\r\n class=\"d-flex\"></sa-icon>\r\n </span>\r\n }@else{\r\n <mat-checkbox class=\"checkbox-style\" [(ngModel)]=\"subFeature.isSelected\"\r\n (click)=\"onCheckboxClick($event, subFeature)\"></mat-checkbox>\r\n }\r\n <div class=\"sa-card-title-icon-container\">\r\n <div class=\"sa-card-custom-title\">\r\n {{subFeature?.title}}\r\n </div>\r\n @if(subFeature?.tooltip){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['advancedTooltipIcon'] || 'infoCircleOutlined'\"\r\n customClass=\"info-icon\" [matTooltip]=\"subFeature?.tooltip\"\r\n matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon\"></sa-icon>\r\n </span>\r\n }\r\n </div>\r\n @if(subFeature?.featureChip && subFeature?.featureChip?.length > 0){\r\n <div class=\"chip-container\">\r\n @for(chip of subFeature.featureChip; track chip) {\r\n <sa-chip [type]=\"chip?.['type']\"\r\n [state]=\"chip?.['state']\"\r\n [filling]=\"chip?.['filling']\"\r\n [tooltip]=\"chip?.['tooltip']\"\r\n [text]=\"chip?.['label']\"></sa-chip>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </sa-card-title-header>\r\n </sa-card>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n </div>\r\n </mat-expansion-panel>\r\n</mat-accordion>","import {\r\n ChangeDetectorRef,\r\n Component,\r\n Inject,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport {\r\n DateAdapter,\r\n MatDateFormats,\r\n MAT_DATE_FORMATS,\r\n} from '@angular/material/core';\r\nimport { MatCalendar } from '@angular/material/datepicker';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButton } from '@angular/material/button';\r\nimport { NgFor } from '@angular/common';\r\nimport { MatDateRangePicker } from '@angular/material/datepicker';\r\n\r\n\r\nlet nextId = 0; // used to give unique ids to inputs used in html\r\n\r\n@Component({\r\n templateUrl: './calendar-header.component.html',\r\n styleUrls: ['./calendar-header.component.css'],\r\n standalone: true,\r\n imports: [\r\n NgFor,\r\n MatIconModule,\r\n MatButton\r\n ],\r\n // changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CalendarHeaderComponent<D> implements OnDestroy {\r\n uuid: number = nextId++;\r\n\r\n private readonly destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private calendar: MatCalendar<D>, // calendar instance of picker\r\n private dateAdapter: DateAdapter<D>, // native or moment date adapter\r\n private picker: MatDateRangePicker<D>,\r\n @Inject(MAT_DATE_FORMATS) private dateFormats: MatDateFormats, // for formatting\r\n cdr: ChangeDetectorRef\r\n ) {\r\n // make sure your header stays in sync with the calendar:\r\n calendar.stateChanges\r\n .pipe(takeUntil(this.destroy$)) // unsubscribe when destroyed\r\n .subscribe(() => cdr.markForCheck());\r\n\r\n }\r\n\r\n selectedPreset = \"Custom\"\r\n presets = [\r\n \"This Quarter\",\r\n \"Last Quarter\",\r\n \"Last 6 Months\",\r\n \"This Year\",\r\n \"Last Year\",\r\n \"Custom\"\r\n ]\r\n // active date label rendered between the arrow buttons\r\n\r\n ngOnInit() {\r\n const currentRange: any = this.calendar.selected;\r\n\r\n currentRange?.start.setHours(0, 0, 0, 0);\r\n currentRange?.end.setHours(0, 0, 0, 0);\r\n\r\n // To pre-select a preset when the calendar opens.\r\n // Match the already selected date range with the date-ranges of all presets.\r\n // If already selected date range matches with a preset, pre-select it.\r\n\r\n for (let i = 0; i < this.presets.length; i++) {\r\n const tempRange = this.findDate(this.presets[i]);\r\n if (tempRange.newStart.getTime() == currentRange.start.getTime() && tempRange.newEnd.getTime() == currentRange.end.getTime()) {\r\n this.selectedPreset = this.presets[i];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n get periodLabel(): string {\r\n // use date adapter to format the label, e.g. \"SEP 2020\"\r\n return this.dateAdapter\r\n .format(this.calendar.activeDate, this.dateFormats.display.monthYearLabel)\r\n .toLocaleUpperCase();\r\n }\r\n\r\n previousClicked(mode: 'month' | 'year'): void {\r\n this.changeDate(mode, -1);\r\n }\r\n\r\n nextClicked(mode: 'month' | 'year'): void {\r\n this.changeDate(mode, 1);\r\n }\r\n\r\n changeView() {\r\n this.calendar.currentView =\r\n this.calendar.currentView == \"month\"\r\n ? \"year\"\r\n : this.calendar.currentView == \"year\"\r\n ? \"multi-year\"\r\n : \"month\";\r\n }\r\n\r\n today = new Date();\r\n\r\n presetChanged(evt: any) {\r\n const newRange: any = this.findDate(evt.target.value);\r\n this.calendar.activeDate = newRange.newStart;\r\n this.picker.select(newRange.newStart);\r\n this.picker.select(newRange.newEnd);\r\n }\r\n\r\n findDate(selected: string) {\r\n const date = this.today.getDate();\r\n const month = this.today.getMonth();\r\n const year = this.today.getFullYear();\r\n let newRange: any;\r\n this.selectedPreset = selected;\r\n switch (selected) {\r\n case \"This Quarter\": {\r\n const thisQuarterMonth = Math.floor(month / 3) * 3;\r\n const start = this.dateAdapter.createDate(year, thisQuarterMonth, 1);\r\n const end = this.dateAdapter.createDate(year, thisQuarterMonth + 3, 1);\r\n newRange = {\r\n newStart: start,\r\n newEnd: end,\r\n }\r\n break;\r\n }\r\n case \"Last Quarter\": {\r\n const lastQuarterMonth = (Math.floor(month / 3) * 3) - 3;\r\n const start = this.dateAdapter.createDate(year, lastQuarterMonth, 1);\r\n const end = this.dateAdapter.createDate(year, lastQuarterMonth + 3, 1);\r\n newRange = {\r\n newStart: start,\r\n newEnd: end,\r\n }\r\n break;\r\n }\r\n case \"Last 6 Months\": {\r\n const end = this.dateAdapter.createDate(year, month, date);\r\n const start = this.dateAdapter.addCalendarMonths(end, -6);\r\n newRange = {\r\n newStart: start,\r\n newEnd: end,\r\n }\r\n break;\r\n }\r\n case \"This Year\": {\r\n const start = this.dateAdapter.createDate(year, 0, 1);\r\n const end = this.dateAdapter.createDate(year, 11, 31);\r\n newRange = {\r\n newStart: start,\r\n newEnd: end,\r\n }\r\n break;\r\n }\r\n case \"Last Year\": {\r\n const start = this.dateAdapter.createDate(year - 1, 0, 1);\r\n const end = this.dateAdapter.createDate(year - 1, 11, 31);\r\n newRange = {\r\n newStart: start,\r\n newEnd: end,\r\n }\r\n break;\r\n }\r\n default: {\r\n newRange = {\r\n newStart: new Date(),\r\n newEnd: new Date(),\r\n }\r\n }\r\n }\r\n return newRange;\r\n }\r\n\r\n private changeDate(mode: 'month' | 'year', amount: -1 | 1): void {\r\n // increment or decrement month or year\r\n this.calendar.activeDate =\r\n mode === 'month'\r\n ? this.dateAdapter.addCalendarMonths(this.calendar.activeDate, amount)\r\n : this.dateAdapter.addCalendarYears(this.calendar.activeDate, amount);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(); // will trigger unsubscription in takeUntil\r\n }\r\n}\r\n","<div class=\"range-preset\">\r\n <div class=\"preset\" *ngFor=\"let preset of presets, let i = index\">\r\n <label class=\"preset-label {{preset == selectedPreset ? 'preset-selected' : ''}}\"\r\n for=\"preset-radio-{{i}}\">{{preset}}</label>\r\n <input class=\"preset-radio\" (change)=\"presetChanged($event)\" [checked]=\"preset == selectedPreset\"\r\n id=\"preset-radio-{{i}}\" type=\"radio\" name=\"preset-radios-{{uuid}}\" value=\"{{preset}}\">\r\n </div>\r\n</div>\r\n\r\n<div class=\"header\">\r\n <button mat-icon-button (click)=\"previousClicked('month')\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </button>\r\n\r\n <button mat-button class=\"header-label\" (click)=\"changeView()\">{{ periodLabel }}</button>\r\n\r\n <button mat-icon-button (click)=\"nextClicked('month')\">\r\n <mat-icon>keyboard_arrow_right</mat-icon>\r\n </button>\r\n</div>\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-card-custom-body',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './card-body.component.html',\r\n styleUrl: './card-body.component.css'\r\n})\r\nexport class CardBodyComponent {\r\n\r\n}\r\n","<div class=\"sa-card-body\"><ng-content></ng-content></div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-card-footer-actions',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './card-footer-actions.component.html',\r\n styleUrl: './card-footer-actions.component.css'\r\n})\r\nexport class CardFooterActionsComponent {\r\n\r\n}\r\n","<div class=\"sa-card-footer-actions\">\r\n <ng-content></ng-content>\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-card-icon',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './card-icon.component.html',\r\n styleUrl: './card-icon.component.css'\r\n})\r\nexport class CardIconComponent {\r\n\r\n}\r\n","<ng-content></ng-content>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-card-title-actions',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './card-title-actions.component.html',\r\n styleUrl: './card-title-actions.component.css'\r\n})\r\nexport class CardTitleActionsComponent {\r\n\r\n}\r\n","<div class=\"sa-card-title-actions\"><ng-content></ng-content></div>","import { Component, Input } from '@angular/core';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'lib-list',\r\n standalone: true,\r\n imports: [IconComponent, CommonModule],\r\n templateUrl: './list.component.html',\r\n styleUrl: './list.component.css'\r\n})\r\nexport class ListComponent {\r\n @Input() listData: { icon?: string; text: string }[] = [];\r\n @Input('featuresIcon') featuresIcon: string = '';\r\n}\r\n","<div class=\"feature-list-container\">\r\n <div class=\"feature-item\" *ngFor=\"let item of listData\">\r\n <div *ngIf=\"featuresIcon\" class=\"feature-icon\">\r\n <sa-icon [icon]=\"featuresIcon\" customClass=\"colored-icon\"></sa-icon>\r\n </div>\r\n <div>\r\n <span class=\"feature-text\">{{ item?.text }}</span>\r\n </div>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CardComponent } from '../card.component';\r\nimport { IconComponent } from '../../icon/icon.component';\r\nimport { ListComponent } from '../../list/list.component';\r\nimport { CardBodyComponent } from '../card-body/card-body.component';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CardTitleActionsComponent } from '../card-title-actions/card-title-actions.component';\r\nimport { CardCustomHeaderComponent } from '../card-custom-header/card-custom-header.component';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType } from '@ngx-formly/core';\r\nimport { ButtonComponent } from '../../button/button.component';\r\n\r\n@Component({\r\n selector: 'sa-checkbox-card',\r\n standalone: true,\r\n imports: [CardComponent, IconComponent, ListComponent, CardBodyComponent, MatCheckboxModule, CommonModule, CardTitleActionsComponent, CardCustomHeaderComponent, FormsModule, ReactiveFormsModule, ButtonComponent],\r\n templateUrl: './checkbox-card.component.html',\r\n styleUrl: './checkbox-card.component.css'\r\n})\r\nexport class CheckboxCardComponent extends FieldType {\r\n\r\n ngOnInit() {\r\n // console.log(this)\r\n }\r\n\r\n onCardClick(event: MouseEvent): void {\r\n this.props['isCardSelected'] = !this.props['isCardSelected'];\r\n this.formControl.setValue(!this.formControl.value);\r\n }\r\n\r\n onCheckboxClick(event: Event): void {\r\n event.stopPropagation();\r\n }\r\n\r\n\r\n override get formControl(): FormControl {\r\n return super.formControl as FormControl;\r\n }\r\n\r\n actionHandler(button: any) {\r\n this.field.props['onButtonClick'](this.field);\r\n }\r\n}\r\n","<sa-card [width]=\"props['width']\" [customWrapperClass]=\"props['customWrapperClass']\"\r\n (click)=\"!props['disabled'] && onCardClick($event)\" [showCardBody]=\"false\" [showCardHeader]=\"true\"\r\n [showCustomCardBody]=\"true\" class=\"checkbox-card {{props['isCardSelected'] ? 'card-selected': ''}}\"\r\n [style.width]=\"props['width']\">\r\n <sa-card-title-header>\r\n <div class=\"sa-card-custom-header-container\">\r\n <div class=\"sa-card-title-logo-container\">\r\n <div class=\"sa-card-title-logo {{props['disabled'] ? 'disabled-card': ''}}\"><sa-icon\r\n [icon]=\"props['featureIcon']\" customClass=\"auto-dimensions colored-icon\"></sa-icon>\r\n </div>\r\n <div class=\"sa-card-custom-title\">{{props['title']}}</div>\r\n </div>\r\n <div class=\"sa-card-titleIcon\">\r\n <sa-card-title-actions>\r\n <div class=\"sa-document-action\">\r\n @if(props['disabled']){\r\n <sa-icon icon=\"disabledCheckboxFilled\"\r\n customClass=\"auto-dimensions disabled-checkbox-icon\"></sa-icon>\r\n }@else{\r\n <mat-checkbox class=\"checkbox-style\" [formControl]=\"formControl\"\r\n (click)=\"onCheckboxClick($event)\" [disabled]=\"props['disabled']\"></mat-checkbox>\r\n }\r\n </div>\r\n </sa-card-title-actions>\r\n </div>\r\n </div>\r\n </sa-card-title-header>\r\n <sa-card-custom-body>\r\n @if(props['listItems']){\r\n <lib-list [listData]=\"props['listItems']\" [featuresIcon]=\"props['listIcon']\"></lib-list>\r\n }@else if(props['showButtons']){\r\n <div class=\"buttons-container\">\r\n <ng-container *ngFor=\"let button of props['showButtons']\">\r\n <ng-container *ngIf=\"button.type === 'submit'\">\r\n <div class=\"button-content\">\r\n @if(props['description']){\r\n @if(props['descriptionIcon']){\r\n <div class=\"description-container\">\r\n <sa-icon [icon]=\"props['descriptionIcon']\" customClass=\"auto-dimensions disabled-icon\"\r\n class=\"description-icon\"></sa-icon>\r\n <span class=\"description-style\">{{props['description']}}</span>\r\n </div>\r\n }\r\n }\r\n <sa-button (click)=\"actionHandler(button)\" [text]=\"button.label\" [type]=\"button.buttonType\"\r\n [size]=\"button.size\" [state]=\"button.state\" [icon]=\"button.icon\"\r\n [iconPosition]='button.iconPosition' class=\"checkbox-card-action-button\"\r\n [buttonIconSize]=\"button.iconSize\"></sa-button>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n }\r\n </sa-card-custom-body>\r\n</sa-card>","import { Component, Input, Output, EventEmitter, ViewEncapsulation, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { GuideStep } from '../../../interfaces/guide-card-interface';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChipsComponent } from '../../chips/chips.component';\r\nimport { isUndefined as _isUndefined, first as _first } from 'lodash'\r\nimport { IconComponent } from '../../icon/icon.component';\r\n\r\n@Component({\r\n selector: 'sa-guide-card',\r\n standalone: true,\r\n imports: [CommonModule, ChipsComponent, IconComponent],\r\n templateUrl: './guide-card.component.html',\r\n styleUrls: ['./guide-card.component.css'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class GuideCardComponent implements OnChanges {\r\n @Input() title: string = '';\r\n @Input() steps: GuideStep[] | any = []\r\n @Input() selectable: boolean = false;\r\n @Input() selectedStep: any = {};\r\n @Output() onStepClicked = new EventEmitter<GuideStep>();\r\n //selectedStep: any;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if ((changes['steps'] || changes['selectable']) && this.selectable && _isUndefined(this.selectedStep)) {\r\n const selectedStep = _first(this.steps);\r\n this.onStepClick(selectedStep);\r\n }\r\n }\r\n ngOnInit() {\r\n if (this.selectable && _isUndefined(this.selectedStep)) {\r\n \r\n }\r\n }\r\n\r\n onStepClick(step: any) {\r\n this.selectedStep = step;\r\n //console.log(this.selectedStep)\r\n this.onStepClicked.emit(step);\r\n }\r\n}\r\n","<div class=\"guide-container\">\r\n <div class=\"guide-header\">\r\n <p class=\"guide-header-title\">{{ title }}</p>\r\n </div>\r\n <div class=\"guide-content\">\r\n @for (step of steps; track step; let last = $last) {\r\n <div class=\"step\" [ngClass]=\"step?.isCompleted ? 'connectedSource-step': '' \">\r\n <div class=\"step-indicator\">\r\n @if(selectable) {\r\n @if(step?.isCompleted){\r\n <sa-icon [icon]=\"'checkCircleFilled'\" class=\"source-circle\" customClass=\"colored-icon\"\r\n size=\"20\"></sa-icon>\r\n }\r\n @else{\r\n <div [ngClass]=\"step === selectedStep ? 'step-circle-selected': 'step-circle-normal'\">\r\n </div>\r\n }\r\n }@else{\r\n <div class=\"step-circle\"></div>\r\n }\r\n @if (!last) {\r\n <div class=\"step-line\"></div>\r\n }\r\n </div>\r\n <div class=\"step-content\">\r\n <div class=\"step-title\" (click)=\"selectable ? onStepClick(step) : null\"\r\n [ngClass]=\"selectable ? (step === selectedStep ? 'selected-step' : 'other-step') : ''\">\r\n {{ step.title }}\r\n @if(step?.chipData) {\r\n <sa-chip [type]=\"step?.chipData.type\" [state]=\"step?.chipData.state\"\r\n [filling]=\"step?.chipData.filling\" [text]=\"step?.chipData.text\"\r\n [iconPosition]='step?.chipData.iconPosition' [iconPath]=\"step?.chipData.iconPath\"></sa-chip>\r\n }\r\n </div>\r\n @if (step?.description) {\r\n <p class=\"step-description\">{{ step.description }}</p>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>","import { Component, Input, ViewEncapsulation, Output, EventEmitter } from '@angular/core';\r\nimport { MessageType } from '../../interfaces/message-banner';\r\nimport { IconComponent } from \"../icon/icon.component\";\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IconService } from '../icon/icon.service';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { IconName } from '../../interfaces/icon-interface';\r\nimport { ButtonIconPosition, ButtonInterface, ButtonSize, ButtonType } from '../../interfaces/button-interface';\r\nimport { isUndefined, kebabCase } from 'lodash'\r\n@Component({\r\n selector: 'sa-message-banner',\r\n standalone: true,\r\n imports: [HttpClientModule, IconComponent, ButtonComponent],\r\n providers: [IconService],\r\n templateUrl: './message-banner.component.html',\r\n styleUrl: './message-banner.component.css',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class MessageBannerComponent {\r\n @Input() type: MessageType = 'info';\r\n @Input() actionText?: string;\r\n @Input() content?: string = '';\r\n @Input() bannerIcon?: IconName;\r\n @Input() bannerIconSize?: string = '';\r\n @Input() buttonIcon?: IconName;\r\n @Input() buttonType?: ButtonType;\r\n @Input() buttonIconPosition?: ButtonIconPosition;\r\n @Input() buttonSize?: ButtonSize;\r\n @Input() buttonIconSize?: string;\r\n @Input() button?: ButtonInterface;\r\n @Input() onAction: () => void = () => { };\r\n @Output() actionClick = new EventEmitter<any>();\r\n\r\n handleButtonClick(event: any, button?: ButtonInterface): void {\r\n if(isUndefined(button)) {\r\n button = {\r\n icon: this.buttonIcon,\r\n iconPosition: this.buttonIconPosition,\r\n size: this.buttonSize,\r\n buttonIconSize: this.buttonIconSize,\r\n type: this.buttonType,\r\n text: this.actionText,\r\n id: `message-banner-${kebabCase(this.actionText)}`,\r\n state: 'default'\r\n }\r\n }\r\n this.actionClick.emit(button);\r\n }\r\n}\r\n","<div class=\"message-banner\" [class]=\"type\">\r\n <div class=\"content\">\r\n @if (bannerIcon) {\r\n <sa-icon class=\"icon\" [icon]=\"bannerIcon\" [size]=\"bannerIconSize\" [style.height.px]=\"bannerIconSize\"></sa-icon>\r\n }\r\n <ng-content></ng-content>\r\n </div>\r\n @if (actionText) {\r\n <sa-button class=\"action-button\" [text]=\"actionText\" [icon]=\"buttonIcon\" [size]=\"buttonSize\" [type]=\"buttonType\"\r\n [iconPosition]=\"buttonIconPosition\" [size]=\"buttonSize\" [buttonIconSize]=\"buttonIconSize\"\r\n (click)=\"onAction()\" (onClickEvent)=\"handleButtonClick($event)\">{{\r\n actionText\r\n }}</sa-button>\r\n }\r\n @else if(button) {\r\n <sa-button\r\n [text]=\"button?.text\"\r\n [icon]=\"button?.icon\"\r\n [size]=\"button?.size\"\r\n [type]=\"button?.type\"\r\n [iconPosition]=\"button?.iconPosition\"\r\n [buttonIconSize]=\"button?.buttonIconSize\"\r\n (onClickEvent)=\"handleButtonClick(button, $event)\"\r\n role=\"button\"\r\n [attr.aria-label]=\"button?.text\"\r\n >\r\n \r\n </sa-button>\r\n }\r\n</div>","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { GuideCardComponent } from '../guide-card/guide-card.component';\r\nimport { FieldType, } from '@ngx-formly/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { CardComponent } from '../card.component';\r\nimport { CardCustomHeaderComponent } from '../card-custom-header/card-custom-header.component';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { ChipsComponent } from '../../chips/chips.component';\r\nimport { IconComponent } from '../../icon/icon.component';\r\nimport { ButtonComponent } from '../../button/button.component';\r\nimport { CardTitleActionsComponent } from '../card-title-actions/card-title-actions.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { find as _find } from 'lodash'\r\nimport { MessageBannerComponent } from '../../message-banner/message-banner.component';\r\n@Component({\r\n selector: 'sa-menu-card',\r\n standalone: true,\r\n imports: [ChipsComponent, CommonModule, GuideCardComponent, FormsModule, ReactiveFormsModule, FormlyModule, CardComponent, CardCustomHeaderComponent, IconComponent, MatExpansionModule, ButtonComponent, CardTitleActionsComponent, MatTooltipModule, MessageBannerComponent],\r\n templateUrl: './menu-card.component.html',\r\n styleUrl: './menu-card.component.css'\r\n})\r\nexport class MenuCardComponent extends FieldType {\r\n @Input() title: string = 'Categories:';\r\n @Input() steps: any[];\r\n @Input() footerDetails: any;\r\n @Output() onButtonClickEvent = new EventEmitter<any>();\r\n @Output() onCardClickEvent = new EventEmitter<any>();\r\n @Output() onFooterClickEvent = new EventEmitter<any>();\r\n @Output() onStepChangeEvent = new EventEmitter<any>();\r\n selectedStep: any;\r\n selectedGuideStep: any | null = null;\r\n customClassWrapper = 'menuCardSourceContainer';\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['steps']) {\r\n this.selectedStep = _find(this.steps, { isSelected: true })\r\n }\r\n }\r\n\r\n onStepChanged(event) {\r\n this.selectedStep = event;\r\n this.onStepChangeEvent.emit(event);\r\n }\r\n\r\n onCardClick(source: any, button: any, event: Event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n this.onCardClickEvent.emit({ category: this.selectedStep, source: source, button: button })\r\n }\r\n\r\n onAdvancedFeaturesOpened() {\r\n this.selectedStep.advancedFeaturesExpanded = true;\r\n }\r\n\r\n onAdvancedFeaturesClosed() {\r\n this.selectedStep.advancedFeaturesExpanded = false;\r\n }\r\n\r\n actionHandler(button: any, event: Event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n this.onButtonClickEvent.next({ category: this.selectedStep, button: button });\r\n }\r\n\r\n showSources(sourceType: any) {\r\n this.onFooterClickEvent.emit(sourceType);\r\n //console.log(sourceType)\r\n this.onStepChanged(sourceType)\r\n }\r\n}\r\n","<div class=\"menu-card-container\">\r\n <div class=\"left-card-container\">\r\n <sa-guide-card [title]=\"'Categories:'\" [steps]=\"steps\" [selectable]=\"true\"\r\n (onStepClicked)=\"onStepChanged($event)\" [selectedStep]=\"selectedStep\"></sa-guide-card>\r\n <div class=\"card-footer-container\">\r\n <span class=\"horizontal-line\"></span>\r\n <ng-container *ngFor=\"let footerDetail of footerDetails\">\r\n <div (click)=\"showSources(footerDetail)\" class=\"footer\"\r\n [ngClass]=\"footerDetail === selectedStep ? 'selected-step' : 'other-step'\">\r\n <span class=\"footer-text\">\r\n {{footerDetail?.title}}\r\n <ng-container *ngIf=\"footerDetail?.count\">\r\n <span>({{footerDetail?.count}})</span>\r\n </ng-container>\r\n </span>\r\n <ng-container *ngIf=\"footerDetail?.chipData\">\r\n <span>\r\n <sa-chip [type]=\"footerDetail?.chipData.type\" [state]=\"footerDetail?.chipData.state\"\r\n [filling]=\"footerDetail?.chipData.filling\" [text]=\"footerDetail?.chipData.text\"\r\n [iconPosition]='footerDetail?.chipData.iconPosition'\r\n [iconPath]=\"footerDetail?.chipData.iconPath\">\r\n </sa-chip>\r\n </span>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"right-card-container\">\r\n @if(selectedStep?.messageContent || selectedStep?.messageBanner?.content){\r\n <div class=\"message-container\">\r\n <sa-message-banner [bannerIcon]=\"selectedStep?.messageBanner?.bannerIcon\"\r\n [bannerIconSize]=\"selectedStep?.messageBanner?.bannerIconSize\" \r\n [buttonIcon]=\"selectedStep?.messageBanner?.buttonIcon\"\r\n [buttonType]=\"selectedStep?.messageBanner?.buttonType\"\r\n [buttonSize]=\"selectedStep?.messageBanner?.buttonSize\"\r\n [buttonIconPosition]=\"selectedStep?.messageBanner?.buttonIconPosition\"\r\n [actionText]=\"selectedStep?.messageBanner?.buttonText\"\r\n [buttonIconSize]=\"selectedStep?.messageBanner?.buttonIconSize\"\r\n [type]=\"selectedStep?.messageBanner?.type || 'info'\">\r\n <div class=\"message-content\" [innerHtml]=\"selectedStep?.messageContent || selectedStep?.messageBanner?.content\">\r\n </div>\r\n </sa-message-banner>\r\n </div>\r\n }\r\n <div class=\"heading-container\">\r\n <span class=\"heading-style\">{{selectedStep?.sourcesHeading || 'Available Sources'}}:</span>\r\n </div>\r\n <div *ngIf=\"selectedStep?.sourcesList\" class=\"cards-container\">\r\n <ng-container *ngFor=\"let source of selectedStep.sourcesList\">\r\n <ng-container\r\n *ngTemplateOutlet=\"cardTemplate; context: { source: source, selectedStep: selectedStep, actionButton: selectedStep?.actionButton }\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <!-- for advanced options -->\r\n <div *ngIf=\"selectedStep?.advancedSourcesList && selectedStep.advancedSourcesList.length > 0\"\r\n class=\"menu-card-advanced-features-section\">\r\n\r\n <mat-expansion-panel hideToggle [expanded]=\"selectedStep?.advancedFeaturesExpanded || false\"\r\n (opened)=\"onAdvancedFeaturesOpened()\" (closed)=\"onAdvancedFeaturesClosed()\"\r\n class=\"menuAdvancedAccordion\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <div class=\"panel-container\">\r\n @if(!selectedStep?.['advancedFeaturesExpanded']){\r\n <span class=\"d-flex align-center source-icon\">\r\n <sa-icon [icon]=\"props?.['advancedFeatureCollapsedIcon'] || 'sourcesOutlined'\" class=\"d-flex\"\r\n customClass=\"colored-icon\" size=\"16\"></sa-icon>\r\n </span>\r\n }@else{\r\n <span class=\"d-flex align-center\">\r\n <sa-icon [icon]=\"props?.['advancedFeatureExpandedIcon'] || 'downChevronOutlined'\" class=\"d-flex\"\r\n size=\"20\"></sa-icon>\r\n </span>\r\n }\r\n <span class=\"advanced-title\">{{ selectedStep?.['advancedFeaturesExpanded'] ?\r\n selectedStep?.['advancedFeatureToggleTitle'] :\r\n selectedStep?.['advancedFeatureTitle'] }}</span>\r\n </div>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div class=\"expansion-container\">\r\n @if(selectedStep?.advancedFeatureDisclaimer){\r\n <div class=\"disclaimer-container\">\r\n <sa-message-banner [type]=\"'disclaimer'\">\r\n <div class=\"disclaimer-content\">\r\n @if(selectedStep?.advancedFeatureDisclaimerTooltip){\r\n <span class=\"tooltip-container\">\r\n <sa-icon icon=\"infoCircleOutlined\"\r\n [matTooltip]=\"selectedStep?.advancedFeatureDisclaimerTooltip\" customClass=\"info-icon\"\r\n class=\"tooltip-icon\"></sa-icon>\r\n </span>\r\n }\r\n <span class=\"disclaimer-style\">{{selectedStep?.advancedFeatureDisclaimer}}</span>\r\n </div>\r\n @if(selectedStep?.advancedFeatureDisclaimerButtons) {\r\n <div class=\"disclaimer-buttons-container\">\r\n <ng-container *ngFor=\"let button of selectedStep.advancedFeatureDisclaimerButtons\">\r\n <sa-button [text]=\"button.text\" [type]=\"button.type\" [size]=\"button.size\"\r\n [state]=\"button.state\" [iconPosition]=\"button.iconPosition\" [icon]=\"button.icon\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (click)=\"actionHandler(button, $event)\"></sa-button>\r\n </ng-container>\r\n </div>\r\n }\r\n </sa-message-banner>\r\n </div>\r\n }\r\n <div class=\"cards-container\">\r\n <ng-container *ngFor=\"let source of selectedStep?.advancedSourcesList\">\r\n <ng-container\r\n *ngTemplateOutlet=\"cardTemplate; context: { source: source, selectedStep: selectedStep, actionButton: selectedStep?.actionButton }\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n </div>\r\n @if(selectedStep?.connectedSourcesList && selectedStep.connectedSourcesList.length > 0) {\r\n <div class=\"heading-container\">\r\n <span class=\"heading-style\">{{selectedStep?.sourcesHeading || 'Connected Sources'}}:</span>\r\n </div>\r\n <div class=\"cards-container\">\r\n <ng-container *ngFor=\"let source of selectedStep.connectedSourcesList\">\r\n <ng-container\r\n *ngTemplateOutlet=\"cardTemplate; context: { source: source, selectedStep: selectedStep, actionButton: selectedStep?.actionButton }\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<ng-template #cardTemplate let-source=\"source\" let-selectedStep=\"selectedStep\" let-actionButton=\"actionButton\">\r\n <sa-card [column]=\"false\" [showCardHeader]=\"true\" [showCardBody]=\"false\"\r\n [width]=\"selectedStep.sourcesCardWidth || '471px'\" [showHeaderBodyDivider]=\"false\"\r\n [customWrapperClass]=\"selectedStep.customWrapperClass || customClassWrapper\"\r\n class=\"{{source.disabled ? 'disabled-card': 'enabled-card'}}\">\r\n <sa-card-title-header>\r\n <div class=\"sa-card-accordion-title-container\">\r\n <div class=\"sa-menu-card-title-icon-container\">\r\n <div class=\"sa-menu-card-custom-title\">\r\n <ng-container *ngIf=\"source.logoUrl\">\r\n <sa-icon [img]=\"source.logoUrl\" [size]=\"'20'\" class=\"d-flex\" [customClass]=\"'auto-dimensions'\"></sa-icon>\r\n </ng-container>\r\n <span [matTooltip]=\"source?.tooltip\">\r\n {{source?.name}}\r\n <ng-container *ngIf=\"source?.count\">\r\n <span>({{source.count}})</span>\r\n </ng-container>\r\n </span>\r\n <ng-container *ngIf=\"source?.chipData\">\r\n <span>\r\n <sa-chip [type]=\"source?.chipData.type\" [state]=\"source?.chipData.state\"\r\n [filling]=\"source?.chipData.filling\" [text]=\"source?.chipData.text\"\r\n [iconPosition]='source?.chipData.iconPosition'\r\n [iconPath]=\"source?.chipData.iconPath\">\r\n </sa-chip>\r\n </span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ng-container\r\n *ngIf=\"!source.disabled && (selectedStep?.actionButton && (selectedStep?.showActionActionButton ? actionButton : null)) as button\">\r\n <div class=\"sa-card-titleIcon no-margin\">\r\n <sa-card-title-actions>\r\n <sa-button [text]=\"button.text\" [type]=\"button.type\" [size]=\"button.size\"\r\n [state]=\"button.state\" [iconPosition]=\"button.iconPosition\" [icon]=\"button.icon\"\r\n [buttonIconSize]=\"button.buttonIconSize\" (click)=\"onCardClick(source, button, $event)\">\r\n </sa-button>\r\n </sa-card-title-actions>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </sa-card-title-header>\r\n </sa-card>\r\n</ng-template>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, SimpleChanges } from '@angular/core';\r\nimport { ChipsComponent } from '../../chips/chips.component';\r\nimport { CardComponent } from '../card.component';\r\nimport { IconComponent } from '../../icon/icon.component';\r\nimport { CardBodyComponent } from '../card-body/card-body.component';\r\nimport { CardCustomHeaderComponent } from '../card-custom-header/card-custom-header.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { isArray, isString, map, join, every, get, isUndefined, includes } from 'lodash';\r\n\r\nexport interface ThumbnailStatus {\r\n text: string;\r\n type: 'regular' | 'small' | 'large';\r\n state: 'primary' | 'secondary' | 'neutral' | 'error' | 'warning' | 'success';\r\n filling: 'outline' | 'filled';\r\n iconPath?: string;\r\n iconPosition?: 'left' | 'right' | 'both' | '';\r\n largeStateIcon?: string;\r\n largeStateText?: string;\r\n tooltip?: string;\r\n}\r\n\r\nexport interface ThumbnailData {\r\n title: string;\r\n subtitle: string;\r\n description: string;\r\n descriptionTooltip?: string;\r\n thumbnailUrl: string;\r\n statuses: ThumbnailStatus[];\r\n [key: string]: any\r\n}\r\n\r\n@Component({\r\n selector: 'sa-thumbnail-card',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ChipsComponent,\r\n CardComponent,\r\n IconComponent,\r\n CardBodyComponent,\r\n CardCustomHeaderComponent,\r\n MatTooltipModule,\r\n ],\r\n templateUrl: './thumbnail-card.component.html',\r\n styleUrls: ['./thumbnail-card.component.css']\r\n})\r\nexport class ThumbnailCardComponent {\r\n @Input() data: ThumbnailData;\r\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\r\n @Output() cardClick = new EventEmitter<ThumbnailData>();\r\n\r\n /**\r\n * Handles changes to component inputs\r\n * @param changes SimpleChanges object containing changed properties\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['data']) {\r\n this.data = changes['data'].currentValue;\r\n this.updateDescriptionTooltip();\r\n }\r\n }\r\n \r\n /**\r\n * Updates the description tooltip if it exists\r\n * @private\r\n */\r\n private updateDescriptionTooltip(): void {\r\n const tooltip = get(this.data, 'descriptionTooltip');\r\n if (!isUndefined(tooltip)) {\r\n this.data.descriptionTooltip = this.formattedTooltip(tooltip);\r\n }\r\n }\r\n\r\n onCardClick(): void {\r\n this.cardClick.emit(this.data);\r\n }\r\n\r\n getChipConfig(status: string): Partial<ThumbnailStatus> {\r\n switch (status) {\r\n case 'active':\r\n return {\r\n type: 'small',\r\n state: 'success',\r\n filling: 'filled'\r\n };\r\n default:\r\n return {\r\n type: 'small',\r\n state: 'neutral',\r\n filling: 'outline'\r\n };\r\n }\r\n }\r\n\r\n formattedTooltip(tooltip: any): string {\r\n try {\r\n // Parse the JSON string\r\n const parsedData = JSON.parse(tooltip);\r\n // Check if parsedData is an array\r\n if (isArray(parsedData)) {\r\n // Handle case where it's an array of objects\r\n if (\r\n every(\r\n parsedData,\r\n (item) => item && typeof item === 'object' && 'name' in item,\r\n )\r\n ) {\r\n return join(map(parsedData, (item: any) => item.name), '\\n');\r\n }\r\n // Handle case where it's an array of strings\r\n if (every(parsedData, (item) => isString(item))) {\r\n return join(parsedData, '\\n');\r\n }\r\n throw new Error('Invalid array structure');\r\n } else {\r\n throw new Error('Parsed data is not an array');\r\n }\r\n } catch (error) {\r\n if (includes(tooltip, '\\n')) {\r\n return tooltip; // Assuming it's already formatted correctly\r\n }\r\n console.error('Error parsing tooltip data:', error);\r\n // Return a fallback message in case of an error\r\n return '';\r\n }\r\n }\r\n}\r\n","<div class=\"thumbnail-card\" [class.small]=\"size === 'small'\" [class.medium]=\"size === 'medium'\"\r\n [class.large]=\"size === 'large'\" (click)=\"onCardClick()\" role=\"button\" tabindex=\"0\" (keydown.enter)=\"onCardClick()\">\r\n <sa-card [showCustomCardBody]=\"true\" [customWrapperClass]=\"'sa-card-custom-wrapper'\">\r\n <sa-card-custom-body>\r\n <div class=\"thumbnail-content\">\r\n <div class=\"thumbnail-container\">\r\n <img [src]=\"data?.thumbnailUrl\" [alt]=\"data?.title\" class=\"thumbnail\">\r\n </div>\r\n <div class=\"thumbnail-info\">\r\n <div class=\"thumbnail-header\">\r\n <h3 class=\"thumbnail-title\">{{ data?.title }}</h3>\r\n <div class=\"status-chips\">\r\n @for (status of data?.statuses; track status.text) {\r\n <sa-chip [text]=\"status.text\" [type]=\"'small'\" [state]=\"status.state\" [filling]=\"status.filling\"\r\n [iconPath]=\"status.iconPath\" [iconPosition]=\"status.iconPosition\"\r\n [largeStateIcon]=\"status.largeStateIcon\" [largeStateText]=\"status.largeStateText\" [matTooltip]=\"status?.tooltip\" matTooltipClass=\"custom-status-tooltip\">\r\n </sa-chip>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"thumbnail-metadata\">\r\n <span class=\"thumbnail-description\" [matTooltip]=\"data?.descriptionTooltip\" matTooltipClass=\"custom-description-tooltip\">{{ data?.description }}</span>\r\n <span class=\"separator\"></span>\r\n <span class=\"thumbnail-subtitle\">{{ data?.subtitle }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </sa-card-custom-body>\r\n </sa-card>\r\n</div>\r\n","import { Component, OnInit, Input, OnDestroy, ViewEncapsulation, SimpleChanges, OnChanges, ChangeDetectionStrategy, ChangeDetectorRef, NgZone } from '@angular/core';\r\nimport { CardComponent } from '../card/card.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { CardCustomHeaderComponent } from '../card/card-custom-header/card-custom-header.component';\r\nimport { CardCarousel } from '../../interfaces/card-carousel-interface';\r\nimport { AvatarComponent } from \"../avatar/avatar.component\";\r\nimport { map as _map, split as _split, words as _words } from 'lodash';\r\n\r\n@Component({\r\n selector: 'sa-card-carousel',\r\n standalone: true,\r\n imports: [CardComponent, IconComponent, CardCustomHeaderComponent, AvatarComponent],\r\n templateUrl: './card-carousel.component.html',\r\n styleUrls: ['./card-carousel.component.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CardCarouselComponent implements OnInit, OnDestroy, OnChanges {\r\n protected Math = Math;\r\n\r\n @Input() cards: CardCarousel[] = [];\r\n @Input() interval: number = 5000;\r\n @Input() autoPlay: boolean = true;\r\n @Input() showNavigationArrows: boolean = true;\r\n @Input() showIndicators: boolean = true;\r\n @Input() showBrandFooter: boolean = true;\r\n\r\n visibleLogos: (CardCarousel & { index: number; isActive: boolean })[] = [];\r\n currentIndex: number = 0;\r\n private timer: any;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private ngZone: NgZone\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.updateVisibleLogos();\r\n if (this.autoPlay && this.cards.length > 0) {\r\n this.startTimer();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['cards'] && this.cards?.length > 0) {\r\n this.cards = _map(this.cards, (card) => {\r\n const nameWords = _words(card.title, /[A-Za-z]+/g);\r\n const wordsToUse = nameWords.length > 2 \r\n ? [nameWords[0], nameWords[nameWords.length - 1]]\r\n : nameWords;\r\n const initials = _map(wordsToUse, word => word.charAt(0).toUpperCase()).join('');\r\n return { ...card, altText: initials };\r\n });\r\n \r\n if (this.currentIndex >= this.cards.length) {\r\n this.currentIndex = 0;\r\n }\r\n this.updateVisibleLogos();\r\n if (this.autoPlay) {\r\n this.resetTimer();\r\n }\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.stopTimer();\r\n }\r\n\r\n startTimer() {\r\n this.stopTimer();\r\n this.ngZone.runOutsideAngular(() => {\r\n this.timer = setInterval(() => {\r\n this.ngZone.run(() => {\r\n this.next();\r\n this.cdr.markForCheck();\r\n });\r\n }, this.interval);\r\n });\r\n }\r\n\r\n stopTimer() {\r\n if (this.timer) {\r\n clearInterval(this.timer);\r\n this.timer = null;\r\n }\r\n }\r\n\r\n resetTimer() {\r\n this.stopTimer();\r\n if (this.autoPlay && this.cards.length > 0) {\r\n this.startTimer();\r\n }\r\n }\r\n\r\n selectCard(index: number) {\r\n if (index !== this.currentIndex && index >= 0 && index < this.cards.length) {\r\n this.currentIndex = index;\r\n this.updateVisibleLogos();\r\n this.resetTimer();\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n next() {\r\n if (this.cards.length > 0) {\r\n this.currentIndex = (this.currentIndex + 1) % this.cards.length;\r\n this.updateVisibleLogos();\r\n this.resetTimer();\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n prev() {\r\n if (this.cards.length > 0) {\r\n this.currentIndex = (this.currentIndex - 1 + this.cards.length) % this.cards.length;\r\n this.updateVisibleLogos();\r\n this.resetTimer();\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n updateVisibleLogos() {\r\n if (this.cards.length === 0) {\r\n this.visibleLogos = [];\r\n return;\r\n }\r\n\r\n const maxVisibleCards = Math.min(5, this.cards.length);\r\n const startOffset = Math.floor(maxVisibleCards / 2) * -1;\r\n const endOffset = maxVisibleCards + startOffset;\r\n \r\n this.visibleLogos = [];\r\n for (let i = startOffset; i < endOffset; i++) {\r\n const index = (this.currentIndex + i + this.cards.length) % this.cards.length;\r\n this.visibleLogos.push({\r\n ...this.cards[index],\r\n index: index,\r\n isActive: index === this.currentIndex\r\n });\r\n }\r\n }\r\n}\r\n","<!-- card-carousel.component.html -->\r\n<div class=\"carousel-container\">\r\n <div class=\"carousel-top-wrapper\">\r\n <div class=\"controls\">\r\n @if (showIndicators) {\r\n <div class=\"dots\">\r\n @for (card of cards; track card.id; let i = $index) {\r\n <span class=\"dot\" [class.active]=\"i === currentIndex\" (click)=\"selectCard(i)\"></span>\r\n }\r\n </div>\r\n }\r\n @if (showNavigationArrows) {\r\n <div class=\"arrow-controls\">\r\n <sa-icon [icon]=\"'leftChevronCircle'\" size=\"24\" (click)=\"prev()\"></sa-icon>\r\n <sa-icon [icon]=\"'rightChevronCircle'\" size=\"24\" (click)=\"next()\"></sa-icon>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"card-container\">\r\n @if (cards[currentIndex]) {\r\n <sa-card [customWrapperClass]=\"'sa-card-custom-wrapper'\" [width]=\"'24.063rem'\" [column]=\"false\"\r\n [showCardHeader]=\"true\" [showCardBody]=\"true\" [body]=\"cards[currentIndex]?.body\"\r\n [showHeaderBodyDivider]=\"true\">\r\n <sa-card-title-header>\r\n <div class=\"sa-card-custom-header-container\">\r\n <sa-avatar [altText]=\"cards[currentIndex]?.altText\" [imagePath]=\"cards[currentIndex]?.avatarIcon\" [size]=\"'extra-large'\"></sa-avatar>\r\n <div class=\"sa-card-title-subtitle-container\">\r\n <div class=\"sa-card-custom-title\">{{ cards[currentIndex]?.title }}</div>\r\n <div class=\"sa-card-subtitle\">{{ cards[currentIndex]?.subtitle }}</div>\r\n </div>\r\n <div class=\"sa-card-titleIcon\">\r\n <sa-icon [icon]=\"cards[currentIndex]?.logoIcon\" [iconUrl]=\"cards[currentIndex]?.logoUrl\" [size]=\"cards[currentIndex]?.logoSize || '50'\" customClass=\"logo-style\"></sa-icon>\r\n </div>\r\n </div>\r\n </sa-card-title-header>\r\n </sa-card>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (showBrandFooter) {\r\n <div class=\"brand-logos-container\">\r\n <div class=\"brand-logos\">\r\n @for (logo of visibleLogos; track logo.id) {\r\n <div> \r\n <sa-icon [icon]=\"logo.logoIcon\" [iconUrl]=\"logo.logoUrl\" [size]=\"logo.logoSize || '50'\" [class.active]=\"logo.isActive\" (click)=\"selectCard(logo.index)\"\r\n [customClass]=\"'logo-style'\">\r\n </sa-icon>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n</div>","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { IconName } from '../../interfaces/icon-interface';\r\n\r\nexport interface CategoryItem {\r\n id: string;\r\n label: string;\r\n icon?: IconName | string;\r\n}\r\n\r\nexport interface HelpButtonConfig {\r\n id?: string | number;\r\n type?: string;\r\n state?: string;\r\n size?: string;\r\n text?: string | number;\r\n ImagePath?: string;\r\n icon?: IconName | string;\r\n iconPosition?: string;\r\n href?: string;\r\n hrefTarget?: string;\r\n width?: string;\r\n isSubmit?: boolean;\r\n buttonIconSize?: string;\r\n showSpinner?: boolean;\r\n}\r\n\r\nexport interface HelpSectionConfig {\r\n enabled: boolean;\r\n icon?: IconName | string;\r\n title?: string;\r\n button?: HelpButtonConfig;\r\n}\r\n\r\nexport interface CategoriesNavConfig {\r\n title?: string;\r\n categories: CategoryItem[];\r\n helpSection?: HelpSectionConfig;\r\n}\r\n\r\n@Component({\r\n selector: 'sa-categories-nav',\r\n standalone: true,\r\n imports: [CommonModule, ButtonComponent, IconComponent],\r\n templateUrl: './categories-nav.component.html',\r\n styleUrls: ['./categories-nav.component.css']\r\n})\r\nexport class CategoriesNavComponent {\r\n @Input() config: CategoriesNavConfig = { categories: [] };\r\n @Input() selectedCategoryId: string = '';\r\n @Output() categorySelected = new EventEmitter<CategoryItem>();\r\n @Output() helpButtonClicked = new EventEmitter<void>();\r\n\r\n get categories(): CategoryItem[] {\r\n return this.config?.categories || [];\r\n }\r\n\r\n get title(): string {\r\n return this.config?.title || 'Categories:';\r\n }\r\n\r\n get helpSection(): HelpSectionConfig | undefined {\r\n return this.config?.helpSection;\r\n }\r\n\r\n onCategoryClick(category: CategoryItem): void {\r\n this.categorySelected.emit(category);\r\n }\r\n\r\n onHelpButtonClick(): void {\r\n this.helpButtonClicked.emit();\r\n }\r\n}\r\n","<div class=\"categories-nav\">\r\n <div class=\"categories-header\">\r\n <h3>{{ title }}</h3>\r\n </div>\r\n <div class=\"categories-list\">\r\n <div \r\n *ngFor=\"let category of categories\" \r\n class=\"category-item\"\r\n [class.selected]=\"category.id === selectedCategoryId\"\r\n (click)=\"onCategoryClick(category)\">\r\n <span class=\"category-label\">{{ category.label }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Configurable Help Section -->\r\n <div *ngIf=\"helpSection?.enabled\" class=\"help-section\">\r\n <div class=\"help-content\">\r\n <div class=\"help-icon\" *ngIf=\"helpSection.icon\">\r\n <sa-icon [icon]=\"helpSection.icon\" [size]=\"'20'\"></sa-icon>\r\n </div>\r\n <div class=\"help-text\" *ngIf=\"helpSection.title\">\r\n {{ helpSection.title }}\r\n </div>\r\n </div>\r\n <sa-button\r\n *ngIf=\"helpSection.button?.text\"\r\n [size]=\"helpSection.button?.size\"\r\n [type]=\"helpSection.button?.type\"\r\n [id]=\"helpSection.button?.id\"\r\n [state]=\"helpSection.button?.state\"\r\n [text]=\"helpSection.button?.text\"\r\n [ImagePath]=\"helpSection.button?.ImagePath\"\r\n [icon]=\"helpSection.button?.icon\"\r\n [iconPosition]=\"helpSection.button?.iconPosition\"\r\n [href]=\"helpSection.button?.href\"\r\n [hrefTarget]=\"helpSection.button?.hrefTarget\"\r\n [width]=\"helpSection.button?.width\"\r\n [isSubmit]=\"helpSection.button?.isSubmit\"\r\n [buttonIconSize]=\"helpSection.button?.buttonIconSize\"\r\n [showSpinner]=\"helpSection.button?.showSpinner\"\r\n (onClickEvent)=\"onHelpButtonClick()\">\r\n </sa-button>\r\n </div>\r\n</div>\r\n","import { Component } from '@angular/core';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, FormsModule } from '@angular/forms';\r\nimport { FieldType } from '@ngx-formly/core';\r\nimport { isObservable, of } from 'rxjs';\r\nimport { includes as _includes } from 'lodash'\r\n\r\n@Component({\r\n selector: 'sa-checkbox',\r\n standalone: true,\r\n imports: [MatChipsModule, CommonModule, FormsModule],\r\n templateUrl: './checkbox.component.html',\r\n styleUrl: './checkbox.component.css'\r\n})\r\nexport class CheckboxComponent extends FieldType {\r\n toggleSelection(option: any): void {\r\n const selected = this.formControl.value || [];\r\n const index = selected.indexOf(option.value);\r\n if (index === -1) {\r\n selected.push(option.value);\r\n } else {\r\n selected.splice(index, 1);\r\n }\r\n this.formControl.setValue([...selected]);\r\n }\r\n\r\n // Checks if an option is selected\r\n isSelected(option: any): boolean {\r\n return _includes((this.formControl.value || []), option.value);\r\n }\r\n\r\n get options$() {\r\n const options = this.props?.options;\r\n return isObservable(options) ? options : of(options || []);\r\n }\r\n\r\n}\r\n","<div class=\"checkbox-container\">\r\n <div class=\"title-container\">\r\n @if(props['label']){\r\n <div class=\"form-field-title\">\r\n <span>{{ props['label'] }}</span>\r\n </div>\r\n }\r\n @if(props['description']){\r\n <div class=\"form-field-description\">\r\n <span>{{ props['description'] }}</span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"form-field\">\r\n <mat-chip-listbox selectable multiple [disabled]=\"props.disabled\" aria-label=\"Select options\">\r\n <mat-chip-option *ngFor=\"let option of options$ | async\" class=\"custom-chip\" [value]=\"option.value\"\r\n (click)=\"toggleSelection(option)\" [selected]=\"isSelected(option)\">\r\n {{ option.label }}\r\n </mat-chip-option>\r\n </mat-chip-listbox>\r\n </div>\r\n @if(props['helpText']){\r\n <div class=\"form-field-helpText\">\r\n <span>{{ props['helpText'] }}</span>\r\n </div>\r\n }\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-component-library',\r\n standalone: true,\r\n imports: [],\r\n template: `\r\n <p>\r\n component-library works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class TestLibraryComponent {\r\n\r\n}\r\n","\r\nimport { Component, Input, OnInit, Output, EventEmitter, OnDestroy } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-dashboard-loader',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './dashboard-loader.component.html',\r\n styleUrl: './dashboard-loader.component.css',\r\n host: {\r\n '[style.--animation-duration]': 'animationDuration + \"s\"'\r\n }\r\n})\r\nexport class DashboardLoaderComponent implements OnInit, OnDestroy {\r\n @Input() animationDuration = 6; // Default duration in seconds\r\n @Output() animationCycleComplete = new EventEmitter<void>();\r\n\r\n private animationInterval: any;\r\n\r\n ngOnInit() {\r\n if (this.animationDuration <= 0) {\r\n console.warn('Animation duration must be greater than 0. Using default value of 6s.');\r\n this.animationDuration = 6;\r\n }\r\n\r\n // Emit event at the end of each animation cycle\r\n this.animationInterval = setInterval(() => {\r\n this.animationCycleComplete.emit();\r\n }, this.animationDuration * 1000);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.animationInterval) {\r\n clearInterval(this.animationInterval);\r\n }\r\n }\r\n}\r\n","<span class=\"loader\"></span>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { NgFor } from '@angular/common';\r\nimport { NgIf } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'sa-tool-tip',\r\n standalone: true,\r\n imports: [ButtonComponent, NgFor, NgIf],\r\n templateUrl: './tool-tip.component.html',\r\n styleUrl: './tool-tip.component.css'\r\n})\r\nexport class ToolTipComponent {\r\n @Input() messages: string[] = [];\r\n @Input() pointerPosition: string = 'bottom';\r\n @Input() simpleMode: boolean = false;\r\n\r\n @Output() toolTipSkipped = new EventEmitter();\r\n @Output() toolTipSeen = new EventEmitter();\r\n arrowIcon = \"../assets/rightChevronOutlined.svg\";\r\n pointer = \"../assets/upwardTriangleFilled.svg\";\r\n\r\n msgInd: number = 0; // is the index of current message being displayed\r\n\r\n updateMsgInd(k: number) {\r\n this.msgInd += k;\r\n if (this.msgInd < 0) this.msgInd = 0;\r\n if (this.msgInd > this.messages.length - 1) {\r\n this.msgInd = this.messages.length - 1;\r\n this.toolTipSeen.emit();\r\n }\r\n }\r\n\r\n skipToolTip() {\r\n this.toolTipSkipped.emit();\r\n }\r\n\r\n}\r\n","<div class=\"tool-tip-vertical\">\r\n <div class=\"tool-tip-pointer-icon pointer-top\" *ngIf=\"pointerPosition == 'top'\"></div>\r\n <div class=\"tool-tip-horizontal\">\r\n <div class=\"tool-tip-pointer-icon pointer-left\" *ngIf=\"pointerPosition == 'left'\"></div> \r\n <div class=\"tool-tip simple-tooltip\" *ngIf=\"simpleMode\">\r\n <div class=\"simple-tooltip-content\" \r\n [class]=\"{ 'vertical-stack': messages.length <= 5, 'grid-stack': messages.length > 5, 'single-item': messages.length === 1 }\">\r\n <span class=\"simple-tooltip-message\" *ngFor=\"let message of messages\">\r\n {{message}}\r\n </span>\r\n </div>\r\n \r\n </div>\r\n <div class=\"tool-tip\" *ngIf=\"!simpleMode\">\r\n <div class=\"tool-tip-content\">\r\n <div class=\"tool-tip-heading\">Heading</div>\r\n <div *ngFor=\"let msg of messages, let i = index\" class=\"tool-tip-message {{msgInd != i ? 'hidden-msg': ''}}\">\r\n {{msg}}\r\n </div>\r\n </div>\r\n <div class=\"tool-tip-break\">\r\n </div>\r\n <div class=\"tool-tip-controls\">\r\n <div class=\"tool-tip-navigate\">\r\n <img class=\"left-icon tool-tip-navigate-icon\" (click)=\"updateMsgInd(-1)\" [src]=\"arrowIcon\" alt=\"\">\r\n {{msgInd+1}} of {{messages.length}}\r\n <img class=\"right-icon tool-tip-navigate-icon\" (click)=\"updateMsgInd(1)\" [src]=\"arrowIcon\" alt=\"\">\r\n </div>\r\n <div class=\"tool-tip-control-buttons\">\r\n <sa-button (onClickEvent)=\"skipToolTip()\" class=\"skip-button\" text=\"Skip\" type=\"transparent\" size=\"medium\"\r\n state=\"default\"></sa-button>\r\n <sa-button (onClickEvent)=\"updateMsgInd(1)\" text=\"Next\" type=\"primary\" size=\"medium\" state=\"default\">\r\n </sa-button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tool-tip-pointer-icon pointer-right\" *ngIf=\"pointerPosition == 'right'\"></div>\r\n </div>\r\n <div class=\"tool-tip-pointer-icon pointer-bottom\" *ngIf=\"pointerPosition == 'bottom'\"></div>\r\n</div>\r\n","import { Component, Output, EventEmitter, ChangeDetectorRef, ElementRef, ViewChild, HostListener, OnDestroy } from '@angular/core';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { ICellRendererAngularComp, IHeaderAngularComp } from 'ag-grid-angular';\r\nimport { GridInterface } from '../../interfaces/grid-interface';\r\nimport { AvatarComponent } from '../avatar/avatar.component';\r\nimport { ToolTipComponent } from '../tool-tip/tool-tip.component';\r\nimport { ChipInterface } from '../../interfaces/chip-interface';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { CommonModule, NgFor, NgIf } from '@angular/common';\r\nimport { ComponentRef } from '@angular/core';\r\nimport { TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { ICellRendererParams } from 'ag-grid-community';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { isString as _isString, split as _split, join as _join, size as _size, first as _first, takeRight as _takeRight, repeat as _repeat } from 'lodash';\r\n\r\ninterface CellParams extends ICellRendererParams {\r\n rowIndex: number;\r\n value: any;\r\n data: { you?: boolean };\r\n}\r\n\r\n@Component({\r\n selector: 'sa-grid-cell',\r\n standalone: true,\r\n imports: [\r\n AvatarComponent,\r\n ChipsComponent,\r\n ButtonComponent,\r\n NgFor,\r\n NgIf,\r\n ToolTipComponent,\r\n CommonModule,\r\n IconComponent,\r\n MatTooltipModule\r\n ],\r\n templateUrl: './grid-cell.component.html',\r\n styleUrl: './grid-cell.component.css'\r\n})\r\nexport class GridCellComponent implements ICellRendererAngularComp, OnDestroy {\r\n @ViewChild('dropdownTemplate') dropdownTemplate!: TemplateRef<any>;\r\n overlayRef!: OverlayRef;\r\n @ViewChild('actionsContainer') actionsContainer!: ElementRef;\r\n showDropdown = false;\r\n readonly MAX_VISIBLE_CHIPS = 1; \r\n displayedChips: ChipInterface[] = [];\r\n remainingChipsCount = 0;\r\n params!: GridInterface;\r\n rowNum = 0;\r\n\r\n @Output() onClickButtonEvent = new EventEmitter<{ rowId: number }>();\r\n @Output() onClickChipEvent = new EventEmitter<{ rowId: number }>();\r\n @Output() onClickLinkEvent = new EventEmitter();\r\n @Output() onClickAvatarEvent = new EventEmitter<{ rowId: number }>();\r\n\r\n constructor(private cdr: ChangeDetectorRef, private overlay: Overlay, private viewContainerRef: ViewContainerRef) {}\r\n\r\n hoveredChip: any = null;\r\n private tooltipComponentRef: ComponentRef<ToolTipComponent> | null = null;\r\n\r\n agInit(params: CellParams): void {\r\n this.rowNum = params.rowIndex;\r\n \r\n // Check for direct field value first, then fallback to _cellParams\r\n let cellData = params.value;\r\n if (!cellData && params.data && params.colDef?.field) {\r\n const cellParamsKey = `${params.colDef.field}_cellParams`;\r\n cellData = params.data[cellParamsKey];\r\n }\r\n \r\n this.params = {\r\n ...params,\r\n ...(cellData ?? {})\r\n };\r\n \r\n if (this.params.chipConfig && Array.isArray(this.params.chipConfig)) {\r\n this.displayedChips = this.params.chipConfig.slice(0, this.MAX_VISIBLE_CHIPS);\r\n this.remainingChipsCount = Math.max(0, this.params.chipConfig.length - this.MAX_VISIBLE_CHIPS);\r\n }\r\n else {\r\n this.displayedChips = this.params.chipConfig;\r\n this.remainingChipsCount = 0;\r\n }\r\n }\r\n\r\n refresh(params: CellParams): boolean {\r\n this.agInit(params);\r\n return true;\r\n }\r\n\r\n typeOf(value: unknown): string {\r\n return typeof value;\r\n }\r\n \r\n buttonClicked(event: any) {\r\n if (this.params.buttonConfig?.onClick) {\r\n this.params.buttonConfig.onClick(event);\r\n }\r\n this.params.buttonClicked && this.params.buttonClicked({ \r\n ...event,\r\n rowId: this.rowNum\r\n });\r\n this.onClickButtonEvent.emit({ ...event, rowId: this.rowNum }); \r\n }\r\n\r\n toggleDropdown(element: HTMLElement) {\r\n if (this.overlayRef) {\r\n this.overlayRef.dispose();\r\n this.overlayRef = null as any;\r\n }\r\n\r\n const positionStrategy = this.overlay.position()\r\n .flexibleConnectedTo(element)\r\n .withPush(true) \r\n .withFlexibleDimensions(true) \r\n .withViewportMargin(8) \r\n .withPositions([\r\n {\r\n originX: 'end',\r\n originY: 'bottom',\r\n overlayX: 'end',\r\n overlayY: 'top',\r\n offsetY: 4,\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: 4,\r\n }\r\n ]);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n panelClass: 'actions-dropdown-panel',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition() \r\n });\r\n\r\n const portal = new TemplatePortal(this.dropdownTemplate, this.viewContainerRef);\r\n this.overlayRef.attach(portal);\r\n\r\n this.overlayRef.backdropClick().subscribe(() => {\r\n if (this.overlayRef) {\r\n this.overlayRef.dispose();\r\n this.overlayRef = null as any;\r\n }\r\n });\r\n }\r\n\r\n handleActionClick(action: any, event: Event) {\r\n event.stopPropagation();\r\n this.showDropdown = false;\r\n if (action.onClick) {\r\n action.onClick();\r\n }\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: Event) {\r\n if (this.actionsContainer && !this.actionsContainer.nativeElement.contains(event.target)) {\r\n this.showDropdown = false;\r\n }\r\n }\r\n\r\n chipClicked(evt: Event) {\r\n this.params.chipClicked && this.params.chipClicked({\r\n ...evt,\r\n rowId: this.rowNum\r\n });\r\n this.onClickChipEvent.emit({ ...evt, rowId: this.rowNum });\r\n }\r\n\r\n linkClicked() {\r\n if (this.params.cellType != \"interactive\") return;\r\n\r\n this.params.linkClicked && this.params.linkClicked({ \r\n rowId: this.rowNum\r\n });\r\n\r\n if (this.params.interactiveLink != \"\") {\r\n if (this.params.interactiveLinkTarget == \"blank\") {\r\n window.open(this.params.interactiveLink)!;\r\n }\r\n else if (this.params.interactiveLinkTarget == \"self\") {\r\n location.href = this.params.interactiveLink!;\r\n }\r\n }\r\n this.onClickLinkEvent.emit({ rowId: this.rowNum });\r\n }\r\n\r\n avatarClicked(evt: Event) {\r\n this.params.avatarClicked && this.params.avatarClicked({\r\n ...evt,\r\n rowId: this.rowNum\r\n });\r\n this.onClickAvatarEvent.emit({ ...evt, rowId: this.rowNum });\r\n }\r\n\r\n showTooltip(config: any, event?: MouseEvent) {\r\n this.hoveredChip = config; \r\n if (event && event.currentTarget) {\r\n const chipContainer = event.currentTarget as HTMLElement;\r\n const chipElement = chipContainer.querySelector('sa-chip') as HTMLElement;\r\n if (chipElement) {\r\n const rect = chipElement.getBoundingClientRect();\r\n const topPosition = rect.bottom + 8;\r\n const leftPosition = rect.left + rect.width / 2;\r\n this.createTooltipComponent(topPosition, leftPosition);\r\n }\r\n }\r\n }\r\n\r\n hideTooltip() {\r\n this.hoveredChip = null;\r\n this.destroyTooltipComponent();\r\n }\r\n\r\n createTooltipComponent(top: number, left: number) {\r\n this.destroyTooltipComponent();\r\n this.tooltipComponentRef = this.viewContainerRef.createComponent(ToolTipComponent); \r\n this.tooltipComponentRef.instance.messages = this.getTooltipText(); \r\n this.tooltipComponentRef.instance.simpleMode = true;\r\n this.tooltipComponentRef.instance.pointerPosition = 'top';\r\n \r\n const tooltipElement = this.tooltipComponentRef.location.nativeElement;\r\n tooltipElement.style.cssText = `\r\n position: fixed;\r\n top: ${top}px;\r\n left: ${left}px;\r\n z-index: 99999;\r\n transform: translateX(-50%);\r\n pointer-events: none;\r\n `;\r\n document.body.appendChild(tooltipElement);\r\n this.tooltipComponentRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n destroyTooltipComponent() {\r\n if (this.tooltipComponentRef) {\r\n const tooltipElement = this.tooltipComponentRef.location.nativeElement;\r\n if (tooltipElement.parentNode) {\r\n tooltipElement.parentNode.removeChild(tooltipElement);\r\n }\r\n this.tooltipComponentRef.destroy();\r\n this.tooltipComponentRef = null;\r\n }\r\n }\r\n\r\n getTooltipText(): string[] {\r\n if (!this.params?.chipConfig) return [];\r\n return this.params.chipConfig.map(chip => chip.text);\r\n }\r\n\r\n\r\n /**\r\n * Masks an email address for privacy\r\n * Shows first character, masks middle characters, shows last 2 characters before @\r\n * @param email - The email address to mask\r\n * @returns Masked email string (e.g., mark@outlook.com -> m••••••rk@outlook.com)\r\n * @example\r\n * maskEmail('mark@outlook.com') // Returns: 'm••••••rk@outlook.com'\r\n * maskEmail('ab@test.com') // Returns: 'a•@test.com'\r\n */\r\n maskEmail(email: string | number): string {\r\n if (!email) return '-';\r\n \r\n // Convert to string if it's a number\r\n const emailStr = String(email);\r\n \r\n if (!_isString(emailStr)) return '-';\r\n \r\n const atIndex = emailStr.indexOf('@');\r\n if (atIndex <= 0) return emailStr; // Invalid email format\r\n \r\n const [localPart, ...domainParts] = _split(emailStr, '@');\r\n const domain = '@' + _join(domainParts, '@');\r\n \r\n const localLength = _size(localPart);\r\n \r\n if (localLength <= 2) {\r\n // For very short local parts, just mask the middle\r\n return _first(localPart) + _repeat('•', localLength - 1) + domain;\r\n }\r\n \r\n // Show first character, mask middle, show last 2 characters before @\r\n const firstChar = _first(localPart);\r\n const lastTwoChars = _takeRight(localPart, 2).join('');\r\n const maskedLength = localLength - 3; // Total length minus first and last 2\r\n \r\n return firstChar + _repeat('•', maskedLength) + lastTwoChars + domain;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.hideTooltip();\r\n if (this.overlayRef) {\r\n this.overlayRef.dispose();\r\n }\r\n }\r\n}\r\n","<div class=\"grid-cell {{params.cellType}}\">\r\n\r\n <img class=\"icons\" src={{params.iconPath}} [style.display]=\"(params.viewLeadingIcon) ? 'block' : 'none'\" alt=\"\">\r\n\r\n <sa-avatar [id]=\"params.avatarConfig?.id\" [altText]=\"params.avatarConfig?.altText\"\r\n [imagePath]=\"params.avatarConfig?.imagePath\" [size]=\"params.avatarConfig?.size\"\r\n [style.display]=\"(params.viewAvatar) ? 'block' : 'none'\" (onClickEvent)=\"avatarClicked($event)\">\r\n </sa-avatar>\r\n\r\n <div class=\"grid-text\" [style.display]=\"(params.viewText) ? 'block' : 'none'\">\r\n <div [style.display]=\"(params.text) ? 'block' : 'none'\" (click)=\"linkClicked()\" class=\"main-text\">\r\n @if(params.cellType === 'masked') {\r\n {{maskEmail(params.text)}}\r\n } @else {\r\n {{params.text}}\r\n }\r\n </div>\r\n\r\n <div [style.display]=\"(params.subText) ? 'block' : 'none'\" class=\"sub-text\">{{params.subText}}</div>\r\n </div>\r\n\r\n <img class=\"icons\" src={{params.iconPath}} [style.display]=\"(params.viewTrailingIcon) ? 'block' : 'none'\" alt=\"\">\r\n @if(params?.tooltip){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"params?.tooltipIcon || 'infoCircleOutlined'\"\r\n customClass=\"info-icon\" [matTooltip]=\"params?.tooltip\"\r\n matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon\"></sa-icon>\r\n </span>\r\n }\r\n <div class=\"chips-container\" [style.display]=\"(params.viewChip) ? 'flex' : 'none'\">\r\n\r\n <div *ngFor=\"let config of displayedChips\">\r\n <sa-chip [id]=\"config.id\" [filling]=\"config.filling\" id=\"chip_{{rowNum}}_{{config.id}}\" [iconPath]=\"config.iconPath\"\r\n [iconPosition]=\"config.iconPosition\" [largeStateIcon]=\"config.largeStateIcon\" [state]=\"config.state\"\r\n [type]=\"config.type\" [text]=\"config.text\" [class.small]=\"config.type === 'small'\"\r\n [class.neutral]=\"config.state === 'neutral'\" (onClickEvent)=\"chipClicked($event)\"></sa-chip>\r\n </div>\r\n <div class=\"chip-tooltip-container\" *ngIf=\"remainingChipsCount > 0\" style=\"position: relative;\"\r\n (mouseenter)=\"showTooltip(remainingChipsCount, $event)\" (mouseleave)=\"hideTooltip()\">\r\n <sa-chip [id]=\"'chip_' + rowNum + '_more'\" [text]=\"'+' + remainingChipsCount\" [filling]=\"displayedChips[0]?.filling\"\r\n [type]=\"displayedChips[0]?.type\" [state]=\"displayedChips[0]?.state\" (onClickEvent)=\"chipClicked($event)\"></sa-chip>\r\n</div>\r\n\r\n <sa-button [iconPosition]=\"params.buttonConfig?.iconPosition\" [ImagePath]=\"params.buttonConfig?.imagePath\"\r\n [id]=\"params.buttonConfig?.id\" [size]=\"params.buttonConfig?.size\" [state]=\"params.buttonConfig?.state\"\r\n [type]=\"params.buttonConfig?.type\" [text]=\"params.buttonConfig?.text\" [href]=\"params.buttonConfig?.href\"\r\n [hrefTarget]=\"params.buttonConfig?.hrefTarget\" [style.display]=\"(params.viewButton) ? 'block' : 'none'\"\r\n (onClickEvent)=\"buttonClicked($event)\"></sa-button>\r\n\r\n</div>\r\n\r\n <div *ngIf=\"params.cellType === 'actions'\" class=\"actions-container\">\r\n @if(params?.downloadAction){\r\n <sa-icon [icon]=\"params?.downloadAction?.icon\" [size]=\"params?.downloadAction?.iconSize\" (click)=\"handleActionClick(params?.downloadAction, $event)\" />\r\n }\r\n <img [src]=\"params.buttonConfig?.imagePath\" alt=\"actions\" class=\"actions-icon\" (click)=\"toggleDropdown(actionsButton)\"\r\n #actionsButton />\r\n <ng-template #dropdownTemplate>\r\n <div class=\"actions-dropdown\">\r\n <div *ngFor=\"let action of params.actions\" class=\"action-item\" (click)=\"handleActionClick(action, $event)\">\r\n <img *ngIf=\"action.icon\" [src]=\"action.icon\" class=\"action-icon\" />\r\n <span class=\"action-label\">{{action.label}}</span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AgGridModule } from 'ag-grid-angular';\r\nimport { GridCellComponent } from '../grid-cell/grid-cell.component';\r\nimport { ColDef, GridApi, GridReadyEvent } from 'ag-grid-community';\r\nimport { GridInterface } from '../../interfaces/grid-interface';\r\nimport { ButtonInterface } from '../../interfaces/button-interface';\r\n\r\n@Component({\r\n selector: 'sa-data-grid',\r\n standalone: true,\r\n imports: [CommonModule, AgGridModule, GridCellComponent],\r\n templateUrl: './data-grid.component.html',\r\n styleUrl: './data-grid.component.css'\r\n})\r\nexport class DataGridComponent {\r\n public static gridApiInstance: GridApi;\r\n @Input() columnDefs: ColDef[] = [];\r\n @Input() rowData: any[] = [];\r\n @Input() defaultColDef: ColDef = {\r\n sortable: true,\r\n filter: true,\r\n resizable: true\r\n };\r\n\r\n // Pagination inputs (optional)\r\n @Input() pagination: boolean = false;\r\n @Input() paginationPageSize: number = 10;\r\n @Input() paginationPageSizeSelector: number[] = [10, 25, 50, 100];\r\n @Input() gridHeight: number = 420;\r\n @Input() datasource: any;\r\n @Input() localeText: any = {};\r\n @Output() gridReady = new EventEmitter<GridReadyEvent<any>>();\r\n\r\n private gridApi!: GridApi;\r\n\r\n // Method to determine which row data to use\r\n getEffectiveRowData(): any[] | undefined {\r\n // If datasource is provided, rowData must be undefined\r\n return this.datasource ? undefined : this.rowData;\r\n }\r\n\r\n onGridReady(params: GridReadyEvent<any>) {\r\n this.gridApi = params.api;\r\n DataGridComponent.gridApiInstance = params.api;\r\n this.gridApi.sizeColumnsToFit();\r\n\r\n // Setup server-side row model if enabled\r\n if (this.datasource) {\r\n this.gridApi.setGridOption\r\n ? this.gridApi.setGridOption('datasource', this.datasource)\r\n : this.gridApi.setDatasource(this.datasource);\r\n } \r\n this.gridReady.emit(params);\r\n }\r\n\r\n static updateCellContent(\r\n gridApi: GridApi,\r\n rowIndex: number,\r\n field: string,\r\n newParams: Partial<GridInterface>\r\n ) {\r\n const rowNode = gridApi.getDisplayedRowAtIndex(rowIndex);\r\n \r\n if (!rowNode) {\r\n console.error(`Row at index ${rowIndex} not found.`);\r\n return;\r\n }\r\n \r\n const paramKey = `${field}_cellParams`;\r\n \r\n const existingParams: Partial<GridInterface> =\r\n rowNode.data[paramKey] || {};\r\n \r\n const updatedParams: Partial<GridInterface> = {\r\n ...existingParams,\r\n ...newParams,\r\n };\r\n \r\n rowNode.data[paramKey] = updatedParams;\r\n \r\n gridApi.applyTransaction({ update: [rowNode.data] });\r\n gridApi.refreshCells({ rowNodes: [rowNode], columns: [field], force: true });\r\n }\r\n\r\n // Helper method to create a cell with chips\r\n static createChipsCell(chips: any[], config: Partial<GridInterface> = {}): GridInterface {\r\n return {\r\n cellType: 'chips',\r\n viewChip: true,\r\n viewText: false,\r\n viewLeadingIcon: false,\r\n viewTrailingIcon: false,\r\n viewButton: false,\r\n viewAvatar: false,\r\n chipConfig: chips.map(chip => ({\r\n id: chip.id || '',\r\n text: chip.text || '',\r\n type: chip.type || 'default',\r\n state: chip.state || 'default',\r\n ...chip\r\n })),\r\n ...config\r\n };\r\n }\r\n\r\n // Helper method to create a text cell\r\n static createTextCell(text: string, config: Partial<GridInterface> = {}): GridInterface {\r\n return {\r\n cellType: 'text',\r\n viewText: true,\r\n viewChip: false,\r\n viewLeadingIcon: false,\r\n viewTrailingIcon: false,\r\n viewButton: false,\r\n viewAvatar: false,\r\n text,\r\n ...config\r\n };\r\n }\r\n\r\n // Helper method to create an avatar cell\r\n static createAvatarCell(config: {\r\n text: string;\r\n subText?: string;\r\n avatarConfig: {\r\n size: 'small' | 'medium' | 'large';\r\n imagePath: string;\r\n altText: string;\r\n };\r\n }): GridInterface {\r\n return {\r\n cellType: 'avatar',\r\n viewText: true,\r\n viewChip: false,\r\n viewLeadingIcon: false,\r\n viewTrailingIcon: false,\r\n viewButton: false,\r\n viewAvatar: true,\r\n text: config.text,\r\n subText: config.subText,\r\n avatarConfig: {\r\n id: config.text,\r\n size: config.avatarConfig.size,\r\n imagePath: config.avatarConfig.imagePath,\r\n altText: config.avatarConfig.altText\r\n }\r\n };\r\n }\r\n\r\n // Helper method to create an actions cell\r\n static createActionsCell(config: { actions: Array<{ label: string, onClick: () => void, icon: string, class?: string }>, downloadAction?: { label: string, onClick: () => void, icon: string, iconSize?: string } }): GridInterface {\r\n return {\r\n cellType: 'actions',\r\n viewText: false,\r\n viewChip: false,\r\n viewLeadingIcon: false,\r\n viewTrailingIcon: false,\r\n viewButton: true,\r\n viewAvatar: false,\r\n actions: config.actions,\r\n downloadAction: config.downloadAction,\r\n buttonConfig: {\r\n id: 'actions-button',\r\n text: '',\r\n type: 'transparent',\r\n state: 'default',\r\n size: 'small',\r\n imagePath: '/assets/frameIcon.svg',\r\n iconPosition: 'both',\r\n onClick: (event: any) => {\r\n if (config.actions) {\r\n console.log('Actions available:', config.actions);\r\n config.actions.forEach(action => {\r\n console.log(`Action ${action.label} available`);\r\n });\r\n }\r\n }\r\n }\r\n };\r\n }\r\n\r\n // Helper method to create a masked email cell\r\n static createMaskedEmailCell(email: string, config: Partial<GridInterface> = {}): GridInterface {\r\n return {\r\n cellType: 'masked',\r\n viewText: true,\r\n viewChip: false,\r\n viewLeadingIcon: false,\r\n viewTrailingIcon: false,\r\n viewButton: false,\r\n viewAvatar: false,\r\n text: email,\r\n ...config\r\n };\r\n }\r\n \r\n}\r\n","<ag-grid-angular\r\n class=\"ag-theme-alpine sa-grid-theme\"\r\n [columnDefs]=\"columnDefs\"\r\n [rowData]=\"getEffectiveRowData()\"\r\n [defaultColDef]=\"defaultColDef\"\r\n (gridReady)=\"onGridReady($event)\"\r\n [domLayout]=\"gridHeight ? 'normal' : 'autoHeight'\"\r\n [style.height.px]=\"gridHeight || null\"\r\n [pagination]=\"pagination\"\r\n [paginationPageSize]=\"paginationPageSize\"\r\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\"\r\n [localeText]=\"localeText\"\r\n [rowModelType]=\"datasource ? 'infinite' : 'clientSide'\"\r\n></ag-grid-angular>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { NgFor } from '@angular/common';\r\nimport { NgIf } from '@angular/common';\r\nimport { ReactiveFormsModule, FormsModule, FormControl, FormGroup } from '@angular/forms';\r\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { CalendarHeaderComponent } from '../calendar-header/calendar-header.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'sa-datepicker',\r\n standalone: true,\r\n providers: [],\r\n imports: [\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatDatepickerModule,\r\n NgFor,\r\n NgIf,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n CalendarHeaderComponent,\r\n CommonModule,\r\n MatNativeDateModule,\r\n MatIconModule,\r\n MatButtonModule\r\n ],\r\n templateUrl: './datepicker.component.html',\r\n styleUrl: './datepicker.component.css'\r\n})\r\nexport class DatepickerComponent extends FieldType<FieldTypeConfig> {\r\n @Input() range: FormGroup = new FormGroup({\r\n start: new FormControl<Date | null>(null),\r\n end: new FormControl<Date | null>(null)\r\n });\r\n @Input() dateType: 'range' | 'single' = 'range';\r\n @Input() minDate: Date | null = null;\r\n @Input() maxDate: Date | null = null;\r\n @Input() hintText: string = 'MM/DD/YYYY';\r\n @Output() dateChange = new EventEmitter<any>();\r\n private _singleDateControl = new FormControl<Date | null>(null);\r\n\r\n readonly CalendarHeaderComponent = CalendarHeaderComponent;\r\n\r\n get singleFormControl(): FormControl {\r\n return this.formControl ?? this._singleDateControl;\r\n }\r\n\r\n onDateChange(event: any) {\r\n if (this.dateType === 'single') {\r\n this.singleFormControl.setValue(event.value);\r\n this.dateChange.emit(event.value);\r\n }\r\n }\r\n}\r\n","@if (dateType === 'range') {\r\n <mat-form-field class=\"date-picker\">\r\n <mat-label>Choose a date</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker\" [formGroup]=\"range\">\r\n <input formControlName=\"start\" matStartDate placeholder=\"Start date\">\r\n <input formControlName=\"end\" matEndDate placeholder=\"End date\">\r\n </mat-date-range-input>\r\n <mat-hint>{{ hintText }}</mat-hint>\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker [calendarHeaderComponent]=\"CalendarHeaderComponent\" #picker>\r\n </mat-date-range-picker>\r\n </mat-form-field>\r\n} @else if(dateType === 'single') {\r\n <mat-form-field appearance=\"outline\" class=\"date-picker-field\">\r\n <mat-label>Select Date</mat-label>\r\n <input matInput [matDatepicker]=\"pickerSingle\" [formControl]=\"singleFormControl\"\r\n [min]=\"minDate\" [max]=\"maxDate\" (dateChange)=\"onDateChange($event)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"pickerSingle\"></mat-datepicker-toggle>\r\n <mat-datepicker #pickerSingle></mat-datepicker>\r\n <mat-hint>{{ hintText }}</mat-hint>\r\n </mat-form-field>\r\n}\r\n","import { AbstractControl, AsyncValidatorFn, ValidationErrors, ValidatorFn } from '@angular/forms';\r\nimport { catchError, debounceTime, delay, distinctUntilChanged, map, Observable, of, Subject, switchMap } from 'rxjs';\r\nimport { get as _get, find as _find, has as _has, keys as _keys, startCase as _startCase } from 'lodash';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\n\r\nexport function phoneNumberValidator(dependent?: string): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const dependentFormControl = dependent ? control.parent?.get(dependent) : null;\r\n if (dependentFormControl && !!dependentFormControl.value?.length) {\r\n console.log('validator', dependentFormControl.value);\r\n\r\n if (dependentFormControl.value[0].id === 0) {\r\n if (!/^\\+1[2-9]\\d{2}[2-9]\\d{6}$/.test(control.value)) {\r\n return { invalid: 'invalid phone number' };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n\r\nexport function customNameValidator(fieldName?: string): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const name = control.value;\r\n const fieldLabel = fieldName || 'Name';\r\n \r\n if (!name || name.trim() === '') {\r\n return { invalid: `${fieldLabel} is required.` };\r\n }\r\n \r\n // Check if name starts with a number\r\n if (/^\\d/.test(name.trim())) {\r\n return { invalid: `${fieldLabel} cannot start with a number.` };\r\n }\r\n \r\n // Check if name contains only alphabetic characters (no spaces allowed)\r\n if (!/^[a-zA-Z]+$/.test(name.trim())) {\r\n return { invalid: `${fieldLabel} can only contain letters.` };\r\n }\r\n \r\n // Check minimum length (at least 2 characters)\r\n if (name.trim().length < 2) {\r\n return { invalid: `${fieldLabel} must be at least 2 characters long.` };\r\n }\r\n \r\n // Check maximum length (50 characters)\r\n if (name.trim().length > 50) {\r\n return { invalid: `${fieldLabel} cannot exceed 50 characters.` };\r\n }\r\n \r\n \r\n return null; // Valid name\r\n };\r\n}\r\n\r\nexport const customEmailValidator = (\r\n control: AbstractControl\r\n): { [key: string]: string } | null => {\r\n const email = control.value;\r\n // Replace the regular expression with the pattern you want to use.\r\n\r\n const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$/;\r\n\r\n if (emailPattern.test(email) && isWorkEmail(email)) {\r\n return null; // Valid email\r\n } else {\r\n if (!emailPattern.test(email)) {\r\n return {\r\n invalid:\r\n 'Please enter a valid email address.',\r\n }; // Invalid email\r\n }\r\n return {\r\n invalid:\r\n 'Please use a work email; personal emails (e.g., @gmail, @yahoo) are not accepted.',\r\n }; // Invalid email\r\n }\r\n};\r\nconst isWorkEmail = (email: string): boolean => {\r\n const invalidEmailHosts: string[] = ['gmail', 'yahoo', 'hotmail'];\r\n if (email) {\r\n let [userName, domainName] = email.split('@');\r\n for (let i = 0; i < invalidEmailHosts.length; i++) {\r\n let re = new RegExp(`.*${invalidEmailHosts[i]}\\..*`);\r\n if (re.test(domainName)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\n/*\r\nexport function workEmailValidation(): AsyncValidatorFn {\r\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\r\n if (!control.value) {\r\n return of(null); // No value to validate\r\n }\r\n\r\n !control.pending && control.markAsPending();\r\n // !control.touched && control.markAsTouched();\r\n // return of({ invalid: 'Enter your work email' });\r\n return of(null);\r\n return new Observable((ob) => {\r\n setTimeout(() => {\r\n if (control.value === 'sairaj@gmail.com')\r\n return ob.next(null)\r\n return ob.next({ invalid: 'This is not a workemail' });\r\n }, 500)\r\n });\r\n\r\n return of(control.value).pipe(\r\n delay(500), // Simulate network delay\r\n\r\n map(value => {\r\n return of({ invalid: 'This is not a workemail' })//existingUsernames.includes(username) ? { usernameTaken: true } : null;\r\n })\r\n // catchError(() => of(null)) // Handle any errors\r\n );\r\n };\r\n}*/\r\nexport function getValidationMessage(errors: any, placeholder: string = 'Input', additionalProperties?: any): string {\r\n const messages = _get(additionalProperties, 'nativeValidationObject.messages', {});\r\n const field = _get(additionalProperties, 'field', {});\r\n \r\n if (errors) {\r\n // Check if any key in errors matches with messages using lodash\r\n const matchingKey = _find(_keys(errors), key => _has(messages, key));\r\n if (matchingKey && messages[matchingKey]) {\r\n // If message is a function, execute it with errors and nativeValidationObject\r\n if (typeof messages[matchingKey] === 'function') {\r\n return messages[matchingKey](errors[matchingKey], field);\r\n }\r\n return messages[matchingKey];\r\n }\r\n \r\n // Fall back to default messages\r\n if (errors['minlength']) {\r\n return `Minimum ${errors['minlength']['requiredLength']} characters required`;\r\n } else if (errors['maxlength']) {\r\n return `Maximum of ${errors['maxlength']['requiredLength']} characters accepted`;\r\n } else if (errors['required']) {\r\n return `${placeholder} cannot be empty`;\r\n } else if (errors['invalid']) {\r\n return errors['invalid'];\r\n } else if (errors['email']) {\r\n return 'Enter a valid email';\r\n } else if (errors['pattern']) {\r\n // Context-aware pattern validation messages\r\n const fieldType = _get(additionalProperties, 'field.props.params.type', '');\r\n const fieldLabel = _get(additionalProperties, 'field.props.label', placeholder);\r\n const fieldPlaceholder = _get(additionalProperties, 'field.props.placeholder', placeholder);\r\n \r\n if (fieldLabel.toLowerCase().includes('name') || fieldLabel.toLowerCase().includes('first') || fieldLabel.toLowerCase().includes('last')) {\r\n return 'Names can only contain letters and spaces';\r\n } else if (fieldType === 'tel' || placeholder.toLowerCase().includes('phone')) {\r\n return 'Enter a valid phone number';\r\n } else if (fieldType === 'email') {\r\n return 'Enter a valid email address';\r\n } else {\r\n if (fieldLabel)\r\n return `Please enter a valid ${fieldLabel.toLowerCase()}`;\r\n else if (fieldPlaceholder)\r\n return `Please enter a valid ${fieldPlaceholder.toLowerCase()}`;\r\n }\r\n } else {\r\n return `Invalid ${placeholder}`;\r\n }\r\n }\r\n return `Invalid ${placeholder}`;\r\n}\r\n\r\nexport function numberRangeValidator(range: { min: number; max: number }, type = null): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n let value = control.value;\r\n\r\n if (type === 'percentage' && typeof value === 'string') {\r\n value = value.replace('%', '');\r\n }\r\n\r\n // Convert to a number if it's not null or undefined\r\n const numericValue = value !== null && value !== undefined ? parseFloat(value) : NaN;\r\n\r\n // Check if the value is a valid number and within the range\r\n if (isNaN(numericValue) || numericValue < range.min || numericValue > range.max) {\r\n return {\r\n invalid: `Please enter a valid number between ${range.min} and ${range.max}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n\r\nexport const requiredValidatorMessage = (error: any, field: FormlyFieldConfig) => {\r\n return `${_startCase(_get(field, 'props.label'))} is required.`;\r\n}","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n FormControl,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n getValidationMessage,\r\n phoneNumberValidator,\r\n} from '../../utils/validators';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { get as _get, set as _set, map } from 'lodash';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n@Component({\r\n selector: 'sa-input',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n IconComponent,\r\n MatTooltipModule,\r\n ChipsComponent\r\n ],\r\n templateUrl: './form-input.component.html',\r\n styleUrl: './form-input.component.css',\r\n})\r\nexport class FormInputComponent extends FieldType<FieldTypeConfig> {\r\n @ViewChild('formInput') formInput!: ElementRef;\r\n\r\n @Input('icon') icon: IInputIcon;\r\n\r\n pretext: string;\r\n\r\n inputState = 'idle';\r\n inputVal = '';\r\n @Input() params: IInputParam | null;\r\n dependent: AbstractControl<any, any> | null;\r\n dependentVal: any = null;\r\n // dynamicIcon: DynamicIcon | null;\r\n // icon: IInputIcon | null;\r\n\r\n type: string = '';\r\n validators: any[];\r\n asyncValidators: any[];\r\n\r\n inputErrorText: string = 'invalid input';\r\n\r\n showEmailIcon: boolean = false;\r\n disabled: boolean = false;\r\n chipValues: any[] = [];\r\n isMultiValue: boolean = false;\r\n currentInputValue: string = '';\r\n startInd: number = 0;\r\n labelLimit: number = 1;\r\n\r\n private suppressOnBlur = false;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.inputVal = _get(this.field.props, 'value', _get(this.model, [this.key as string])) || '';\r\n this.disabled = this.field.props.disabled || false;\r\n this.formControl?.setValue(this.inputVal);\r\n\r\n this.params = this.params || this.field.props['params'];\r\n this.icon = this.icon || this.field.props['icon'] || {};\r\n this.type = this.params?.type || '';\r\n this.formControl.valueChanges.subscribe((val) => {\r\n _set(this.formInput, 'nativeElement.value', val);\r\n // Handle multi-value chip updates\r\n if (this.isMultiValue && Array.isArray(val)) {\r\n this.chipValues = val;\r\n }\r\n });\r\n\r\n // Initialize multi-value mode if specified\r\n if (this.params?.type === 'multi-value' || this.params?.multiValue) {\r\n this.isMultiValue = true;\r\n this.chipValues = this.model[this.key as string] || this.params?.chipValues || [];\r\n this.currentInputValue = '';\r\n }\r\n\r\n // this.dynamicIcon = this.field.props['dynamicIcon'];\r\n this.setValidators();\r\n this.setDependents();\r\n\r\n this.formControl.statusChanges.subscribe((state) => {\r\n if (this.type === 'email') {\r\n if (!!this.inputVal && !this.formControl.touched) {\r\n this.formControl.markAsTouched();\r\n }\r\n this.showEmailIcon =\r\n state === 'VALID' ||\r\n (state === 'INVALID' &&\r\n this.formControl.hasError('invalid') &&\r\n !!this.formControl.value);\r\n }\r\n });\r\n this.formControl.valueChanges.subscribe((val) => {\r\n _set(this.formInput, 'nativeElement.value', val);\r\n });\r\n }\r\n\r\n setValidators() {\r\n this.validators = this.params?.validators || this.predefinedValidators[this.type] || [];\r\n this.asyncValidators = this.params?.asyncValidators || [];\r\n if(!_get(this.field, 'validators.validation', null)) {\r\n this.formControl?.setValidators([\r\n ...(this.type ? this.predefinedValidators[this.type] || [] : []),\r\n ...(this.validators),\r\n ]);\r\n }\r\n if (this.asyncValidators) {\r\n this.formControl?.setAsyncValidators(this.asyncValidators);\r\n }\r\n }\r\n\r\n /*\r\n Assuming dependent field is a single select dropdown\r\n */\r\n setDependents() {\r\n if (this.params?.dependent) {\r\n this.dependent = this.form.get([this.params?.dependent]);\r\n\r\n this.dependentVal = this.getDependentVal(_get(this.dependent, 'value'));\r\n if (this.type === 'tel') {\r\n this.pretext = this.dependentVal?.dial_code;\r\n }\r\n\r\n this.dependent?.valueChanges.subscribe((val) => {\r\n this.dependentVal = this.getDependentVal(val);\r\n this.formControl.reset();\r\n this.formControl.setValue(this.inputVal);\r\n if (this.type === 'tel') {\r\n this.pretext = this.dependentVal?.dial_code;\r\n }\r\n });\r\n }\r\n }\r\n getDependentVal(value: any) {\r\n let dependentValue: any;\r\n if (Array.isArray(value)) {\r\n dependentValue = value.length ? value[0] : null;\r\n } else {\r\n dependentValue = value;\r\n }\r\n return dependentValue;\r\n }\r\n\r\n checkValidity(defaultInputState = 'focus') {\r\n if (\r\n this.formControl &&\r\n !this.formControl.valid &&\r\n this.formControl.touched &&\r\n !this.formControl.pending\r\n ) {\r\n this.inputState = 'invalid';\r\n this.inputErrorText =\r\n getValidationMessage(this.formControl.errors, this.params?.placeholder || this.field.props?.label || 'Input', {\r\n field: this.field,\r\n nativeValidationObject: this.field.validation,\r\n }) || `invalid ${this.params?.placeholder || this.field.props?.label || 'input'}`\r\n } else {\r\n this.inputState = defaultInputState;\r\n }\r\n }\r\n\r\n onFocus() {\r\n if (this.formControl.valid) this.inputState = 'focus';\r\n }\r\n onBlur() {\r\n setTimeout(() => {\r\n if (!this.suppressOnBlur) {\r\n this.formControl.markAsTouched();\r\n this.checkValidity('idle');\r\n }\r\n this.suppressOnBlur = false;\r\n }, 200);\r\n }\r\n\r\n onInput(event: any) {\r\n if (this.params?.type === 'tel') {\r\n this.inputVal = this.inputVal.replace(/[^0-9()+\\- ]/g, '');\r\n this.inputVal = this.hyphenatePhoneNumber();\r\n }\r\n if (this.params?.type === 'percentage') {\r\n let value = this.inputVal.replace(/[^0-9.]/g, '');\r\n this.inputVal = value ? `${value}%` : '';\r\n }\r\n this.formControl?.setValue(this.inputVal);\r\n this.checkValidity();\r\n /*if (this.params?.eventListener) {\r\n this.params?.eventListener({\r\n type: IInputEventType.INPUT_CHANGE,\r\n value: this.inputVal,\r\n formControl: this.formControl\r\n } as IInputEvent).then(this.onFieldCallback.bind(this));\r\n }*/\r\n }\r\n\r\n hyphenatePhoneNumber() {\r\n let newStr = '';\r\n let i = 0;\r\n let hyphenatedCount = 1;\r\n const value = this.inputVal.replaceAll('-', '');\r\n for (; i < value.length; i++) {\r\n newStr = newStr + value.charAt(i);\r\n if (!(hyphenatedCount % 3)) {\r\n if (!((i + 1) % 10) && i + 1 < value.length) {\r\n newStr = newStr + '-';\r\n hyphenatedCount++;\r\n }\r\n } else if (\r\n !((i + 1 - Math.floor(hyphenatedCount / 3)) % 3) &&\r\n i + 1 < value.length\r\n ) {\r\n newStr = newStr + '-';\r\n hyphenatedCount++;\r\n }\r\n }\r\n\r\n return newStr;\r\n }\r\n\r\n onInputFieldClick(event: any = 'input') {\r\n if (\r\n event === 'input' ||\r\n event.target.classList.contains('sa-input-field')\r\n ) {\r\n this.formInput.nativeElement.focus();\r\n if (this.params?.type !== 'email')\r\n setTimeout(() => {\r\n this.formInput?.nativeElement?.setSelectionRange(\r\n this.inputVal.length,\r\n this.inputVal.length,\r\n );\r\n }, 10);\r\n }\r\n }\r\n\r\n inputIconClick() {\r\n if (this.params?.type === 'password') {\r\n this.suppressOnBlur = true;\r\n if (this.type === 'password') {\r\n this.type = 'text';\r\n this.icon.name = 'eyeOff';\r\n } else {\r\n this.type = 'password';\r\n this.icon.name = 'eyeOutlined';\r\n }\r\n this.onInputFieldClick();\r\n }\r\n }\r\n\r\n addChip(value: string) {\r\n if (!this.isMultiValue || !value.trim()) return; \r\n const chipValue = {\r\n label: value.trim(),\r\n value: value.trim(),\r\n removable: true\r\n };\r\n this.chipValues.push(chipValue); \r\n const actualValues = map(this.chipValues, (chip: any) => chip.value || chip.label || chip);\r\n this.formControl?.setValue(actualValues);\r\n this.currentInputValue = '';\r\n this.model[this.key as string] = actualValues;\r\n }\r\n \r\n removeChip(index: number) {\r\n if (!this.isMultiValue) return; \r\n this.chipValues.splice(index, 1); \r\n const actualValues = map(this.chipValues, (chip: any) => chip.value || chip.label || chip);\r\n this.model[this.key as string] = actualValues;\r\n }\r\n\r\n onChipKeyDown(event: KeyboardEvent) {\r\n if (!this.isMultiValue) return;\r\n if (event.key === 'Enter' || event.key === ',') {\r\n event.preventDefault();\r\n this.addChip(this.currentInputValue);\r\n } else if (event.key === 'Backspace' && !this.currentInputValue && this.chipValues.length > 0) {\r\n this.removeChip(this.chipValues.length - 1);\r\n }\r\n }\r\n \r\n onChipInputChange(event: any) {\r\n if (!this.isMultiValue) return;\r\n this.currentInputValue = event.target.value;\r\n }\r\n\r\n onChipBlur() {\r\n if (!this.isMultiValue) return;\r\n if (this.currentInputValue.trim()) {\r\n this.addChip(this.currentInputValue);\r\n }\r\n }\r\n /*onFieldCallback(param: IInputParam) {\r\n this.icon = param.icon || this.icon;\r\n this.checkValidity();\r\n }*/\r\n\r\n getFormSupportText() {\r\n if (this.formControl.invalid && this.formControl.touched) {\r\n return (\r\n getValidationMessage(this.formControl.errors, this.params?.placeholder || this.field.props?.label || 'Input',{\r\n field: this.field,\r\n nativeValidationObject: _get(this.field, 'validation'),\r\n }) ||\r\n `invalid ${this.params?.placeholder || this.field.props?.label || 'input'}`\r\n );\r\n } else {\r\n return this.params?.supportText || '';\r\n }\r\n }\r\n\r\n predefinedValidators: any = {\r\n email: [Validators.email, Validators.required],\r\n password: [Validators.required],\r\n tel: [Validators.pattern('^[0-9 +\\\\-()]*$')],\r\n };\r\n\r\n getLabelFieldGap(): string {\r\n if (this.props?.['bigLabel']) {\r\n return 'var(--medium-20px)';\r\n } else if (this.props?.['label']) {\r\n return 'var(--small-4px)';\r\n } else {\r\n return '0px'; // No gap\r\n }\r\n }\r\n\r\n shiftLabel(action: 'clicked' | 'cleared') {\r\n if (action === 'clicked') {\r\n this.startInd = 0;\r\n } else {\r\n this.startInd = Math.max(0, this.chipValues.length - this.labelLimit);\r\n }\r\n }\r\n}\r\n\r\nexport interface IInputIcon {\r\n name: string;\r\n show?: boolean;\r\n color?: string;\r\n size?: string;\r\n}\r\n\r\nexport interface IInputParam {\r\n validators?: any[];\r\n asyncValidators?: any[];\r\n supportText?: string;\r\n placeholder?: string;\r\n type?: string;\r\n dependent?: string;\r\n eventListener?: Function;\r\n icon?: IInputIcon;\r\n errors?: { [key: string]: any };\r\n className?: string;\r\n multiValue?: boolean; // for multi-value chip support\r\n chipValues?: any[]; // for multi-value chip support\r\n}\r\n\r\nexport interface IInputEvent {\r\n type: IInputEventType;\r\n value: string;\r\n callBack: any;\r\n formControl: FormControl;\r\n}\r\nexport enum IInputEventType {\r\n INPUT_CHANGE = 'INPUT_CHANGE',\r\n STATE_CHANGE = 'STATE_CHANGE',\r\n ICON_CLICK = 'ICON_CLICK',\r\n}\r\n","<div class=\"sa-input-container {{props?.['inputContainerClass']}}\" [ngStyle]=\"{'gap': getLabelFieldGap()}\">\r\n @if (!!props?.['bigLabel'] || !!props?.['bigDescription']) {\r\n <div class=\"sa-input-big-label-container\" [ngClass]=\"disabled ? 'disabled' : '' \">\r\n <h2 class=\"sa-input-big-label\">\r\n {{props?.['bigLabel']}}\r\n </h2>\r\n <p class=\"sa-input-big-description\">\r\n {{props?.['bigDescription']}}\r\n </p>\r\n </div>\r\n }\r\n @if(!!props?.['label']){\r\n <div class=\"sa-input-label-container\" [ngClass]=\"disabled ? 'disabled' : '' \">\r\n <div class=\"sa-input-label-tooltip-container\">\r\n <span class=\"sa-input-label\">\r\n {{props?.['label']}}\r\n </span>\r\n @if(!!props?.['tooltip']){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\r\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\r\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\r\n </span>\r\n }\r\n </div>\r\n @if(!!props?.['description']) {\r\n <p class=\"sa-input-description\">\r\n {{props?.['description']}}\r\n </p>\r\n }\r\n </div>\r\n }\r\n <div class=\"sa-input\" [ngClass]=\"disabled ? 'disabled' : '' \">\r\n @if((pretext || (!!inputVal?.length && (!!params?.placeholder || !!props?.placeholder))) && props?.['showTag']\r\n !== false){\r\n <span class=\"sa-input-tag\">{{params?.placeholder || props?.placeholder}}</span>\r\n }\r\n <div class=\"sa-input-field\" [ngClass]=\"formControl.invalid && formControl.touched ? 'invalid' : 'idle' \"\r\n (click)=\"onInputFieldClick($event)\">\r\n @if(pretext){\r\n <div class=\"sa-input-pretext\">\r\n {{pretext}}\r\n </div>\r\n }\r\n\r\n <!-- Multi-value chip display -->\r\n @if(isMultiValue) {\r\n <div class=\"chip-container\">\r\n <sa-chip \r\n *ngFor=\"let chip of (chipValues || [])?.slice(startInd,startInd+labelLimit) let i = index\"\r\n [text]=\"chip?.value || chip?.label || chip\"\r\n [type]=\"'regular'\"\r\n [state]=\"'primary'\"\r\n [filling]=\"'filled'\"\r\n [iconPosition]=\"'right'\"\r\n [iconPath]=\"'../assets/closeBlueOutlined.svg'\"\r\n (onClickEvent)=\"removeChip(i)\">\r\n </sa-chip>\r\n \r\n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\r\n *ngIf=\"(chipValues || []).length > (startInd + labelLimit)\">\r\n <sa-chip [text]=\"'+' + ((chipValues || []).length - (startInd + labelLimit))\" \r\n type=\"regular\" \r\n state=\"primary\" \r\n filling=\"filled\">\r\n </sa-chip>\r\n </div>\r\n <input\r\n [ngClass]=\"'chip-input'\"\r\n matInput [type]=\"type\"\r\n [disabled]=\"field.props.disabled || false\"\r\n [placeholder]=\"chipValues.length === 0 ? (props?.placeholder || params?.placeholder || '') : ''\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onChipBlur()\"\r\n (input)=\"onChipInputChange($event)\"\r\n (keydown)=\"onChipKeyDown($event)\"\r\n [(ngModel)]=\"currentInputValue\"\r\n #formInput />\r\n </div>\r\n } @else {\r\n <!-- Standard single-value input (backward compatibility) -->\r\n @if(!!props?.['prefix']){\r\n <span matPrefix>{{props?.['prefix']}}&nbsp;</span>\r\n }\r\n <input\r\n [ngClass]=\"(!!inputVal && (params?.type === 'password' || props?.type === 'password') && icon.name !== 'eyeOff') ? 'masked' : ''\"\r\n matInput [type]=\"props?.type || type\" value=\"\" [pattern]=\"type==='tel' ? '[0-9]' : '' \"\r\n [disabled]=\"field.props.disabled || false\"\r\n [placeholder]=\"!pretext && props?.placeholder || params?.placeholder || ''\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" (input)=\"onInput($event)\" [(ngModel)]=\"inputVal\" #formInput />\r\n }\r\n\r\n @if(params?.type === 'password'){\r\n <sa-icon class=\"flex\" icon=\"eyeOutlined\" [size]=\"icon.size || '24'\" (click)=\"inputIconClick()\"\r\n [ngClass]=\"!icon.name || icon.name === 'eyeOutlined' ? '' : 'hide'\"></sa-icon>\r\n <sa-icon class=\"flex\" icon=\"eyeOff\" [size]=\"icon.size || '24'\" (click)=\"inputIconClick()\"\r\n [ngClass]=\"icon.name === 'eyeOff' ? '' : 'hide'\"></sa-icon>\r\n }@else if(params?.type === 'email' && icon.show){\r\n <sa-icon class=\"flex\" [icon]=\"icon.name || 'checkCircleOutlined'\" [size]=\"icon.size || '24'\"\r\n (click)=\"inputIconClick()\" [ngClass]=\"showEmailIcon ? '' : 'hide'\"></sa-icon>\r\n }\r\n @else if(icon?.name){\r\n <sa-icon class=\"flex\" [icon]=\"icon.name\" [size]=\"icon?.size || '24'\" [color]=\"icon?.color || ''\"\r\n [ngClass]=\"icon?.show ? '' : 'hide'\"></sa-icon>\r\n }\r\n </div>\r\n @if((!formControl.valid) || (params?.supportText)){\r\n <div class=\"support-label {{formControl.invalid && formControl.touched ? params?.className : ''}}\" [ngClass]=\"[\r\n formControl.invalid && formControl.touched ? 'invalid' : 'idle'\r\n ]\">\r\n <!-- {{!formControl.valid ? inputErrorText : params.supportText}} -->\r\n {{getFormSupportText()}}\r\n </div>\r\n }\r\n </div>\r\n</div>","import { Component, EventEmitter, Output, ViewChild, ElementRef } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { NgSelectComponent, NgSelectModule } from '@ng-select/ng-select';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { NgIf, NgFor } from '@angular/common';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SelectInterface, SelectSubInterface } from '../../public-api';\r\n\r\n@Component({\r\n selector: 'lib-form-select',\r\n standalone: true,\r\n imports: [\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n ReactiveFormsModule,\r\n NgSelectModule,\r\n ChipsComponent,\r\n NgIf,\r\n NgFor,\r\n MatTooltipModule,\r\n IconComponent,\r\n CommonModule,\r\n MatTooltipModule\r\n ],\r\n templateUrl: './form-select.component.html',\r\n styleUrl: './form-select.component.css'\r\n})\r\nexport class FormSelectComponent extends FieldType<FieldTypeConfig> {\r\n selectables: any;\r\n params: any;\r\n\r\n // Helper method to get full object from bound value\r\n getFullObjectFromValue(value: any): any {\r\n const bindValue = this.params?.bindValue || this.field.props?.['bindValue'];\r\n if (!bindValue) return value;\r\n \r\n return this.selectables.find((item: any) => item[bindValue] === value) || value;\r\n }\r\n\r\n svgStyle = {};\r\n openState: boolean = false;\r\n topLabel: boolean;\r\n startInd: number = 0;\r\n labelLimit: number = 2;\r\n\r\n placeholderLabel: string;\r\n @Output('hoverEvent') hoverEvent: EventEmitter<selectHoverEvent> = new EventEmitter();\r\n @ViewChild(NgSelectComponent) ngSelect!: NgSelectComponent;\r\n\r\n constructor(private elementRef: ElementRef) {\r\n super();\r\n }\r\n \r\n ngOnInit() {\r\n this.selectables = this.field.props.options; \r\n this.params = this.field.props['params'] || {};\r\n \r\n // Fallback to field.props if params is empty\r\n if (!this.params || Object.keys(this.params).length === 0) {\r\n this.params = this.field.props;\r\n }\r\n \r\n \r\n this.placeholderLabel = this.params.label || this.field.props.placeholder;\r\n this.svgStyle = {\r\n '-webkit-mask-image': `url(${this.params.dropIcon})})`,\r\n 'mask-image': `url(${this.params.dropIcon})`,\r\n }\r\n \r\n // Set labelLimit from params if provided\r\n if (this.params?.labelLimit !== undefined) {\r\n this.labelLimit = this.params.labelLimit;\r\n }\r\n \r\n // Set CSS custom property for chip background based on state\r\n this.setChipBackgroundColor();\r\n }\r\n\r\n private setChipBackgroundColor(): void {\r\n const state = this.params?.state;\r\n let backgroundColor = 'var(--primary-50)'; // default fallback\r\n \r\n // Map chip states to appropriate background colors\r\n switch(state) {\r\n case 'neutral':\r\n backgroundColor = 'var(--grey-50)';\r\n break;\r\n case 'success':\r\n backgroundColor = 'var(--success-50)';\r\n break;\r\n case 'error':\r\n backgroundColor = 'var(--error-50)';\r\n break;\r\n case 'warning':\r\n backgroundColor = 'var(--warning-50)';\r\n break;\r\n case 'primary':\r\n default:\r\n backgroundColor = 'var(--primary-50)';\r\n break;\r\n }\r\n \r\n if (typeof document !== 'undefined' && this.elementRef?.nativeElement) {\r\n this.elementRef.nativeElement.style.setProperty('--ng-select-chip-bg', backgroundColor);\r\n }\r\n }\r\n openClose(state: boolean) {\r\n if (this.field.props.disabled) return;\r\n this.openState = state;\r\n if (state || this.formControl.value?.length > 0) {\r\n this.placeholderLabel = this.params.placeholder\r\n } else {\r\n this.placeholderLabel = this.params.label;\r\n }\r\n }\r\n shiftLabel(action: string) {\r\n if (action == 'clicked') this.startInd++;\r\n if (action == 'cleared') this.startInd = 0;\r\n if (action == 'removed' && this.startInd > 0) this.startInd--;\r\n this.topLabel = this.formControl.value?.length > 0; \r\n this.placeholderLabel = this.openState || this.formControl.value?.length > 0 \r\n ? this.params.placeholder \r\n : this.params.label;\r\n}\r\n\r\n toggleOption(item: any, event: Event): void {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n \r\n if (!this.params?.multiple) {\r\n // Single select mode\r\n this.formControl.setValue(item);\r\n this.openState = false; \r\n return;\r\n }\r\n\r\n // Multi-select mode\r\n const currentValue = this.formControl.value || [];\r\n const bindValue = this.params?.bindValue || this.field.props?.['bindValue'];\r\n const itemValue = bindValue ? item[bindValue] : item;\r\n \r\n const index = currentValue.findIndex((selected: any) => {\r\n const selectedValue = bindValue ? selected[bindValue] : selected;\r\n return selectedValue === itemValue;\r\n });\r\n\r\n let newValue;\r\n if (index > -1) {\r\n newValue = [...currentValue];\r\n newValue.splice(index, 1);\r\n } else {\r\n newValue = [...currentValue, item];\r\n }\r\n \r\n this.formControl.setValue(newValue);\r\n this.formControl.markAsDirty();\r\n this.formControl.markAsTouched();\r\n \r\n this.checkForZero(newValue);\r\n \r\n this.formControl.updateValueAndValidity();\r\n }\r\n\r\n\r\n onNgSelectChange(selected: any): void {\r\n // Only handle ng-select changes when NOT in checkbox mode\r\n if (!this.params?.showCheckboxes) {\r\n this.checkForZero(selected);\r\n } else {\r\n // In checkbox mode, prevent ng-select from changing the form control\r\n // Restore the current value to prevent ng-select interference\r\n const currentValue = this.formControl.value || [];\r\n this.openState = true;\r\n setTimeout(() => {\r\n this.formControl.setValue(currentValue, { emitEvent: false });\r\n this.openState = true;\r\n }, 0);\r\n }\r\n }\r\n\r\n selectAll(): void {\r\n if (!this.params?.multiple) return;\r\n \r\n // Check if we have bindValue configured\r\n const bindValue = this.params?.bindValue || this.field.props?.['bindValue'];\r\n \r\n let allValues;\r\n if (bindValue) {\r\n // If bindValue is configured, extract only the bound values\r\n allValues = this.selectables.map((item: any) => item[bindValue]);\r\n } else {\r\n // If no bindValue, store full objects\r\n allValues = [...this.selectables];\r\n }\r\n \r\n this.formControl.setValue(allValues);\r\n this.formControl.markAsDirty();\r\n this.formControl.markAsTouched();\r\n \r\n this.checkForZero(allValues);\r\n \r\n this.formControl.updateValueAndValidity();\r\n \r\n // Ensure Formly integration\r\n if (this.field && this.field.formControl) {\r\n this.field.formControl.setValue(allValues);\r\n this.field.formControl.updateValueAndValidity();\r\n }\r\n }\r\n\r\n unselectAll(): void {\r\n if (!this.params?.multiple) return;\r\n \r\n const emptyValue: any[] = [];\r\n \r\n this.formControl.setValue(emptyValue);\r\n this.formControl.markAsDirty();\r\n this.formControl.markAsTouched();\r\n \r\n this.checkForZero(emptyValue);\r\n \r\n this.formControl.updateValueAndValidity();\r\n \r\n if (this.field && this.field.formControl) {\r\n this.field.formControl.setValue(emptyValue);\r\n this.field.formControl.updateValueAndValidity();\r\n }\r\n }\r\n\r\n // Toggle behavior for the single \"Select all\" label in header\r\n toggleSelectAll(): void {\r\n if (!this.params?.multiple) return;\r\n if (this.isAllSelected()) {\r\n this.unselectAll();\r\n } else {\r\n this.selectAll();\r\n }\r\n }\r\n\r\n isAllSelected(): boolean {\r\n const currentValue = this.formControl.value || [];\r\n return Array.isArray(currentValue) && \r\n currentValue.length === this.selectables.length &&\r\n this.selectables.every((item: any) => this.isOptionSelected(item));\r\n }\r\n\r\n isSomeSelected(): boolean {\r\n const currentValue = this.formControl.value || [];\r\n return Array.isArray(currentValue) && \r\n currentValue.length > 0 && \r\n currentValue.length < this.selectables.length;\r\n }\r\n toggleItemSelection(item: any, event: Event): void {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n \r\n if (!this.params?.multiple) return;\r\n \r\n const currentValue = this.formControl.value || [];\r\n const bindValue = this.params?.bindValue || this.field.props?.['bindValue'];\r\n \r\n let itemIndex = -1;\r\n let itemValue = bindValue ? item[bindValue] : item;\r\n \r\n if (bindValue) {\r\n // When using bindValue, currentValue should contain only the bound values\r\n itemIndex = currentValue.findIndex((selected: any) => selected === itemValue);\r\n } else {\r\n // When not using bindValue, compare full objects\r\n itemIndex = currentValue.findIndex((selected: any) => {\r\n if (typeof selected === 'object' && typeof item === 'object') {\r\n return JSON.stringify(selected) === JSON.stringify(item);\r\n }\r\n return selected === item;\r\n });\r\n }\r\n \r\n let newValue;\r\n if (itemIndex > -1) {\r\n // Remove the item\r\n newValue = [...currentValue];\r\n newValue.splice(itemIndex, 1);\r\n } else {\r\n // Add the item\r\n if (bindValue) {\r\n // Add only the bound value\r\n newValue = [...currentValue, itemValue];\r\n } else {\r\n // Add the full object\r\n newValue = [...currentValue, item];\r\n }\r\n }\r\n \r\n this.formControl.setValue(newValue);\r\n this.formControl.markAsDirty();\r\n this.formControl.markAsTouched();\r\n \r\n this.checkForZero(newValue);\r\n \r\n this.formControl.updateValueAndValidity();\r\n \r\n if (this.field && this.field.formControl) {\r\n this.field.formControl.setValue(newValue);\r\n this.field.formControl.updateValueAndValidity();\r\n }\r\n \r\n // Force Angular change detection to update the UI\r\n setTimeout(() => {\r\n if (this.ngSelect && !this.ngSelect.isOpen) {\r\n this.ngSelect.open();\r\n }\r\n }, 0);\r\n }\r\n\r\n isOptionSelected(item: any): boolean {\r\n const currentValue = this.formControl.value || [];\r\n if (!Array.isArray(currentValue)) return false;\r\n \r\n const bindValue = this.params?.bindValue || this.field.props?.['bindValue'];\r\n \r\n if (bindValue) {\r\n // When using bindValue, currentValue contains only the bound values\r\n const itemValue = item[bindValue];\r\n return currentValue.includes(itemValue);\r\n } else {\r\n // When not using bindValue, compare full objects\r\n return currentValue.some((selected: any) => {\r\n if (typeof selected === 'object' && typeof item === 'object') {\r\n return JSON.stringify(selected) === JSON.stringify(item);\r\n }\r\n return selected === item;\r\n });\r\n }\r\n }\r\n\r\n checkForZero(selected: any, state?: boolean) {\r\n // Use the passed selected parameter if available, otherwise fall back to form control value\r\n const valueToCheck = selected !== undefined ? selected : this.formControl.value;\r\n \r\n this.topLabel = valueToCheck?.length == 0 ? false : true;\r\n // console.log(\"test\", this.formControl.value?.length)\r\n // console.log(\"test\", this.openState)\r\n // console.log(\"placeholder--- \", this.placeholderLabel)\r\n // console.log(\"params.label--- \", this.params.label)\r\n this.openState = state;\r\n if (state || valueToCheck?.length > 0) {\r\n this.placeholderLabel = this.params.placeholder;\r\n } else {\r\n this.placeholderLabel = this.params.label;\r\n }\r\n }\r\n mouseHover(item: SelectSubInterface, event: any = null, tooltip: MatTooltip) { // New method for mouseenter event\r\n this.hoverEvent.emit({\r\n event,\r\n item\r\n });\r\n if (tooltip) {\r\n tooltip.show();\r\n }\r\n }\r\n}\r\n\r\nexport interface selectHoverEvent {\r\n event: any,\r\n item: SelectSubInterface\r\n}","<div class=\"sa-select-container {{props?.['inputContainerClass']}}\">\r\n @if(!!props?.['label']){\r\n <div class=\"sa-select-label-container\">\r\n <div class=\"sa-select-label-tooltip-container\">\r\n <span class=\"sa-select-label\">\r\n {{props?.['label']}}\r\n </span>\r\n @if(!!props?.['tooltip']){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\r\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\r\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\r\n </span>\r\n }\r\n </div>\r\n @if(!!props?.['description']) {\r\n <p class=\"sa-select-description\">\r\n {{props?.['description']}}\r\n </p>\r\n }\r\n </div>\r\n }\r\n <div class=\"sa-select-field-container\">\r\n <div [style.visibility]=\"(props?.['showTag'] !== false && (openState || topLabel)) ? 'visible' : 'hidden'\"\r\n class=\"clicked-label\">{{params.label}}\r\n </div>\r\n <div\r\n class=\"ng-select-field {{openState ? 'activated' : 'idle'}} {{field.props.disabled ? 'disabled' : ''}} {{formControl.valid ? '' : 'invalid'}}\">\r\n <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"left-icon svg-icon\" [style]=\"svgStyle\"\r\n (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\"\r\n *ngIf=\"(params.dropIconPosition == 'left' || params.dropIconPosition == 'both')\">\r\n </div>\r\n <ng-select (change)=\"onNgSelectChange($event)\" (remove)=\"shiftLabel('removed')\" (clear)=\"shiftLabel('cleared')\"\r\n (search)=\"openClose(true)\" (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\" [isOpen]=\"openState\"\r\n [placeholder]=\"placeholderLabel\" [bindLabel]=\"props?.['bindLabel'] || 'name'\" [bindValue]=\"props?.['bindValue'] || null\" [items]=\"selectables\" [multiple]=\"params?.multiple\"\r\n [formControl]=\"formControl\" [style] [formlyAttributes]=\"field\" [searchable]=\"field.props['searchable']\" [clearable]=\"false\" [closeOnSelect]=\"!params?.showCheckboxes\" class=\"form-ng-select\"> \r\n <!-- Multi-label template for displaying selected items as chips -->\r\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\r\n <div *ngFor=\"let item of (items ? items.slice(startInd,startInd+labelLimit): [])\">\r\n <sa-chip (onClickEvent)=\" (!field.props.disabled) ? clear(item) : null\" \r\n [id]=\"getFullObjectFromValue(item)[params?.bindValue || props?.['bindValue'] || 'id']\"\r\n [iconPath]=\"params.iconPath\" \r\n [text]=\"getFullObjectFromValue(item)[params?.bindLabel || props?.['bindLabel'] || 'name']\" \r\n [type]=\"params.type\"\r\n [state]=\"field.props.disabled ? 'neutral' : params.state\" \r\n [filling]=\"params.filling\"\r\n [iconPosition]=\"params.iconPosition\">\r\n </sa-chip>\r\n </div>\r\n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\r\n *ngIf=\"items.length > (startInd+labelLimit)\">\r\n <sa-chip text=\"+{{items.length-(startInd+labelLimit)}}\" \r\n [type]=\"params.type || 'regular'\" \r\n [state]=\"params.state || 'primary'\" \r\n [filling]=\"params.filling || 'filled'\">\r\n </sa-chip>\r\n </div>\r\n <div (click)=\"shiftLabel('cleared')\" *ngIf=\"startInd > 0\"\r\n class=\"ng-value overflow-label\">\r\n <sa-chip text=\"...\" \r\n [type]=\"params.type || 'regular'\" \r\n [state]=\"params.state || 'default'\" \r\n [filling]=\"params.filling || 'filled'\">\r\n </sa-chip>\r\n </div>\r\n </ng-template>\r\n \r\n <!-- Universal option template with tooltip support for any select type -->\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\">\r\n <div class=\"option-container\" [ngClass]=\"{'checkbox-option': params?.showCheckboxes, 'single-option-with-tooltip': !params?.showCheckboxes}\">\r\n <!-- Checkbox for multi-select -->\r\n <input *ngIf=\"params?.showCheckboxes\" \r\n type=\"checkbox\" \r\n [checked]=\"isOptionSelected(item)\" \r\n (mousedown)=\"toggleItemSelection(item, $event)\"\r\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\r\n class=\"option-checkbox\">\r\n \r\n <!-- Option label -->\r\n <span class=\"option-label\">{{ item[props?.['bindLabel'] || 'name'] }}</span>\r\n \r\n <!-- Tooltip icon - shows when item has description/tooltip -->\r\n <sa-icon *ngIf=\"item.description || item.tooltip\" \r\n [icon]=\"'infoCircleOutlined'\" \r\n [size]=\"'16'\" \r\n class=\"option-tooltip-icon d-flex\"\r\n [matTooltip]=\"item.description || item.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\"\r\n [matTooltipDisabled]=\"!(item.description || item.tooltip)\">\r\n </sa-icon>\r\n </div>\r\n </ng-template>\r\n \r\n <!-- Simple header template for Select All / Unselect All when in checkbox mode -->\r\n <ng-template ng-header-tmp *ngIf=\"params?.showCheckboxes && params?.multiple\">\r\n <div class=\"select-all-header\">\r\n <span class=\"select-all-label\" (click)=\"toggleSelectAll()\">Select all</span>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ng-arrow-tmp>\r\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex custom-dropdown-arrow\" [size]=\"'18'\"></sa-icon>\r\n </ng-template>\r\n </ng-select>\r\n <div *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\" class=\"right-icon\">\r\n <sa-icon [icon]=\"'downChevronOutlined'\" tabindex=\"0\" class=\"d-flex\" [size]=\"'18'\" (click)=\"openClose(!this.openState)\"\r\n (blur)=\"openClose(false)\" ></sa-icon>\r\n </div>\r\n <!-- <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"right-icon svg-icon\" [style]=\"svgStyle\"\r\n (click)=\"openClose(true)\" (blur)=\"openClose(false)\"\r\n *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\">\r\n </div> -->\r\n\r\n <div class=\"fallback-arrow\" *ngIf=\"!openState\">\r\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex\" [size]=\"'18'\"></sa-icon>\r\n </div>\r\n </div>\r\n @if(!formControl.valid){\r\n <div class=\"error-message-container\">\r\n <span class=\"error-message\">\r\n <formly-validation-message [field]=\"field\"></formly-validation-message>\r\n </span>\r\n </div>\r\n }\r\n <div class=\"support-label\">{{params.supportText}}</div>\r\n</div>","import { Component, Input, computed, signal, effect, EventEmitter, Output, SimpleChanges, OnChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconService } from '../icon/icon.service';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { IconName } from '../../interfaces/icon-interface';\r\nimport { ButtonIconPosition, ButtonSize, ButtonType, ButtonInterface, ButtonClickEvent } from '../../interfaces/button-interface';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MessageBannerComponent } from '../message-banner/message-banner.component';\r\nimport { FormInputComponent } from '../form-input/form-input.component';\r\nimport { FormSelectComponent } from '../form-select/form-select.component';\r\nimport { FormsModule, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyModule, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { FormLayoutConfig, FormFieldConfig, UnifiedFormConfig } from '../../interfaces/form-layout.interface';\r\nimport { TemplateRef } from '@angular/core';\r\n\r\ninterface MessageBannerState {\r\n type: 'default' | 'connection' | 'access' | 'accessRestricted';\r\n title: string;\r\n description: string;\r\n messageIcon: string;\r\n messageIconSize?: {\r\n width?: string;\r\n height?: string;\r\n };\r\n spacingBetweenImageAndDescription?: string;\r\n contentGap?: string; \r\n contactUrl?: string;\r\n titleClass?: string;\r\n descriptionClass?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'sa-message-banner-v2',\r\n standalone: true,\r\n imports: [CommonModule, IconComponent, ButtonComponent, HttpClientModule,MessageBannerComponent, FormInputComponent, FormSelectComponent, FormsModule, ReactiveFormsModule, FormlyModule, ChipsComponent],\r\n providers: [IconService],\r\n templateUrl: './message-banner-v2.component.html',\r\n styleUrls: ['./message-banner-v2.component.css']\r\n})\r\nexport class MessageBannerV2Component implements OnChanges {\r\n // State management using signals\r\n private state = signal<MessageBannerState>({\r\n type: 'default',\r\n title: '',\r\n description: '',\r\n messageIcon: '',\r\n messageIconSize: {\r\n height: '12.5rem'\r\n }\r\n });\r\n\r\n // Computed properties\r\n protected bannerContent = computed(() => {\r\n const currentState = this.state();\r\n return {\r\n ...currentState,\r\n description: this.sanitizeDescription(currentState.description)\r\n };\r\n });\r\n\r\n @Input() messageType: 'default' | 'connection' | 'access' | 'accessRestricted';\r\n @Input() contactUrl?: string;\r\n @Input() spacingBetweenImageAndDescription?: string;\r\n @Input() contentGap?: string;\r\n @Input() titleClass?: string;\r\n @Input() descriptionClass?: string;\r\n @Input() banner:any = {};\r\n @Input() formConfig: UnifiedFormConfig | null = null;\r\n @Input() prebuiltFormFields: TemplateRef<any> \r\n @Output() onContactUsClick = new EventEmitter<void>();\r\n form = new FormGroup({});\r\n model: any = {};\r\n fields: FormlyFieldConfig[] = [];\r\n formlyFields: FormlyFieldConfig[] = [];\r\n allFieldsFilled = signal(false);\r\n additionalFormlyFields: FormlyFieldConfig[] = [];\r\n allFormlyFields: FormlyFieldConfig[] = [];\r\n usePrebuiltFields = signal(false);\r\n // Computed properties for unified access\r\n get activeFormInputs(): any[] {\r\n return this.formConfig?.fields || [];\r\n }\r\n\r\n get activeChips(): any[] {\r\n return this.formConfig?.chips || [];\r\n }\r\n\r\n get activeCustomFormButton(): any {\r\n return this.formConfig?.customButton || [];\r\n }\r\n\r\n get activeDivider(): boolean {\r\n return this.formConfig?.divider?.enabled ?? false;\r\n } \r\n\r\n get activeDividerConfig(): any {\r\n return this.formConfig?.divider || {};\r\n }\r\n\r\n get activeFormLayout(): FormLayoutConfig {\r\n return this.formConfig?.layout || {};\r\n }\r\n\r\n @Output() onFormEvent = new EventEmitter<{type: string, data: any}>();\r\n \r\n onChipRemove(chip: any): void {\r\n this.onFormEvent.emit({ type: 'chip-remove', data: chip });\r\n }\r\n \r\n onAddUser(): void {\r\n let clickedButton = this.activeCustomFormButton;\r\n if (Array.isArray(this.activeCustomFormButton)) {\r\n clickedButton = this.activeCustomFormButton.find(btn => \r\n btn.text === 'Add User' || btn.id === 'add-user' || btn.action === 'add-user'\r\n );\r\n }\r\n this.onFormEvent.emit({ type: 'custom-button-click', data: clickedButton });\r\n // Only reset form if explicitly configured to do so\r\n if (clickedButton?.resetForm !== false) {\r\n this.resetForm();\r\n }\r\n }\r\n \r\n // Separate method for form reset that can be called externally\r\n resetForm(): void {\r\n this.model = {};\r\n this.form.reset();\r\n this.activeFormInputs?.forEach(input => {\r\n input.value = '';\r\n });\r\n this.updateFormlyFields();\r\n }\r\n \r\n areAllFieldsFilled(): boolean {\r\n if (!this.activeFormInputs || this.activeFormInputs.length < 4) return false;\r\n return this.activeFormInputs.every(field => field.value && field.value.trim() !== '');\r\n }\r\n \r\n\r\n @Input() set messageIcon(value: string) {\r\n this.state.update(s => ({ ...s, messageIcon: value }));\r\n }\r\n\r\n @Input() set messageIconSize(value: { width?: string; height?: string }) {\r\n this.state.update(s => ({ ...s, messageIconSize: value }));\r\n }\r\n\r\n @Input() set title(value: string) {\r\n this.state.update(s => ({ ...s, title: value }));\r\n }\r\n\r\n @Input() set description(value: string) {\r\n this.state.update(s => ({ ...s, description: value }));\r\n }\r\n\r\n @Input() buttons: ButtonInterface[] = [];\r\n @Output() buttonClick = new EventEmitter<ButtonClickEvent>();\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Check if this is the first initialization or if messageType has changed\r\n const shouldUpdateBasedOnType = changes['messageType'] && \r\n // Only update based on type if we don't have custom values set\r\n !(this.state().title || this.state().description || this.state().messageIcon);\r\n \r\n if (shouldUpdateBasedOnType) {\r\n this.updateContentBasedOnType(this.messageType || 'default');\r\n }\r\n \r\n // Check if prebuilt fields are provided\r\n if (changes['prebuiltFormFields']) {\r\n this.usePrebuiltFields.set(!!this.prebuiltFormFields);\r\n }\r\n \r\n if (changes['formConfig']) {\r\n if (!this.usePrebuiltFields()) {\r\n this.updateFormlyFields();\r\n this.initializeCleanFormState();\r\n }\r\n }\r\n }\r\n private initializeCleanFormState(): void {\r\n // this.model = {};\r\n setTimeout(() => {\r\n Object.keys(this.form.controls).forEach(key => {\r\n const control = this.form.get(key);\r\n if (control) {\r\n control.markAsUntouched();\r\n control.markAsPristine();\r\n control.setErrors(null);\r\n }\r\n });\r\n }, 0);\r\n }\r\n\r\n private updateContentBasedOnType(type: 'default' | 'connection' | 'access' | 'accessRestricted') { \r\n // Define a type for the content items to ensure all properties are properly typed\r\n type ContentItem = {\r\n title: string;\r\n description: string;\r\n messageIcon: string;\r\n spacingBetweenImageAndDescription?: string;\r\n contentGap?: string;\r\n titleClass?: string;\r\n descriptionClass?: string;\r\n };\r\n\r\n // Only apply default content if custom content hasn't been provided\r\n const currentState = this.state();\r\n const content: Record<'default' | 'connection' | 'access' | 'accessRestricted', ContentItem> = {\r\n default: {\r\n title: 'Oops! Something went wrong. Please try again or try after some time',\r\n description: 'If the issue persists, contact our support team at <span class=\"support-email\">support@sarasanalytics.com</span>',\r\n messageIcon: '/assets/error.gif'\r\n },\r\n connection: {\r\n title: 'We\\'re having trouble connecting. Please check your internet connection and try again',\r\n description: 'You can also reach out to our support team at <span class=\"support-email\">support@sarasanalytics.com</span> for assistance',\r\n messageIcon: '/assets/lost-connection.gif'\r\n },\r\n access: {\r\n title: 'This is taking a bit longer than usual. Please hold on!',\r\n description: 'If the delay continues, check your connection and try refreshing the page.',\r\n messageIcon: '/assets/long-loading.gif'\r\n },\r\n accessRestricted: {\r\n title: 'Access Restricted!',\r\n description: `Looks like you don't have access to this module just yet. No worries—reach out to your admin to request access to this feature. If you're facing any issues, feel free to <a class=\"custom-contact-link\" href=\"${this.contactUrl ?? 'https://support.default.com'}\" target=\"_blank\">Contact Us</a>.`,\r\n messageIcon: '/assets/access-restricted.gif',\r\n spacingBetweenImageAndDescription: '0px',\r\n contentGap:'20px',\r\n titleClass: 'access-restricted-title',\r\n descriptionClass: 'access-restricted-description',\r\n }\r\n };\r\n\r\n const contentItem = content[type];\r\n\r\n this.state.update(s => ({\r\n ...s,\r\n type,\r\n // Only apply default values if custom values haven't been provided\r\n title: s.title || contentItem.title,\r\n description: s.description || contentItem.description,\r\n messageIcon: s.messageIcon || contentItem.messageIcon,\r\n // For other properties, only apply them if they exist in the contentItem\r\n ...(contentItem.spacingBetweenImageAndDescription && { spacingBetweenImageAndDescription: contentItem.spacingBetweenImageAndDescription }),\r\n ...(contentItem.contentGap && { contentGap: contentItem.contentGap }),\r\n ...(contentItem.titleClass && { titleClass: contentItem.titleClass }),\r\n ...(contentItem.descriptionClass && { descriptionClass: contentItem.descriptionClass })\r\n }));\r\n }\r\n\r\n private sanitizeDescription(description: string): string {\r\n return description.replace(\r\n /support@sarasanalytics\\.com/g,\r\n '<span class=\"support-email\">support@sarasanalytics.com</span>'\r\n );\r\n }\r\n\r\n onButtonClick(button: any, event?: Event): void {\r\n // Check if this is a form button (from activeCustomFormButton) or regular banner button\r\n if (!event && (button.action === 'submit' || button.action === 'link' || button.id === 'add-user' || button.id === 'learn-more')) {\r\n // Handle form buttons with new logic\r\n if ( button.id === 'add-user') {\r\n // Handle form submission (existing Add User functionality)\r\n this.onAddUser();\r\n } else if (button.action === 'link' && button.link) {\r\n // Handle link navigation (Learn More functionality)\r\n window.open(button.link, '_blank');\r\n } else if (button.onClick) {\r\n // Handle custom click function\r\n button.onClick();\r\n }\r\n } else if (event) {\r\n // Handle regular banner buttons with original logic (backward compatibility)\r\n this.buttonClick.emit({\r\n type: button.type as 'primary' | 'secondary',\r\n button,\r\n originalEvent: event\r\n });\r\n }\r\n }\r\n\r\n isButtonArray(): boolean {\r\n return Array.isArray(this.activeCustomFormButton);\r\n }\r\n\r\n isEmptyObject(obj: any): boolean {\r\n if (obj) {\r\n return Object.keys(obj).length === 0;\r\n }else{\r\n return true;\r\n }\r\n }\r\n\r\n private updateFormlyFields(): void {\r\n // Skip Formly field generation if using prebuilt fields\r\n if (this.usePrebuiltFields()) {\r\n this.formlyFields = [];\r\n this.allFormlyFields = [];\r\n return;\r\n }\r\n\r\n if (!this.formConfig || !this.formConfig.fields || this.formConfig.fields.length === 0) {\r\n this.formlyFields = [];\r\n this.allFormlyFields = [];\r\n return;\r\n }\r\n\r\n // Get layout configuration\r\n const layout = this.activeFormLayout;\r\n const fieldsPerRow = layout.fieldsPerRow || 2;\r\n const initialVisibleFields = layout.initialVisibleFields || fieldsPerRow;\r\n \r\n // Update CSS grid columns dynamically\r\n this.updateGridColumns(fieldsPerRow);\r\n \r\n // Create all fields with proper hide expressions for conditional fields\r\n this.allFormlyFields = this.formConfig.fields.map((field, index) => {\r\n // Normalize field structure to proper Formly format\r\n const placeholderValue = field.placeholder || field.props?.placeholder || field.params?.placeholder || field.props?.params?.placeholder || '';\r\n \r\n const isConditionalField = index >= initialVisibleFields;\r\n \r\n const formlyField: FormlyFieldConfig = {\r\n key: field.key,\r\n type: field.type,\r\n className: this.getFieldClassName(index % fieldsPerRow, fieldsPerRow),\r\n hideExpression: isConditionalField ? () => !this.shouldShowAdditionalFields() : false,\r\n props: {\r\n // Handle mixed structure - some fields have props at root, others nested\r\n placeholder: placeholderValue,\r\n required: field.required || field.props?.required || false,\r\n disabled: field.disabled || field.props?.disabled || false,\r\n \r\n // For select fields, include select-specific properties\r\n ...(field.props?.options && {\r\n options: field.props.options,\r\n multiple: field.props.multiple || false,\r\n bindLabel: field.props.params?.bindLabel || 'label',\r\n bindValue: field.props.params?.bindValue || 'value',\r\n isClearable: field.props.params?.isClearable !== false,\r\n showCheckboxes: field.props.params?.showCheckboxes || false\r\n }),\r\n \r\n // Include params for component-specific configuration\r\n params: {\r\n ...(field.params || {}),\r\n ...(field.props?.params || {}),\r\n // Ensure label and placeholder are set\r\n label: field.label || field.props?.params?.label || placeholderValue,\r\n placeholder: placeholderValue\r\n }\r\n },\r\n validators: this.getFormlyValidators(field),\r\n };\r\n\r\n // Set initial value if provided\r\n if (field.value !== undefined) {\r\n this.model[field.key as string] = field.value;\r\n }\r\n\r\n // Add form control to form group if not already present\r\n const key = field.key as string;\r\n if (!this.form.get(key)) {\r\n let formControl: FormControl;\r\n if (field.formControl) {\r\n formControl = field.formControl;\r\n } else {\r\n const validators = field.params?.validators || [];\r\n formControl = new FormControl(field.value || '', validators);\r\n }\r\n this.form.addControl(key, formControl);\r\n }\r\n\r\n return formlyField;\r\n });\r\n\r\n this.formlyFields = this.allFormlyFields.slice(0, initialVisibleFields);\r\n this.updateAdditionalFields();\r\n }\r\n\r\n private getFieldClassName(index: number, fieldsPerRow: number): string {\r\n const colSize = 12 / fieldsPerRow;\r\n return `col-${colSize}`;\r\n }\r\n\r\n private updateGridColumns(fieldsPerRow: number): void {\r\n // Use CSS custom property to dynamically update grid columns\r\n document.documentElement.style.setProperty('--form-grid-columns', fieldsPerRow.toString());\r\n }\r\n\r\n private getFormlyValidators(field: any): any {\r\n const validators: any = {};\r\n \r\n if (field.formControl && field.formControl.validator) {\r\n validators.validation = field.formControl.validator;\r\n }\r\n \r\n if (field.params?.validators && Array.isArray(field.params.validators)) {\r\n validators.validation = field.params.validators;\r\n }\r\n \r\n if (field.validators) {\r\n if (field.validators.validation) {\r\n validators.validation = field.validators.validation;\r\n } else if (Array.isArray(field.validators)) {\r\n validators.validation = field.validators;\r\n }\r\n }\r\n \r\n return validators;\r\n }\r\n\r\n\r\n shouldShowAdditionalFields(): boolean {\r\n if (!this.activeFormInputs || this.activeFormInputs.length === 0) return false;\r\n \r\n const layout = this.activeFormLayout;\r\n const initialVisibleFields = layout.initialVisibleFields || layout.fieldsPerRow || 2;\r\n \r\n // If no conditional fields configuration, check if initial fields are filled\r\n if (!layout.conditionalFields) {\r\n return this.areAllVisibleFieldsFilled();\r\n }\r\n \r\n // Use custom showWhen function if provided\r\n const shouldShow = layout.conditionalFields.showWhen ? \r\n layout.conditionalFields.showWhen(this.model) : this.areAllVisibleFieldsFilled();\r\n return shouldShow;\r\n }\r\n\r\n private updateAdditionalFields(): void {\r\n const layout = this.activeFormLayout;\r\n const fieldsPerRow = layout.fieldsPerRow || 2;\r\n const initialVisibleFields = layout.initialVisibleFields || fieldsPerRow;\r\n \r\n // Check if we should show additional fields\r\n const shouldShowConditionalFields = this.shouldShowAdditionalFields();\r\n \r\n if (shouldShowConditionalFields && this.formConfig.fields.length > initialVisibleFields) {\r\n // Get specific conditional field indices or all remaining fields\r\n const conditionalFieldIndices = layout.conditionalFields?.fields || \r\n Array.from({length: this.formConfig.fields.length - initialVisibleFields}, (_, i) => i + initialVisibleFields);\r\n \r\n const additionalFields = conditionalFieldIndices.map(index => this.formConfig.fields[index]).filter(Boolean);\r\n \r\n // Normalize additional fields to proper Formly format\r\n this.additionalFormlyFields = additionalFields.map((field, index) => {\r\n // Normalize field structure to proper Formly format\r\n const placeholderValue = field.placeholder || field.props?.placeholder || field.params?.placeholder || field.props?.params?.placeholder || '';\r\n \r\n console.log('Processing conditional field:', field.key, 'placeholder:', placeholderValue, 'field:', field);\r\n \r\n const formlyField: FormlyFieldConfig = {\r\n key: field.key,\r\n type: field.type,\r\n className: this.getFieldClassName(index, fieldsPerRow),\r\n props: {\r\n // Handle mixed structure - some fields have props at root, others nested\r\n placeholder: placeholderValue,\r\n required: field.required || field.props?.required || false,\r\n disabled: field.disabled || field.props?.disabled || false,\r\n \r\n // For select fields, include select-specific properties\r\n ...(field.props?.options && {\r\n options: field.props.options,\r\n multiple: field.props.multiple || false,\r\n bindLabel: field.props.params?.bindLabel || 'label',\r\n bindValue: field.props.params?.bindValue || 'value',\r\n isClearable: field.props.params?.isClearable !== false,\r\n showCheckboxes: field.props.params?.showCheckboxes || false\r\n }),\r\n \r\n // Include params for component-specific configuration\r\n params: {\r\n ...(field.params || {}),\r\n ...(field.props?.params || {}),\r\n // Ensure label and placeholder are set\r\n label: field.label || field.props?.params?.label || placeholderValue,\r\n placeholder: placeholderValue\r\n }\r\n },\r\n validators: field.validators || field.props?.validators || {}\r\n };\r\n\r\n // Set initial value if provided\r\n if (field.value !== undefined) {\r\n this.model[field.key as string] = field.value;\r\n }\r\n\r\n // Add form control to form group if not already present\r\n const key = field.key as string;\r\n if (!this.form.get(key)) {\r\n this.form.addControl(key, field.formControl || new FormControl(field.value || ''));\r\n }\r\n\r\n return formlyField;\r\n });\r\n } else {\r\n // Clear additional fields if conditions are not met\r\n this.additionalFormlyFields = [];\r\n }\r\n }\r\n\r\n private evaluateShowWhen(showWhen: any): boolean {\r\n if (!showWhen) return true;\r\n \r\n // Handle different showWhen conditions\r\n if (typeof showWhen === 'function') {\r\n return showWhen(this.model, this.form);\r\n }\r\n \r\n if (typeof showWhen === 'object') {\r\n // Handle field-based conditions like { field: 'role', value: 'admin' }\r\n if (showWhen.field && showWhen.value !== undefined) {\r\n return this.model[showWhen.field] === showWhen.value;\r\n }\r\n }\r\n \r\n return true;\r\n }\r\n\r\n // Handle form model changes from Formly\r\n onFormModelChange(model: any): void {\r\n this.model = { ...this.model, ...model };\r\n \r\n // Trigger field visibility updates by updating the allFormlyFields array\r\n // This will cause Formly to re-evaluate hideExpression for all fields\r\n this.allFormlyFields = [...this.allFormlyFields];\r\n \r\n // Emit the change event\r\n this.onFormEvent.emit({ \r\n type: 'form-model-change', \r\n data: model \r\n });\r\n }\r\n\r\n /**\r\n * Handles click events on the description area, specifically for custom contact links.\r\n * If a custom contact link is clicked and there's an observer for onContactUsClick,\r\n * it prevents the default navigation and emits the custom event instead.\r\n * @param event - The mouse click event from the description area\r\n */\r\n handleDescriptionClick(event: MouseEvent): void {\r\n const target = event.target as HTMLElement;\r\n const link = target?.closest('a.custom-contact-link');\r\n if (link && this.onContactUsClick.observed) {\r\n event.preventDefault();\r\n this.onContactUsClick.emit();\r\n }\r\n }\r\n\r\n // Get initial fields to display in the first row\r\n getInitialFields(): FormFieldConfig[] {\r\n if (!this.activeFormInputs) return [];\r\n \r\n const initialCount = this.activeFormLayout.initialVisibleFields || this.activeFormLayout.fieldsPerRow || 2;\r\n return this.activeFormInputs.slice(0, initialCount);\r\n }\r\n\r\n // Check if all visible fields are filled and form is valid\r\n areAllVisibleFieldsFilled(): boolean {\r\n if (!this.activeFormInputs || this.activeFormInputs.length === 0) return true;\r\n \r\n // Get layout configuration to determine which fields should be visible\r\n const layout = this.activeFormLayout;\r\n const initialVisibleFields = layout.initialVisibleFields || layout.fieldsPerRow || 2;\r\n \r\n // Get all currently visible fields (initial + conditional if shown)\r\n const visibleFields = this.activeFormInputs.slice(0, initialVisibleFields);\r\n if (this.shouldShowAdditionalFields()) {\r\n const conditionalFieldIndices = layout.conditionalFields?.fields || \r\n Array.from({length: this.activeFormInputs.length - initialVisibleFields}, (_, i) => i + initialVisibleFields);\r\n const conditionalFields = conditionalFieldIndices.map(index => this.activeFormInputs[index]).filter(Boolean);\r\n visibleFields.push(...conditionalFields);\r\n }\r\n \r\n // Check if all visible fields have values using their keys\r\n const allFieldsFilled = visibleFields.every(field => {\r\n const fieldKey = field.key;\r\n const fieldValue = this.model[fieldKey];\r\n \r\n if (!fieldValue) return false;\r\n \r\n // For string values, check if not empty after trim\r\n if (typeof fieldValue === 'string') {\r\n return fieldValue.trim() !== '';\r\n }\r\n \r\n // For arrays (multi-select), check if not empty\r\n if (Array.isArray(fieldValue)) {\r\n return fieldValue.length > 0;\r\n }\r\n \r\n return true;\r\n });\r\n \r\n const formValid = this.form.valid;\r\n\r\n return allFieldsFilled && formValid;\r\n }\r\n \r\n}\r\n","@if (bannerContent(); as content) {\r\n <div class=\"error-page message-banner-v2\">\r\n <div class=\"content-container\" [ngStyle]=\"{ gap: contentGap || 'var(--medium-32px, 32px)' }\">\r\n @if(content?.messageIcon){\r\n <div class=\"image-container\"\r\n [ngStyle]=\"{ 'margin-bottom': spacingBetweenImageAndDescription ?? 'var(--small-16px, 16px)' }\">\r\n <img [src]=\"content.messageIcon\" [alt]=\"content.type + ' image'\"\r\n [style.--message-icon-height]=\"content.messageIconSize?.height\"\r\n [style.--message-icon-width]=\"content.messageIconSize?.width\" />\r\n </div>\r\n }\r\n <div class=\"details\">\r\n <div class=\"title-description\">\r\n <div class=\"title-class\" [ngClass]=\"titleClass || 'title-class'\" [innerHTML]=\"content.title\"></div>\r\n <p class=\"description\" [ngClass]=\"descriptionClass || 'description'\" [innerHTML]=\"content.description\" (click)=\"handleDescriptionClick($event)\"></p> \r\n <div [ngStyle]=\"{ margin: banner?.spacing + 'px 0px' }\">\r\n <sa-message-banner *ngIf=\"!isEmptyObject(banner)\" [type]=\"banner?.type\" [bannerIcon]=\"banner?.bannerIcon\" [buttonIcon]=\"banner?.buttonIcon\"\r\n [bannerIconSize]=\"banner?.bannerIconSize\" [buttonType]=\"banner?.buttonType\" [buttonSize]=\"banner?.buttonSize\" [buttonIconPosition]=\"banner?.buttonIconPosition\"\r\n [buttonIconSize]=\"banner?.buttonIconSize\" [actionText]=\"banner?.actionText\" >\r\n <div [innerHTML]=\"banner?.text\"></div>\r\n </sa-message-banner>\r\n </div>\r\n </div>\r\n \r\n <!-- Form inputs section -->\r\n <ng-container *ngIf=\"prebuiltFormFields || activeFormInputs?.length\">\r\n <div class=\"form-fields-container\">\r\n <!-- Prebuilt form fields (direct component rendering) -->\r\n <ng-container *ngIf=\"usePrebuiltFields() && prebuiltFormFields\">\r\n <ng-container *ngTemplateOutlet=\"prebuiltFormFields\"></ng-container>\r\n </ng-container>\r\n \r\n <!-- Use Formly for proper form rendering -->\r\n <form [formGroup]=\"form\" class=\"dialog-form\" *ngIf=\"!usePrebuiltFields() && activeFormInputs?.length\">\r\n <formly-form \r\n [form]=\"form\" \r\n [fields]=\"allFormlyFields\" \r\n [model]=\"model\"\r\n (modelChange)=\"onFormModelChange($event)\">\r\n </formly-form>\r\n </form>\r\n </div>\r\n\r\n <!-- Custom form button(s) -->\r\n <div class=\"form-button-container\" *ngIf=\"activeCustomFormButton && !usePrebuiltFields()\">\r\n <!-- Support both single button and array of buttons -->\r\n <ng-container *ngIf=\"isButtonArray(); else singleButton\">\r\n <sa-button \r\n *ngFor=\"let button of activeCustomFormButton\"\r\n class=\"action-button\"\r\n [id]=\"button.id\"\r\n [text]=\"button.text\"\r\n [type]=\"button.type\"\r\n [size]=\"button.size\"\r\n [state]=\"button.state\"\r\n [ImagePath]=\"button.ImagePath\"\r\n [iconPosition]=\"button.iconPosition\"\r\n (click)=\"onButtonClick(button)\">\r\n </sa-button>\r\n </ng-container>\r\n \r\n <ng-template #singleButton>\r\n <sa-button class=\"action-button\"\r\n [id]=\"activeCustomFormButton.id\"\r\n [text]=\"activeCustomFormButton.text\"\r\n [type]=\"activeCustomFormButton.type\"\r\n [size]=\"activeCustomFormButton.size\"\r\n [state]=\"activeCustomFormButton.state\"\r\n [ImagePath]=\"activeCustomFormButton.ImagePath\"\r\n [iconPosition]=\"activeCustomFormButton.iconPosition\"\r\n (click)=\"onButtonClick(activeCustomFormButton)\">\r\n </sa-button>\r\n </ng-template>\r\n </div>\r\n \r\n <!-- Divider section -->\r\n <div class=\"divider-section\" *ngIf=\"activeDivider && !usePrebuiltFields()\">\r\n <div class=\"divider\"></div>\r\n <div class=\"divider-header\">\r\n <h3 class=\"divider-title\" *ngIf=\"activeDividerConfig.title\">{{ activeDividerConfig.title }}</h3>\r\n <p class=\"divider-subtitle\" *ngIf=\"activeDividerConfig.subtitle || activeDividerConfig.showSubtitleWhenEmpty\">\r\n {{ activeDividerConfig.subtitle || 'No items added yet' }}\r\n </p>\r\n </div>\r\n \r\n <!-- Chips section -->\r\n <div class=\"chip-list\" *ngIf=\"activeChips?.length && !usePrebuiltFields()\">\r\n <sa-chip \r\n *ngFor=\"let chip of activeChips\"\r\n [text]=\"chip.label || chip.text || chip\"\r\n [type]=\"'regular'\"\r\n [state]=\"'default'\"\r\n [filling]=\"'filled'\"\r\n [iconPosition]=\"'right'\"\r\n [iconPath]=\"'../assets/closeBlueOutlined.svg'\"\r\n (onClickEvent)=\"chip.removable ? onChipRemove(chip) : null\">\r\n </sa-chip>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n @if(buttons){\r\n <div class=\"button-group\">\r\n @for (button of buttons; track button.text) {\r\n <sa-button \r\n [text]=\"button.text\"\r\n [icon]=\"button.icon\"\r\n [size]=\"button.size\"\r\n [type]=\"button.type\"\r\n [iconPosition]=\"button.iconPosition\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (onClickEvent)=\"onButtonClick(button, $event)\"\r\n role=\"button\"\r\n [state]=\"!areAllVisibleFieldsFilled() ? 'disabled' : button?.state\"\r\n [attr.aria-label]=\"button.text\">\r\n </sa-button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }","import { Component, EventEmitter, Inject, Input, OnInit, Optional, Output } from '@angular/core';\r\nimport { MessageBannerComponent } from '../message-banner/message-banner.component';\r\nimport { ButtonClickEvent, ButtonInterface } from '../../interfaces/button-interface';\r\nimport { MessageBannerV2Component } from '../message-banner-v2/message-banner-v2.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\r\nimport { FormInputComponent } from '../form-input/form-input.component';\r\nimport { isArray } from 'lodash';\r\n\r\n@Component({\r\n selector: 'sa-dialog',\r\n standalone: true,\r\n imports: [MessageBannerComponent, MessageBannerV2Component, CommonModule, ButtonComponent, MatCheckboxModule, IconComponent, MatDialogModule, FormInputComponent],\r\n templateUrl: './dialog.component.html',\r\n styleUrls: ['./dialog.component.css']\r\n})\r\nexport class DialogComponent {\r\n formValues: { [key: string]: any } = {};\r\n @Input() dialogData: {\r\n topMessageBanners?: any[];\r\n topRegionIconSize?: string;\r\n className?: string;\r\n closeButtonSize?: string;\r\n middleRegion?: any;\r\n topRegionIcon?: string;\r\n lowerMessageBanners?: any[];\r\n buttons?: ButtonInterface[];\r\n buttonsWithType?: any[];\r\n closeButton?: string;\r\n showCloseButton?: boolean;\r\n };\r\n\r\n @Output() dialogButtonClick = new EventEmitter();\r\n\r\n constructor(\r\n @Optional() public dialogRef: MatDialogRef<DialogComponent>,\r\n @Optional() @Inject(MAT_DIALOG_DATA) public data: any\r\n ) {\r\n if (this.data) {\r\n this.dialogData = this.data;\r\n }\r\n }\r\n\r\n onButtonClick(button: any, event?: any): void {\r\n if (event?.evt) {\r\n event?.evt.preventDefault();\r\n event?.evt.stopPropagation();\r\n }\r\n this.dialogButtonClick.emit({event, button});\r\n }\r\n onMiddleRegionButtonClick(event: {button: any, data?: any}): void {\r\n // Pass the event up to the parent component\r\n this.data.onMiddleRegionButtonClick?.(event);\r\n }\r\n handleButtonClick(event: ButtonClickEvent) {\r\n this.dialogButtonClick.emit({event});\r\n }\r\n\r\n onCloseButtonClick(event: Event): void {\r\n this.dialogData?.middleRegion?.content?.formConfig?.fields?.forEach((input: any) => {\r\n input.value = '';\r\n });\r\n if (this.dialogData?.middleRegion?.content?.formConfig) {\r\n this.dialogData.middleRegion.content.formConfig.chips = [];\r\n } \r\n this.dialogButtonClick.emit({ event: event, type: 'close' });\r\n }\r\n// all form related events\r\n onUnifiedFormEvent(event: {type: string, data: any}): void {\r\n switch(event.type) {\r\n case 'form-input-change':\r\n this.onFormInputChange(event.data);\r\n break;\r\n case 'form-model-change':\r\n // Store the form model for external access\r\n this.formValues = { ...this.formValues, ...event.data };\r\n this.dialogButtonClick.emit({ event: event.data, type: 'form-model-change' });\r\n break;\r\n case 'custom-button-click':\r\n // Store form model data if provided\r\n if (event.data?.formModel) {\r\n this.formValues = { ...this.formValues, ...event.data.formModel };\r\n }\r\n this.onButtonClick(event.data);\r\n break;\r\n case 'chip-remove':\r\n this.onRemoveUser(event.data);\r\n break;\r\n default:\r\n console.warn('Unknown form event type:', event.type);\r\n }\r\n }\r\n onFormInputChange(event: any) {\r\n let processedValue = event.value; \r\n if (isArray(event.value)) {\r\n processedValue = event.value.map((chip: any) => chip.value || chip.label || chip);\r\n }\r\n this.formValues[event.label] = processedValue;\r\n this.dialogButtonClick.emit({ event, type: 'form-input-change' });\r\n }\r\n\r\n onRemoveUser(chip: any) {\r\n this.dialogButtonClick.emit({ event: chip, type: 'chip-remove' });\r\n }\r\n\r\n // Method to reset the form through message-banner-v2 component\r\n resetForm(): void {\r\n // Emit form reset event to message-banner-v2\r\n this.formValues = {};\r\n // The message-banner-v2 component will handle the actual form reset\r\n // when it receives this event\r\n this.dialogButtonClick.emit({ type: 'form-reset' });\r\n }\r\n}\r\n","<div class=\"dialog-container {{ dialogData?.className }}\">\r\n <!-- top banner region -->\r\n <div class=\"top-container\">\r\n @if (!!dialogData?.topMessageBanners) {\r\n <div class=\"top-message-container\">\r\n @for (\r\n messageBanner of dialogData?.topMessageBanners;\r\n track messageBanner.content\r\n ) {\r\n <sa-message-banner\r\n [type]=\"messageBanner?.type\"\r\n [bannerIcon]=\"messageBanner?.bannerIcon\"\r\n [bannerIconSize]=\"messageBanner?.bannerIconSize || '24'\"\r\n [button]=\"messageBanner?.button\"\r\n (actionClick)=\"onButtonClick(messageBanner?.button, $event)\"\r\n [style]=\"messageBanner?.style || 'width:39.438rem'\"\r\n >\r\n <div class=\"{{ messageBanner?.className }} message-content-style\">\r\n {{ messageBanner?.content }}\r\n </div>\r\n </sa-message-banner>\r\n }\r\n </div>\r\n }\r\n @if(!!dialogData?.topRegionIcon){\r\n <div class=\"top-icon-container\">\r\n <sa-icon\r\n [icon]=\"dialogData?.topRegionIcon\"\r\n class=\"d-flex\"\r\n size=\"{{ dialogData?.topRegionIconSize }}\"\r\n ></sa-icon>\r\n </div>\r\n }\r\n @if (!!dialogData?.closeButton || dialogData?.showCloseButton) {\r\n <div class=\"cross-btn\" (click)=\"onCloseButtonClick($event)\">\r\n <sa-icon\r\n [icon]=\"dialogData?.closeButton || 'closeOutlined'\"\r\n class=\"d-flex\"\r\n size=\"{{ dialogData?.closeButtonSize || '20' }}\"\r\n ></sa-icon>\r\n </div>\r\n }\r\n </div>\r\n <!-- middle region -->\r\n @if (!!dialogData?.middleRegion) {\r\n <ng-container *ngIf=\"dialogData?.middleRegion as middleRegion\">\r\n <div class=\"image-description-container {{ middleRegion?.className }}\">\r\n <sa-message-banner-v2\r\n [messageType]=\"middleRegion?.messageType || 'default'\"\r\n [messageIcon]=\"middleRegion?.messageIcon\"\r\n [messageIconSize]=\"middleRegion?.messageIconSize\"\r\n [title]=\"middleRegion?.title\"\r\n [description]=\"middleRegion?.description\"\r\n [buttons]=\"middleRegion?.buttons\"\r\n [formConfig]=\"middleRegion?.content?.formConfig\"\r\n (onFormEvent)=\"onUnifiedFormEvent($event)\"\r\n (buttonClick)=\"middleRegion?.buttons ? onButtonClick($event) : ''\"\r\n >\r\n </sa-message-banner-v2>\r\n </div>\r\n </ng-container>\r\n }\r\n <!-- lower message banner region -->\r\n @if (!!dialogData?.lowerMessageBanners) {\r\n <div class=\"lower-message-container\">\r\n @for (\r\n messageBanner of dialogData?.lowerMessageBanners;\r\n track messageBanner.content\r\n ) {\r\n <sa-message-banner\r\n [type]=\"messageBanner?.type\"\r\n [bannerIcon]=\"messageBanner?.bannerIcon\"\r\n [buttonIcon]=\"messageBanner?.buttonIcon\"\r\n [bannerIconSize]=\"messageBanner?.bannerIconSize || '24'\"\r\n [button]=\"messageBanner?.button\"\r\n [style]=\"messageBanner?.style || 'width:-webkit-fill-available'\"\r\n (actionClick)=\"onButtonClick(messageBanner?.button, $event)\"\r\n >\r\n <div\r\n class=\"{{ messageBanner?.className }} message-content-style\"\r\n ></div>\r\n {{ messageBanner?.content }}\r\n </sa-message-banner>\r\n }\r\n </div>\r\n }\r\n <!-- button region -->\r\n @if (!!dialogData?.buttons) {\r\n <div class=\"button-group-container\">\r\n @for (button of dialogData?.buttons; track button.text) {\r\n <sa-button\r\n [text]=\"button.text\"\r\n [icon]=\"button.icon\"\r\n [size]=\"button.size\"\r\n [type]=\"button.type\"\r\n [state]=\"button.state\"\r\n [iconPosition]=\"button.iconPosition\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (onClickEvent)=\"onButtonClick(button, $event)\"\r\n role=\"button\"\r\n [attr.aria-label]=\"button.text\"\r\n >\r\n </sa-button>\r\n }\r\n </div>\r\n }\r\n @if (!!dialogData?.buttonsWithType) {\r\n <div class=\"buttonWithType-group-container\">\r\n @for (button of dialogData?.buttonsWithType; track button.text) {\r\n @if (button?.type === \"checkbox\") {\r\n <div class=\"checkbox-container {{ button.className }}\">\r\n <mat-checkbox [id]=\"button.id\" (change)=\"onButtonClick(button)\" class=\"checkbox-style\">{{\r\n button.text\r\n }}</mat-checkbox>\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { ChangeDetectorRef, Component, computed, effect, ElementRef, HostListener, inject, OnDestroy, OnInit, Renderer2, signal, ViewChild } from '@angular/core';\r\nimport { isObservable, Subject, Subscription } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { IconComponent } from '../../icon/icon.component';\r\nimport { IconService } from '../../icon/icon.service';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { first as _first, get as _get, filter as _filter, size as _size, toLower as _toLower, includes as _includes, forEach as _forEach } from 'lodash';\r\n\r\n@Component({\r\n selector: 'sa-category-dropdown',\r\n standalone: true,\r\n imports: [CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n FormlyModule,\r\n IconComponent,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatButtonToggleModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule,\r\n MatCheckboxModule,\r\n MatSelectModule],\r\n providers: [IconService],\r\n templateUrl: './category-dropdown.component.html',\r\n styleUrl: './category-dropdown.component.css'\r\n})\r\n\r\nexport class CategoryDropdownComponent extends FieldType<FieldTypeConfig> implements OnInit, OnDestroy {\r\n get bindLabel(): string { return this.props['bindLabel'] || 'label'; }\r\n get bindValue(): string { return this.props['bindValue'] || 'value'; }\r\n get bindAttributes(): string { return this.props['bindAttributes'] || 'attributes'; }\r\n _categories = signal<any[]>([]);\r\n destroy$ = new Subject<void>();\r\n subscription = new Subscription();\r\n\r\n selectedCategory = signal<any>(undefined);\r\n selectedAttributes = signal<any[]>([]);\r\n searchTerm = signal<string>('');\r\n isOpen = signal(false);\r\n userSelectedCategory = signal<any>(undefined); // To hold the user's explicit selection\r\n\r\n private el: ElementRef = inject(ElementRef);\r\n @ViewChild('searchInput') searchInput: ElementRef;\r\n @ViewChild('categoryContainer') categoryContainer: ElementRef;\r\n @ViewChild('dropdownPanel') dropdownPanel: ElementRef;\r\n\r\n constructor(private cdr: ChangeDetectorRef, private renderer: Renderer2) {\r\n super();\r\n effect(() => {\r\n const filtered = this.filteredCategories();\r\n const term = this.searchTerm();\r\n\r\n if (term && filtered.length > 0) {\r\n this.selectedCategory.set(_first(filtered));\r\n return;\r\n }\r\n\r\n // If attributes exist, stick with their category\r\n const attrCategory = this.getSelectedAttributesCategory();\r\n if (attrCategory) {\r\n this.selectedCategory.set(attrCategory);\r\n return;\r\n }\r\n\r\n // Else fallback to user-selected or first\r\n if (this.userSelectedCategory()) {\r\n this.selectedCategory.set(this.userSelectedCategory());\r\n } else if (this._categories().length > 0) {\r\n this.selectedCategory.set(_first(this._categories()));\r\n }\r\n }, { allowSignalWrites: true });\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.props?.['multiple']) {\r\n const initialValue = this.formControl.value;\r\n this.selectedAttributes.set(Array.isArray(initialValue) ? initialValue : []);\r\n }\r\n\r\n if (isObservable(this.props.options)) {\r\n this.subscription.add(this.props.options.pipe(takeUntil(this.destroy$)).subscribe(options => {\r\n this._categories.set(Array.isArray(options) ? options : []);\r\n if (this._categories().length > 0 && !this.userSelectedCategory()) {\r\n this.selectedCategory.set(this._categories()[0]);\r\n }\r\n }));\r\n } else {\r\n this._categories.set(Array.isArray(this.props.options) ? this.props.options : []);\r\n if (this._categories().length > 0 && !this.userSelectedCategory()) {\r\n this.selectedCategory.set(this._categories()[0]);\r\n }\r\n }\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onClick(event: MouseEvent) {\r\n if (!this.el.nativeElement.contains(event.target)) {\r\n if (this.isOpen()) {\r\n // Mark as touched when closing via outside click\r\n this.formControl.markAsTouched();\r\n }\r\n this.isOpen.set(false);\r\n }\r\n }\r\n\r\n toggleDropdown() {\r\n const isOpening = !this.isOpen();\r\n this.isOpen.set(isOpening);\r\n\r\n if (isOpening) {\r\n this.searchTerm.set('');\r\n if (this.searchInput) {\r\n this.searchInput.nativeElement.value = '';\r\n }\r\n this.cdr.detectChanges();\r\n\r\n if (this.categoryContainer && this.dropdownPanel) {\r\n const containerWidth = this.categoryContainer.nativeElement.offsetWidth;\r\n const offset = this.props?.['panelWidthOffset'] ?? 160; // fallback if undefined\r\n\r\n // Use explicit pixel width to avoid reflows caused by fit-content\r\n const baseFontSize = 16; // default 1rem = 16px\r\n const panelWidthRem = (containerWidth + offset) / baseFontSize;\r\n\r\n this.renderer.setStyle(this.dropdownPanel.nativeElement, 'min-width', `${panelWidthRem}rem`);\r\n this.renderer.setStyle(this.dropdownPanel.nativeElement, 'width', `${panelWidthRem}rem`);\r\n }\r\n\r\n // 🔑 Sync selectedAttributes from formControl on every open\r\n if (this.props?.['multiple']) {\r\n const currentValue = this.formControl.value || [];\r\n this.selectedAttributes.set(Array.isArray(currentValue) ? currentValue : []);\r\n } else if (this.formControl.value) {\r\n this.selectedAttributes.set([this.formControl.value]);\r\n } else {\r\n this.selectedAttributes.set([]);\r\n }\r\n\r\n // 👇 Now this works, because selectedAttributes isn’t empty anymore\r\n const attrCategory = this.getSelectedAttributesCategory();\r\n if (attrCategory) {\r\n this.selectedCategory.set(attrCategory);\r\n } else if (this.userSelectedCategory()) {\r\n this.selectedCategory.set(this.userSelectedCategory());\r\n } else if (this._categories().length > 0) {\r\n this.selectedCategory.set(this._categories()[0]);\r\n }\r\n } else {\r\n // Mark as touched when closing the dropdown\r\n this.formControl.markAsTouched();\r\n }\r\n }\r\n\r\n selectCategory(category: any) {\r\n this.selectedCategory.set(category);\r\n // Only update userSelectedCategory if there are NO attributes selected\r\n if (this.selectedAttributes().length === 0) {\r\n this.userSelectedCategory.set(category);\r\n }\r\n }\r\n\r\n toggleValue(val: any) {\r\n this.selectedAttributes.update(attributes => {\r\n const index = attributes.findIndex(item => item[this.bindValue] === val[this.bindValue]);\r\n if (index > -1) {\r\n attributes.splice(index, 1);\r\n } else {\r\n const category = this.selectedCategory();\r\n const newValue = { ...val, categoryId: category[this.bindValue], categoryLabel: category[this.bindLabel] };\r\n attributes.push(newValue);\r\n }\r\n this.formControl.setValue([...attributes]);\r\n return [...attributes];\r\n });\r\n }\r\n\r\n private getSelectedAttributesCategory(): any {\r\n const attrs = this.selectedAttributes();\r\n if (attrs.length > 0) {\r\n // always prefer category of last selected attribute\r\n const lastAttr = attrs[attrs.length - 1];\r\n return this._categories().find(c => c[this.bindValue] === lastAttr.categoryId);\r\n }\r\n return null;\r\n }\r\n\r\n isItemSelected(val: any): boolean {\r\n return this.selectedAttributes().some(item => item[this.bindValue] === val[this.bindValue]);\r\n }\r\n\r\n removeValue(val: any) {\r\n this.selectedAttributes.update(attributes => {\r\n const newAttributes = attributes.filter(item => item[this.bindValue] !== val[this.bindValue]);\r\n this.formControl.setValue(newAttributes);\r\n return newAttributes;\r\n });\r\n }\r\n\r\n selectSingleValue(val: any) {\r\n const category = this.selectedCategory();\r\n // const newValue = { ...val, categoryId: category[this.bindValue], categoryLabel: category[this.bindLabel] };\r\n // this.formControl.setValue(newValue);\r\n this.formControl.setValue(val);\r\n this.formControl.markAsTouched();\r\n this.isOpen.set(false);\r\n }\r\n\r\n onSearch(event: Event) {\r\n const value = (event.target as HTMLInputElement).value;\r\n this.searchTerm.set(value);\r\n }\r\n\r\n clearSearch(event: Event) {\r\n this.searchTerm.set('');\r\n this.searchInput.nativeElement.value = '';\r\n event.stopPropagation();\r\n\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n filteredAttributes = computed(() => {\r\n const category = this.selectedCategory();\r\n const term = this.searchTerm().toLowerCase();\r\n\r\n if (!category) {\r\n return [];\r\n }\r\n\r\n return (category[this.bindAttributes] || []).filter((val: any) => (val[this.bindLabel] || '').toLowerCase().includes(term));\r\n });\r\n\r\n filteredCategories = computed(() => {\r\n const term = this.searchTerm().toLowerCase();\r\n const categories = this._categories();\r\n if (!term) {\r\n return categories;\r\n }\r\n return categories.filter(category =>\r\n (category[this.bindAttributes] || []).some((val: any) => (val[this.bindLabel] || '').toLowerCase().includes(term))\r\n );\r\n });\r\n\r\n // Computed signal that creates a Map of category ID to filtered attribute count\r\n categoryAttributeCounts = computed(() => {\r\n const term = _toLower(this.searchTerm());\r\n const categories = this._categories();\r\n const countsMap = new Map<any, number>();\r\n \r\n _forEach(categories, category => {\r\n const attributes = _get(category, this.bindAttributes, []);\r\n \r\n if (!term) {\r\n // No search term, return total count\r\n countsMap.set(_get(category, this.bindValue), _size(attributes));\r\n } else {\r\n // Return count of matching attributes\r\n const matchingAttributes = _filter(attributes, (val: any) => \r\n _includes(_toLower(_get(val, this.bindLabel, '')), term)\r\n );\r\n countsMap.set(_get(category, this.bindValue), _size(matchingAttributes));\r\n }\r\n });\r\n \r\n return countsMap;\r\n });\r\n\r\n // Helper method to get count from the computed map\r\n getFilteredAttributesCount(category: any): number {\r\n return this.categoryAttributeCounts().get(_get(category, this.bindValue)) || 0;\r\n }\r\n}","<div class=\"custom-category-dropdown relative\" (click)=\"toggleDropdown()\">\r\n <!-- Dropdown Trigger / Display -->\r\n <div #categoryContainer class=\"custom-category-container\" \r\n [ngClass]=\"{\r\n 'category-invalid': formControl.invalid,\r\n 'category-touched': formControl.touched\r\n }\" \r\n [class.open]=\"isOpen()\">\r\n <div class=\"custom-category-attribute-container\">\r\n @if(props?.['multiple']){\r\n @if (selectedAttributes().length > 0) {\r\n @for (item of selectedAttributes(); track item[bindValue]) {\r\n <div class=\"custom-category-attribute custom-category-custom-chip\" (click)=\"$event.stopPropagation()\">\r\n <span class=\"custom-category-attribute-label\">{{ item[bindLabel] }}</span>\r\n <span class=\"custom-category-attribute-icon right\">\r\n <sa-icon icon=\"closeOutlined\" (click)=\"removeValue(item)\" size=\"11\"></sa-icon>\r\n </span>\r\n </div>\r\n }\r\n } @else {\r\n <span class=\"placeholder\">Select items</span>\r\n }\r\n } @else {\r\n @if(formControl.value) {\r\n <span class=\"custom-category-attribute-label\">{{ formControl.value[bindLabel] }}</span>\r\n } @else {\r\n <span class=\"placeholder\">Select item</span>\r\n }\r\n }\r\n </div>\r\n <div class=\"custom-category-arrow-wrapper\">\r\n <sa-icon icon=\"upDownChevronOutlined\" size=\"11\" class=\"searchIcons\"></sa-icon>\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown Panel -->\r\n @if (isOpen()) {\r\n <div #dropdownPanel class=\"dropdown-panel\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"search-input-container mat-form-field-density-5\">\r\n <mat-form-field [appearance]=\"props['appearance'] || 'outline'\" class=\"w-100\">\r\n <sa-icon icon=\"searchIcon\" size=\"20\" class=\"searchIcons\" matPrefix></sa-icon>\r\n <input #searchInput matInput type=\"text\" name=\"menu-search-bar\" class=\"search-input\"\r\n (keyup)=\"onSearch($event)\" [placeholder]=\"props?.['searchPlaceholder'] || 'Search'\" />\r\n <sa-icon class=\"pointer\" icon=\"closeOutlined\" size=\"15\" class=\"searchIcons\" matSuffix\r\n (click)=\"clearSearch($event)\"></sa-icon>\r\n </mat-form-field>\r\n </div>\r\n\r\n @if (filteredCategories().length > 0) {\r\n <div class=\"two-panel-dropdown\">\r\n <!-- Left Panel: Categories -->\r\n <div class=\"category-panel\">\r\n @for (cat of filteredCategories(); track cat[bindValue]) {\r\n <div class=\"category-item\" [class.active]=\"cat[bindValue] === selectedCategory()?.[bindValue]\"\r\n (click)=\"selectCategory(cat); $event.stopPropagation()\">\r\n <span class=\"category-label\">{{ cat[bindLabel] }}\r\n @if(props?.['showAttributesCount']){\r\n <span class=\"attributes-count\">({{ getFilteredAttributesCount(cat) }})</span>\r\n }\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"dropdown-divider\"></div>\r\n\r\n <!-- Right Panel: Attributes -->\r\n <div class=\"attributes-panel\">\r\n @if(filteredAttributes().length > 0) {\r\n @for (val of filteredAttributes(); track val[bindValue]) {\r\n <div class=\"attribute-item pointer\"\r\n [class.active]=\"props?.['multiple'] ? isItemSelected(val) : formControl.value?.[bindValue] === val[bindValue]\"\r\n (click)=\"props?.['multiple'] ? toggleValue(val) : selectSingleValue(val); $event.stopPropagation()\">\r\n @if(props?.['multiple']){\r\n <label class=\"custom-checkbox-container\" (click)=\"$event.stopPropagation()\">\r\n <input type=\"checkbox\" [checked]=\"isItemSelected(val)\" (change)=\"toggleValue(val)\">\r\n <span class=\"checkmark\"></span>\r\n <span class=\"attribute-label\">{{ val[bindLabel] }}</span>\r\n </label>\r\n }\r\n @else{\r\n <label class=\"custom-checkbox-container\">\r\n <span class=\"attribute-label\">{{ val[bindLabel] }}</span>\r\n @if(val?.tooltip || val?.description){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\r\n [matTooltip]=\"val?.tooltip || val?.description\" matTooltipClass=\"custom-tooltip\"\r\n class=\"tooltip-icon\"></sa-icon>\r\n </span>\r\n }\r\n </label>\r\n }\r\n </div>\r\n }\r\n }@else {\r\n <div class=\"p-4 text-center text-gray-500 w-full\">\r\n No items found.\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"p-4 text-center text-gray-500 w-full\">\r\n No items found.\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>","import { Component, DoCheck } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { IconComponent } from '../../icon/icon.component';\r\nimport { IconService } from '../../icon/icon.service';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\n\r\n@Component({\r\n selector: 'sa-ng-select',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n FormlyModule,\r\n NgSelectModule,\r\n IconComponent,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatButtonToggleModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule,\r\n MatCheckboxModule,\r\n ],\r\n providers: [IconService],\r\n templateUrl: './ng-select.component.html',\r\n styleUrl: './ng-select.component.css'\r\n})\r\nexport class NgSelectComponent extends FieldType<FieldTypeConfig<any>> implements DoCheck {\r\n filteredOptions: any[];\r\n searchValue: string = '';\r\n private _options: any[];\r\n isDropdownOpen = false;\r\n\r\n onSearch(event: Event) {\r\n const searchValue = this.searchValue.trim().toLowerCase();\r\n const bindLabel = this.props.bindLabel || 'label';\r\n\r\n if (!searchValue) {\r\n this.filteredOptions = [...(this.field.props?.options || [])];\r\n return;\r\n }\r\n\r\n this.filteredOptions = (this.field.props?.options || []).filter(opt => {\r\n const label = opt?.[bindLabel] ?? '';\r\n return String(label).toLowerCase().includes(searchValue);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this._options = this.props.options;\r\n this.filteredOptions = [...(this.props.options || [])];\r\n\r\n // If a default value is provided in props and the form control has no value yet, set it\r\n const defaultVal = this.props?.defaultValue;\r\n if ((this.formControl.value === null || this.formControl.value === undefined) && defaultVal !== undefined) {\r\n this.formControl.setValue(defaultVal);\r\n }\r\n }\r\n\r\n ngDoCheck() {\r\n if (this.props.options !== this._options) {\r\n this._options = this.props.options;\r\n this.filteredOptions = [...(this._options || [])];\r\n this.searchValue = ''; // Clear search value when options change\r\n }\r\n }\r\n\r\n\r\n\r\n // (Optional) Select/Deselect all helpers\r\n allSelected() {\r\n return this.props?.selectedValues.length === this.field.props?.options.length;\r\n }\r\n\r\n toggleSelectAll() {\r\n const bindValue = this.props.bindValue || 'value';\r\n if (this.allSelected()) {\r\n this.props.selectedValues = [];\r\n } else {\r\n this.props.selectedValues = (this.field.props?.options || []).map(o => o[bindValue]);\r\n }\r\n }\r\n\r\n clearRemaining(items: any[], clear: (item: any) => void): void {\r\n // remove only the items after the first two\r\n items.slice(2).forEach(item => clear(item));\r\n }\r\n expandedSummary = false;\r\n\r\n toggleSummary(): void {\r\n this.expandedSummary = !this.expandedSummary;\r\n }\r\n\r\n // This method will stop the event from bubbling up\r\n stopBackspacePropagation(event: KeyboardEvent) {\r\n if (event.key === 'Backspace' || event.keyCode === 8) {\r\n event.stopPropagation();\r\n }\r\n }\r\n\r\n clearSearch(event: Event) {\r\n this.searchValue = '';\r\n event.stopPropagation();\r\n this.filteredOptions = [...this.field.props?.options];\r\n }\r\n}\r\n","<div class=\"ng-select-tooltip-wrapper\"\r\n [matTooltip]=\"(!props?.multiple && formControl?.value) ? ((formControl?.value[props?.bindLabel || 'label'] || formControl?.value)?.length > 30 ? (formControl?.value[props?.bindLabel || 'label'] || formControl?.value) : '') : ''\"\r\n matTooltipPosition=\"above\"\r\n [matTooltipDisabled]=\"isDropdownOpen\">\r\n<ng-select [items]=\"filteredOptions\" [multiple]=\"props?.multiple || false\" [bindLabel]=\"props?.bindLabel || 'label'\"\r\n [closeOnSelect]=\"props?.closeOnSelect ?? true\" [bindValue]=\"props?.bindValue || 'value'\"\r\n [placeholder]=\"props?.placeholder || 'Select'\" [searchable]=\"false\" [formControl]=\"formControl\"\r\n [clearable]=\"props?.isClearable\" [appearance]=\"props['appearance'] || 'outline'\" [loading]=\"props?.loading || false\" \r\n class=\"ng-select-custom\"\r\n (open)=\"isDropdownOpen = true\"\r\n (close)=\"isDropdownOpen = false\">\r\n\r\n @if(!!props?.showSearchBar){\r\n <ng-template ng-header-tmp>\r\n <div class=\"search-input-container mat-form-field-density-5\">\r\n <mat-form-field [appearance]=\"props['appearance'] || 'outline'\" class=\"w-100\">\r\n <sa-icon icon=\"searchIcon\" class=\"searchIcons\" size=\"20\" matPrefix></sa-icon>\r\n <input matInput type=\"text\" name=\"menu-search-bar\" class=\"search-input searchIcons\"\r\n (keyup)=\"onSearch($event)\" (keydown)=\"stopBackspacePropagation($event)\"\r\n [placeholder]=\"props?.searchPlaceholder || 'Search'\" [(ngModel)]=\"searchValue\" />\r\n <sa-icon icon=\"closeOutlined\" class=\"pointer searchIcons\" size=\"15\" matSuffix\r\n (click)=\"clearSearch($event)\"></sa-icon>\r\n </mat-form-field>\r\n </div>\r\n </ng-template>\r\n }\r\n <!-- Option template with a checkbox in front of each row -->\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <div class=\"option-row\" \r\n [matTooltip]=\"(item[props.bindLabel || 'label']?.length > 40) ? item[props.bindLabel || 'label'] : ''\" \r\n matTooltipPosition=\"right\">\r\n @if(props?.multiple){\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" tabindex=\"-1\" />\r\n }\r\n <span class=\"option-label\">{{ item[props.bindLabel || 'label'] }}</span>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Single select label template -->\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <span class=\"ng-value-label ng-value-label-full\">\r\n {{ item[props.bindLabel || 'label'] }}\r\n </span>\r\n </ng-template>\r\n\r\n <!-- Selected items chip template (optional) -->\r\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\r\n <div class=\"chips ng-values-list\">\r\n\r\n <!-- If collapsed: show only first 2 + summary -->\r\n <ng-container *ngIf=\"!expandedSummary\">\r\n @for (s of items.slice(0, 2); track s[props.bindValue || 'value']) {\r\n <div class=\"ng-value\" \r\n [matTooltip]=\"(s[props.bindLabel || 'label']?.length > 30) ? s[props.bindLabel || 'label'] : ''\" \r\n matTooltipPosition=\"above\">\r\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\r\n size=\"11\"></sa-icon></span>\r\n </div>\r\n }\r\n\r\n @if (items.length > 2) {\r\n <div class=\"ng-value summary-chip pointer\" \r\n (click)=\"toggleSummary()\" \r\n matTooltip=\"Click to expand all selected items\" \r\n matTooltipPosition=\"above\">\r\n <span class=\"ng-value-label\">+{{ items.length - 2 }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clearRemaining(items, clear)\"><sa-icon\r\n icon=\"closeOutlined\" size=\"11\"></sa-icon></span>\r\n </div>\r\n }\r\n </ng-container>\r\n\r\n <!-- If expanded: show all items -->\r\n <ng-container *ngIf=\"expandedSummary\">\r\n @for (s of items; track s[props.bindValue || 'value']) {\r\n <div class=\"ng-value\" \r\n [matTooltip]=\"(s[props.bindLabel || 'label']?.length > 30) ? s[props.bindLabel || 'label'] : ''\" \r\n matTooltipPosition=\"above\">\r\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\r\n size=\"11\"></sa-icon></span>\r\n </div>\r\n }\r\n <!-- Collapse button -->\r\n <div class=\"ng-value summary-chip pointer\" \r\n (click)=\"toggleSummary()\" \r\n matTooltip=\"Click to collapse\" \r\n matTooltipPosition=\"above\">\r\n <sa-icon class=\"ng-value-label\" size=\"18\" icon=\"leftChevronCircle\"></sa-icon>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n @if(props?.footer){\r\n <ng-template ng-footer-tmp>\r\n <div class=\"dropdown-footer\">{{props?.footer?.description}}</div>\r\n </ng-template>\r\n }\r\n\r\n <ng-template ng-notfound-tmp>\r\n <div class=\"no-results\">\r\n @if (searchValue?.length > 0) {\r\n {{ props?.searchNotFoundText || '❌ No items match \"' + searchValue + '\"' }}\r\n } @else {\r\n {{ props?.notFoundText || '⚠️ No options available' }}\r\n }\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ng-loadingtext-tmp>\r\n <div class=\"loading\">\r\n <sa-icon icon=\"loader\" size=\"16\" class=\"loading-spinner\"></sa-icon>\r\n <span>Loading options...</span>\r\n </div>\r\n </ng-template>\r\n</ng-select>\r\n</div>","import { Component, ViewChild, ElementRef } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyModule, FieldType, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDatepickerModule, MatCalendar } from '@angular/material/datepicker';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ToolTipComponent } from \"../tool-tip/tool-tip.component\";\r\n\r\n@Component({\r\n selector: 'sa-dropdown-menu',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n MatMenuModule,\r\n MatButtonModule,\r\n MatCalendar,\r\n MatCardModule,\r\n MatNativeDateModule,\r\n IconComponent,\r\n MatTooltipModule,\r\n ToolTipComponent\r\n],\r\n templateUrl: './dropdown-menu.component.html',\r\n styleUrls: ['./dropdown-menu.component.css'],\r\n})\r\nexport class DropdownMenuComponent extends FieldType<FieldTypeConfig> {\r\n @ViewChild(MatMenuTrigger) menuTrigger!: MatMenuTrigger;\r\n @ViewChild('dropdownContainer') dropdownContainer!: ElementRef<HTMLElement>;\r\n\r\n activeItem: string | null = null;\r\n selectedDate: Date | null = null;\r\n isNavigating = false;\r\n\r\n params: any;\r\n placeholderLabel: string = '';\r\n showCustomTooltip = false;\r\n\r\n convertTooltipToArray(msg: any): string[] {\r\n if (!msg) return [];\r\n return Array.isArray(msg) ? msg : [msg];\r\n }\r\n\r\n\r\n ngOnInit() {\r\n this.params = this.field.props['params'] || {};\r\n if (!this.params || Object.keys(this.params).length === 0) {\r\n this.params = this.field.props;\r\n }\r\n\r\n this.placeholderLabel =\r\n this.params.placeholder ||\r\n this.params.label ||\r\n this.field.props.placeholder ||\r\n 'Select an option';\r\n }\r\n\r\n get menuItems(): any[] {\r\n const options = this.field.props?.options;\r\n if (options && typeof (options as any).subscribe === 'function') {\r\n return [];\r\n }\r\n return Array.isArray(options) ? options : [];\r\n }\r\n\r\n get selectedItem(): string {\r\n const value = this.formControl.value;\r\n if (!value) return this.placeholderLabel;\r\n if (typeof value === 'object' && value !== null) {\r\n return value.name || value.label || value.value || this.placeholderLabel;\r\n }\r\n const item = this.menuItems.find(\r\n (item) => item.value === value || item.id === value\r\n );\r\n return item?.name || item?.label || String(value) || this.placeholderLabel;\r\n }\r\n\r\n onSelect(item: any, event: MouseEvent) {\r\n event.stopPropagation();\r\n if (item.type === 'date') {\r\n this.activeItem = item.type;\r\n return;\r\n }\r\n this.activeItem = null;\r\n\r\n const updatedValue = {\r\n historyYears: item.value || item.name || null,\r\n historyDate: null,\r\n };\r\n\r\n this.formControl.setValue(item.value);\r\n this.formControl.markAsTouched();\r\n this.menuTrigger.closeMenu();\r\n }\r\n\r\n\r\n override get showError(): boolean {\r\n return this.formControl?.invalid && this.formControl?.touched;\r\n }\r\n\r\n getError(): string {\r\n if (this.formControl?.hasError('required')) return 'This field is required';\r\n return 'Please select a valid option';\r\n }\r\n\r\n onViewChanged() {\r\n this.isNavigating = true;\r\n setTimeout(() => (this.isNavigating = false), 300);\r\n }\r\n\r\n onDateSelected(date: Date) {\r\n if (this.isNavigating) return;\r\n this.selectedDate = date;\r\n\r\n const formatted = date.toLocaleDateString('en-US', {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n });\r\n\r\n const updatedValue = {\r\n historyYears: null,\r\n historyDate: formatted,\r\n };\r\n\r\n this.formControl.setValue(formatted);\r\n this.formControl.markAsTouched();\r\n this.menuTrigger.closeMenu();\r\n }\r\n\r\n\r\n stopCalendarClose(event: MouseEvent): void {\r\n event.stopPropagation();\r\n }\r\n\r\n isItemSelected(item: any): boolean {\r\n if (!this.formControl?.value) return false;\r\n const currentValue = this.formControl.value;\r\n\r\n if (typeof currentValue === 'object' && currentValue !== null) {\r\n return (\r\n currentValue === item ||\r\n currentValue.value === item.value ||\r\n currentValue.id === item.id\r\n );\r\n }\r\n\r\n return (\r\n currentValue === item.value ||\r\n currentValue === item.id ||\r\n currentValue === item.name\r\n );\r\n }\r\n\r\n onMenuOpened(): void {\r\n const el = this.dropdownContainer?.nativeElement;\r\n if (!el) return;\r\n const width = Math.round(el.getBoundingClientRect().width);\r\n document.documentElement.style.setProperty('--dropdown-trigger-width', width + 'px');\r\n }\r\n\r\n onMenuClosed(): void {\r\n document.documentElement.style.removeProperty('--dropdown-trigger-width');\r\n this.activeItem = null;\r\n }\r\n}\r\n","<div class=\"sa-dropdown-container {{ props?.['inputContainerClass'] }}\">\r\n <!-- Label and Tooltip Section -->\r\n @if(!!props?.['label']){\r\n <div class=\"sa-dropdown-label-container\">\r\n <div class=\"sa-dropdown-label-tooltip-container\">\r\n <span class=\"sa-dropdown-label\">\r\n {{ props?.['label'] }}\r\n </span>\r\n @if(!!props?.['help']){\r\n <span class=\"tooltip-container\" (mouseenter)=\"showCustomTooltip = true\" (mouseleave)=\"showCustomTooltip = false\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\" class=\"tooltip-icon d-flex\" [size]=\"props?.['tooltipIconSize'] || '20'\">\r\n </sa-icon>\r\n @if(showCustomTooltip){\r\n <sa-tool-tip [messages]=\"convertTooltipToArray(props?.['help'])\" [pointerPosition]=\"'left'\" [simpleMode]=\"true\">\r\n </sa-tool-tip>\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Dropdown Button -->\r\n <div class=\"dropdown-container\" #dropdownContainer [class.disabled]=\"params?.disabled\">\r\n <button mat-button [matMenuTriggerFor]=\"menu\" #menuTrigger=\"matMenuTrigger\" class=\"menu-trigger\"\r\n [disabled]=\"params?.disabled\" [attr.aria-label]=\"params?.label || 'Dropdown menu'\"\r\n [attr.aria-haspopup]=\"'menu'\" [attr.aria-expanded]=\"menuTrigger?.menuOpen\"\r\n (menuOpened)=\"onMenuOpened()\" (menuClosed)=\"onMenuClosed()\">\r\n\r\n <span class=\"selected-value\" [class.placeholder]=\"!formControl.value\">\r\n {{ selectedItem }}\r\n </span>\r\n <span class=\"dropdown_right_icon\">\r\n <sa-icon [icon]=\"'downOutlined'\" [size]=\"'22'\"></sa-icon>\r\n </span>\r\n </button>\r\n\r\n <!-- Dropdown Menu -->\r\n <mat-menu #menu=\"matMenu\" class=\"two-panel-menu\" [hasBackdrop]=\"true\">\r\n <div class=\"two-panel-dropdown\">\r\n <div class=\"menu-left\">\r\n <div *ngFor=\"let item of menuItems\" class=\"menu-item\" [class.active]=\"item.name === activeItem\"\r\n (click)=\"onSelect(item, $event)\" role=\"menuitem\" [attr.aria-selected]=\"isItemSelected(item)\">\r\n\r\n <span>{{ item.name }}</span>\r\n <sa-icon *ngIf=\"item.type === 'date'\" [icon]=\"'rightChevron'\" [size]=\"'16'\" aria-hidden=\"true\">\r\n </sa-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"divider\"></div>\r\n\r\n <div class=\"menu-right\" *ngIf=\"activeItem === 'date'\" (click)=\"stopCalendarClose($event)\">\r\n <mat-card class=\"calendar-card\">\r\n <mat-calendar [(selected)]=\"selectedDate\" (selectedChange)=\"onDateSelected($event)\"\r\n (viewChanged)=\"onViewChanged()\" [minDate]=\"params?.minDate\" [maxDate]=\"params?.maxDate\">\r\n </mat-calendar>\r\n </mat-card>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </div>\r\n\r\n <!-- Validation Message -->\r\n @if(!formControl.valid){\r\n <div class=\"error-message-container\">\r\n <span class=\"error-message\">\r\n <formly-validation-message [field]=\"field\"></formly-validation-message>\r\n </span>\r\n </div>\r\n }\r\n @if(!!props?.['description']){\r\n <p class=\"sa-dropdown-supportText\">{{ props?.['description'] }}</p>\r\n }\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, OnInit, Renderer2, ViewChild, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@Component({\r\n selector: 'sa-filter',\r\n standalone: true,\r\n imports: [CommonModule, IconComponent, HttpClientModule, MatTooltipModule],\r\n templateUrl: './filter.component.html',\r\n styleUrls: ['./filter.component.css']\r\n})\r\nexport class FilterComponent implements OnInit {\r\n\r\n @Input() config: FilterConfig = {\r\n filterLabel: 'Filter by',\r\n filterButtonStyle: 'outlined',\r\n filterItems: []\r\n };\r\n \r\n @Input('filterValues') set filterValues(value: FilterConfig) {\r\n if (value) {\r\n this.config = value;\r\n }\r\n }\r\n\r\n @ViewChild('filterByContent') filterByContent!: ElementRef;\r\n \r\n @Output() onClickEvent = new EventEmitter<FilterClickEvent>();\r\n @Output() filterSelected = new EventEmitter<FilterSelectionEvent>();\r\n @Output() filterRemoved = new EventEmitter<FilterRemovalEvent>();\r\n @Output() dropdownToggled = new EventEmitter<boolean>();\r\n\r\n touchStartY = 0;\r\n touchEndY = 0;\r\n dropdownActive: boolean = false;\r\n\r\n selectedFilters: Record<string, FilterSelection> = {};\r\n submenuActive: Record<string, boolean> = {};\r\n\r\n constructor(private renderer: Renderer2, private hostElement: ElementRef) { }\r\n\r\n ngOnInit(): void {\r\n this.renderer.listen('window', 'click', (e: Event) => this.handleGlobalClick(e));\r\n this.renderer.listen('window', 'keydown', (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') this.closeAll();\r\n });\r\n this.renderer.listen('window', 'resize', () => this.handleResize());\r\n }\r\n\r\n toggleDropdown(event: Event): void {\r\n event.stopPropagation();\r\n const dropdown = this.hostElement.nativeElement.querySelector('.dropdown');\r\n dropdown.classList.toggle('active');\r\n this.dropdownActive = dropdown.classList.contains('active');\r\n this.dropdownToggled.emit(this.dropdownActive);\r\n }\r\n\r\n toggleSubmenu(element: any, event: Event): void {\r\n event.stopPropagation();\r\n\r\n const currentHeader = (event.currentTarget as HTMLElement);\r\n const currentItem = currentHeader.closest('.filter-item');\r\n\r\n // Close all other filter items\r\n const allItems = this.hostElement.nativeElement.querySelectorAll('.filter-item');\r\n allItems.forEach((item: HTMLElement) => {\r\n if (item !== currentItem) {\r\n item.classList.remove('active');\r\n }\r\n });\r\n\r\n // Toggle the current item\r\n currentItem.classList.toggle('active');\r\n\r\n // If it's now active, position its submenu\r\n if (currentItem.classList.contains('active')) {\r\n const submenu = currentItem.querySelector('.filter-submenu');\r\n this.positionSubmenu(submenu as HTMLElement);\r\n }\r\n \r\n // Legacy event\r\n this.onClickEvent.emit({ \r\n event: 'click', \r\n type: 'Menu', \r\n item: element,\r\n filterType: element,\r\n isActive: currentItem.classList.contains('active')\r\n });\r\n\r\n // Toggle active state\r\n const isActive = this.submenuActive[element];\r\n this.submenuActive = {}; // close all\r\n if (!isActive) {\r\n this.submenuActive[element] = true; // open current\r\n }\r\n }\r\n\r\n selectFilter(event: Event): void {\r\n event.stopPropagation();\r\n\r\n const option = event.currentTarget as HTMLElement;\r\n const value = option.dataset['value'] || '';\r\n const text = option.querySelector('span')?.textContent || '';\r\n\r\n // Find parent submenu and its filter type\r\n const submenu = option.closest('.filter-submenu') as HTMLElement;\r\n if (!submenu || !submenu.id.endsWith('Submenu')) return;\r\n\r\n const filterType = submenu.id.replace('Submenu', '');\r\n\r\n // Check if this filter is already selected (toggle functionality)\r\n const isCurrentlySelected = this.selectedFilters[filterType] && \r\n this.selectedFilters[filterType].value === value;\r\n\r\n if (isCurrentlySelected) {\r\n // Remove the filter if it's already selected\r\n this.removeFilter(filterType);\r\n return;\r\n }\r\n\r\n // Deselect all options in this submenu\r\n submenu.querySelectorAll('.filter-option').forEach((el: HTMLElement) => el.classList.remove('selected'));\r\n\r\n // Select the clicked option\r\n option.classList.add('selected');\r\n\r\n // Store selected filter\r\n const selection: FilterSelection = { value, text, filterType };\r\n this.selectedFilters[filterType] = selection;\r\n\r\n // Emit enhanced events\r\n this.filterSelected.emit({\r\n filterType,\r\n selection,\r\n allSelections: { ...this.selectedFilters }\r\n });\r\n\r\n // Legacy event\r\n this.onClickEvent.emit({ \r\n event: 'click', \r\n type: 'Sub Menu', \r\n item: value,\r\n filterType,\r\n selection\r\n });\r\n\r\n setTimeout(() => this.closeAll(), 100);\r\n }\r\n\r\n removeFilter(type: string): void {\r\n const removedSelection = this.selectedFilters[type];\r\n delete this.selectedFilters[type];\r\n \r\n const submenu = this.hostElement.nativeElement.querySelector(`#${type}Submenu`);\r\n if (submenu) {\r\n submenu.querySelectorAll('.filter-option').forEach((opt: HTMLElement) => opt.classList.remove('selected'));\r\n }\r\n\r\n // Emit removal event\r\n this.filterRemoved.emit({\r\n filterType: type,\r\n removedSelection,\r\n remainingSelections: { ...this.selectedFilters }\r\n });\r\n }\r\n\r\n // Helper method to check if a filter option is selected\r\n isFilterOptionSelected(filterType: string, optionValue: string): boolean {\r\n return this.selectedFilters[filterType] && \r\n this.selectedFilters[filterType].value === optionValue;\r\n }\r\n\r\n // Public method to get current selections\r\n getSelectedFilters(): Record<string, FilterSelection> {\r\n return { ...this.selectedFilters };\r\n }\r\n\r\n // Public method to clear all filters\r\n clearAllFilters(): void {\r\n Object.keys(this.selectedFilters).forEach(type => {\r\n this.removeFilter(type);\r\n });\r\n }\r\n\r\n // Public method to set filters programmatically\r\n setFilters(filters: Record<string, FilterSelection>): void {\r\n this.selectedFilters = { ...filters };\r\n // Update UI to reflect selections\r\n Object.entries(filters).forEach(([type, selection]) => {\r\n const submenu = this.hostElement.nativeElement.querySelector(`#${type}Submenu`);\r\n if (submenu) {\r\n const option = submenu.querySelector(`[data-value=\"${selection.value}\"]`);\r\n if (option) {\r\n option.classList.add('selected');\r\n }\r\n }\r\n });\r\n }\r\n\r\n closeAll(): void {\r\n const dropdown = this.hostElement.nativeElement.querySelector('.dropdown');\r\n dropdown.classList.remove('active');\r\n this.hostElement.nativeElement.querySelectorAll('.filter-item').forEach((item: HTMLElement) => item.classList.remove('active'));\r\n }\r\n\r\n handleGlobalClick(e: Event): void {\r\n const target = e.target as HTMLElement;\r\n if (!target.closest('.dropdown')) {\r\n this.closeAll();\r\n }\r\n }\r\n\r\n positionSubmenu(submenu: HTMLElement): void {\r\n if (!submenu) return;\r\n submenu.classList.remove('show-left');\r\n if (window.innerWidth <= 768) return;\r\n setTimeout(() => {\r\n const rect = submenu.getBoundingClientRect();\r\n if (rect.left + submenu.offsetWidth > window.innerWidth - 20) {\r\n submenu.classList.add('show-left');\r\n }\r\n }, 10);\r\n }\r\n\r\n handleResize(): void {\r\n clearTimeout((this as any)._resizeTimeout);\r\n (this as any)._resizeTimeout = setTimeout(() => this.closeAll(), 250);\r\n }\r\n\r\n onTouchStart(e: TouchEvent): void {\r\n this.touchStartY = e.changedTouches[0].screenY;\r\n }\r\n\r\n onTouchEnd(): void {\r\n this.touchEndY = event instanceof TouchEvent ? event.changedTouches[0].screenY : 0;\r\n this.handleSwipeGesture();\r\n }\r\n\r\n handleSwipeGesture(): void {\r\n const swipeThreshold = 50;\r\n const swipeDistance = this.touchStartY - this.touchEndY;\r\n if (swipeDistance < -swipeThreshold && this.filterByContent.nativeElement.scrollTop === 0) {\r\n const dropdown = this.hostElement.nativeElement.querySelector('.dropdown');\r\n dropdown.classList.remove('active');\r\n }\r\n }\r\n\r\n smoothScrollToTop(): void {\r\n window.scrollTo({ top: 0, behavior: 'smooth' });\r\n }\r\n\r\n}\r\n\r\n// Enhanced interfaces\r\nexport interface FilterConfig {\r\n filterLabel: string;\r\n filterButtonStyle?: 'filled' | 'outlined';\r\n filterItems: FilterCategory[];\r\n}\r\n\r\nexport interface FilterCategory {\r\n id: string;\r\n text: string;\r\n subMenu?: FilterOption[];\r\n tooltip?: string;\r\n}\r\n\r\nexport interface FilterOption {\r\n value: string;\r\n label: string;\r\n description?: string;\r\n tooltip?: string;\r\n icon?: {\r\n icon: string;\r\n size: string;\r\n iconPath?: string;\r\n iconUrl?: string;\r\n customClass?: string;\r\n tooltip?: string;\r\n };\r\n}\r\n\r\nexport interface FilterSelection {\r\n value: string;\r\n text: string;\r\n filterType: string;\r\n}\r\n\r\nexport interface FilterClickEvent {\r\n event: string;\r\n type: 'Menu' | 'Sub Menu';\r\n item: any;\r\n filterType?: string;\r\n selection?: FilterSelection;\r\n isActive?: boolean;\r\n}\r\n\r\nexport interface FilterSelectionEvent {\r\n filterType: string;\r\n selection: FilterSelection;\r\n allSelections: Record<string, FilterSelection>;\r\n}\r\n\r\nexport interface FilterRemovalEvent {\r\n filterType: string;\r\n removedSelection?: FilterSelection;\r\n remainingSelections: Record<string, FilterSelection>;\r\n}\r\n","<div class=\"container\">\r\n\r\n <div class=\"filter-container\">\r\n <!-- Main Filter By Dropdown -->\r\n <div class=\"dropdown filter-by-dropdown\">\r\n <button class=\"dropdown-btn filter-by-btn\" [ngClass]=\"{\r\n 'filled-btn': config?.filterButtonStyle === 'filled',\r\n 'outlined-btn': config?.filterButtonStyle === 'outlined'\r\n }\" (click)=\"toggleDropdown($event)\">\r\n <span>{{config?.filterLabel}}</span>\r\n <sa-icon class=\"flex\" [icon]=\"'downChevronOutlined'\" [size]=\"'20'\"></sa-icon>\r\n </button>\r\n\r\n <div class=\"dropdown-content filter-by-content\" #filterByContent (touchstart)=\"onTouchStart($event)\"\r\n (touchend)=\"onTouchEnd()\">\r\n <div class=\"filter-section\">\r\n <!-- Dynamic Filter Items -->\r\n <div *ngFor=\"let item of config?.filterItems\" class=\"filter-item\">\r\n <div class=\"filter-header\" [id]=\"item.text+'Header'\" (click)=\"toggleSubmenu(item.text,$event)\">\r\n <span class=\"filter-label\">{{item.text}}</span>\r\n <sa-icon *ngIf=\"item?.subMenu?.length\" [icon]=\"'rightChevronOutlined'\"\r\n [size]=\"'16'\" \r\n [matTooltip]=\"item?.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\" \r\n class=\"tooltip-icon d-flex\"\r\n [matTooltipDisabled]=\"!item?.tooltip\"></sa-icon>\r\n </div>\r\n <ng-container *ngIf=\"item?.subMenu?.length\">\r\n <div class=\"filter-submenu\" [id]=\"item.text+'Submenu'\">\r\n <div *ngFor=\"let option of item.subMenu\" class=\"filter-option\"\r\n [attr.data-value]=\"option.value\"\r\n [ngClass]=\"{'selected': isFilterOptionSelected(item.id, option.value)}\"\r\n (click)=\"selectFilter($event)\">\r\n <span>{{option.label}}</span>\r\n <div class=\"info-icon\" *ngIf=\"option.icon\">\r\n <sa-icon class=\"flex\" [icon]=\"option.icon.icon\"\r\n [iconPath]=\"option.icon.iconPath\" [iconUrl]=\"option.icon.iconUrl\"\r\n [size]=\"option.icon.size\" [customClass]=\"option.icon.customClass\"\r\n [matTooltip]=\"option.description || option.tooltip || option.icon.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\" \r\n class=\"tooltip-icon d-flex\"\r\n [matTooltipDisabled]=\"!(option.description || option.tooltip || option.icon.tooltip)\"></sa-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Component } from '@angular/core';\r\nimport { IHeaderAngularComp } from 'ag-grid-angular';\r\nimport { IHeaderParams } from 'ag-grid-community';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface CustomHeaderParams extends IHeaderParams {\r\n // Leading icon configuration\r\n leadingIcon?: string;\r\n leadingIconSize?: string;\r\n showLeadingIcon?: boolean;\r\n \r\n // Trailing icon/info icon configuration\r\n trailingIcon?: string;\r\n trailingIconSize?: string;\r\n showTrailingIcon?: boolean;\r\n \r\n // Tooltip configuration\r\n tooltip?: string;\r\n tooltipIcon?: string;\r\n showInfoIcon?: boolean;\r\n tooltipIconSize?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'sa-grid-header',\r\n standalone: true,\r\n imports: [CommonModule, IconComponent, MatTooltipModule],\r\n templateUrl: './grid-header.component.html',\r\n styleUrl: './grid-header.component.css'\r\n})\r\nexport class GridHeaderComponent implements IHeaderAngularComp {\r\n params!: CustomHeaderParams;\r\n displayName: string = '';\r\n \r\n // Leading icon properties\r\n leadingIcon: string = '';\r\n leadingIconSize: string = '20';\r\n showLeadingIcon: boolean = false;\r\n \r\n // Trailing icon properties\r\n trailingIcon: string = '';\r\n trailingIconSize: string = '20';\r\n showTrailingIcon: boolean = false;\r\n \r\n // Tooltip properties\r\n tooltip: string = '';\r\n tooltipIcon: string = 'infoCircleOutlined';\r\n showInfoIcon: boolean = false;\r\n tooltipIconSize: string = '20';\r\n\r\n agInit(params: CustomHeaderParams): void {\r\n this.params = params;\r\n this.displayName = params.displayName || '';\r\n \r\n // Leading icon configuration\r\n this.leadingIcon = params.leadingIcon || '';\r\n this.leadingIconSize = params.leadingIconSize || '20';\r\n this.showLeadingIcon = params.showLeadingIcon !== undefined ? params.showLeadingIcon : false;\r\n \r\n // Trailing icon configuration\r\n this.trailingIcon = params.trailingIcon || '';\r\n this.trailingIconSize = params.trailingIconSize || '20';\r\n this.showTrailingIcon = params.showTrailingIcon !== undefined ? params.showTrailingIcon : false;\r\n \r\n // Tooltip configuration\r\n this.tooltip = params.tooltip || '';\r\n this.tooltipIcon = params.tooltipIcon || 'infoCircleOutlined';\r\n this.showInfoIcon = params.showInfoIcon !== undefined ? params.showInfoIcon : false;\r\n this.tooltipIconSize = params.tooltipIconSize || '20';\r\n }\r\n\r\n refresh(params: CustomHeaderParams): boolean {\r\n this.agInit(params);\r\n return true;\r\n }\r\n\r\n onSortRequested(event: any): void {\r\n if (this.params.enableSorting) {\r\n this.params.progressSort(event.shiftKey);\r\n }\r\n }\r\n}\r\n","<div class=\"grid-header-container\" (click)=\"onSortRequested($event)\">\r\n <!-- Leading Icon -->\r\n @if(showLeadingIcon && leadingIcon) {\r\n <span class=\"leading-icon-container\">\r\n <sa-icon \r\n [icon]=\"leadingIcon\" \r\n [size]=\"leadingIconSize\"\r\n class=\"leading-icon\">\r\n </sa-icon>\r\n </span>\r\n }\r\n \r\n <!-- Header Text -->\r\n <span class=\"header-text\">{{ displayName }}</span>\r\n \r\n <!-- Trailing Icon (without tooltip) -->\r\n @if(showTrailingIcon && trailingIcon && !showInfoIcon) {\r\n <span class=\"trailing-icon-container\">\r\n <sa-icon \r\n [icon]=\"trailingIcon\" \r\n [size]=\"trailingIconSize\"\r\n class=\"trailing-icon\">\r\n </sa-icon>\r\n </span>\r\n }\r\n \r\n <!-- Info Icon with Tooltip -->\r\n @if(showInfoIcon && tooltip) {\r\n <span class=\"info-icon-container\">\r\n <sa-icon \r\n [icon]=\"tooltipIcon\" \r\n [size]=\"tooltipIconSize\"\r\n [matTooltip]=\"tooltip\"\r\n matTooltipClass=\"custom-tooltip\"\r\n class=\"info-icon\">\r\n </sa-icon>\r\n </span>\r\n }\r\n</div>\r\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\nimport { ButtonClickEvent, ButtonInterface, ButtonSize, ButtonType } from '../../interfaces/button-interface';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IconService } from '../icon/icon.service';\r\nimport { ChipInterface } from '../../interfaces/chip-interface';\r\nimport { HeaderChipConfig, HeaderConfig, HeaderInfoItem } from '../../interfaces/header-interface';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@Component({\r\n selector: 'sa-header',\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.css'],\r\n standalone: true,\r\n imports: [IconComponent, ChipsComponent, ButtonComponent, HttpClientModule, MatTooltipModule],\r\n providers: [IconService]\r\n})\r\nexport class HeaderComponent implements OnChanges {\r\n @Input() header: HeaderConfig = {};\r\n @Input() chipConfig: HeaderChipConfig[] = [];\r\n @Input() info: HeaderInfoItem[] = [];\r\n @Input() buttonHelper?: ButtonInterface;\r\n @Input() buttonMain?: ButtonInterface;\r\n\r\n @Output() buttonClick = new EventEmitter<ButtonClickEvent>();\r\n\r\n constructor() { }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['header']) {\r\n this.header = changes['header'].currentValue;\r\n } else if (changes['chipConfig']) {\r\n this.chipConfig = changes['chipConfig'].currentValue;\r\n } else if (changes['info']) {\r\n this.info = changes['info'].currentValue;\r\n } else if (changes['buttonHelper']) {\r\n this.buttonHelper = changes['buttonHelper'].currentValue;\r\n } else if (changes['buttonMain']) {\r\n this.buttonMain = changes['buttonMain'].currentValue;\r\n }\r\n }\r\n\r\n onButtonClick(type: 'primary' | 'secondary', event: Event) {\r\n const button = type === 'secondary' ? this.buttonHelper : this.buttonMain;\r\n if (button) {\r\n this.buttonClick.emit({ type, button, originalEvent: event });\r\n }\r\n }\r\n}\r\n","<div class=\"header\">\r\n <div class=\"header-content\">\r\n @if (header?.text || header?.html || header.icon?.iconUrl) {\r\n <div class=\"heading\">\r\n <div class=\"header-name-container\" [class.icon-left]=\"!header?.icon?.iconPosition || header?.icon?.iconPosition === 'left'\" \r\n [class.icon-right]=\"header?.icon?.iconPosition === 'right'\">\r\n @if (header.icon?.iconUrl) {\r\n <sa-icon [iconUrl]=\"header?.icon?.iconUrl\" [iconPosition]=\"header?.icon?.iconPosition\" [size]=\"header?.icon?.size || '24px'\"\r\n [matTooltip]=\"header?.icon?.tooltip || ''\" \r\n [matTooltipDisabled]=\"!header?.icon?.tooltip\" />\r\n }\r\n <div class=\"header-name\" [innerHTML]=\"header?.html || header?.text\"></div>\r\n </div>\r\n @for(chip of chipConfig; track chip.text) {\r\n <div>\r\n <sa-chip \r\n [id]=\"chip.id\"\r\n [type]=\"chip.type\"\r\n [state]=\"chip.state\"\r\n [filling]=\"chip.filling\"\r\n [text]=\"chip.text\"\r\n [iconPosition]=\"chip.iconPosition\"\r\n [iconPath]=\"chip.iconPath\"\r\n [largeStateIcon]=\"chip.largeStateIcon\"\r\n [largeStateText]=\"chip.largeStateText\"\r\n ></sa-chip>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <div class=\"header-info\">\r\n @for(item of info; track item.text) {\r\n <div class=\"info-item\">\r\n @if(item.icon) {\r\n <img [src]=\"item.icon\" alt=\"\">\r\n }\r\n {{item.text}}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"actions\">\r\n @if(buttonHelper) {\r\n <sa-button \r\n (onClickEvent)=\"onButtonClick('secondary', $event)\"\r\n [id]=\"buttonHelper.id\"\r\n [text]=\"buttonHelper.text\"\r\n [type]=\"buttonHelper.type\"\r\n [size]=\"buttonHelper.size\"\r\n [state]=\"buttonHelper.state\"\r\n [ImagePath]=\"buttonHelper.imagePath\"\r\n [iconPosition]=\"buttonHelper.iconPosition\"\r\n [href]=\"buttonHelper.href\"\r\n [hrefTarget]=\"buttonHelper.hrefTarget\"\r\n [isSubmit]=\"buttonHelper.isSubmit\">\r\n </sa-button>\r\n }\r\n @if(buttonMain) {\r\n <sa-button\r\n (onClickEvent)=\"onButtonClick('primary', $event)\"\r\n [id]=\"buttonMain.id\"\r\n [text]=\"buttonMain.text\"\r\n [type]=\"buttonMain.type\"\r\n [size]=\"buttonMain.size\"\r\n [state]=\"buttonMain.state\"\r\n [ImagePath]=\"buttonMain.imagePath\"\r\n [iconPosition]=\"buttonMain.iconPosition\"\r\n [href]=\"buttonMain.href\"\r\n [hrefTarget]=\"buttonMain.hrefTarget\"\r\n [isSubmit]=\"buttonMain.isSubmit\">\r\n </sa-button>\r\n }\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { LayoutSectionInterface } from '../../interfaces/layout-section-interface';\r\nimport { ButtonInterface, ButtonClickEvent } from '../../interfaces/button-interface';\r\nimport { ChipInterface } from '../../interfaces/chip-interface';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IconService } from '../icon/icon.service';\r\n\r\n@Component({\r\n selector: 'sa-layout-section',\r\n templateUrl: './layout-section.component.html',\r\n imports: [\r\n CommonModule,\r\n ButtonComponent,\r\n ChipsComponent,\r\n IconComponent,\r\n HttpClientModule\r\n ],\r\n providers: [IconService],\r\n standalone: true,\r\n styleUrls: ['./layout-section.component.css']\r\n})\r\nexport class LayoutSectionComponent {\r\n @Input() config: LayoutSectionInterface;\r\n @Output() buttonClick = new EventEmitter<ButtonClickEvent>();\r\n\r\n onButtonClick(type: 'primary' | 'secondary', event: Event): void {\r\n const button = type === 'primary' ? this.config.primaryButton : this.config.secondaryButton;\r\n if (button) {\r\n this.buttonClick.emit({ type, button, originalEvent: event });\r\n }\r\n }\r\n} ","<div class=\"layout-section\">\r\n <div class=\"layout-section__header\">\r\n <div class=\"layout-section__title\">\r\n <div class=\"header-name-container\">\r\n @if (config?.headerIcon?.icon) {\r\n <sa-icon [style.height]=\"config?.headerIcon.size || '24'\"\r\n [icon]=\"config?.headerIcon.icon\"\r\n [size]=\"config?.headerIcon.size || '24'\" />\r\n }\r\n <h2>{{ config?.headerText }}</h2>\r\n </div>\r\n @if (config?.chips?.length) {\r\n <div class=\"layout-section__chips\">\r\n @for (chip of config?.chips; track chip.id) {\r\n <sa-chip\r\n [id]=\"chip.id\"\r\n [text]=\"chip.text\"\r\n [type]=\"chip.type\"\r\n [state]=\"chip.state\"\r\n [filling]=\"chip.filling\"\r\n [iconPath]=\"chip.iconPath\"\r\n [iconPosition]=\"chip.iconPosition\"\r\n [largeStateIcon]=\"chip.largeStateIcon\"\r\n [largeStateText]=\"chip.largeStateText\">\r\n </sa-chip>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"layout-section__actions\">\r\n @if (config?.secondaryButton) {\r\n <sa-button \r\n [id]=\"config.secondaryButton.id\"\r\n [text]=\"config.secondaryButton.text\"\r\n [type]=\"config.secondaryButton.type\"\r\n [state]=\"config.secondaryButton.state\"\r\n [size]=\"config.secondaryButton.size\"\r\n [ImagePath]=\"config.secondaryButton.imagePath\"\r\n [icon]=\"config.secondaryButton.icon\"\r\n [iconPosition]=\"config.secondaryButton.iconPosition\"\r\n [href]=\"config.secondaryButton.href\"\r\n [hrefTarget]=\"config.secondaryButton.hrefTarget\"\r\n [width]=\"config?.secondaryButton.width\"\r\n [isSubmit]=\"config.secondaryButton.isSubmit\"\r\n [buttonIconSize]=\"config.secondaryButton.buttonIconSize\"\r\n [showSpinner]=\"config.secondaryButton.showSpinner\"\r\n (onClickEvent)=\"onButtonClick('secondary', $event)\">\r\n </sa-button>\r\n }\r\n @if (config?.primaryButton) {\r\n <sa-button\r\n [id]=\"config.primaryButton.id\"\r\n [text]=\"config.primaryButton.text\"\r\n [type]=\"config.primaryButton.type\"\r\n [state]=\"config.primaryButton.state\"\r\n [size]=\"config.primaryButton.size\"\r\n [ImagePath]=\"config.primaryButton.imagePath\"\r\n [icon]=\"config.primaryButton.icon\"\r\n [iconPosition]=\"config.primaryButton.iconPosition\"\r\n [href]=\"config.primaryButton.href\"\r\n [hrefTarget]=\"config.primaryButton.hrefTarget\"\r\n [width]=\"config.primaryButton.width\"\r\n [isSubmit]=\"config.primaryButton.isSubmit\"\r\n [buttonIconSize]=\"config.primaryButton.buttonIconSize\"\r\n [showSpinner]=\"config.primaryButton.showSpinner\"\r\n (onClickEvent)=\"onButtonClick('primary', $event)\">\r\n </sa-button>\r\n }\r\n </div>\r\n </div>\r\n \r\n <div class=\"layout-section__content\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div> ","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { StatusDotConfig } from '../../interfaces/status-dot.interface';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@Component({\r\n selector: 'sa-status-dot',\r\n standalone: true,\r\n imports: [CommonModule, MatTooltipModule],\r\n template: `\r\n <div [matTooltip]=\"config.tooltip\"\r\n class=\"status-dot\"\r\n [class]=\"config.status\"\r\n [class.outline]=\"config.theme === 'outline'\"\r\n [style.width.px]=\"config.size\"\r\n [style.height.px]=\"config.size\">\r\n </div>\r\n `,\r\n styles: [`\r\n :host {\r\n display: inline-block;\r\n }\r\n \r\n .status-dot {\r\n border-radius: 50%;\r\n display: inline-block;\r\n cursor: pointer;\r\n }\r\n\r\n .primary {\r\n background-color: var(--primary-500, #007bff);\r\n border: 2px solid var(--primary-500, #007bff);\r\n }\r\n\r\n .secondary {\r\n background-color: var(--secondary-500, #6c757d);\r\n border: 2px solid var(--secondary-500, #6c757d);\r\n }\r\n\r\n .success {\r\n background-color: var(--semantic-success-500, #33961F);\r\n border: 2px solid var(--semantic-success-500, #33961F);\r\n }\r\n\r\n .error {\r\n background-color: var(--semantic-error-500, #dc3545);\r\n border: 2px solid var(--semantic-error-500, #dc3545);\r\n }\r\n\r\n .warning {\r\n background-color: var(--semantic-yellow-600, #DC9408);\r\n border: 2px solid var(--semantic-yellow-600, #DC9408);\r\n }\r\n\r\n .outline {\r\n background-color: transparent !important;\r\n }\r\n `],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class StatusDotComponent {\r\n @Input() config: StatusDotConfig = {\r\n status: 'primary',\r\n size: 16,\r\n theme: 'filled',\r\n tooltip: ''\r\n };\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, Component, EventEmitter, forwardRef, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { ChipsComponent } from '../../chips/chips.component';\r\nimport { IconComponent } from '../../icon/icon.component';\r\nimport { IMenuItem } from '../../../interfaces/menu.interface';\r\nimport { StatusDotComponent } from '../../status-dot/status-dot.component';\r\nimport { MenuDirective } from '../menu.directive';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IconService } from '../../icon/icon.service';\r\n\r\n@Component({\r\n selector: 'sa-menu-item',\r\n standalone: true,\r\n imports: [CommonModule, ChipsComponent,HttpClientModule, IconComponent, StatusDotComponent,\r\n forwardRef(() => MenuDirective) \r\n ],\r\n providers: [IconService],\r\n templateUrl: './menu-item.component.html',\r\n styleUrl: './menu-item.component.css'\r\n})\r\nexport class SAMenuItemComponent implements AfterViewInit {\r\n @Input('item') item: IMenuItem;\r\n @Input('showRound') showRound: boolean;\r\n @Output() onEvent: EventEmitter<any> = new EventEmitter();\r\n @ViewChild(forwardRef(() => MenuDirective)) menuDirective: MenuDirective;\r\n // @ViewChild(MenuDirective) menuDirective?: MenuDirective;\r\n\r\n ngAfterViewInit() {\r\n if (this.menuDirective) {\r\n this.menuDirective.onEvent.subscribe((event) => {\r\n this.onEvent.emit(event); // ✅ re-emit to SAMenuComponent\r\n });\r\n }\r\n }\r\n\r\n optionClicked(item: IMenuItem) {\r\n this.onEvent.emit({ type: 'click', item });\r\n }\r\n}\r\n","<!-- <div mat-menu-item class=\"sa-menu-item\">\r\n <span>{{item.label}}</span>\r\n</div> -->\r\n\r\n<div class=\"section-item {{item?.sepratorPosition}}\" [ngStyle]=\"{ 'border-radius': showRound ? '5px' : '0' }\" [ngClass]=\"item.isSelected ? 'selected' : ''\" (click)=\"optionClicked(item)\">\r\n <div class=\"status {{item['className']}}\" [saMenu]=\"item?.subMenu\">\r\n <sa-status-dot *ngIf=\"item.statusDot\" [config]=\"item?.statusDot\"></sa-status-dot>\r\n <sa-icon class=\"flex\" *ngIf=\"item.icon\" [icon]=\"item?.icon?.icon\" [iconPath]=\"item['icon']?.iconPath\" [iconUrl]=\"item['icon']?.iconUrl\" [size]=\"item['icon']?.size\" [customClass]=\"item['icon']?.customClass\"></sa-icon>\r\n <span class=\"sa-groupItem-lable\" >{{item.label}}</span>\r\n <div *ngIf=\"item?.subMenu\" class=\"flex ml-auto\">\r\n <sa-icon [icon]=\"'rightChevronOutlined'\" class=\"flex\" [size]=\"'20'\"></sa-icon>\r\n </div>\r\n </div>\r\n <!-- Section for showing chips if chips are available in object -->\r\n <div *ngIf=\"item.chips\" class=\"tags\">\r\n @for (itm of item.chips; track $index) {\r\n <sa-chip *ngIf=\"itm.text\" [type]=\"itm.type\" [state]=\"itm.state\" [filling]=\"itm.filling\"\r\n [text]=\"itm.text\"></sa-chip>\r\n <!-- <span [ngClass]=\"itm.status == 'active' ? 'tag-active' : 'tag-inactive'\" class=\"\">{{itm.label}}</span> -->\r\n }\r\n </div>\r\n</div>\r\n","import { Component, Input, HostBinding } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-skeleton-base',\r\n standalone: true,\r\n template: `<ng-content></ng-content>`,\r\n styles: [`\r\n :host {\r\n display: block;\r\n position: relative;\r\n overflow: hidden;\r\n background: var(--sa-skeleton-background, #e9ecef);\r\n border-radius: var(--sa-skeleton-radius, 4px);\r\n }\r\n\r\n :host.sa-dark {\r\n background: var(--sa-skeleton-background-dark, #344054);\r\n }\r\n\r\n :host::after {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n left: 0;\r\n transform: translateX(-100%);\r\n background: linear-gradient(\r\n 90deg,\r\n transparent,\r\n var(--sa-skeleton-shine, rgba(255, 255, 255, 0.3)),\r\n transparent\r\n );\r\n animation: shimmer var(--sa-skeleton-animation-duration, 1.5s) infinite;\r\n }\r\n\r\n :host.sa-dark::after {\r\n background: linear-gradient(\r\n 90deg,\r\n transparent,\r\n var(--sa-skeleton-shine-dark, #98A2B3),\r\n transparent\r\n );\r\n }\r\n\r\n @keyframes shimmer {\r\n 100% {\r\n transform: translateX(100%);\r\n }\r\n }\r\n `]\r\n})\r\nexport class SkeletonBaseComponent {\r\n @Input() width: string = '100%';\r\n @Input() height: string = '1rem';\r\n @Input() darkMode: boolean = false;\r\n @HostBinding('class.sa-dark') get isDark() { return this.darkMode; }\r\n @HostBinding('style.width') get getWidth() {\r\n return this.width;\r\n }\r\n\r\n @HostBinding('style.height') get getHeight() {\r\n return this.height;\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { SkeletonBaseComponent } from './skeleton-base.component';\r\n\r\n@Component({\r\n selector: 'sa-skeleton-text',\r\n standalone: true,\r\n imports: [SkeletonBaseComponent],\r\n template: `<sa-skeleton-base [width]=\"width\" [height]=\"height\" [darkMode]=\"darkMode\"></sa-skeleton-base>`,\r\n})\r\nexport class SkeletonTextComponent {\r\n @Input() width: string = '100%';\r\n @Input() height: string = '1rem';\r\n @Input() darkMode?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'sa-skeleton-circle',\r\n standalone: true,\r\n imports: [SkeletonBaseComponent],\r\n template: `<sa-skeleton-base [width]=\"size\" [height]=\"size\" [darkMode]=\"darkMode\" style=\"border-radius: 50%\"></sa-skeleton-base>`,\r\n})\r\nexport class SkeletonCircleComponent {\r\n @Input() size: string = '3rem';\r\n @Input() darkMode?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'sa-skeleton-rectangle',\r\n standalone: true,\r\n imports: [SkeletonBaseComponent],\r\n template: `<sa-skeleton-base [width]=\"width\" [height]=\"height\" [darkMode]=\"darkMode\"></sa-skeleton-base>`,\r\n})\r\nexport class SkeletonRectangleComponent {\r\n @Input() width: string = '100%';\r\n @Input() height: string = '100px';\r\n @Input() darkMode?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'sa-skeleton-elliptical',\r\n standalone: true,\r\n imports: [SkeletonBaseComponent],\r\n template: `<sa-skeleton-base [width]=\"width\" [height]=\"height\" [darkMode]=\"darkMode\" style=\"border-radius: 100px;\"></sa-skeleton-base>`,\r\n})\r\nexport class SkeletonEllipticalComponent {\r\n @Input() width: string = '200px';\r\n @Input() height: string = '48px';\r\n @Input() darkMode?: boolean;\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'sa-skeleton-container',\r\n standalone: true,\r\n imports: [NgStyle],\r\n template: `\r\n <div class=\"skeleton-container\" [ngStyle]=\"containerStyles\">\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n styles: [`\r\n .skeleton-container {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--sa-skeleton-gap, 1rem);\r\n padding: var(--sa-skeleton-padding, 1rem);\r\n }\r\n `]\r\n})\r\nexport class SkeletonContainerComponent {\r\n @Input() gap?: string;\r\n @Input() padding?: string;\r\n @Input() direction: 'row' | 'column' = 'column';\r\n\r\n get containerStyles() {\r\n return {\r\n gap: this.gap,\r\n padding: this.padding,\r\n flexDirection: this.direction\r\n };\r\n }\r\n}\r\n","export interface SkeletonConfig {\r\n type: 'text' | 'circle' | 'rectangle' | 'elliptical' | 'container';\r\n width?: string;\r\n height?: string;\r\n size?: string;\r\n direction?: 'row' | 'column';\r\n gap?: string;\r\n items?: SkeletonConfig[];\r\n darkMode?: boolean;\r\n}\r\n\r\nexport interface SkeletonPreset {\r\n items: readonly SkeletonConfig[];\r\n containerConfig?: {\r\n gap?: string;\r\n padding?: string;\r\n direction?: 'row' | 'column';\r\n };\r\n darkMode?: boolean;\r\n}\r\n\r\nexport const SKELETON_PRESETS = {\r\n // Preset for a card with title, subtitle and content\r\n card: {\r\n items: [\r\n { type: 'text', width: '60%', height: '1.5rem' },\r\n { type: 'text', width: '40%', height: '1rem' },\r\n { type: 'rectangle', height: '100px' }\r\n ],\r\n containerConfig: {\r\n padding: '1rem',\r\n gap: '0.75rem'\r\n }\r\n },\r\n \r\n // Preset for a list item with avatar\r\n listItem: {\r\n items: [\r\n { type: 'circle', size: '2.5rem' },\r\n { type: 'text', width: '70%', height: '1rem' }\r\n ],\r\n containerConfig: {\r\n direction: 'row',\r\n gap: '1rem',\r\n padding: '0.5rem'\r\n }\r\n },\r\n\r\n // Preset for form fields\r\n formField: {\r\n items: [\r\n { type: 'text', width: '30%', height: '1rem' },\r\n { type: 'rectangle', height: '2.5rem' }\r\n ],\r\n containerConfig: {\r\n gap: '0.5rem'\r\n }\r\n }\r\n} as const;\r\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SkeletonBaseComponent } from './skeleton-base.component';\r\nimport { SkeletonTextComponent, SkeletonCircleComponent, SkeletonRectangleComponent, SkeletonEllipticalComponent } from './skeleton-shapes.component';\r\nimport { SkeletonContainerComponent } from './skeleton-container.component';\r\nimport { SkeletonConfig, SkeletonPreset, SKELETON_PRESETS } from './skeleton-presets';\r\n\r\n@Component({\r\n selector: 'sa-skeleton-loader',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n SkeletonBaseComponent,\r\n SkeletonTextComponent,\r\n SkeletonCircleComponent,\r\n SkeletonRectangleComponent,\r\n SkeletonEllipticalComponent,\r\n SkeletonContainerComponent\r\n ],\r\n template: `\r\n <sa-skeleton-container\r\n [gap]=\"config?.containerConfig?.gap\"\r\n [padding]=\"config?.containerConfig?.padding\"\r\n [direction]=\"config?.containerConfig?.direction || 'column'\"\r\n >\r\n @for (item of config?.items; track $index) {\r\n @switch (item.type) {\r\n @case ('text') {\r\n <sa-skeleton-text\r\n [width]=\"item.width\"\r\n [height]=\"item.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? item.darkMode\"\r\n ></sa-skeleton-text>\r\n }\r\n @case ('circle') {\r\n <sa-skeleton-circle\r\n [size]=\"item.size\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? item.darkMode\"\r\n ></sa-skeleton-circle>\r\n }\r\n @case ('rectangle') {\r\n <sa-skeleton-rectangle\r\n [width]=\"item.width\"\r\n [height]=\"item.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? item.darkMode\"\r\n ></sa-skeleton-rectangle>\r\n }\r\n @case ('elliptical') {\r\n <sa-skeleton-elliptical\r\n [width]=\"item.width\"\r\n [height]=\"item.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? item.darkMode\"\r\n ></sa-skeleton-elliptical>\r\n }\r\n @case ('container') {\r\n <sa-skeleton-container [direction]=\"item.direction\" [gap]=\"item.gap\">\r\n @for (subItem of item.items; track $index) {\r\n @switch (subItem.type) {\r\n @case ('text') {\r\n <sa-skeleton-text\r\n [width]=\"subItem.width\"\r\n [height]=\"subItem.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subItem.darkMode\"\r\n ></sa-skeleton-text>\r\n }\r\n @case ('circle') {\r\n <sa-skeleton-circle\r\n [size]=\"subItem.size\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subItem.darkMode\"\r\n ></sa-skeleton-circle>\r\n }\r\n @case ('rectangle') {\r\n <sa-skeleton-rectangle\r\n [width]=\"subItem.width\"\r\n [height]=\"subItem.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subItem.darkMode\"\r\n ></sa-skeleton-rectangle>\r\n }\r\n @case ('elliptical') {\r\n <sa-skeleton-elliptical\r\n [width]=\"subItem.width\"\r\n [height]=\"subItem.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subItem.darkMode\"\r\n ></sa-skeleton-elliptical>\r\n }\r\n @case ('container') {\r\n <sa-skeleton-container [direction]=\"subItem.direction\" [gap]=\"subItem.gap\">\r\n @for (subSubItem of subItem.items; track $index) {\r\n @switch (subSubItem.type) {\r\n @case ('text') {\r\n <sa-skeleton-text\r\n [width]=\"subSubItem.width\"\r\n [height]=\"subSubItem.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subSubItem.darkMode\"\r\n ></sa-skeleton-text>\r\n }\r\n @case ('circle') {\r\n <sa-skeleton-circle\r\n [size]=\"subSubItem.size\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subSubItem.darkMode\"\r\n ></sa-skeleton-circle>\r\n }\r\n @case ('rectangle') {\r\n <sa-skeleton-rectangle\r\n [width]=\"subSubItem.width\"\r\n [height]=\"subSubItem.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subSubItem.darkMode\"\r\n ></sa-skeleton-rectangle>\r\n }\r\n @case ('elliptical') {\r\n <sa-skeleton-elliptical\r\n [width]=\"subSubItem.width\"\r\n [height]=\"subSubItem.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subSubItem.darkMode\"\r\n ></sa-skeleton-elliptical>\r\n }\r\n }\r\n }\r\n </sa-skeleton-container>\r\n }\r\n }\r\n }\r\n </sa-skeleton-container>\r\n }\r\n }\r\n }\r\n </sa-skeleton-container>\r\n `\r\n})\r\nexport class SkeletonLoaderComponent implements OnChanges {\r\n @Input() preset?: keyof typeof SKELETON_PRESETS;\r\n @Input() config?: SkeletonPreset;\r\n @Input() darkMode?: boolean;\r\n\r\n ngOnInit() {\r\n this.updateConfig();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.updateConfig();\r\n }\r\n\r\n private updateConfig() {\r\n if (this.preset && (!this.config || !this.config.items?.length)) {\r\n this.config = SKELETON_PRESETS[this.preset];\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n SimpleChanges,\r\n OnChanges,\r\n EventEmitter,\r\n ViewChild,\r\n forwardRef,\r\n ViewChildren,\r\n QueryList,\r\n} from '@angular/core';\r\nimport {\r\n MatMenu,\r\n MatMenuDefaultOptions,\r\n MatMenuItem,\r\n MatMenuTrigger,\r\n} from '@angular/material/menu';\r\nimport {\r\n Overlay,\r\n PositionStrategy,\r\n ConnectedPosition,\r\n} from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { CardComponent } from '../card/card.component';\r\nimport { MenuItem } from '@material-ui/core';\r\nimport { SAMenuItemComponent } from './menu-list/menu-item.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { IMenu, IMenuItem } from '../../interfaces/menu.interface';\r\nimport { AvatarComponent} from '../avatar/avatar.component';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IconService } from '../icon/icon.service';\r\nimport { SkeletonLoaderComponent } from '../skeleton/skeleton-loader.component';\r\n@Component({\r\n selector: 'sa-menu',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n SAMenuItemComponent,\r\n MatMenu,\r\n MatMenuItem,\r\n ChipsComponent,\r\n HttpClientModule,\r\n IconComponent,\r\n AvatarComponent,\r\n SkeletonLoaderComponent,\r\n],\r\nproviders: [IconService],\r\n templateUrl: './menu.component.html',\r\n styleUrl: './menu.component.css',\r\n // animations: [\r\n // trigger('slideInOut', [\r\n // state('in', style({\r\n // width: '', // When expanded (fully shown)\r\n // })),\r\n // state('out', style({\r\n // width: '0', // When collapsed (hidden)\r\n // })),\r\n // transition('in <=> out', [\r\n // animate('0.2s ease-in-out'), // Animation speed and easing\r\n // ])\r\n // ])\r\n // ]\r\n})\r\nexport class SAMenuComponent implements OnChanges {\r\n @Input() position: 'left' | 'right' | 'top' | 'bottom' = 'bottom'; // Default position\r\n @Input() menu: IMenu;\r\n @Input() hostEl: any;\r\n @Output() onEvent: EventEmitter<any> = new EventEmitter();\r\n @Output() onKeyUpEvent: EventEmitter<any> = new EventEmitter();\r\n @Output() closeEvent: EventEmitter<any> = new EventEmitter();\r\n // @ViewChild('menu', {static: true}) menu;\r\n isExpanded: boolean = false;\r\n constructor(\r\n private overlay: Overlay,\r\n ) {\r\n }\r\n\r\n \r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['menu'] && changes['menu'].currentValue) {\r\n console.log('Menu component detected changes:', changes['menu'].currentValue);\r\n \r\n // Reset active tab index if tabs have changed\r\n if (this.menu?.tabs?.length && this.activeTabIndex >= this.menu.tabs.length) {\r\n this.activeTabIndex = 0;\r\n }\r\n \r\n // Prevent the menu from closing by stopping propagation of any events\r\n // that might trigger menu closing during this update cycle\r\n setTimeout(() => {\r\n // This ensures the menu stays open after the change detection cycle completes\r\n console.log('Menu update complete, menu should remain open');\r\n }, 0);\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.isExpanded = true;\r\n } \r\n\r\n setPosition() {\r\n // const positions: { [key: string]: ConnectedPosition } = {\r\n // left: { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'top' },\r\n // right: { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'top' },\r\n // top: { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top' },\r\n // bottom: { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' }\r\n // };\r\n\r\n // const overlayRef = this.overlay.create();\r\n // const userProfilePortal = new ComponentPortal(CardComponent);\r\n // const compRef = overlayRef.attach(userProfilePortal);\r\n // compRef.instance.title = 'need nduk ra bhai'\r\n // compRef.instance.body = 'sometime little bit this sometimes little bit that. Comming not comming'\r\n // compRef.instance.avatar = '../assets/avatar.svg'\r\n }\r\n\r\n itemClicked(event){\r\n this.onMenuItemClick(null,event.item)\r\n } \r\n\r\n onMenuItemClick(event: any, item: IMenuItem){\r\n // item.isSelected = !item.isSelected;\r\n this.onEvent.emit({type: 'CLICK', item, menu: this.menu});\r\n \r\n // Close the menu after the item is clicked, just like the close button\r\n if(item.subMenu === null || item.subMenu === undefined){\r\n this.closeEvent.emit(event);\r\n }\r\n }\r\n\r\n onSearch(event: any){\r\n this.onEvent.emit({type: 'SEARCH', value:event.target.value})\r\n }\r\n\r\n activeTabIndex: number = 0; // Track the active tab index\r\n\r\n setActiveTab(index: number,tabname): void {\r\n this.activeTabIndex = index; // Update the active tab index\r\n this.onEvent.emit({type: 'TAB_CLICK', activeTab:tabname, menu: this.menu})\r\n }\r\n\r\n\r\n}\r\n","<div class=\"sa-menu\" [ngClass]=\"menu.showTray ? 'sa-menu-tray sa-round-border' : ''\"\r\n [ngStyle]=\"{width: menu.width || 'max-content'}\">\r\n @if(menu?.title){\r\n <div class=\"sa-menu-title\">\r\n <h1>{{menu?.title}}</h1>\r\n <sa-icon [icon]=\"'closeOutlined'\" [size]=\"'20'\" color=\"var(--grey-200, #D0D5DD)\" class=\"sa-menu-close-icon\"\r\n (click)=\"closeEvent.emit($event)\"></sa-icon>\r\n </div>\r\n }\r\n\r\n <!-- @if(menu?.itemGroups && menu.itemGroups.length){\r\n @for (groupItem of menu.itemGroups; track groupItem) {\r\n <div class=\"sa-menu-group\">\r\n <h2>{{groupItem.groupTitle}}</h2>\r\n \r\n @for (item of groupItem.items; track $index) {\r\n <sa-menu-item [item]=\"item\" [showRound]=\"menu.showTray\" (click)=\"onMenuItemClick($event, item)\"></sa-menu-item>\r\n }\r\n </div>\r\n }\r\n } @else if(menu?.items && menu.items.length){\r\n <div class=\"sa-menu-items\">\r\n @for (item of menu.items; track item) {\r\n <sa-menu-item [item]=\"item\" (click)=\"onMenuItemClick($event, item)\"></sa-menu-item>\r\n }\r\n </div>\r\n } -->\r\n\r\n\r\n <!-- Tab Content or Item Groups -->\r\n <div class=\"sa-menu-content\">\r\n <div class=\"sa-menu-content-inner {{menu?.showSearch ? 'sa-menu-content-with-search' : ''}}\">\r\n @if(menu?.showSearch){\r\n <div class=\"search-container\">\r\n <sa-icon icon=\"search\"></sa-icon>\r\n <input name=\"menu-search-bar\" class=\"search-input\" (keyup)=\"onSearch($event)\" type=\"text\" [placeholder]=\"menu.searchPlaceholder\" \r\n />\r\n <button *ngIf=\"menu?.showAddIcon\"><i class=\"fas fa-plus\"></i></button>\r\n </div>\r\n }\r\n \r\n <!-- Tabs -->\r\n @if(menu?.tabs){\r\n <div class=\"sa-menu-tabs\">\r\n <button *ngFor=\"let tab of menu.tabs; let i = index\" [class.active]=\"i === activeTabIndex\"\r\n (click)=\"setActiveTab(i,tab.label)\">\r\n {{ tab.label }}\r\n <!-- ({{ tab.itemGroups.length }}) -->\r\n </button>\r\n </div>\r\n }\r\n <!-- Tabs End -->\r\n\r\n @if(menu?.tabs?.length){\r\n @if(menu.tabs[activeTabIndex]?.itemGroups?.length){\r\n <ng-container *ngFor=\"let groupItem of menu.tabs[activeTabIndex].itemGroups\">\r\n <div class=\"sa-menu-group\">\r\n <h2>{{groupItem.groupTitle}}</h2>\r\n <ng-container *ngFor=\"let item of groupItem.items\">\r\n <sa-menu-item [item]=\"item\" [showRound]=\"menu.showTray\"\r\n (click)=\"onMenuItemClick($event, item)\"></sa-menu-item>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n }\r\n } @else if(menu?.loading && menu?.itemGroupsSkeletonConfig){\r\n <sa-skeleton-loader [config]=\"menu.itemGroupsSkeletonConfig\"></sa-skeleton-loader>\r\n } @else if(menu?.itemGroups?.length){\r\n <ng-container *ngFor=\"let groupItem of menu.itemGroups\">\r\n <div class=\"sa-menu-group\">\r\n <h2>{{groupItem.groupTitle}}</h2>\r\n <ng-container *ngFor=\"let item of groupItem.items\">\r\n <sa-menu-item [item]=\"item\" [showRound]=\"menu.showTray\"\r\n (click)=\"onMenuItemClick($event, item)\"></sa-menu-item>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if(menu?.items && menu?.items?.length){\r\n <div *ngIf=\"menu?.user\" class=\"profile-badge\">\r\n <div class=\"avatar\">\r\n <sa-avatar [altText]=\"menu?.user?.altText\" [imagePath]=\"''\" [size]=\"'large'\"></sa-avatar>\r\n </div>\r\n <div class=\"profile-info\">\r\n <p class=\"profile-name\">{{menu?.user?.name}}</p>\r\n <p class=\"profile-email\">{{menu?.user?.email}}</p>\r\n </div>\r\n </div>\r\n <div class=\"sa-menu-items\">\r\n @for (item of menu.items; track item) {\r\n <sa-menu-item [item]=\"item\" (onEvent)=\"itemClicked($event)\"> </sa-menu-item>\r\n }\r\n </div>\r\n }\r\n\r\n</div>","import { ConnectedPosition, ConnectionPositionPair, FlexibleConnectedPositionStrategyOrigin, Overlay, OverlayContainer, PositionStrategy } from '@angular/cdk/overlay';\r\nimport { Directive, ElementRef, EventEmitter, HostListener, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { SAMenuComponent } from './menu.component';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { IMenu, MyOverlayPositions } from '../../interfaces/menu.interface';\r\nimport { BehaviorSubject, Subject, takeUntil } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[saMenu]',\r\n standalone: true\r\n})\r\nexport class MenuDirective implements OnInit, OnChanges, OnDestroy {\r\n // Stream to track menu configuration changes\r\n private menuConfig$ = new BehaviorSubject<IMenu | null>(null);\r\n \r\n // Stream to handle component destruction\r\n private destroy$ = new Subject<void>();\r\n\r\n // @Input('saMenuObj') saMenuObj = {};\r\n @Input('saMenuRef') saMenuRef: ViewContainerRef | TemplateRef<ElementRef> | null = null;\r\n @Output('onMenuEvent') onMenuEvent: EventEmitter<any> = new EventEmitter();\r\n @Output() onEvent: EventEmitter<any> = new EventEmitter();\r\n @Output() onAttached: EventEmitter<{ element: ElementRef, menu: IMenu }> = new EventEmitter();\r\n @Output() onDetached: EventEmitter<{ element: ElementRef, menu: IMenu }> = new EventEmitter();\r\n\r\n _saMenu: IMenu;\r\n _position: 'left' | 'right' | 'top' | 'bottom' = 'right';\r\n @Input('saMenu')\r\n get saMenu(): IMenu {\r\n return this._saMenu;\r\n }\r\n\r\n set saMenu(value: IMenu) {\r\n this._saMenu = value;\r\n // Emit the new configuration to the stream\r\n this.menuConfig$.next(value);\r\n }\r\n\r\n @Input('saManuPosition')\r\n get position(){\r\n return this._position;\r\n }\r\n set position(value: 'left' | 'right' | 'top' | 'bottom'){\r\n this._position = value;\r\n }\r\n\r\n constructor(\r\n private overlay: Overlay,\r\n private overlayContainer: OverlayContainer,\r\n private elRef:ElementRef\r\n ) {}\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(e) {\r\n if(!!this._saMenu?.items?.length || !!this._saMenu?.itemGroups?.length || !!this._saMenu?.tabs?.length)\r\n this.attachMenu();\r\n }\r\n\r\n private overlayRef: any = null;\r\n private compRef: any = null;\r\n\r\n ngOnInit() {\r\n // Subscribe to menu configuration changes\r\n this.menuConfig$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(config => {\r\n if (!config) return;\r\n \r\n // If the menu is already open, update it without closing\r\n if (this.overlayRef && this.compRef) {\r\n console.log('Updating open menu with new config');\r\n this.compRef.instance.menu = config;\r\n \r\n // Manually trigger change detection if needed\r\n if (this.compRef.instance.ngOnChanges) {\r\n this.compRef.instance.ngOnChanges({\r\n menu: {\r\n currentValue: config,\r\n previousValue: null,\r\n firstChange: false,\r\n isFirstChange: () => false\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n }\r\n\r\n // We've moved this functionality to the reactive stream\r\n \r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Menu changes are now handled through the reactive stream\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Clean up subscriptions\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n \r\n // Clean up the overlay\r\n this.detachMenu();\r\n }\r\n\r\n attachMenu() {\r\n const hostElement = this.elRef.nativeElement;\r\n const menuPortal = new ComponentPortal(SAMenuComponent);\r\n \r\n // Get the base position from MENU_POSITIONS\r\n const basePosition = MENU_POSITIONS[this._position];\r\n \r\n // Create the position strategy with fallback to MENU_POSITIONS if overlayConfig is not provided\r\n const positionStrategy: PositionStrategy = this.overlay.position()\r\n .flexibleConnectedTo(hostElement) // Position relative to the target element (the button)\r\n .withPositions([{\r\n ...basePosition,\r\n offsetX: this._saMenu.overlayConfig?.offsetX !== undefined ? this._saMenu.overlayConfig.offsetX : basePosition.offsetX,\r\n offsetY: this._saMenu.overlayConfig?.offsetY !== undefined ? this._saMenu.overlayConfig.offsetY : basePosition.offsetY\r\n }]);\r\n\r\n // Add custom class to the overlay container\r\n this.overlayContainer.getContainerElement().classList.add('sa-menu-overlay-container');\r\n \r\n this.overlayRef = this.overlay.create({\r\n positionStrategy, \r\n scrollStrategy: this.overlay.scrollStrategies.reposition(), \r\n panelClass: 'custom-menu-overlay'\r\n });\r\n this.compRef = this.overlayRef.attach(menuPortal);\r\n this.compRef.instance.menu = this.saMenu;\r\n this.compRef.instance.hostEl = hostElement;\r\n\r\n // Subscribe to menu component events and emit them\r\n this.compRef.instance.onEvent.subscribe((res) => {\r\n this.onEvent.emit(res);\r\n });\r\n\r\n this.compRef.instance.closeEvent.subscribe((res) => {\r\n this.detachMenu();\r\n });\r\n\r\n this.overlayRef.outsidePointerEvents().subscribe(() => {\r\n this.detachMenu();\r\n });\r\n\r\n this.onAttached.emit({\r\n element: this.elRef,\r\n menu: this._saMenu\r\n });\r\n }\r\n\r\n detachMenu() {\r\n if (this.overlayRef) {\r\n this.onDetached.emit({\r\n element: this.elRef,\r\n menu: this._saMenu\r\n });\r\n this.overlayRef.dispose();\r\n this.overlayRef = null;\r\n this.compRef = null;\r\n \r\n // Remove the custom class from the overlay container\r\n this.overlayContainer.getContainerElement().classList.remove('sa-menu-overlay-container');\r\n }\r\n }\r\n}\r\n\r\nconst MENU_POSITIONS: MyOverlayPositions= {\r\n 'right': {\r\n originX: 'end',\r\n originY: 'center',\r\n overlayX: 'start',\r\n overlayY: 'center',\r\n offsetX: 20,\r\n offsetY: 0\r\n },\r\n 'left': {\r\n originX: 'start',\r\n originY: 'center',\r\n overlayX: 'end',\r\n overlayY: 'center',\r\n offsetX: 20,\r\n offsetY: 0\r\n },\r\n 'top': {\r\n originX: 'center',\r\n originY: 'top',\r\n overlayX: 'center',\r\n overlayY: 'bottom',\r\n offsetX: 0,\r\n offsetY: 20\r\n },\r\n 'bottom': {\r\n originX: 'center',\r\n originY: 'bottom',\r\n overlayX: 'center',\r\n overlayY: 'top',\r\n offsetX: 0,\r\n offsetY: 20\r\n }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, inject, Inject, Input, OnChanges, Output, signal, SimpleChanges, ViewChild, viewChild } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { AvatarComponent } from '../avatar/avatar.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\n// import { AvatarComponent } from '../avatar/avatar.component';\r\n\r\nimport {\r\n MatTooltip,\r\n MatTooltipModule\r\n} from '@angular/material/tooltip';\r\nimport { MenuDirective } from '../menu/menu.directive';\r\nimport { SAMenuComponent } from '../menu/menu.component';\r\nimport { ILeftNav, ILeftNavBlurEvent, ILeftNavClickEvent, ILeftNavItem, ILeftNavLogo } from '../../interfaces/left-nav-interface';\r\nimport { IMenu } from '../../interfaces/menu.interface';\r\nimport { IconService } from '../icon/icon.service';\r\n@Component({\r\n selector: 'sa-left-nav',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n AvatarComponent,\r\n IconComponent,\r\n MatTooltipModule,\r\n MenuDirective,\r\n SAMenuComponent,\r\n IconComponent\r\n ],\r\n providers: [IconService],\r\n templateUrl: './left-nav.component.html',\r\n styleUrl: './left-nav.component.css'\r\n})\r\nexport class LeftNavComponent implements OnChanges {\r\n\r\n // Signal to track if a menu is currently attached/open\r\n isMenuAttached = signal(false);\r\n \r\n // Track which menu is currently open\r\n private activeMenuItemRef: { itemType: 'nav' | 'footer', index: number } | null = null;\r\n @Input('config') config: ILeftNav;\r\n @Output('clickEvent') clickEvent: EventEmitter<ILeftNavClickEvent>;\r\n @Output('hoverEvent') hoverEvent: EventEmitter<ILeftNavBlurEvent>;\r\n @Output('onEvent') onEvent: EventEmitter<any> = new EventEmitter();\r\n\r\n // @Inject(ActivatedRoute) activeRouteService: ActivatedRoute;\r\n // @Inject(Router) routerService: Router;\r\n\r\n private activeItem: ILeftNavItem | null;\r\n\r\n constructor(private route: ActivatedRoute, private router: Router) {\r\n this.clickEvent = new EventEmitter();\r\n this.hoverEvent = new EventEmitter();\r\n }\r\n\r\n ngOnInit() {\r\n console.log(this.config.items);\r\n if (!this.config.footerItems) {\r\n this.config.footerItems = data.footerItems;\r\n }\r\n\r\n // This logic should not be as part of the library. It should be handled by the application.\r\n // if (this.config?.items?.length) {\r\n // this.onNavItemClick(this.config.items[0], 0);\r\n // }\r\n }\r\n\r\n ngAfterViewInit() {\r\n \r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['config'] && !changes['config'].firstChange) {\r\n // Handle config changes\r\n console.log('Config changed:', changes['config'].currentValue);\r\n \r\n // Update any derived state or trigger UI updates\r\n if (this.config?.items) {\r\n // Find and maintain active state when config changes\r\n const activeItemIndex = this.config.items.findIndex(item => item.active);\r\n if (activeItemIndex >= 0) {\r\n this.activeItem = this.config.items[activeItemIndex];\r\n }\r\n \r\n // To ensure Angular's change detection properly propagates changes to the menu directive,\r\n // we can use the Object.assign approach which preserves object references but updates properties\r\n // This is important for Angular's OnPush change detection strategy in child components\r\n \r\n // Update menu objects in items without changing their references\r\n if (this.activeMenuItemRef && this.activeMenuItemRef.itemType === 'nav') {\r\n const activeIndex = this.activeMenuItemRef.index;\r\n if (this.config.items[activeIndex]?.menu) {\r\n // Using a console.log to visually verify the approach is being applied\r\n console.log('Maintaining menu reference for active nav item:', activeIndex);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n setItemActive(index: number) {\r\n try {\r\n if (this.activeItem) {\r\n this.activeItem.active = false;\r\n }\r\n if (this.config?.items?.length) {\r\n this.activeItem = this.config.items[index];\r\n this.activeItem.active = true;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n onNavItemClick(item: ILeftNavItem, index: number, event: any = null) {\r\n\r\n this.clickEvent.emit({\r\n event,\r\n type: 'NAV_ITEM_CLICK',\r\n item\r\n });\r\n this.config.items.forEach((item) => item.active = false);\r\n this.config.items[index].active = true;\r\n \r\n if (!item.disable && item.path) {\r\n this.setItemActive(index);\r\n this.router.navigate([item.path])\r\n }\r\n this.onEvent.emit({ item, index, event });\r\n }\r\n\r\n onFooterItemClick(item: ILeftNavItem, index: number, event: any = null) {\r\n this.clickEvent.emit({\r\n event,\r\n type: 'FOOTER_ITEM_CLICK',\r\n item\r\n });\r\n }\r\n onFooterItemBlur(item: ILeftNavItem, index: number, event: any = null, tooltip: MatTooltip) {\r\n this.hoverEvent.emit({\r\n event,\r\n type: 'FOOTER_ITEM_HOVER',\r\n item\r\n });\r\n if (tooltip) {\r\n tooltip.show();\r\n }\r\n }\r\n onNavItemBlur(item: ILeftNavItem, index: number, event: any = null, tooltip: MatTooltip) {\r\n this.hoverEvent.emit({\r\n event,\r\n type: 'NAV_ITEM_HOVER',\r\n item\r\n });\r\n if (tooltip) {\r\n tooltip.show();\r\n }\r\n }\r\n\r\n onTemplateItemClick(event: any, index: number, item: any) {\r\n this.clickEvent.emit({\r\n event,\r\n item,\r\n type: 'TEMPLATE_ITEM_CLICK'\r\n });\r\n }\r\n\r\n onMenuEvent(event: any){\r\n console.log('onMenuEvent', event)\r\n }\r\n\r\n onLogoClick(event: any, logo: ILeftNavLogo) {\r\n this.clickEvent.emit({\r\n event,\r\n type: 'LOGO_CLICK',\r\n item: {\r\n ...logo,\r\n title: logo.altText\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handler for the onAttached event from the MenuDirective\r\n * This is triggered when the saMenu directive is attached to an element\r\n * @param event The event data containing the element and menu configuration\r\n * @param itemType The type of item ('nav' or 'footer')\r\n * @param item The nav/footer item that the menu is attached to\r\n * @param index The index of the item in the items array\r\n */\r\n onMenuAttached(event: { element: ElementRef, menu: IMenu }, itemType: 'nav' | 'footer', item: ILeftNavItem, index: number): void {\r\n // Emit an event that can be captured by parent applications\r\n this.isMenuAttached.set(true);\r\n \r\n // Track which menu is open\r\n this.activeMenuItemRef = { itemType, index };\r\n \r\n this.onEvent.emit({\r\n type: 'MENU_ATTACHED',\r\n itemType,\r\n item,\r\n index,\r\n element: event.element,\r\n menu: event.menu\r\n });\r\n }\r\n\r\n /**\r\n * Handler for the onDetached event from the MenuDirective\r\n * This is triggered when the menu is closed/detached\r\n * @param event The event data containing the element and menu configuration\r\n * @param itemType The type of item ('nav' or 'footer')\r\n * @param item The nav/footer item that the menu was attached to\r\n * @param index The index of the item in the items array\r\n */\r\n onMenuDetached(event: { element: ElementRef, menu: IMenu }, itemType: 'nav' | 'footer', item: ILeftNavItem, index: number): void {\r\n this.isMenuAttached.set(false);\r\n \r\n // Clear the active menu reference\r\n this.activeMenuItemRef = null;\r\n \r\n this.onEvent.emit({\r\n type: 'MENU_DETACHED',\r\n itemType,\r\n item,\r\n index,\r\n element: event.element,\r\n menu: event.menu\r\n });\r\n }\r\n\r\n\r\n}\r\n\r\n\r\nconst data: ILeftNav = {\r\n items: [{\r\n title: 'Home',\r\n icon: '',\r\n disable: false,\r\n tooltip: '',\r\n relativePath: true,\r\n path: 'home'\r\n }, {\r\n title: 'Pricing',\r\n icon: '',\r\n disable: true,\r\n tooltip: '',\r\n relativePath: true,\r\n path: ''\r\n }, {\r\n title: 'Setting',\r\n icon: 'settingsOutlined',\r\n disable: true,\r\n tooltip: 'coming soon',\r\n relativePath: true,\r\n path: ''\r\n }],\r\n footerItems: [{\r\n title: 'Help',\r\n icon: 'chatHelpOutlined',\r\n disable: true,\r\n tooltip: 'coming soon'\r\n }, {\r\n title: 'Name',\r\n disable: false,\r\n tooltip: '',\r\n type: 'AVATAR'\r\n }, {\r\n title: 'Chevron',\r\n icon: 'doubleDownOutlined',\r\n disable: true,\r\n tooltip: ''\r\n }]\r\n}","<div class=\"sa-left-nav\" >\r\n\r\n <div class=\"sa-left-nav-container {{isMenuAttached() ? 'menu-attached' : ''}}\">\r\n <div class=\"sa-left-nav-logo\">\r\n <sa-icon (click)=\"onLogoClick($event, config?.logo)\" [matTooltip]=\"config?.logo?.tooltip\" [matTooltipPosition]=\"'right'\" matTooltipClass=\"sa-left-nav-tooltip\" [icon]=\"config?.logo?.icon\" [size]=\"config?.logo?.iconSize\"></sa-icon>\r\n </div>\r\n <div class=\"sa-left-nav-items-container\">\r\n @if(config && config?.items && !!config?.items?.length){\r\n <div class=\"sa-left-nav-items-group\">\r\n <ng-container *ngFor=\"let item of config?.items; let i = index\">\r\n <div class=\"sa-left-nav-items\">\r\n <div class=\"sa-left-nav-item\" [ngClass]=\"item.active ? 'active' : '' \"\r\n [saMenu]=\"item.menu\" (onEvent)=\"onEvent.emit($event)\"\r\n (onAttached)=\"onMenuAttached($event, 'nav', item, i)\" (onDetached)=\"onMenuDetached($event, 'nav', item, i)\"\r\n (click)=\"onNavItemClick(item, i, $event)\" (mouseenter)=\"onNavItemBlur(item,i,$event,tooltip)\"\r\n #tooltip=\"matTooltip\" [matTooltip]=\"item.tooltip\" matTooltipPosition=\"right\" matTooltipClass=\"sa-left-nav-tooltip\">\r\n\r\n <sa-icon class=\"sa-left-nav-item-icon\" [icon]=\"item.icon\" [size]=\"item.iconSize || '24'\" [color]=\"item.active ? item.color : 'var(--grey-200)'\"></sa-icon>\r\n <!-- <span>{{item.tooltip}}</span> -->\r\n <!-- <span class=\"sa-left-nav-item-icon\"\r\n [ngStyle]=\"{ 'background-image': 'url(' + item.icon_url + ')' }\"></span> -->\r\n </div>\r\n <p class=\"sa-icon-label\" [ngClass]=\"item.active ? 'active' : '' \">{{item.iconLabel}}</p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"sa-template-item-container\">\r\n @if(config && config.templateItems && !!config.templateItems.length){\r\n <div (click)=\"onTemplateItemClick($event, i, item)\" class=\"sa-template-item\" [ngClass]=\"item.className\" *ngFor=\"let item of config.templateItems; let i = index\">\r\n <sa-icon [matTooltip]=\"item.tooltip\" matTooltipPosition=\"right\" matTooltipClass=\"sa-left-nav-tooltip sa-left-nav-template-tooltip\" [icon]=\"item.icon\" [size]=\"item.iconSize || '24'\" [color]=\"item.color\"></sa-icon>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"sa-left-nav-footer\">\r\n @if(config && config.footerItems && !!config.footerItems.length){\r\n <div class=\"sa-left-nav-footer-container\">\r\n <div class=\"sa-left-nav-footer-item\" [ngClass]=\"item.className\" *ngFor=\"let item of config.footerItems; let i = index\">\r\n <div class=\"footer-item-icon\" [ngClass]=\"item.active ? 'active' : '' \"\r\n (click)=\"onFooterItemClick(item, i, $event)\" (onEvent)=\"onEvent.emit($event)\"\r\n [saMenu]=\"item.menu\" (onAttached)=\"onMenuAttached($event, 'footer', item, i)\" (onDetached)=\"onMenuDetached($event, 'footer', item, i)\"\r\n (mouseenter)=\"onFooterItemBlur(item,i,$event,tooltip)\" #tooltip=\"matTooltip\"\r\n [matTooltip]=\"item.tooltip\" matTooltipPosition=\"right\" matTooltipClass=\"sa-left-nav-tooltip\">\r\n @if(item.type === 'AVATAR'){\r\n <!-- <span class=\"sa-left-nav-footer-name\">ET</span> -->\r\n <sa-avatar [altText]=\"item.altText\" [imagePath]=\"''\" size=\"extra-small\"></sa-avatar>\r\n }@else{\r\n <sa-icon class=\"sa-left-nav-footer-icon\" [icon]=\"item.icon\" size=\"24\" color=\"white\"></sa-icon>\r\n <!-- <span clasi ss=\"sa-left-nav-footer-icon\"\r\n [ngStyle]=\"{ 'background-image': 'url(' + item.icon_url || '' + ')' }\"></span> -->\r\n }\r\n </div>\r\n <p class=\"sa-icon-label\" [ngClass]=\"item.active ? 'active' : '' \">{{item.iconLabel}}</p>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"sa-left-nav-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n</div>","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { CardComponent } from '../card/card.component';\r\nimport { CardCustomHeaderComponent } from '../card/card-custom-header/card-custom-header.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { CardTitleActionsComponent } from '../card/card-title-actions/card-title-actions.component';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { StatusDotComponent } from '../status-dot/status-dot.component';\r\nimport { IconService } from '../icon/icon.service';\r\n\r\n@Component({\r\n selector: 'sa-mini-card',\r\n standalone: true,\r\n imports: [CardComponent, CardCustomHeaderComponent, IconComponent, MatTooltip, ChipsComponent, \r\n CardTitleActionsComponent, ButtonComponent, StatusDotComponent\r\n ],\r\n providers: [IconService],\r\n templateUrl: './mini-card.component.html',\r\n styleUrl: './mini-card.component.css'\r\n})\r\nexport class MiniCardComponent implements OnChanges {\r\n @Input() cardData: any;\r\n @Output() onCardClickEvent = new EventEmitter<any>();\r\n \r\n\r\n customClassWrapper = 'mini-card-container'\r\n\r\n card: any = {\r\n \"width\": \"500px\",\r\n \"height\": \"auto\",\r\n \"customWrapperClass\": this.customClassWrapper,\r\n \"source\": \r\n {\r\n \"id\": 342,\r\n \"created\": 1648807710970,\r\n \"updated\": 1688016005213,\r\n \"displayName\": \"Xero V2\",\r\n \"displayCategory\": 13,\r\n \"logoUrl\": \"assets/images/png/Amazon-Ads.png\",\r\n \"type\": \"XERO_V2\",\r\n \"loginType\": \"CUSTOM\",\r\n \"cdkSource\": true,\r\n \"datasourceCategory\": \"STANDARD\",\r\n \"name\": \"Xero V2\"\r\n },\r\n \"showActionActionButton\": true,\r\n \"disabled\": true,\r\n \"actionButton\": {\r\n \"text\": \"Add Source\",\r\n \"type\": \"primary\",\r\n \"size\": \"small\",\r\n \"state\": \"default\",\r\n \"id\": \"add-source\"\r\n },\r\n \"chipData\": {\r\n \"type\": \"small\",\r\n \"state\": \"error\",\r\n \"filling\": \"filled\",\r\n \"text\": \"Connected\",\r\n \"tooltip\": \"Some big text here to show tooltip text here\"\r\n },\r\n \"statusDot\": {\r\n \"status\": \"success\",\r\n \"size\": 10,\r\n \"theme\": \"filled\",\r\n \"tooltip\": \"success\"\r\n },\r\n \"action\": \"connect\"\r\n };\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['cardData'] || changes['cardData']) {\r\n this.card = changes['cardData'].currentValue;\r\n }\r\n }\r\n\r\n onCardClick(source: any, button: any, event: any) {\r\n this.onCardClickEvent.emit({ source, button, event });\r\n }\r\n\r\n}\r\n","<sa-card [column]=\"false\" [showCardHeader]=\"true\" [showCardBody]=\"false\"\r\n [width]=\"card?.width || '471px'\" [height]=\"card?.height || '100px'\" [showHeaderBodyDivider]=\"false\"\r\n [customWrapperClass]=\"card?.customWrapperClass || customClassWrapper\"\r\n class=\"{{card?.disabled ? 'disabled-card': 'enabled-card'}}\">\r\n <sa-card-title-header>\r\n <div class=\"sa-card-accordion-title-container\">\r\n <div class=\"sa-mini-card-title-icon-container\">\r\n <div class=\"sa-mini-card-custom-title\">\r\n @if(card?.source?.logoUrl){\r\n <sa-icon [img]=\"card?.source?.logoUrl\" [size]=\"'20'\" class=\"d-flex\" [customClass]=\"'auto-dimensions'\"></sa-icon>\r\n }\r\n <span [matTooltip]=\"card?.source?.tooltip\">\r\n {{card?.source?.name}}\r\n @if(card?.source?.count){\r\n <ng-container>\r\n <span>({{card?.source?.count}})</span>\r\n </ng-container>\r\n }\r\n </span>\r\n @if(card?.statusDot){\r\n <span>\r\n <sa-status-dot [config]=\"card.statusDot\">\r\n </sa-status-dot>\r\n </span>\r\n }\r\n @if(card?.chipData){\r\n <span>\r\n <sa-chip [type]=\"card?.chipData.type\" [state]=\"card?.chipData.state\"\r\n [filling]=\"card?.chipData.filling\" [text]=\"card?.chipData.text\"\r\n [iconPosition]='card?.chipData.iconPosition'\r\n [iconPath]=\"card?.chipData.iconPath\" [tooltip]=\"card?.chipData.tooltip\">\r\n </sa-chip>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n @if(!card?.disabled && (card?.actionButton && (card?.showActionActionButton ? card?.actionButton : null))){\r\n <div class=\"sa-card-titleIcon no-margin\">\r\n <sa-card-title-actions>\r\n <sa-button [text]=\"card?.actionButton?.text\" [type]=\"card?.actionButton?.type\" [size]=\"card?.actionButton?.size\"\r\n [state]=\"card?.actionButton?.state\" [iconPosition]=\"card?.actionButton?.iconPosition\" [icon]=\"card?.actionButton?.icon\"\r\n [buttonIconSize]=\"card?.actionButton?.buttonIconSize\" (onClickEvent)=\"onCardClick(card?.source, card?.actionButton, $event)\">\r\n </sa-button>\r\n </sa-card-title-actions>\r\n </div>\r\n }\r\n </div>\r\n </sa-card-title-header>\r\n </sa-card>","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-page-layout',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './page-layout.component.html',\r\n styleUrl: './page-layout.component.css'\r\n})\r\nexport class PageLayoutComponent {\r\n @Input() showRightContent: boolean = false;\r\n @Input() showFooterContent: boolean = false;\r\n @Input() showProgressBarContent;\r\n}\r\n","<div class=\"layout-container\" [class]=\"showProgressBarContent === false ? 'no-padding': 'padding'\">\r\n <div class=\"layout-inner-container\"\r\n [class]=\"showProgressBarContent === false ? 'no-border-radius': 'border-radius'\">\r\n @if (showProgressBarContent) {\r\n <div class=\"progress-bar-container\">\r\n <ng-content select=\"[progress-bar-content]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"content-container\">\r\n <div class=\"left-section\">\r\n <div class=\"top-section\">\r\n <ng-content select=\"[top-content]\"></ng-content>\r\n </div>\r\n <div class=\"left-wrapper\">\r\n <ng-content select=\"[left-content]\"></ng-content>\r\n </div>\r\n @if (showFooterContent) {\r\n <div class=\"footer-section\">\r\n <ng-content select=\"[footer-content]\"></ng-content>\r\n </div>\r\n }\r\n </div>\r\n @if (showRightContent) {\r\n <div class=\"right-section\">\r\n <ng-content select=\"[right-content]\"></ng-content>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>","import { Component, ElementRef, Input, OnInit, Renderer2 } from '@angular/core';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n\r\n@Component({\r\n selector: 'sa-progress-bar',\r\n standalone: true,\r\n templateUrl: './progress-bar.component.html',\r\n styleUrl: './progress-bar.component.css',\r\n imports: [MatProgressBarModule, NgStyle],\r\n})\r\n\r\nexport class ProgressBarComponent implements OnInit {\r\n @Input() progressValue: number = 10;\r\n @Input() borderRadius: string = '10px';\r\n @Input() height: string = '8px';\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","<mat-progress-bar mode=\"determinate\" [value]=\"progressValue\" class=\"progress-bar\" [ngStyle]=\"{\r\n '--dynamic-height': height ,\r\n '--dynamic-border-radius': borderRadius \r\n }\"></mat-progress-bar>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormArray, FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport {MatDatepickerModule} from '@angular/material/datepicker';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\n\r\nexport interface QueryField {\r\n key: string;\r\n label: string;\r\n type: string;\r\n options?: { label: string; value: any }[];\r\n operators?: string[];\r\n defaultOperator?: string;\r\n}\r\n\r\nexport interface QueryOperator {\r\n value: string;\r\n label: string;\r\n types?: string[];\r\n}\r\n\r\nexport interface QueryConfig {\r\n fields: QueryField[];\r\n operators: QueryOperator[];\r\n defaultCondition?: 'and' | 'or';\r\n}\r\n\r\nexport interface QueryRule {\r\n field: string;\r\n operator: string;\r\n value: any;\r\n condition?: 'and' | 'or';\r\n}\r\n\r\nexport interface QueryGroup {\r\n condition: 'and' | 'or';\r\n rules: (QueryRule | QueryGroup)[];\r\n}\r\n\r\n@Component({\r\n selector: 'sa-query-builder',\r\n templateUrl: './query-builder.component.html',\r\n styleUrls: ['./query-builder.component.scss'],\r\n standalone: true,\r\n providers: [MatNativeDateModule],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatSelectModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatTooltipModule,\r\n MatButtonToggleModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule\r\n ]\r\n})\r\nexport class QueryBuilderComponent implements OnInit {\r\n @Input() config: QueryConfig = {\r\n fields: [],\r\n operators: [\r\n { value: '=', label: '=' },\r\n { value: '!=', label: '!=' },\r\n { value: '>', label: '>' },\r\n { value: '<', label: '<' },\r\n { value: '>=', label: '>=' },\r\n { value: '<=', label: '<=' },\r\n { value: 'contains', label: 'contains' },\r\n { value: 'between', label: 'between' }\r\n ],\r\n defaultCondition: 'and'\r\n };\r\n\r\n @Output() queryChange = new EventEmitter<QueryGroup>();\r\n\r\n form: FormGroup;\r\n model: QueryGroup;\r\n\r\n constructor(private fb: FormBuilder) {\r\n this.form = this.fb.group({\r\n condition: ['and'],\r\n rules: this.fb.array([])\r\n });\r\n\r\n this.model = {\r\n condition: 'and',\r\n rules: []\r\n };\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initializeForm();\r\n this.addRule();\r\n\r\n this.form.valueChanges.subscribe(value => {\r\n this.model = this.transformFormToModel(value);\r\n this.queryChange.emit(this.model);\r\n });\r\n }\r\n\r\n get rulesArray(): FormArray {\r\n return this.form.get('rules') as FormArray;\r\n }\r\n\r\n initializeForm(): void {\r\n this.form = this.fb.group({\r\n condition: [this.config.defaultCondition || 'and'],\r\n rules: this.fb.array([])\r\n });\r\n }\r\n\r\n addRule(): void {\r\n if (this.config.fields.length === 0) {\r\n return;\r\n }\r\n\r\n const defaultField = this.config.fields[0];\r\n const defaultOperator = defaultField.defaultOperator || this.getOperatorsForType(defaultField.type)[0]?.value || '=';\r\n\r\n const ruleGroup = this.fb.group({\r\n field: [defaultField.key],\r\n operator: [defaultOperator],\r\n value: [null],\r\n condition: ['and']\r\n });\r\n\r\n this.rulesArray.push(ruleGroup);\r\n }\r\n\r\n removeRule(index: number): void {\r\n this.rulesArray.removeAt(index);\r\n }\r\n\r\n getFieldByKey(key: string): QueryField | undefined {\r\n return this.config.fields.find(field => field.key === key);\r\n }\r\n\r\n getOperatorsForType(type: string): QueryOperator[] {\r\n return this.config.operators.filter(op => !op.types || op.types.includes(type));\r\n }\r\n\r\n getOperatorsForField(fieldKey: string): QueryOperator[] {\r\n const field = this.getFieldByKey(fieldKey);\r\n if (!field) return [];\r\n\r\n if (field.operators) {\r\n return this.config.operators.filter(op => field.operators?.includes(op.value));\r\n }\r\n\r\n return this.getOperatorsForType(field.type);\r\n }\r\n\r\n getFieldType(fieldKey: string): string {\r\n const field = this.getFieldByKey(fieldKey);\r\n return field ? field.type : 'string';\r\n }\r\n \r\n isOperatorBetween(index: number): boolean {\r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n return ruleGroup?.get('operator')?.value === 'between';\r\n }\r\n\r\n getFieldOptions(fieldKey: string): { label: string; value: any }[] {\r\n const field = this.getFieldByKey(fieldKey);\r\n return field?.options || [];\r\n }\r\n\r\n onFieldChange(index: number, fieldKey: string): void {\r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n const field = this.getFieldByKey(fieldKey);\r\n \r\n if (field) {\r\n const operators = this.getOperatorsForField(fieldKey);\r\n const defaultOperator = field.defaultOperator || (operators.length > 0 ? operators[0].value : '=');\r\n \r\n ruleGroup.get('operator')?.setValue(defaultOperator);\r\n ruleGroup.get('value')?.setValue(null);\r\n \r\n // Reset range values if they exist\r\n if (ruleGroup.get('valueStart')) {\r\n ruleGroup.get('valueStart')?.setValue(null);\r\n }\r\n if (ruleGroup.get('valueEnd')) {\r\n ruleGroup.get('valueEnd')?.setValue(null);\r\n }\r\n \r\n // Add range form controls if needed\r\n this.updateFormControlsForOperator(index, defaultOperator, field.type);\r\n }\r\n }\r\n\r\n onOperatorChange(index: number, operator: string, fieldKey: string): void {\r\n const fieldType = this.getFieldType(fieldKey);\r\n this.updateFormControlsForOperator(index, operator, fieldType);\r\n \r\n // Reset values when operator changes\r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n ruleGroup.get('value')?.setValue(null);\r\n if (ruleGroup.get('valueStart')) {\r\n ruleGroup.get('valueStart')?.setValue(null);\r\n }\r\n if (ruleGroup.get('valueEnd')) {\r\n ruleGroup.get('valueEnd')?.setValue(null);\r\n }\r\n }\r\n \r\n /**\r\n * Gets the minimum allowed date for the end date picker based on the selected start date\r\n * @param index The index of the rule row\r\n * @returns The minimum date for the end date picker (the start date or today if no start date)\r\n */\r\n getMinEndDate(index: number): Date | null {\r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n const startDate = ruleGroup.get('valueStart')?.value;\r\n \r\n // If start date is selected, use it as minimum for end date\r\n // Otherwise use today's date\r\n return startDate ? new Date(startDate) : new Date();\r\n }\r\n \r\n /**\r\n * Handles changes to the start date\r\n * @param index The index of the rule row\r\n * @param event The date change event\r\n */\r\n onStartDateChange(index: number, event: any): void {\r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n const endDate = ruleGroup.get('valueEnd')?.value;\r\n const startDate = event.value;\r\n \r\n // If end date is before start date, reset it\r\n if (endDate && startDate && new Date(endDate) < new Date(startDate)) {\r\n ruleGroup.get('valueEnd')?.setValue(null);\r\n }\r\n }\r\n \r\n updateFormControlsForOperator(index: number, operator: string, fieldType: string): void {\r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n \r\n // Handle date range for 'between' operator\r\n if (operator === 'between' && fieldType === 'date') {\r\n // Add start and end date controls if they don't exist\r\n if (!ruleGroup.contains('valueStart')) {\r\n ruleGroup.addControl('valueStart', this.fb.control(null));\r\n }\r\n if (!ruleGroup.contains('valueEnd')) {\r\n ruleGroup.addControl('valueEnd', this.fb.control(null));\r\n }\r\n } else {\r\n // Remove range controls if they exist and aren't needed\r\n if (ruleGroup.contains('valueStart')) {\r\n ruleGroup.removeControl('valueStart');\r\n }\r\n if (ruleGroup.contains('valueEnd')) {\r\n ruleGroup.removeControl('valueEnd');\r\n }\r\n }\r\n }\r\n \r\n transformFormToModel(formValue: any): QueryGroup {\r\n return {\r\n condition: formValue.condition,\r\n rules: formValue.rules.map((rule: any) => {\r\n // Handle date range for 'between' operator\r\n if (rule.operator === 'between' && this.getFieldType(rule.field) === 'date') {\r\n return {\r\n field: rule.field,\r\n operator: rule.operator,\r\n value: { start: rule.valueStart, end: rule.valueEnd },\r\n condition: rule.condition\r\n };\r\n }\r\n \r\n // Standard case\r\n return {\r\n field: rule.field,\r\n operator: rule.operator,\r\n value: rule.value,\r\n condition: rule.condition\r\n };\r\n })\r\n };\r\n }\r\n \r\n /**\r\n * Gets the condition for a specific row\r\n * @param index The index of the row\r\n * @returns The condition (and/or) for the row\r\n */\r\n getRowCondition(index: number): 'and' | 'or' {\r\n if (index === 0) return 'and'; // First row doesn't have a condition\r\n \r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n return ruleGroup.get('condition')?.value || 'and';\r\n }\r\n \r\n /**\r\n * Sets the condition for a specific row\r\n * @param index The index of the row\r\n * @param condition The condition to set (and/or)\r\n */\r\n setRowCondition(index: number, condition: 'and' | 'or'): void {\r\n if (index === 0) return; // First row doesn't have a condition\r\n \r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n ruleGroup.get('condition')?.setValue(condition);\r\n }\r\n\r\n toggleCondition(): void {\r\n const currentCondition = this.form.get('condition')?.value;\r\n const newCondition = currentCondition === 'and' ? 'or' : 'and';\r\n this.form.get('condition')?.setValue(newCondition);\r\n }\r\n\r\n getConditionLabel(): string {\r\n return this.form.get('condition')?.value === 'and' ? 'AND' : 'OR';\r\n }\r\n\r\n resetQuery(): void {\r\n this.rulesArray.clear();\r\n this.addRule();\r\n }\r\n\r\n applyQuery(): void {\r\n this.queryChange.emit(this.model);\r\n }\r\n}\r\n","<div class=\"sa-query-builder\">\r\n <form [formGroup]=\"form\">\r\n <div class=\"query-builder-header\">\r\n <div class=\"where-label\">Where</div>\r\n </div>\r\n\r\n <div class=\"query-builder-body\">\r\n <div class=\"rules-container\" formArrayName=\"rules\">\r\n @for (rule of rulesArray.controls; track $index) {\r\n <div class=\"rule-row\" [formGroupName]=\"$index\">\r\n <!-- Condition selector (And/Or) -->\r\n @if ($index > 0) {\r\n <div class=\"condition-selector\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-select [value]=\"getRowCondition($index)\" (selectionChange)=\"setRowCondition($index, $event.value)\">\r\n <mat-option value=\"and\">And</mat-option>\r\n <mat-option value=\"or\">Or</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n } @else {\r\n <div class=\"condition-placeholder\"></div>\r\n }\r\n \r\n <!-- Field selection -->\r\n <mat-form-field class=\"field-select\">\r\n <mat-label>Select a filter</mat-label>\r\n <mat-select formControlName=\"field\" (selectionChange)=\"onFieldChange($index, $event.value)\">\r\n @for (field of config.fields; track field.key) {\r\n <mat-option [value]=\"field.key\">\r\n {{ field.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!-- Operator selection -->\r\n <mat-form-field class=\"operator-select\">\r\n <mat-select formControlName=\"operator\" (selectionChange)=\"onOperatorChange($index, $event.value, rule.value.field)\">\r\n @for (op of getOperatorsForField(rule.value.field); track op.value) {\r\n <mat-option [value]=\"op.value\">\r\n {{ op.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!-- Value input based on field type -->\r\n @switch (getFieldType(rule.value.field)) {\r\n @case ('string') {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n @case ('number') {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput type=\"number\" formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n @case ('date') {\r\n @if (!isOperatorBetween($index)) {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput type=\"date\" [matDatepicker]=\"picker\" formControlName=\"value\" (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n } @else {\r\n <div class=\"date-range-container\">\r\n <mat-form-field class=\"value-input start-date\">\r\n <mat-label>Start date</mat-label>\r\n <input matInput [matDatepicker]=\"startPicker\" formControlName=\"valueStart\" (click)=\"startPicker.open()\" (dateChange)=\"onStartDateChange($index, $event)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"startPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #startPicker></mat-datepicker>\r\n </mat-form-field>\r\n <mat-form-field class=\"value-input end-date\">\r\n <mat-label>End date</mat-label>\r\n <input matInput [matDatepicker]=\"endPicker\" formControlName=\"valueEnd\" (click)=\"endPicker.open()\" [min]=\"getMinEndDate($index)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"endPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #endPicker [startAt]=\"getMinEndDate($index)\"></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n }\r\n }\r\n @case ('boolean') {\r\n <mat-form-field class=\"value-input\">\r\n <mat-select formControlName=\"value\">\r\n <mat-option [value]=\"true\">True</mat-option>\r\n <mat-option [value]=\"false\">False</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n @case ('select') {\r\n <mat-form-field class=\"value-input\">\r\n <mat-select formControlName=\"value\">\r\n @for (option of getFieldOptions(rule.value.field); track option.value) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n @default {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n }\r\n\r\n <!-- Remove rule button -->\r\n <button mat-icon-button class=\"remove-rule-btn\" \r\n (click)=\"removeRule($index)\" \r\n [disabled]=\"rulesArray.length === 1\"\r\n matTooltip=\"Remove filter\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Add rule button -->\r\n <div class=\"add-rule-container\">\r\n <button mat-button color=\"primary\" class=\"add-rule-btn\" (click)=\"addRule()\">\r\n <mat-icon>add</mat-icon> Add a filter\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"query-builder-footer\">\r\n <button mat-button class=\"reset-btn\" (click)=\"resetQuery()\">Reset</button>\r\n <button mat-raised-button color=\"primary\" class=\"apply-btn\" (click)=\"applyQuery()\">Apply filters</button>\r\n </div>\r\n </form>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { QueryGroup, QueryRule } from './query-builder.component';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class QueryBuilderService {\r\n \r\n constructor() { }\r\n\r\n /**\r\n * Converts a query group to a human-readable string\r\n * @param query The query group to convert\r\n * @returns A string representation of the query\r\n */\r\n queryToString(query: QueryGroup): string {\r\n if (!query || !query.rules || query.rules.length === 0) {\r\n return '';\r\n }\r\n\r\n return query.rules\r\n .map((rule: any) => {\r\n if (rule.condition) {\r\n return `(${this.queryToString(rule as QueryGroup)})`;\r\n } else {\r\n return `${rule.field} ${rule.operator} ${rule.value}`;\r\n }\r\n })\r\n .join(` ${query.condition.toUpperCase()} `);\r\n }\r\n\r\n /**\r\n * Converts a query group to a JSON object that can be used in API requests\r\n * @param query The query group to convert\r\n * @returns A JSON object representation of the query\r\n */\r\n queryToJson(query: QueryGroup): any {\r\n if (!query || !query.rules || query.rules.length === 0) {\r\n return {};\r\n }\r\n\r\n return {\r\n condition: query.condition,\r\n rules: query.rules.map((rule: any) => {\r\n if (rule.condition) {\r\n return this.queryToJson(rule as QueryGroup);\r\n } else {\r\n return {\r\n field: rule.field,\r\n operator: rule.operator,\r\n value: rule.value\r\n };\r\n }\r\n })\r\n };\r\n }\r\n\r\n /**\r\n * Validates a query group to ensure all rules have valid values\r\n * @param query The query group to validate\r\n * @returns True if the query is valid, false otherwise\r\n */\r\n isQueryValid(query: QueryGroup): boolean {\r\n if (!query || !query.rules || query.rules.length === 0) {\r\n return false;\r\n }\r\n\r\n return query.rules.every((rule: any) => {\r\n if (rule.condition) {\r\n return this.isQueryValid(rule as QueryGroup);\r\n } else {\r\n return rule.field && rule.operator && rule.value !== undefined && rule.value !== null;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Creates an empty query group\r\n * @param condition The condition to use (and/or)\r\n * @returns An empty query group\r\n */\r\n createEmptyQuery(condition: 'and' | 'or' = 'and'): QueryGroup {\r\n return {\r\n condition,\r\n rules: []\r\n };\r\n }\r\n\r\n /**\r\n * Creates a simple query with a single rule\r\n * @param field The field to filter on\r\n * @param operator The operator to use\r\n * @param value The value to filter by\r\n * @returns A query group with a single rule\r\n */\r\n createSimpleQuery(field: string, operator: string, value: any): QueryGroup {\r\n return {\r\n condition: 'and',\r\n rules: [\r\n {\r\n field,\r\n operator,\r\n value\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { QueryBuilderComponent, QueryConfig, QueryGroup } from './query-builder.component';\r\nimport { QueryBuilderService } from './query-builder.service';\r\nimport { MatCardModule } from '@angular/material/card';\r\n\r\n@Component({\r\n selector: 'sa-query-builder-demo',\r\n standalone: true,\r\n imports: [CommonModule, QueryBuilderComponent, MatCardModule],\r\n template: `\r\n <mat-card>\r\n <mat-card-header>\r\n <mat-card-title>Query Builder Demo</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <sa-query-builder [config]=\"queryConfig\" (queryChange)=\"onQueryChange($event)\"></sa-query-builder>\r\n \r\n <div class=\"query-result\" *ngIf=\"queryString\">\r\n <h3>Query Result:</h3>\r\n <pre>{{ queryString }}</pre>\r\n <h3>JSON:</h3>\r\n <pre>{{ queryJson }}</pre>\r\n <h3>Per-Row Conditions:</h3>\r\n <ul>\r\n <li *ngFor=\"let rule of currentQuery?.rules; let i = index\">\r\n Row {{ i + 1 }}: {{ i === 0 ? 'First row' : rule.condition?.toUpperCase() }}\r\n </li>\r\n </ul>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n `,\r\n styles: [`\r\n .query-result {\r\n margin-top: 20px;\r\n padding: 16px;\r\n background-color: #f5f5f5;\r\n border-radius: 4px;\r\n }\r\n \r\n pre {\r\n white-space: pre-wrap;\r\n word-break: break-all;\r\n background-color: #e0e0e0;\r\n padding: 8px;\r\n border-radius: 4px;\r\n }\r\n `]\r\n})\r\nexport class QueryBuilderDemoComponent {\r\n queryConfig: QueryConfig = {\r\n fields: [\r\n {\r\n key: 'name',\r\n label: 'Name',\r\n type: 'string'\r\n },\r\n {\r\n key: 'age',\r\n label: 'Age',\r\n type: 'number',\r\n operators: ['=', '!=', '>', '<', '>=', '<=', 'between']\r\n },\r\n {\r\n key: 'email',\r\n label: 'Email',\r\n type: 'string',\r\n operators: ['=', '!=', 'contains']\r\n },\r\n {\r\n key: 'birthdate',\r\n label: 'Birth Date',\r\n type: 'date'\r\n },\r\n {\r\n key: 'status',\r\n label: 'Status',\r\n type: 'select',\r\n options: [\r\n { label: 'Active', value: 'active' },\r\n { label: 'Inactive', value: 'inactive' },\r\n { label: 'Pending', value: 'pending' }\r\n ]\r\n },\r\n {\r\n key: 'isVerified',\r\n label: 'Is Verified',\r\n type: 'boolean'\r\n },\r\n {\r\n key: 'lifecycle',\r\n label: 'Lifecycle',\r\n type: 'select',\r\n options: [\r\n { label: 'Active', value: 'active' },\r\n { label: 'At Risk', value: 'at_risk' },\r\n { label: 'Churned', value: 'churned' }\r\n ]\r\n }\r\n ],\r\n operators: [\r\n { value: '=', label: '=' },\r\n { value: '!=', label: '!=' },\r\n { value: '>', label: '>' },\r\n { value: '<', label: '<' },\r\n { value: '>=', label: '>=' },\r\n { value: '<=', label: '<=' },\r\n { value: 'contains', label: 'contains' },\r\n { value: 'between', label: 'between' }\r\n ],\r\n defaultCondition: 'and'\r\n };\r\n\r\n queryString: string = '';\r\n queryJson: string = '';\r\n currentQuery: QueryGroup | null = null;\r\n\r\n constructor(private queryBuilderService: QueryBuilderService) {}\r\n\r\n onQueryChange(query: QueryGroup): void {\r\n this.currentQuery = query;\r\n this.queryString = this.queryBuilderService.queryToString(query);\r\n this.queryJson = JSON.stringify(this.queryBuilderService.queryToJson(query), null, 2);\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport { FieldArrayType, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { CommonModule } from '@angular/common'; \r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { FormGroup, FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { get, keys } from 'lodash';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatNativeDateModule, MatOptionModule } from '@angular/material/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { trigger, state, style, transition, animate, query, stagger } from '@angular/animations';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n\r\n@Component({\r\n selector: 'sa-query-builder-formly',\r\n templateUrl: './query-builder-formly.component.html',\r\n styleUrls: ['./query-builder-formly.component.scss'],\r\n standalone: true,\r\n providers: [],\r\n animations: [\r\n trigger('rowAnimation', [\r\n transition(':enter', [\r\n style({\r\n opacity: 0,\r\n transform: 'translateY(-8px) scale(0.99)'\r\n }),\r\n animate('1100ms cubic-bezier(0.16, 1, 0.3, 1)', style({\r\n opacity: 1,\r\n transform: 'translateY(0) scale(1)'\r\n }))\r\n ]),\r\n transition(':leave', [\r\n style({\r\n opacity: 1,\r\n transform: 'translateY(0) scale(1)'\r\n }),\r\n animate('650ms cubic-bezier(0.4, 0.0, 1, 1)', style({\r\n opacity: 0,\r\n transform: 'translateY(-8px) scale(0.99)'\r\n }))\r\n ])\r\n ]),\r\n trigger('dividerAnimation', [\r\n transition(':enter', [\r\n style({\r\n opacity: 0,\r\n transform: 'scaleX(0)',\r\n transformOrigin: 'left'\r\n }),\r\n animate('1000ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({\r\n opacity: 1,\r\n transform: 'scaleX(1)'\r\n }))\r\n ]),\r\n transition(':leave', [\r\n style({\r\n opacity: 1,\r\n transform: 'scaleX(1)',\r\n transformOrigin: 'left'\r\n }),\r\n animate('600ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({\r\n opacity: 0,\r\n transform: 'scaleX(0)'\r\n }))\r\n ])\r\n ])\r\n ],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n ButtonComponent,\r\n IconComponent,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatOptionModule,\r\n MatIconModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule,\r\n MatTooltipModule\r\n ]\r\n})\r\nexport class QueryBuilderFormlyComponent extends FieldArrayType implements OnInit {\r\n \r\n constructor(private cdr: ChangeDetectorRef) { super(); }\r\n\r\n ngOnInit(): void {\r\n \r\n \r\n }\r\n \r\n getRowCondition(index: number): 'and' | 'or' {\r\n if (index === 0) return 'and'; \r\n \r\n const ruleGroup = this.formControl.at(index) as FormGroup;\r\n return ruleGroup.get('logicalOperator')?.value || 'and';\r\n }\r\n\r\n /**\r\n * Sets the condition for a specific row\r\n * @param index The index of the row\r\n * @param condition The condition to set (and/or)\r\n */\r\n setRowCondition(index: number, condition: 'and' | 'or'): void {\r\n if (index === 0) return; // First row doesn't have a logical operator\r\n \r\n const ruleGroup = this.formControl.at(index) as FormGroup;\r\n ruleGroup.get('logicalOperator')?.setValue(condition);\r\n }\r\n\r\n copyRule(): void {\r\n \r\n }\r\n\r\n createField(field: FormlyFieldConfig): FormlyFieldConfig {\r\n if(field.type === 'dynamic-type' || field.type === '') {\r\n field.type = 'sa-input';\r\n field.props.type = 'text';\r\n field.props.placeholder = 'Enter/Select';\r\n }\r\n return field;\r\n }\r\n\r\n\r\n\r\n\r\n // reset(): void {\r\n // this.formControl.reset();\r\n // }\r\n\r\n /**\r\n * Duplicates the row at the given index.\r\n * A deep–clone of that row’s model is inserted right after the original row.\r\n */\r\n // Helper method to backup all date range fields\r\n private backupAllDateRangeFields(): any[] {\r\n const backups: any[] = [];\r\n \r\n for (let i = 0; i < this.field.fieldGroup.length; i++) {\r\n const rowFieldGroup = this.field.fieldGroup[i];\r\n const filterValueField = rowFieldGroup?.fieldGroup?.find((f: any) => f.key === 'filterValue');\r\n \r\n if (filterValueField?.props?.['showDateRange']) {\r\n backups[i] = {\r\n props: { ...filterValueField.props },\r\n fieldGroup: filterValueField.fieldGroup ? filterValueField.fieldGroup.map((field: any) => ({\r\n key: field.key,\r\n type: field.type,\r\n className: field.className,\r\n props: { ...field.props }\r\n // Note: NOT backing up formControl - let Angular manage it\r\n })) : null,\r\n type: filterValueField.type\r\n // Note: NOT backing up formControl - let Angular manage it\r\n };\r\n }\r\n }\r\n \r\n console.log('🎯 Backed up', backups.filter(b => b).length, 'date range fields');\r\n return backups;\r\n }\r\n\r\n // Helper method to restore all date range fields\r\n private restoreAllDateRangeFields(backups: any[]): void {\r\n let restoredCount = 0;\r\n \r\n for (let i = 0; i < backups.length; i++) {\r\n if (backups[i]) {\r\n const rowFieldGroup = this.field.fieldGroup[i];\r\n const filterValueField = rowFieldGroup?.fieldGroup?.find((f: any) => f.key === 'filterValue');\r\n \r\n if (filterValueField) {\r\n console.log(`🎯 Restoring row ${i} - before:`, {\r\n hasShowDateRange: !!filterValueField.props?.['showDateRange'],\r\n hasFieldGroup: !!filterValueField.fieldGroup,\r\n fieldGroupLength: filterValueField.fieldGroup?.length\r\n });\r\n \r\n filterValueField.props = backups[i].props;\r\n filterValueField.fieldGroup = backups[i].fieldGroup;\r\n filterValueField.type = backups[i].type;\r\n \r\n // Reconnect FormControls to fieldGroup items if it's a FormGroup\r\n if (filterValueField.formControl && filterValueField.fieldGroup) {\r\n const formGroup = filterValueField.formControl;\r\n if (formGroup.get) { // Check if it's a FormGroup\r\n filterValueField.fieldGroup.forEach((field: any) => {\r\n if (field.key) {\r\n field.formControl = formGroup.get(field.key);\r\n }\r\n });\r\n console.log(`🎯 Reconnected FormControls for row ${i} fieldGroup`);\r\n }\r\n }\r\n \r\n console.log(`🎯 Restoring row ${i} - after:`, {\r\n hasShowDateRange: !!filterValueField.props?.['showDateRange'],\r\n hasFieldGroup: !!filterValueField.fieldGroup,\r\n fieldGroupLength: filterValueField.fieldGroup?.length\r\n });\r\n \r\n restoredCount++;\r\n } else {\r\n console.log(`❌ Could not find filterValueField for row ${i}`);\r\n }\r\n }\r\n }\r\n console.log(`🎯 Restored ${restoredCount} date range fields`);\r\n }\r\n\r\n // Override add method to protect existing date range fields\r\n // override add(i?: number, initialModel?: any): void {\r\n // console.log('🎯 Add operation started - protecting existing date range fields');\r\n \r\n // // BACKUP ALL DATE RANGE FIELDS BEFORE add() operation\r\n // const allDateRangeBackups = this.backupAllDateRangeFields();\r\n \r\n // // Call the parent add method\r\n // super.add(i, initialModel);\r\n \r\n // // RESTORE ALL DATE RANGE FIELDS after add() with multiple attempts\r\n // setTimeout(() => {\r\n // console.log('🎯 First restoration attempt');\r\n // this.restoreAllDateRangeFields(allDateRangeBackups);\r\n // }, 0);\r\n \r\n // setTimeout(() => {\r\n // console.log('🎯 Second restoration attempt (after handleOperatorChange)');\r\n // this.restoreAllDateRangeFields(allDateRangeBackups);\r\n // }, 100);\r\n \r\n // setTimeout(() => {\r\n // console.log('🎯 Final restoration attempt');\r\n // this.restoreAllDateRangeFields(allDateRangeBackups);\r\n // }, 300);\r\n // }\r\n isRowValidForCopy(index: number): boolean {\r\n const rowModel = this.formControl.at(index)?.value;\r\n if (!rowModel || typeof rowModel !== 'object') return false;\r\n\r\n // Check if required fields are filled: attribute, operators, and either filterValue or filterValueDateRange\r\n const hasAttribute = rowModel.attribute && typeof rowModel.attribute === 'object';\r\n const hasOperator = rowModel.operators && rowModel.operators !== '';\r\n \r\n // Check filterValue (for non-date-range fields) - can be empty string, but must be defined\r\n const hasFilterValue = 'filterValue' in rowModel && \r\n rowModel.filterValue !== undefined && \r\n rowModel.filterValue !== null;\r\n \r\n // Check filterValueDateRange (for date range fields with BETWEEN operator)\r\n const hasDateRangeValue = rowModel.filterValueDateRange && \r\n typeof rowModel.filterValueDateRange === 'object' &&\r\n (rowModel.filterValueDateRange.startDate || rowModel.filterValueDateRange.endDate);\r\n \r\n // Row is valid if it has attribute, operator, and at least one value field\r\n return hasAttribute && hasOperator && (hasFilterValue || hasDateRangeValue);\r\n }\r\n \r\n reset() {\r\n // If there are no rows, add one empty row\r\n if (!this.field.fieldGroup || this.field.fieldGroup.length === 0) {\r\n this.add();\r\n return;\r\n }\r\n\r\n // Delete all rows except the first one - go backwards to avoid index issues\r\n while (this.formControl.length > 1) {\r\n const lastIndex = this.formControl.length - 1;\r\n this.formControl.removeAt(lastIndex);\r\n this.field.fieldGroup?.splice(lastIndex, 1);\r\n }\r\n\r\n // Update the model to reflect only one row\r\n if (this.model && Array.isArray(this.model)) {\r\n this.model.splice(1, this.model.length - 1);\r\n }\r\n\r\n // Clear the first row's values\r\n const firstRowForm = this.formControl.at(0) as FormGroup;\r\n if (firstRowForm) {\r\n firstRowForm.reset({\r\n logicalOperator: 'and',\r\n attribute: null,\r\n operators: null,\r\n filterValue: null,\r\n filterValueDateRange: null\r\n });\r\n }\r\n\r\n // Also clear the model's first row\r\n if (this.model && Array.isArray(this.model) && this.model[0]) {\r\n this.model[0] = {\r\n logicalOperator: 'and',\r\n attribute: null,\r\n operators: null,\r\n filterValue: null,\r\n filterValueDateRange: null\r\n };\r\n }\r\n }\r\n\r\n getFilterType(subField: FormlyFieldConfig): string | undefined {\r\n const parentValue = get(subField, 'formControl.parent.value');\r\n if (!parentValue) return undefined;\r\n\r\n // Look through all keys of the parent value\r\n for (const key of keys(parentValue)) {\r\n const val = parentValue[key];\r\n if (val && typeof val === 'object' && 'filterType' in val) {\r\n return get(val, 'filterType');\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Helper method to restore a simple field value\r\n */\r\n private restoreSimpleField(formGroup: FormGroup, fieldName: string, value: any, backupKey?: string): void {\r\n const ctrl = formGroup?.get(fieldName);\r\n if (ctrl && value !== undefined) {\r\n if (backupKey && !formGroup.value[backupKey]) {\r\n formGroup.patchValue({ [backupKey]: value });\r\n }\r\n ctrl.setValue(value);\r\n }\r\n }\r\n\r\n /**\r\n * Helper method to restore a fieldGroup with nested controls (like date range)\r\n */\r\n private restoreFieldGroup(formGroup: FormGroup, fieldName: string, value: any): void {\r\n const ctrl = formGroup?.get(fieldName);\r\n if (ctrl && value && typeof value === 'object') {\r\n Object.keys(value).forEach(key => {\r\n if (value[key] !== undefined) {\r\n ctrl.get(key)?.setValue(value[key]);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Duplicates the row at the given index.\r\n * A deep–clone of that row's model is inserted right after the original row.\r\n */\r\n copy(index: number): void { \r\n const sourceRowForm = this.formControl.at(index) as FormGroup;\r\n if (!sourceRowForm) return;\r\n\r\n // STEP 1: Capture complete field configuration from source row\r\n const sourceFieldGroup = this.field.fieldGroup?.[index];\r\n if (!sourceFieldGroup) return;\r\n\r\n // Capture field configurations (type, props, options) for each field\r\n const fieldConfigs = new Map<string, any>();\r\n sourceFieldGroup.fieldGroup?.forEach((field: FormlyFieldConfig) => {\r\n if (field.key) {\r\n const config = {\r\n type: field.type,\r\n props: JSON.parse(JSON.stringify(field.props || {})),\r\n className: field.className\r\n };\r\n fieldConfigs.set(field.key as string, config);\r\n }\r\n });\r\n\r\n // STEP 2: Preserve all existing row values and configurations\r\n const preservedRows = new Map<number, any>();\r\n for (let i = 0; i < this.formControl.length; i++) {\r\n const rowForm = this.formControl.at(i) as FormGroup;\r\n const rowFieldGroup = this.field.fieldGroup?.[i];\r\n \r\n if (rowForm && rowFieldGroup) {\r\n const rowFieldConfigs = new Map<string, any>();\r\n rowFieldGroup.fieldGroup?.forEach((field: FormlyFieldConfig) => {\r\n if (field.key) {\r\n const config = {\r\n type: field.type,\r\n props: JSON.parse(JSON.stringify(field.props || {})),\r\n className: field.className\r\n };\r\n rowFieldConfigs.set(field.key as string, config);\r\n }\r\n });\r\n \r\n preservedRows.set(i, {\r\n values: rowForm.getRawValue(),\r\n fieldConfigs: rowFieldConfigs\r\n });\r\n }\r\n }\r\n\r\n // STEP 3: Get raw values from source row\r\n const sourceValues = sourceRowForm.getRawValue();\r\n\r\n // Capture actual values (especially Date objects)\r\n const filterValueCtrl = sourceRowForm.get('filterValue');\r\n const actualFilterValue = filterValueCtrl?.value;\r\n \r\n const dateRangeCtrl = sourceRowForm.get('filterValueDateRange');\r\n const actualDateRange = dateRangeCtrl?.value;\r\n\r\n // Clone the model\r\n const clonedModel = JSON.parse(JSON.stringify(sourceValues));\r\n\r\n // Preserve actual Date values\r\n const capturedFilterValue = actualFilterValue instanceof Date \r\n ? new Date(actualFilterValue.getTime()) \r\n : actualFilterValue;\r\n \r\n const capturedDateRange = actualDateRange && typeof actualDateRange === 'object'\r\n ? JSON.parse(JSON.stringify(actualDateRange))\r\n : actualDateRange;\r\n\r\n // If copying the first row, add logical operator\r\n if (index === 0) {\r\n clonedModel.logicalOperator = 'and';\r\n }\r\n\r\n // STEP 4: Mark that we're in a copy operation to prevent hooks from interfering\r\n (this as any)._isCopying = true;\r\n if (this.field?.options?.formState) {\r\n this.field.options.formState._isCopying = true;\r\n }\r\n \r\n // Insert the new row\r\n this.add(index + 1, clonedModel);\r\n // STEP 5: IMMEDIATELY apply field configurations to ALL rows\r\n // Since hooks are disabled, we need to manually set the correct field types\r\n // Do this synchronously before any rendering\r\n if (this.field.fieldGroup) {\r\n for (let i = 0; i < this.field.fieldGroup.length; i++) {\r\n const rowFieldGroup = this.field.fieldGroup[i];\r\n const originalIndex = i > index ? i - 1 : (i === index + 1 ? index : i);\r\n const configSource = i === index + 1 ? fieldConfigs : preservedRows.get(originalIndex)?.fieldConfigs;\r\n \r\n if (rowFieldGroup && configSource) {\r\n rowFieldGroup.fieldGroup?.forEach((field: FormlyFieldConfig) => {\r\n if (field.key) {\r\n const config = configSource.get(field.key as string);\r\n if (config) {\r\n field.type = config.type;\r\n // Clean the props - remove internal state that might interfere\r\n const cleanProps = { ...config.props };\r\n // Reset internal state for ng-select fields\r\n if (field.type === 'sa-ng-select') {\r\n if (cleanProps.searchTerm !== undefined) {\r\n cleanProps.searchTerm = '';\r\n }\r\n // Ensure loading is false so placeholder shows\r\n if (cleanProps.options && cleanProps.options.length > 0) {\r\n cleanProps.loading = false;\r\n }\r\n }\r\n field.props = { ...field.props, ...cleanProps };\r\n field.className = config.className;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n // STEP 6: Apply values to the copied row after a small delay\r\n setTimeout(() => {\r\n const copiedRowIndex = index + 1;\r\n const rowForm = this.formControl.at(copiedRowIndex) as FormGroup;\r\n const rowFieldGroup = this.field.fieldGroup?.[copiedRowIndex];\r\n \r\n if (!rowForm || !rowFieldGroup) {\r\n console.error('Could not find copied row');\r\n return;\r\n }\r\n \r\n // Set the actual values for the copied row (configs already applied synchronously)\r\n setTimeout(() => {\r\n const filterValueCtrl = rowForm.get('filterValue');\r\n const dateRangeCtrl = rowForm.get('filterValueDateRange');\r\n \r\n if (capturedFilterValue !== null && capturedFilterValue !== undefined && filterValueCtrl) {\r\n filterValueCtrl.setValue(capturedFilterValue, { emitEvent: true });\r\n filterValueCtrl.markAsTouched();\r\n filterValueCtrl.updateValueAndValidity();\r\n }\r\n \r\n if (capturedDateRange && dateRangeCtrl) {\r\n dateRangeCtrl.patchValue(capturedDateRange, { emitEvent: true });\r\n \r\n }\r\n }, 50);\r\n \r\n // Verify that existing rows were not affected\r\n setTimeout(() => {\r\n \r\n // Log all row values for debugging\r\n for (let i = 0; i < this.formControl.length; i++) {\r\n const rowForm = this.formControl.at(i) as FormGroup;\r\n const filterValue = rowForm?.get('filterValue')?.value;\r\n }\r\n \r\n for (let i = 0; i < this.formControl.length; i++) {\r\n if (i === copiedRowIndex) continue; // Skip the copied row\r\n \r\n const originalIndex = i > index ? i - 1 : i;\r\n const preserved = preservedRows.get(originalIndex);\r\n const currentRowFieldGroup = this.field.fieldGroup?.[i];\r\n \r\n if (preserved && currentRowFieldGroup) {\r\n currentRowFieldGroup.fieldGroup?.forEach((field: FormlyFieldConfig) => {\r\n if (field.key === 'filterValue') {\r\n const preservedConfig = preserved.fieldConfigs.get(field.key as string);\r\n if (preservedConfig) {\r\n const typeMatches = field.type === preservedConfig.type;\r\n const optionsMatch = JSON.stringify(field.props?.options) === JSON.stringify(preservedConfig.props?.options);\r\n \r\n if (!typeMatches || !optionsMatch) {\r\n \r\n // If existing row was affected, restore it\r\n if ((field as any)._componentRefs) {\r\n (field as any)._componentRefs = [];\r\n }\r\n field.type = preservedConfig.type;\r\n field.props = { ...field.props, ...preservedConfig.props };\r\n field.className = preservedConfig.className;\r\n \r\n setTimeout(() => {\r\n field?.options?.fieldChanges?.next({\r\n type: 'type',\r\n field,\r\n value: preservedConfig.type,\r\n });\r\n this.cdr.detectChanges();\r\n }, 10);\r\n } else {\r\n const optionsCount = Array.isArray(field.props?.options) ? field.props.options.length : 0;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }, 150);\r\n \r\n // Clear the copying flag after restoration is complete\r\n setTimeout(() => {\r\n delete (this as any)._isCopying;\r\n if (this.field?.options?.formState) {\r\n delete this.field.options.formState._isCopying;\r\n }\r\n console.log('=== COPY COMPLETED ===');\r\n }, 200);\r\n }, 100);\r\n }\r\n\r\n}\r\n","<div class=\"sa-query-builder-container\">\r\n <div class=\"query-builder-body\">\r\n @for(row of field.fieldGroup; track row.id || $index; let last = $last) {\r\n @if($index > 0 && ((row?.model?.logicalOperator | uppercase) === 'AND' || row?.model?.logicalOperator === undefined)){\r\n <div class=\"segment-divider\" [@dividerAnimation]></div>\r\n }\r\n <div class=\"row align-items-baseline query-row\" \r\n [class.or-row]=\"(row?.model?.logicalOperator | uppercase) === 'OR'\"\r\n [class.before-or-row]=\"field?.fieldGroup && $index < ((field.fieldGroup?.length ?? 0) - 1) && (field.fieldGroup?.[$index + 1]?.model?.logicalOperator | uppercase) === 'OR'\"\r\n [@rowAnimation]>\r\n @if ($index === 0) {\r\n <span class=\"where-text flex-1\">Where the:</span>\r\n }\r\n @for (ruleField of row.fieldGroup; track ruleField.key || $index) {\r\n @if(!!ruleField?.props?.['hasDynamicType']){\r\n @switch (getFilterType(ruleField)) {\r\n @case ('STRING') {\r\n <formly-field [field]=\"ruleField\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n @case ('NUMBER') {\r\n <formly-field [field]=\"ruleField\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n @case ('BOOLEAN') {\r\n <formly-field [field]=\"ruleField\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n @case ('CURRENCY') {\r\n <formly-field [field]=\"ruleField\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n @case ('DATE') {\r\n <formly-field [field]=\"ruleField\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n @case ('SELECT') {\r\n <formly-field [field]=\"ruleField\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n @default {\r\n <formly-field [field]=\"createField(ruleField)\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n }\r\n }@else{\r\n <formly-field class=\"col\" [field]=\"ruleField\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n }\r\n <div class=\"rule-icon-container\">\r\n @if(props?.['showCopyButton']){\r\n <sa-icon icon=\"copyOutlined\" size=\"20\" matTooltip=\"Copy\" class=\"copy-icon pointer {{(field?.fieldGroup?.length === (props?.['maxRows'] || 5)) || !isRowValidForCopy($index) ? 'disabled-part' : ''}}\" (click)=\"isRowValidForCopy($index) && copy($index)\"></sa-icon>\r\n }\r\n @if(props?.['showDeleteRowButton']){\r\n <sa-icon icon=\"deleteIcon\" size=\"20\" matTooltip=\"Delete\" class=\"delete-icon pointer {{field?.fieldGroup?.length === (1) ? 'disabled-part' : ''}}\" (click)=\"remove($index)\"></sa-icon>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <!-- Buttons -->\r\n <div class=\"rule-button-container\">\r\n @if(props?.['showAddFilterButton']){\r\n <sa-button icon=\"add\" iconPosition=\"left\" text=\"Add filter\" (onClickEvent)=\"add()\"\r\n [state]=\"field?.fieldGroup?.length === (props?.['maxRows'] || 5) ? 'disabled' : 'default'\"\r\n type=\"outline\" size=\"medium\">\r\n </sa-button>\r\n }\r\n @if(props?.['showCount']){\r\n <span class=\"filters-count\">{{field?.fieldGroup?.length}}/{{props?.['maxRows'] || 5}} filters</span>\r\n }\r\n @if(props?.['showResetButton']){\r\n <sa-button iconPosition=\"left\" text=\"Reset\" (onClickEvent)=\"reset()\" type=\"primary\" size=\"medium\">\r\n </sa-button>\r\n }\r\n </div>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output, ViewChild, ElementRef, AfterViewInit, OnDestroy, HostListener } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { Observable, Subject, of } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, switchMap, takeUntil } from 'rxjs/operators';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\n\r\nexport interface TextareaQueryConfig {\r\n fields: TextareaQueryField[];\r\n operators: TextareaQueryOperator[];\r\n defaultCondition?: 'and' | 'or';\r\n}\r\n\r\nexport interface TextareaQueryField {\r\n key: string;\r\n label: string;\r\n type: string;\r\n description?: string;\r\n unit?: string;\r\n options?: { label: string; value: any }[];\r\n operators?: string[];\r\n}\r\n\r\nexport interface TextareaQueryOperator {\r\n value: string;\r\n label: string;\r\n description?: string;\r\n types?: string[];\r\n}\r\n\r\nexport interface TextareaQueryGroup {\r\n condition: 'and' | 'or';\r\n rules: (TextareaQueryRule | TextareaQueryGroup)[];\r\n}\r\n\r\nexport interface TextareaQueryRule {\r\n field: string;\r\n operator: string;\r\n value: any;\r\n condition?: 'and' | 'or';\r\n}\r\n\r\nexport interface SuggestionItem {\r\n id: string;\r\n name: string;\r\n label: string;\r\n description?: string;\r\n unit?: string;\r\n value: string;\r\n type: 'field' | 'operator' | 'value' | 'condition';\r\n}\r\n\r\nexport interface DropdownPosition {\r\n top: number;\r\n left: number;\r\n}\r\n\r\n@Component({\r\n selector: 'sa-query-builder-textarea',\r\n templateUrl: './query-builder-textarea.component.html',\r\n styleUrls: ['./query-builder-textarea.component.scss'],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatDividerModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule\r\n ]\r\n})\r\nexport class QueryBuilderTextareaComponent implements OnInit, AfterViewInit, OnDestroy {\r\n @Input() config: TextareaQueryConfig = {\r\n fields: [],\r\n operators: [\r\n { value: '=', label: '=', description: 'Equal to' },\r\n { value: '!=', label: '!=', description: 'Not equal to' },\r\n { value: '>', label: '>', description: 'Greater than' },\r\n { value: '<', label: '<', description: 'Less than' },\r\n { value: '>=', label: '>=', description: 'Greater than or equal to' },\r\n { value: '<=', label: '<=', description: 'Less than or equal to' },\r\n { value: 'contains', label: 'contains', description: 'Contains text' }\r\n ],\r\n defaultCondition: 'and'\r\n };\r\n\r\n @Output() queryChange = new EventEmitter<TextareaQueryGroup>();\r\n @Output() suggestionSelected = new EventEmitter<SuggestionItem>();\r\n \r\n @ViewChild('queryTextarea') queryTextarea!: ElementRef<HTMLTextAreaElement>;\r\n @ViewChild('dropdown') dropdown!: ElementRef<HTMLDivElement>;\r\n \r\n form: FormGroup;\r\n suggestions: SuggestionItem[] = [];\r\n filteredSuggestions: SuggestionItem[] = [];\r\n isDropdownVisible = false;\r\n selectedIndex = 0;\r\n dropdownPosition: DropdownPosition = { top: 0, left: 0 };\r\n selectedSuggestion: SuggestionItem | null = null;\r\n \r\n // Date picker state\r\n isDatePickerVisible = false;\r\n datePickerPosition: DropdownPosition = { top: 0, left: 0 };\r\n currentDateField: string | null = null;\r\n currentDateOperator: string | null = null;\r\n showDualDatePicker = false;\r\n firstDateSelected: Date | null = null;\r\n secondDateSelected: Date | null = null;\r\n \r\n private destroy$ = new Subject<void>();\r\n private searchSubject = new Subject<string>();\r\n private cursorPosition = 0;\r\n private currentContext: 'field' | 'operator' | 'value' | 'condition' = 'field';\r\n private lastSelectedField: string | null = null;\r\n private readonly DEBOUNCE_DELAY = 10;\r\n private readonly MAX_SUGGESTIONS = 10;\r\n \r\n constructor(private fb: FormBuilder) {\r\n this.form = this.fb.group({\r\n queryText: ['']\r\n });\r\n }\r\n \r\n // Keyboard event handler for dropdown navigation\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: Event): void {\r\n if (!this.dropdown?.nativeElement.contains(event.target as Node) && \r\n !this.queryTextarea?.nativeElement.contains(event.target as Node)) {\r\n this.hideDropdown();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initSuggestions();\r\n this.setupSearchStream();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.cursorPosition = 0;\r\n this.setupTextareaEvents();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n \r\n private setupSearchStream(): void {\r\n this.searchSubject.pipe(\r\n debounceTime(this.DEBOUNCE_DELAY),\r\n distinctUntilChanged(),\r\n switchMap(query => this.searchSuggestions(query)),\r\n takeUntil(this.destroy$)\r\n ).subscribe(suggestions => {\r\n this.filteredSuggestions = suggestions;\r\n this.isDropdownVisible = suggestions.length > 0;\r\n this.selectedIndex = 0;\r\n this.updateDropdownPosition();\r\n });\r\n }\r\n\r\n private setupTextareaEvents(): void {\r\n if (!this.queryTextarea) return;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n \r\n // Handle input events\r\n textarea.addEventListener('input', this.onTextareaInput.bind(this));\r\n textarea.addEventListener('keydown', this.onKeyDown.bind(this));\r\n textarea.addEventListener('click', this.updateCursorPosition.bind(this));\r\n textarea.addEventListener('keyup', this.updateCursorPosition.bind(this));\r\n textarea.addEventListener('blur', this.onTextareaBlur.bind(this));\r\n }\r\n\r\n private initSuggestions(): void {\r\n // Add field suggestions\r\n this.config.fields.forEach(field => {\r\n this.suggestions.push({\r\n id: field.key,\r\n name: field.label,\r\n label: field.label,\r\n description: field.description || `${field.type} field`,\r\n unit: field.unit,\r\n value: field.key,\r\n type: 'field'\r\n });\r\n });\r\n \r\n // Add operator suggestions\r\n this.config.operators.forEach(op => {\r\n this.suggestions.push({\r\n id: op.value,\r\n name: op.label,\r\n label: op.label,\r\n description: op.description || `${op.label} operator`,\r\n value: op.value,\r\n type: 'operator'\r\n });\r\n });\r\n \r\n // Add condition suggestions\r\n this.suggestions.push(\r\n {\r\n id: 'AND',\r\n name: 'AND',\r\n label: 'AND',\r\n description: 'Logical AND operator',\r\n value: 'AND',\r\n type: 'condition'\r\n },\r\n {\r\n id: 'OR',\r\n name: 'OR',\r\n label: 'OR',\r\n description: 'Logical OR operator',\r\n value: 'OR',\r\n type: 'condition'\r\n }\r\n );\r\n }\r\n \r\n private updateCursorPosition(event?: Event): void {\r\n if (!this.queryTextarea) return;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n this.cursorPosition = textarea.selectionStart || 0;\r\n this.updateContext();\r\n }\r\n\r\n /**\r\n * Gets text up to the cursor position\r\n */\r\n getTillCursor(): string {\r\n if (!this.queryTextarea) return '';\r\n const textarea = this.queryTextarea.nativeElement;\r\n const fullVal = textarea.value || '';\r\n const cursorPos = Math.max(0, Math.min(this.cursorPosition, fullVal.length));\r\n return fullVal.substring(0, cursorPos);\r\n }\r\n\r\n /**\r\n * Gets the last word before cursor position\r\n */\r\n getLastWordBeforeCursor(): string {\r\n const tillCursor = this.getTillCursor();\r\n \r\n // Special handling for AND/OR conditions\r\n if (tillCursor.toLowerCase().endsWith(' and')) {\r\n return 'and';\r\n }\r\n if (tillCursor.toLowerCase().endsWith(' or')) {\r\n return 'or';\r\n }\r\n \r\n // Split by spaces, operators, and special characters\r\n const pattern = /\\sand\\s|\\sor\\s|[^a-z0-9 ]|\\n/gi;\r\n const parts = tillCursor.split(pattern);\r\n if (parts.length) return parts[parts.length - 1].trim();\r\n return '';\r\n }\r\n\r\n /**\r\n * Inserts text at the position of the current word\r\n */\r\n insertWord(text: string, appendOnly: boolean = false): void {\r\n if (!this.queryTextarea) return;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const fullVal = textarea.value || '';\r\n const cursorPos = this.cursorPosition;\r\n const tillCursor = fullVal.substring(0, cursorPos);\r\n const lastWord = this.getLastWordBeforeCursor();\r\n \r\n // Find position to insert text\r\n let insertPos = cursorPos;\r\n if (!appendOnly && lastWord) {\r\n const lastWordIndex = tillCursor.lastIndexOf(lastWord);\r\n if (lastWordIndex !== -1) {\r\n insertPos = lastWordIndex;\r\n }\r\n }\r\n \r\n // Split text and create new value\r\n const before = fullVal.substring(0, insertPos);\r\n const after = fullVal.substring(cursorPos);\r\n const newVal = before + text + after;\r\n \r\n // Calculate new cursor position\r\n const newPos = before.length + text.length;\r\n \r\n // Update textarea and form control\r\n textarea.value = newVal;\r\n this.form.get('queryText')?.setValue(newVal, { emitEvent: false });\r\n \r\n // Set cursor position\r\n textarea.focus();\r\n textarea.selectionStart = newPos;\r\n textarea.selectionEnd = newPos;\r\n this.cursorPosition = newPos;\r\n \r\n // Only parse query when explicitly needed (like after selection)\r\n // Don't auto-parse to avoid infinite loops\r\n }\r\n\r\n private insertSuggestion(suggestion: SuggestionItem): void {\r\n const textarea = this.queryTextarea?.nativeElement;\r\n if (!textarea) return;\r\n \r\n const text = textarea.value;\r\n const currentWord = this.getCurrentWord();\r\n const wordBounds = this.getCurrentWordBounds();\r\n \r\n // Determine what to insert\r\n let insertText = suggestion.value;\r\n let additionalText = '';\r\n \r\n // Add appropriate spacing and formatting based on suggestion type\r\n switch (suggestion.type) {\r\n case 'field':\r\n additionalText = ' ';\r\n break;\r\n case 'operator':\r\n additionalText = ' ';\r\n break;\r\n case 'value':\r\n // No additional text for values\r\n break;\r\n case 'condition':\r\n insertText = `\\n${suggestion.value} `;\r\n break;\r\n }\r\n \r\n // Replace the current word with the suggestion\r\n const newText = text.substring(0, wordBounds.start) + \r\n insertText + additionalText + \r\n text.substring(wordBounds.end);\r\n \r\n // Update textarea\r\n textarea.value = newText;\r\n \r\n // Set cursor position\r\n const newCursorPos = wordBounds.start + insertText.length + additionalText.length;\r\n textarea.setSelectionRange(newCursorPos, newCursorPos);\r\n this.cursorPosition = newCursorPos;\r\n \r\n // Update form control\r\n this.form.get('queryText')?.setValue(newText, { emitEvent: false });\r\n \r\n // Update context and parse query\r\n this.updateContext();\r\n this.parseAndEmitQuery(newText);\r\n }\r\n\r\n onApply(): void {\r\n const queryText = this.form.get('queryText')?.value || '';\r\n this.hideDropdown();\r\n this.parseAndEmitQuery(queryText);\r\n }\r\n\r\n onReset(): void {\r\n this.form.get('queryText')?.setValue('');\r\n this.cursorPosition = 0;\r\n this.currentContext = 'field';\r\n this.lastSelectedField = null;\r\n this.hideDropdown();\r\n \r\n if (this.queryTextarea) {\r\n this.queryTextarea.nativeElement.focus();\r\n }\r\n \r\n this.queryChange.emit({\r\n condition: this.config.defaultCondition || 'and',\r\n rules: []\r\n });\r\n }\r\n\r\n private onTextareaInput(event: Event): void {\r\n const target = event.target as HTMLTextAreaElement;\r\n if (!target) return;\r\n \r\n const value = target.value;\r\n this.cursorPosition = target.selectionStart || 0;\r\n \r\n // Update form control without triggering events to avoid loops\r\n this.form.get('queryText')?.setValue(value, { emitEvent: false });\r\n \r\n // Update context and trigger search\r\n this.updateContext();\r\n const currentWord = this.getCurrentWord();\r\n this.searchSubject.next(currentWord);\r\n \r\n // Parse and emit query\r\n this.parseAndEmitQuery(value);\r\n }\r\n\r\n private onTextareaBlur(event: FocusEvent): void {\r\n // Delay hiding dropdown to allow for clicks\r\n setTimeout(() => {\r\n if (!this.dropdown?.nativeElement.contains(document.activeElement)) {\r\n this.hideDropdown();\r\n }\r\n }, 150);\r\n }\r\n\r\n private updateContext(): void {\r\n if (!this.queryTextarea) return;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const text = textarea.value;\r\n const beforeCursor = text.substring(0, this.cursorPosition);\r\n \r\n // Enhanced context detection\r\n const currentWord = this.getCurrentWord();\r\n const previousTokens = this.getPreviousTokens(beforeCursor);\r\n \r\n if (this.isAfterOperator(previousTokens)) {\r\n this.currentContext = 'value';\r\n } else if (this.isAfterField(previousTokens)) {\r\n this.currentContext = 'operator';\r\n this.lastSelectedField = this.getLastField(previousTokens);\r\n } else if (this.isAfterValue(previousTokens)) {\r\n this.currentContext = 'condition';\r\n } else {\r\n this.currentContext = 'field';\r\n }\r\n }\r\n\r\n private filterSuggestionsByContext(query: string): SuggestionItem[] {\r\n const normalizedQuery = query.toLowerCase().trim();\r\n \r\n // Get context-appropriate suggestions\r\n let contextSuggestions = this.getContextSuggestions();\r\n \r\n // Filter by query if provided\r\n if (normalizedQuery) {\r\n contextSuggestions = contextSuggestions.filter(suggestion => \r\n suggestion.name.toLowerCase().includes(normalizedQuery) ||\r\n suggestion.label.toLowerCase().includes(normalizedQuery) ||\r\n suggestion.value.toLowerCase().includes(normalizedQuery) ||\r\n (suggestion.description && suggestion.description.toLowerCase().includes(normalizedQuery))\r\n );\r\n }\r\n \r\n // Sort by relevance (exact matches first, then starts with, then contains)\r\n contextSuggestions.sort((a, b) => {\r\n const aScore = this.calculateRelevanceScore(a, normalizedQuery);\r\n const bScore = this.calculateRelevanceScore(b, normalizedQuery);\r\n return bScore - aScore;\r\n });\r\n \r\n return contextSuggestions.slice(0, this.MAX_SUGGESTIONS);\r\n }\r\n\r\n private getContextSuggestions(): SuggestionItem[] {\r\n switch (this.currentContext) {\r\n case 'field':\r\n return this.suggestions.filter(s => s.type === 'field');\r\n case 'operator':\r\n return this.getOperatorSuggestions();\r\n case 'value':\r\n return this.getValueSuggestions();\r\n case 'condition':\r\n return this.suggestions.filter(s => s.type === 'condition');\r\n default:\r\n return this.suggestions;\r\n }\r\n }\r\n\r\n private getOperatorSuggestions(): SuggestionItem[] {\r\n if (!this.lastSelectedField) {\r\n return this.suggestions.filter(s => s.type === 'operator');\r\n }\r\n \r\n const field = this.config.fields.find(f => f.key === this.lastSelectedField);\r\n if (!field || !field.operators) {\r\n return this.suggestions.filter(s => s.type === 'operator');\r\n }\r\n \r\n return this.suggestions.filter(s => \r\n s.type === 'operator' && field.operators!.includes(s.value)\r\n );\r\n }\r\n\r\n private getValueSuggestions(): SuggestionItem[] {\r\n if (!this.lastSelectedField) return [];\r\n \r\n const field = this.config.fields.find(f => f.key === this.lastSelectedField);\r\n if (!field || !field.options) return [];\r\n \r\n return field.options.map(option => ({\r\n id: `${field.key}_${option.value}`,\r\n name: option.label,\r\n label: option.label,\r\n value: option.value.toString(),\r\n type: 'value' as const\r\n }));\r\n }\r\n\r\n private calculateRelevanceScore(suggestion: SuggestionItem, query: string): number {\r\n if (!query) return 1;\r\n \r\n const name = suggestion.name.toLowerCase();\r\n const label = suggestion.label.toLowerCase();\r\n const value = suggestion.value.toLowerCase();\r\n \r\n // Exact match gets highest score\r\n if (name === query || label === query || value === query) return 100;\r\n \r\n // Starts with gets high score\r\n if (name.startsWith(query) || label.startsWith(query) || value.startsWith(query)) return 50;\r\n \r\n // Contains gets medium score\r\n if (name.includes(query) || label.includes(query) || value.includes(query)) return 25;\r\n \r\n // Description match gets low score\r\n if (suggestion.description && suggestion.description.toLowerCase().includes(query)) return 10;\r\n \r\n return 0;\r\n }\r\n\r\n private parseQuery(queryText: string): TextareaQueryGroup {\r\n const lines = queryText.split('\\n').filter(line => line.trim());\r\n const rules: (TextareaQueryRule | TextareaQueryGroup)[] = [];\r\n let currentCondition: 'and' | 'or' = this.config.defaultCondition || 'and';\r\n \r\n for (let i = 0; i < lines.length; i++) {\r\n const trimmedLine = lines[i].trim();\r\n if (!trimmedLine) continue;\r\n \r\n // Check if line is a condition\r\n if (trimmedLine === 'AND' || trimmedLine === 'OR') {\r\n currentCondition = trimmedLine.toLowerCase() as 'and' | 'or';\r\n continue;\r\n }\r\n \r\n // Parse rule from line\r\n const rule = this.parseRule(trimmedLine);\r\n if (rule) {\r\n rule.condition = currentCondition;\r\n rules.push(rule);\r\n }\r\n }\r\n \r\n return {\r\n condition: currentCondition,\r\n rules\r\n };\r\n }\r\n\r\n private parseAndEmitQuery(queryText: string): void {\r\n try {\r\n const query = this.parseQuery(queryText);\r\n this.queryChange.emit(query);\r\n } catch (error) {\r\n console.error('Error parsing query:', error);\r\n // Emit empty query on error\r\n this.queryChange.emit({\r\n condition: this.config.defaultCondition || 'and',\r\n rules: []\r\n });\r\n }\r\n }\r\n\r\n private onKeyDown(event: KeyboardEvent): void {\r\n if (!this.isDropdownVisible) {\r\n this.updateCursorPosition();\r\n return;\r\n }\r\n \r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.selectedIndex = Math.min(this.selectedIndex + 1, this.filteredSuggestions.length - 1);\r\n this.scrollToSelected();\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.selectedIndex = Math.max(this.selectedIndex - 1, 0);\r\n this.scrollToSelected();\r\n break;\r\n case 'Enter':\r\n case 'Tab':\r\n event.preventDefault();\r\n if (this.filteredSuggestions[this.selectedIndex]) {\r\n this.selectSuggestion(this.filteredSuggestions[this.selectedIndex]);\r\n }\r\n break;\r\n case 'Escape':\r\n event.preventDefault();\r\n this.hideDropdown();\r\n break;\r\n default:\r\n this.updateCursorPosition();\r\n break;\r\n }\r\n }\r\n\r\n private getCurrentWord(): string {\r\n if (!this.queryTextarea) return '';\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const text = textarea.value;\r\n const bounds = this.getCurrentWordBounds();\r\n \r\n return text.substring(bounds.start, bounds.end);\r\n }\r\n\r\n private getCurrentWordBounds(): { start: number; end: number } {\r\n if (!this.queryTextarea) return { start: 0, end: 0 };\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const text = textarea.value;\r\n const cursor = this.cursorPosition;\r\n \r\n let start = cursor;\r\n let end = cursor;\r\n \r\n // Find word start (go back until whitespace or start of text)\r\n while (start > 0 && /\\S/.test(text[start - 1])) {\r\n start--;\r\n }\r\n \r\n // Find word end (go forward until whitespace or end of text)\r\n while (end < text.length && /\\S/.test(text[end])) {\r\n end++;\r\n }\r\n \r\n return { start, end };\r\n }\r\n\r\n private getPreviousTokens(text: string): string[] {\r\n return text.trim().split(/\\s+/).filter(token => token.length > 0);\r\n }\r\n\r\n private isAfterOperator(tokens: string[]): boolean {\r\n if (tokens.length === 0) return false;\r\n const lastToken = tokens[tokens.length - 1];\r\n return this.config.operators.some(op => op.value === lastToken);\r\n }\r\n\r\n private isAfterField(tokens: string[]): boolean {\r\n if (tokens.length === 0) return false;\r\n const lastToken = tokens[tokens.length - 1];\r\n return this.config.fields.some(field => field.key === lastToken || field.label === lastToken);\r\n }\r\n\r\n private isAfterValue(tokens: string[]): boolean {\r\n if (tokens.length < 3) return false;\r\n \r\n // Check if we have a complete field-operator-value pattern\r\n const field = tokens[tokens.length - 3];\r\n const operator = tokens[tokens.length - 2];\r\n \r\n return this.config.fields.some(f => f.key === field || f.label === field) &&\r\n this.config.operators.some(op => op.value === operator);\r\n }\r\n\r\n private getLastField(tokens: string[]): string | null {\r\n for (let i = tokens.length - 1; i >= 0; i--) {\r\n const token = tokens[i];\r\n const field = this.config.fields.find(f => f.key === token || f.label === token);\r\n if (field) {\r\n return field.key;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n onSuggestionClick(suggestion: SuggestionItem): void {\r\n this.selectSuggestion(suggestion);\r\n }\r\n\r\n private selectSuggestion(suggestion: SuggestionItem): void {\r\n if (!suggestion || !this.queryTextarea) return;\r\n \r\n this.selectedSuggestion = suggestion;\r\n this.insertSuggestion(suggestion);\r\n this.hideDropdown();\r\n this.suggestionSelected.emit(suggestion);\r\n \r\n // Update context after selection and auto-show next suggestions\r\n setTimeout(() => {\r\n this.updateContext();\r\n this.queryTextarea?.nativeElement.focus();\r\n \r\n // Auto-show next suggestions based on selection type\r\n if (suggestion.type === 'field') {\r\n this.showOperatorSuggestions();\r\n } else if (suggestion.type === 'operator') {\r\n this.showValueSuggestions();\r\n }\r\n }, 10);\r\n }\r\n\r\n // Legacy method - keeping for backward compatibility\r\n onOptionSelected(event: any): void {\r\n // This method is kept for backward compatibility but not used\r\n // The new implementation uses onSuggestionClick instead\r\n }\r\n\r\n private searchSuggestions(query: string): Observable<SuggestionItem[]> {\r\n const suggestions = this.filterSuggestionsByContext(query);\r\n return of(suggestions);\r\n }\r\n\r\n private hideDropdown(): void {\r\n this.isDropdownVisible = false;\r\n this.selectedIndex = 0;\r\n this.filteredSuggestions = [];\r\n }\r\n\r\n private showOperatorSuggestions(): void {\r\n // Get operator suggestions for the current field\r\n const operatorSuggestions = this.getOperatorSuggestions();\r\n \r\n if (operatorSuggestions.length > 0) {\r\n this.filteredSuggestions = operatorSuggestions;\r\n this.isDropdownVisible = true;\r\n this.selectedIndex = 0;\r\n this.updateDropdownPosition();\r\n }\r\n }\r\n\r\n private showValueSuggestions(): void {\r\n // Check if current field is a date field\r\n const currentField = this.config.fields.find(f => f.key === this.lastSelectedField);\r\n \r\n if (currentField && currentField.type === 'date') {\r\n this.showDatePicker();\r\n return;\r\n }\r\n \r\n // Get value/options suggestions for non-date fields\r\n const valueSuggestions = this.getValueSuggestions();\r\n \r\n if (valueSuggestions.length > 0) {\r\n this.filteredSuggestions = valueSuggestions;\r\n this.isDropdownVisible = true;\r\n this.selectedIndex = 0;\r\n this.updateDropdownPosition();\r\n } else {\r\n // If no predefined values, hide dropdown to allow free text input\r\n this.hideDropdown();\r\n }\r\n }\r\n\r\n private updateDropdownPosition(): void {\r\n if (!this.queryTextarea || !this.isDropdownVisible) return;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const rect = textarea.getBoundingClientRect();\r\n \r\n // Calculate cursor position in textarea\r\n const cursorCoords = this.getCursorCoordinates();\r\n \r\n this.dropdownPosition = {\r\n top: rect.top + cursorCoords.top + 20, // 20px below cursor\r\n left: rect.left + cursorCoords.left\r\n };\r\n }\r\n\r\n private showDatePicker(): void {\r\n // Hide regular dropdown\r\n this.hideDropdown();\r\n \r\n // Set up date picker state\r\n this.currentDateField = this.lastSelectedField;\r\n this.currentDateOperator = this.getCurrentOperator();\r\n this.showDualDatePicker = this.currentDateOperator === 'between';\r\n this.firstDateSelected = null;\r\n this.secondDateSelected = null;\r\n \r\n // Show date picker\r\n this.isDatePickerVisible = true;\r\n this.updateDatePickerPosition();\r\n }\r\n\r\n private updateDatePickerPosition(): void {\r\n if (!this.queryTextarea || !this.isDatePickerVisible) return;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const rect = textarea.getBoundingClientRect();\r\n \r\n // Calculate cursor position in textarea\r\n const cursorCoords = this.getCursorCoordinates();\r\n \r\n this.datePickerPosition = {\r\n top: rect.top + cursorCoords.top + 20, // 20px below cursor\r\n left: rect.left + cursorCoords.left\r\n };\r\n }\r\n\r\n private getCurrentOperator(): string | null {\r\n if (!this.queryTextarea) return null;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const text = textarea.value;\r\n const beforeCursor = text.substring(0, this.cursorPosition);\r\n const tokens = this.getPreviousTokens(beforeCursor);\r\n \r\n // Look for the most recent operator\r\n for (let i = tokens.length - 1; i >= 0; i--) {\r\n const token = tokens[i];\r\n if (this.config.operators.some(op => op.value === token)) {\r\n return token;\r\n }\r\n }\r\n \r\n return null;\r\n }\r\n\r\n onFirstDateSelected(date: Date): void {\r\n this.firstDateSelected = date;\r\n \r\n if (this.showDualDatePicker) {\r\n // For 'between' operator, wait for second date\r\n return;\r\n } else {\r\n // For single date operators, insert the date immediately\r\n this.insertDateValue(date);\r\n this.hideDatePicker();\r\n }\r\n }\r\n\r\n onSecondDateSelected(date: Date): void {\r\n this.secondDateSelected = date;\r\n \r\n if (this.firstDateSelected && this.secondDateSelected) {\r\n // Insert both dates for 'between' operator\r\n this.insertDateRangeValue(this.firstDateSelected, this.secondDateSelected);\r\n this.hideDatePicker();\r\n }\r\n }\r\n\r\n private insertDateValue(date: Date): void {\r\n const dateString = this.formatDate(date);\r\n this.insertTextAtCursor(dateString);\r\n }\r\n\r\n private insertDateRangeValue(startDate: Date, endDate: Date): void {\r\n const startDateString = this.formatDate(startDate);\r\n const endDateString = this.formatDate(endDate);\r\n const rangeString = `${startDateString}, ${endDateString}`;\r\n this.insertTextAtCursor(rangeString);\r\n }\r\n\r\n private formatDate(date: Date): string {\r\n // Format date as YYYY-MM-DD\r\n return date.toISOString().split('T')[0];\r\n }\r\n\r\n private insertTextAtCursor(text: string): void {\r\n if (!this.queryTextarea) return;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const currentText = textarea.value;\r\n const cursorPos = this.cursorPosition;\r\n \r\n // Insert text at cursor position\r\n const newText = currentText.substring(0, cursorPos) + text + currentText.substring(cursorPos);\r\n \r\n // Update textarea\r\n textarea.value = newText;\r\n \r\n // Update cursor position\r\n const newCursorPos = cursorPos + text.length;\r\n textarea.setSelectionRange(newCursorPos, newCursorPos);\r\n this.cursorPosition = newCursorPos;\r\n \r\n // Update form control\r\n this.form.get('queryText')?.setValue(newText, { emitEvent: false });\r\n \r\n // Parse and emit query\r\n this.parseAndEmitQuery(newText);\r\n }\r\n\r\n hideDatePicker(): void {\r\n this.isDatePickerVisible = false;\r\n this.currentDateField = null;\r\n this.currentDateOperator = null;\r\n this.showDualDatePicker = false;\r\n this.firstDateSelected = null;\r\n this.secondDateSelected = null;\r\n \r\n // Focus back to textarea\r\n if (this.queryTextarea) {\r\n this.queryTextarea.nativeElement.focus();\r\n }\r\n }\r\n\r\n private getCursorCoordinates(): { top: number; left: number } {\r\n if (!this.queryTextarea) return { top: 0, left: 0 };\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const text = textarea.value.substring(0, this.cursorPosition);\r\n const lines = text.split('\\n');\r\n const currentLine = lines.length - 1;\r\n const currentColumn = lines[currentLine].length;\r\n \r\n // Approximate character dimensions\r\n const charWidth = 8; // Approximate character width in pixels\r\n const lineHeight = 20; // Approximate line height in pixels\r\n \r\n return {\r\n top: currentLine * lineHeight,\r\n left: currentColumn * charWidth\r\n };\r\n }\r\n\r\n private scrollToSelected(): void {\r\n if (!this.dropdown) return;\r\n \r\n const dropdown = this.dropdown.nativeElement;\r\n const selectedElement = dropdown.querySelector(`[data-index=\"${this.selectedIndex}\"]`) as HTMLElement;\r\n \r\n if (selectedElement) {\r\n selectedElement.scrollIntoView({ block: 'nearest' });\r\n }\r\n }\r\n\r\n private parseRule(ruleText: string): TextareaQueryRule | null {\r\n // Enhanced parsing with better operator detection\r\n const operatorPattern = this.config.operators\r\n .map(op => op.value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\r\n .join('|');\r\n \r\n const regex = new RegExp(`^(\\\\S+)\\\\s+(${operatorPattern})\\\\s+(.+)$`);\r\n const match = ruleText.match(regex);\r\n \r\n if (!match) return null;\r\n \r\n const [, fieldPart, operator, valuePart] = match;\r\n \r\n // Validate field exists\r\n const fieldConfig = this.config.fields.find(f => \r\n f.key === fieldPart || f.label === fieldPart\r\n );\r\n if (!fieldConfig) return null;\r\n \r\n // Validate operator\r\n const operatorConfig = this.config.operators.find(op => op.value === operator);\r\n if (!operatorConfig) return null;\r\n \r\n // Parse value based on field type\r\n let parsedValue: any = valuePart.trim();\r\n \r\n if (fieldConfig.type === 'number') {\r\n const numValue = parseFloat(parsedValue);\r\n if (!isNaN(numValue)) {\r\n parsedValue = numValue;\r\n }\r\n } else if (fieldConfig.type === 'boolean') {\r\n parsedValue = parsedValue.toLowerCase() === 'true';\r\n }\r\n \r\n return {\r\n field: fieldConfig.key,\r\n operator: operator,\r\n value: parsedValue\r\n };\r\n }\r\n}\r\n","<div class=\"sa-query-builder-textarea\">\r\n <form [formGroup]=\"form\">\r\n <div class=\"query-builder-header\">\r\n <div class=\"where-label\">Where</div>\r\n </div>\r\n\r\n <div class=\"query-builder-body\">\r\n <div class=\"textarea-container\">\r\n <mat-form-field class=\"query-textarea-field\" appearance=\"outline\">\r\n <textarea\r\n #queryTextarea\r\n matInput\r\n formControlName=\"queryText\"\r\n placeholder=\"Start typing your query...\"\r\n rows=\"5\"\r\n ></textarea>\r\n </mat-form-field>\r\n \r\n <!-- Custom Dropdown -->\r\n <div \r\n #dropdown\r\n class=\"suggestions-dropdown\" \r\n [class.visible]=\"isDropdownVisible\"\r\n [style.top.px]=\"dropdownPosition.top\"\r\n [style.left.px]=\"dropdownPosition.left\"\r\n >\r\n @for (suggestion of filteredSuggestions; track suggestion.id; let i = $index) {\r\n <div \r\n class=\"suggestion-item\"\r\n [class.selected]=\"i === selectedIndex\"\r\n [attr.data-index]=\"i\"\r\n (click)=\"onSuggestionClick(suggestion)\"\r\n (mouseenter)=\"selectedIndex = i\"\r\n >\r\n <div class=\"suggestion-main\">\r\n <span class=\"suggestion-name\">{{ suggestion.name }}</span>\r\n <span class=\"suggestion-type\">{{ suggestion.type }}</span>\r\n </div>\r\n @if (suggestion.description) {\r\n <div class=\"suggestion-description\">{{ suggestion.description }}</div>\r\n }\r\n @if (suggestion.unit) {\r\n <div class=\"suggestion-unit\">{{ suggestion.unit }}</div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Date Picker Popup -->\r\n <div \r\n class=\"date-picker-popup\" \r\n [class.visible]=\"isDatePickerVisible\"\r\n [style.top.px]=\"datePickerPosition.top\"\r\n [style.left.px]=\"datePickerPosition.left\"\r\n >\r\n <div class=\"date-picker-container\">\r\n @if (!showDualDatePicker) {\r\n <!-- Single Date Picker -->\r\n <div class=\"single-date-picker\">\r\n <h4>Select Date</h4>\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Date</mat-label>\r\n <input matInput [matDatepicker]=\"singlePicker\" (dateChange)=\"onFirstDateSelected($event.value)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"singlePicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #singlePicker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n } @else {\r\n <!-- Dual Date Picker for 'between' operator -->\r\n <div class=\"dual-date-picker\">\r\n <h4>Select Date Range</h4>\r\n <div class=\"date-range-inputs\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Start Date</mat-label>\r\n <input matInput [matDatepicker]=\"startPicker\" (dateChange)=\"onFirstDateSelected($event.value)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"startPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #startPicker></mat-datepicker>\r\n </mat-form-field>\r\n \r\n @if (firstDateSelected) {\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>End Date</mat-label>\r\n <input matInput [matDatepicker]=\"endPicker\" [min]=\"firstDateSelected\" (dateChange)=\"onSecondDateSelected($event.value)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"endPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #endPicker></mat-datepicker>\r\n </mat-form-field>\r\n }\r\n </div>\r\n </div>\r\n }\r\n \r\n <div class=\"date-picker-actions\">\r\n <button mat-button (click)=\"hideDatePicker()\">Cancel</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"query-builder-footer\">\r\n <button mat-button class=\"reset-btn\" (click)=\"onReset()\">Reset</button>\r\n <button mat-raised-button color=\"primary\" class=\"apply-btn\" (click)=\"onApply()\">Apply filters</button>\r\n </div>\r\n </form>\r\n</div>\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { QueryBuilderTextareaComponent, TextareaQueryGroup, TextareaQueryConfig } from './query-builder-textarea.component';\r\n\r\n@Component({\r\n selector: 'sa-query-builder-textarea-demo',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n QueryBuilderTextareaComponent,\r\n MatCardModule,\r\n MatDividerModule\r\n ],\r\n template: `\r\n <mat-card>\r\n <mat-card-header>\r\n <mat-card-title>Query Builder Textarea Demo</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <sa-query-builder-textarea\r\n [config]=\"queryConfig\"\r\n (queryChange)=\"onQueryChange($event)\">\r\n </sa-query-builder-textarea>\r\n\r\n <mat-divider class=\"my-4\"></mat-divider>\r\n\r\n <div class=\"output-section\">\r\n <h3>Query Output</h3>\r\n <pre>{{ currentQuery | json }}</pre>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n `,\r\n styles: [`\r\n .my-4 {\r\n margin-top: 1rem;\r\n margin-bottom: 1rem;\r\n }\r\n \r\n .output-section {\r\n margin-top: 1rem;\r\n }\r\n \r\n pre {\r\n background-color: #f5f5f5;\r\n padding: 1rem;\r\n border-radius: 4px;\r\n overflow: auto;\r\n max-height: 300px;\r\n }\r\n `]\r\n})\r\nexport class QueryBuilderTextareaDemoComponent {\r\n queryConfig: TextareaQueryConfig = {\r\n fields: [\r\n {\r\n key: 'name',\r\n label: 'Name',\r\n type: 'string'\r\n },\r\n {\r\n key: 'age',\r\n label: 'Age',\r\n type: 'number',\r\n operators: ['=', '!=', '>', '<', '>=', '<=', 'between']\r\n },\r\n {\r\n key: 'email',\r\n label: 'Email',\r\n type: 'string',\r\n operators: ['=', '!=', 'contains']\r\n },\r\n {\r\n key: 'createdAt',\r\n label: 'Created At',\r\n type: 'date',\r\n operators: ['=', '!=', '>', '<', '>=', '<=', 'between']\r\n },\r\n {\r\n key: 'isActive',\r\n label: 'Is Active',\r\n type: 'boolean'\r\n },\r\n {\r\n key: 'status',\r\n label: 'Status',\r\n type: 'select',\r\n options: [\r\n { label: 'Active', value: 'active' },\r\n { label: 'Inactive', value: 'inactive' },\r\n { label: 'Pending', value: 'pending' }\r\n ]\r\n },\r\n {\r\n key: 'lifecycle',\r\n label: 'Lifecycle',\r\n type: 'select',\r\n options: [\r\n { label: 'Active', value: 'active' },\r\n { label: 'At Risk', value: 'at_risk' },\r\n { label: 'Churned', value: 'churned' }\r\n ]\r\n }\r\n ],\r\n operators: [\r\n { value: '=', label: '=' },\r\n { value: '!=', label: '!=' },\r\n { value: '>', label: '>' },\r\n { value: '<', label: '<' },\r\n { value: '>=', label: '>=' },\r\n { value: '<=', label: '<=' },\r\n { value: 'contains', label: 'contains' }\r\n ],\r\n defaultCondition: 'and'\r\n };\r\n\r\n currentQuery: TextareaQueryGroup | null = null;\r\n\r\n onQueryChange(query: TextareaQueryGroup): void {\r\n this.currentQuery = query;\r\n console.log('Query changed:', query);\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { MatRadioButton, MatRadioModule } from '@angular/material/radio';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType } from '@ngx-formly/core';\r\nimport { isObservable, of } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'sa-radio-button',\r\n standalone: true,\r\n imports: [MatRadioButton, MatRadioModule, CommonModule, FormsModule, ReactiveFormsModule],\r\n templateUrl: './radio-button.component.html',\r\n styleUrl: './radio-button.component.css'\r\n})\r\n\r\nexport class RadioButtonComponent extends FieldType {\r\n\r\n ngOnInit() {\r\n // console.log(this)\r\n }\r\n\r\n get options$() {\r\n const options = this.props?.options;\r\n return isObservable(options) ? options : of(options || []);\r\n }\r\n\r\n override get formControl(): FormControl {\r\n return super.formControl as FormControl;\r\n }\r\n\r\n selectRadio(value: any, radio: MatRadioButton): void {\r\n this.formControl.setValue(value);\r\n radio.checked = true;\r\n }\r\n}\r\n","<div class=\"radio-group-container\" [ngClass]=\"[props['column'] ? 'column' : '']\">\r\n <div class=\"title-container\">\r\n @if(props['label']){\r\n <div class=\"form-field-title\">\r\n <span>{{ props['label'] }}</span>\r\n </div>\r\n }\r\n @if(props['description']){\r\n <div class=\"form-field-description\">\r\n <span>{{ props['description'] }}</span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"form-field\">\r\n <mat-radio-group [formControl]=\"formControl\" name=\"radioButtons\">\r\n <div *ngFor=\"let option of options$ | async\" class=\"radio-box\" (click)=\"selectRadio(option.value, radio)\">\r\n <mat-radio-button [disableRipple]=\"true\" #radio [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-radio-button>\r\n </div>\r\n </mat-radio-group>\r\n </div>\r\n @if(props['helpText']){\r\n <div class=\"form-field-helpText\">\r\n <span>{{ props['helpText'] }}</span>\r\n </div>\r\n }\r\n</div>","import { Component, Input, OnInit, AfterViewInit, ViewChild, ElementRef, ChangeDetectorRef, SimpleChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core';\r\nimport { CardComponent } from '../card/card.component';\r\nimport { IconService } from '../icon/icon.service';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IScrollingCardData } from '../../interfaces/scrolling-card-interface';\r\n\r\n@Component({\r\n selector: 'sa-scrolling-cards',\r\n standalone: true,\r\n imports: [HttpClientModule, CardComponent],\r\n providers: [IconService],\r\n templateUrl: './scrolling-cards.component.html',\r\n styleUrls: ['./scrolling-cards.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ScrollingCardsComponent implements OnInit, AfterViewInit, OnDestroy {\r\n @Input({ required: true }) cards: IScrollingCardData[] = [];\r\n @Input() duration: number = 10;\r\n @Input() direction: 'up' | 'down' | 'left' | 'right' = 'up';\r\n @ViewChild('cardContainer') cardContainer!: ElementRef;\r\n\r\n displayCards: IScrollingCardData[] = [];\r\n animationPaused = false;\r\n isVertical: boolean;\r\n private animationFrame: number | null = null;\r\n\r\n constructor(private cdr: ChangeDetectorRef) { }\r\n\r\n ngOnInit() {\r\n if (this.cards?.length) {\r\n this.displayCards = [...this.cards, ...this.cards];\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['cards'] && !changes['cards'].firstChange && this.cards?.length) {\r\n this.displayCards = [...this.cards, ...this.cards];\r\n this.initializeAnimation();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.cards?.length) {\r\n this.initializeAnimation();\r\n }\r\n }\r\n\r\n private initializeAnimation() {\r\n if (this.animationFrame) {\r\n cancelAnimationFrame(this.animationFrame);\r\n }\r\n\r\n this.animationFrame = requestAnimationFrame(() => {\r\n this.setAnimationProperties();\r\n });\r\n }\r\n\r\n private setAnimationProperties() {\r\n if (!this.cardContainer?.nativeElement) return;\r\n\r\n const container = this.cardContainer.nativeElement;\r\n this.isVertical = this.direction === 'up' || this.direction === 'down';\r\n\r\n // Set vertical/horizontal classes\r\n container.classList.toggle('vertical', this.isVertical);\r\n container.classList.toggle('horizontal', !this.isVertical);\r\n\r\n const containerSize = this.isVertical ? container.scrollHeight : container.scrollWidth;\r\n const duration = containerSize / this.duration;\r\n\r\n container.style.setProperty('--scroll-duration', `${duration}s`);\r\n container.style.setProperty('--scroll-direction', this.direction === 'down' || this.direction === 'right' ? 'reverse' : 'normal');\r\n\r\n // Reset animation\r\n container.style.animation = 'none';\r\n container.offsetHeight; // Trigger reflow\r\n container.style.animation = null;\r\n\r\n this.cdr.markForCheck();\r\n }\r\n\r\n pauseScroll() {\r\n if (!this.cardContainer?.nativeElement) return;\r\n this.animationPaused = true;\r\n this.cardContainer.nativeElement.style.animationPlayState = 'paused';\r\n }\r\n\r\n resumeScroll() {\r\n if (!this.cardContainer?.nativeElement) return;\r\n this.animationPaused = false;\r\n this.cardContainer.nativeElement.style.animationPlayState = 'running';\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.animationFrame) {\r\n cancelAnimationFrame(this.animationFrame);\r\n }\r\n }\r\n}","<div class=\"scrolling-cards-container {{this.isVertical ? 'vertical': 'horizontal'}}\" (mouseenter)=\"pauseScroll()\"\r\n (mouseleave)=\"resumeScroll()\">\r\n <div #cardContainer class=\"card-container\">\r\n @for (card of displayCards; track card.title) {\r\n <sa-card [title]=\"card.title\" [body]=\"card.body\" [avatar]=\"card?.avatar\" [icon]=\"card.icon\" [iconSize]=\"'54'\"\r\n [customWrapperClass]=\"'sa-card-secondary-wrapper'\" [width]=\"'24.063rem'\" [column]=\"false\"\r\n [showCardBody]=\"true\">\r\n </sa-card>\r\n }\r\n </div>\r\n</div>","import { Component, EventEmitter, Input } from '@angular/core';\r\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { NgFor, NgIf } from '@angular/common';\r\nimport { Output } from '@angular/core';\r\n\r\nlet nextId = 0; // used to give unique ids to inputs used in html\r\n\r\n@Component({\r\n selector: 'sa-stepper',\r\n standalone: true,\r\n imports: [NgFor, NgIf],\r\n templateUrl: './stepper.component.html',\r\n styleUrl: './stepper.component.css'\r\n})\r\nexport class StepperComponent extends FieldType<FieldTypeConfig> {\r\n @Input() latestStep: number = -1;\r\n @Input() editable: boolean = true;\r\n @Input() stepLabels: any;\r\n @Input() doneIcon: string;\r\n\r\n @Output() stepped = new EventEmitter;\r\n\r\n uuid: number = nextId++;\r\n\r\n isDisabled: boolean = false;\r\n\r\n tickIcon = {};\r\n\r\n // {\r\n // '-webkit-mask-image': `url(${this.ImagePath})`,\r\n // 'mask-image': `url(${this.ImagePath})`,\r\n // }\r\n\r\n ngOnInit() {\r\n if (this.field.props) {\r\n this.stepLabels = this.field.props.options;\r\n this.editable = this.field.props['params'].editable;\r\n this.latestStep = this.model[`${this.key}`] ? this.model[`${this.key}`].id : -1;\r\n this.doneIcon = this.field.props['params'].doneIcon;\r\n\r\n this.isDisabled = this.field.props.disabled!;\r\n }\r\n console.log(this.doneIcon);\r\n this.tickIcon = {\r\n '-webkit-mask-image': `url(${this.doneIcon})`,\r\n 'mask-image': `url(${this.doneIcon})`\r\n };\r\n }\r\n\r\n update(chosen: number) {\r\n if (!this.editable || this.field.props?.disabled) return;\r\n this.latestStep = chosen;\r\n if (!this.formControl) {\r\n this.stepped.emit(this.latestStep);\r\n return;\r\n }\r\n this.formControl.setValue({\r\n id: this.latestStep\r\n });\r\n }\r\n}\r\n","<div class=\"stepper {{isDisabled ? 'disabled' : 'active'}}\">\r\n <div class=\"steps\" *ngFor=\"let label of stepLabels; let i = index\">\r\n <input id=\"stepper-{{uuid}}-{{i}}\" (change)=\"update(i)\" name=\"stepper-radio-{{uuid}}\"\r\n [checked]=\"i == latestStep ? true: false\" class=\"step-hide\" type=\"radio\">\r\n <div\r\n class=\"label-wrapper {{i < latestStep ? 'done' : ''}} {{i > latestStep ? 'default' : ''}} {{i == latestStep ? 'latest' : ''}}\">\r\n <label [style]=\"i < latestStep ? tickIcon : ''\" for=\"stepper-{{uuid}}-{{i}}\"\r\n class=\"step-label-icon {{i > latestStep ? 'undone' : ''}}\">\r\n </label>\r\n <label for=\"stepper-{{uuid}}-{{i}}\" class=\"step-label-text\">{{label.name}}</label>\r\n </div>\r\n <div *ngIf=\" i !=stepLabels.length-1\" class=\"line {{i < latestStep ? 'done' : 'default'}}\"></div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { TabInterface } from '../../interfaces/tab-interface';\r\nimport { NgFor } from '@angular/common';\r\nimport { NgIf } from '@angular/common';\r\n\r\n\r\nlet nextId = 0; // used to give unique ids to inputs used in html\r\n@Component({\r\n selector: 'sa-tabs',\r\n standalone: true,\r\n imports: [NgFor, NgIf],\r\n templateUrl: './tabs.component.html',\r\n styleUrl: './tabs.component.css'\r\n})\r\nexport class TabsComponent {\r\n @Input() tabs: TabInterface[];\r\n @Input() type: string;\r\n @Input() defaultTab: number;\r\n\r\n @Output() tabChanged = new EventEmitter();\r\n\r\n\r\n uuid: number = nextId++;\r\n svgStyle: any = [];\r\n\r\n ngOnChanges(): void {\r\n this.svgStyle = this.tabs.map((item) => {\r\n return {\r\n '-webkit-mask-image': `url(${item.tabIcon})`,\r\n 'mask-image': `url(${item.tabIcon})`,\r\n }\r\n })\r\n }\r\n tabChange(evt: any) {\r\n this.tabChanged.emit(evt.target.value)\r\n }\r\n}\r\n","<div class=\"tab-wrapper {{type}}\">\r\n <div class=\"tabs\">\r\n <div *ngFor=\"let item of tabs, let i = index\" class=\"tab-item\">\r\n <input [checked]=\"(defaultTab == i) ? true : false\" [value]=\"i\" (change)=\"tabChange($event)\"\r\n id=\"tab-check-{{i}}-{{uuid}}\" class=\"tab-checks\" type=\"radio\" name=\"tab-checkbox-{{uuid}}\">\r\n <label for=\"tab-check-{{i}}-{{uuid}}\" class=\"tab-label\">\r\n <div *ngIf=\"item.iconPosition == 'left' || item.iconPosition == 'both'\" class=\"svg-icon\" [style]=\"svgStyle[i]\">\r\n </div>\r\n {{item.tabName}}\r\n <div *ngIf=\"item.iconPosition == 'right' || item.iconPosition == 'both'\" class=\"svg-icon\" [style]=\"svgStyle[i]\">\r\n </div>\r\n <div class=\"badge\" *ngIf=\"item.badgeContent\">{{item.badgeContent}}</div>\r\n </label>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { Input, Output } from '@angular/core';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { NgIf } from '@angular/common';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconComponent } from '../icon/icon.component';\r\n\r\n@Component({\r\n selector: 'sa-toast',\r\n standalone: true,\r\n imports: [CommonModule, ButtonComponent, IconComponent, ButtonComponent, MatIcon, NgIf],\r\n templateUrl: './toast.component.html',\r\n styleUrl: './toast.component.css'\r\n})\r\nexport class ToastComponent implements OnChanges {\r\n @Input() finishPercentage: number = -1;\r\n @Input() heading: string;\r\n @Input() subHeading: string;\r\n @Input() statusIcon: string = '';\r\n @Input() toastCloseIcon: string = 'closeOutlined';\r\n @Input() status: 'success' | 'failure' | 'caution' | 'positive' | 'negative' | 'tentative';\r\n @Input() firstButtonName: string;\r\n @Input() secondButtonName: string;\r\n @Input() closable: boolean;\r\n @Input() filled: boolean = true;\r\n @Input() width: number | string = '';\r\n @Input() toastIconSize: string = '24';\r\n @Input() toastCloseIconSize: string = '24';\r\n\r\n @Output() toastEvent: EventEmitter<IToastEvent> = new EventEmitter();\r\n @Output() firstButton = new EventEmitter();\r\n @Output() secondButton = new EventEmitter();\r\n @Output() closed = new EventEmitter();\r\n\r\n\r\n toastStyles = { backgroundColor: 'transparent', color: '', width: this.width + '%' };\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes && (changes['status'] || changes['filled'])) {\r\n this.statusIcon = toastInfo[this.status]?.icon;\r\n this.toastStyles.backgroundColor = toastInfo[this.status]?.bgColor;\r\n this.toastStyles.color = toastInfo[this.status]?.color;\r\n }\r\n if (changes && changes['width']) {\r\n this.toastStyles.width = typeof this.width === 'number' ? this.width + '%' : this.width;\r\n }\r\n\r\n if (this.finishPercentage > 100) this.finishPercentage = 100;\r\n\r\n }\r\n\r\n clicked(num: number) {\r\n if (num == 0) this.firstButton.emit();\r\n else if (num == 1) this.secondButton.emit();\r\n else if (num == 2) this.closed.emit();\r\n }\r\n\r\n closeToast() {\r\n this.toastEvent.emit({\r\n type: 'TOAST_CLOSED',\r\n params: {}\r\n })\r\n }\r\n\r\n}\r\n\r\nconst toastInfo: any = {\r\n 'success': {\r\n icon: 'checkCircleOutlined',\r\n bgColor: '#EBF5E9',\r\n color: '#246B16'\r\n },\r\n 'failure': {\r\n icon: 'infoCircleOutlined',\r\n bgColor: '#F8E9E9',\r\n color: '#861C15'\r\n },\r\n 'caution': {\r\n icon: 'infoTriangleOutlined',\r\n bgColor: '',\r\n color: ''\r\n }\r\n}\r\n\r\nexport interface IToastEvent {\r\n type: 'TOAST_CLOSED' | 'ACTION_CLICKED';\r\n event?: any;\r\n params?: any;\r\n}","<div class=\"toast\" [ngStyle]=\"toastStyles\">\r\n <div class=\"content\">\r\n <div class=\"toast-icon {{status}}\">\r\n <sa-icon [icon]=\"statusIcon\" [size]=\"toastIconSize\"></sa-icon>\r\n <!-- <img [src]=\"statusIcon\" alt=\"\"> -->\r\n </div>\r\n <div class=\"head-subhead\">\r\n <p class=\"heading\">{{heading}}</p>\r\n <p class=\"subheading\">{{subHeading}}</p>\r\n </div>\r\n @if(closable){\r\n <!-- <img class=\"cross\" (click)=\"closeToast()\" [src]=\"crossmark\" alt=\"\"> -->\r\n <sa-icon class=\"cross\" [icon]=\"toastCloseIcon\" [size]=\"toastCloseIconSize\" (click)=\"closeToast()\"></sa-icon>\r\n }\r\n </div>\r\n <!-- <div class=\"controls\">\r\n <sa-button *ngIf=\"firstButtonName\" (onClickEvent)=\"clicked(0)\" [text]=\"firstButtonName\" type=\"transparent\"\r\n size=\"medium\" state=\"default\">\r\n </sa-button>\r\n <sa-button *ngIf=\"secondButtonName\" (onClickEvent)=\"clicked(1)\" [text]=\"secondButtonName\" type=\"outline\"\r\n size=\"medium\" state=\"default\">\r\n </sa-button>\r\n </div> -->\r\n\r\n <div *ngIf=\"finishPercentage >= 0\" class=\"progress-bar\">\r\n <div class=\"progress-done\" [style.width]=\"finishPercentage+'%'\"></div>\r\n <div class=\"progress-left\" [style.width]=\"100-finishPercentage+'%'\"></div>\r\n </div>\r\n</div>","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, signal, computed, effect, ChangeDetectionStrategy, DestroyRef, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { interval, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { trigger, state, style, transition, animate } from '@angular/animations';\r\nimport { TextAnimationConfig } from '../../interfaces/typography-animation-interface';\r\n\r\n@Component({\r\n selector: 'sa-typography-animation',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './typography-animation.component.html',\r\n styleUrl: './typography-animation.component.css',\r\n animations: [\r\n trigger('slideAnimation', [\r\n state('hidden', style({\r\n opacity: 0,\r\n transform: 'translateY(1px)'\r\n })),\r\n state('visible', style({\r\n opacity: 1,\r\n transform: 'translateY(-50%)'\r\n })),\r\n transition('hidden => visible', [\r\n animate('{{duration}}ms ease-out')\r\n ], { params: { duration: 300 } }),\r\n transition('visible => hidden', [\r\n animate('{{duration}}ms ease-in')\r\n ], { params: { duration: 300 } })\r\n ])\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TypographyAnimationComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() config: TextAnimationConfig = {\r\n words: [],\r\n prefix: '',\r\n animationDelay: 3000,\r\n animationDuration: 200,\r\n showFirstWordImmediately: false\r\n };\r\n\r\n currentWordIndex = signal<number>(0);\r\n animationState = signal<'initializing' | 'running'>('initializing');\r\n private intervalId: any;\r\n\r\n ngOnInit() {\r\n // Set animation state to running after a brief initialization period\r\n // This helps ensure the first word appears immediately when requested\r\n setTimeout(() => {\r\n this.animationState.set('running');\r\n }, 50);\r\n \r\n this.startAnimation();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Check if config has changed and is not the first change\r\n if (changes['config'] && !changes['config'].firstChange) {\r\n // Reset the current word index\r\n this.currentWordIndex.set(0);\r\n \r\n // Clear the existing interval if it exists\r\n if (this.intervalId) {\r\n clearInterval(this.intervalId);\r\n }\r\n \r\n // Restart the animation with the new configuration\r\n this.startAnimation();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.intervalId) {\r\n clearInterval(this.intervalId);\r\n }\r\n }\r\n\r\n private startAnimation() {\r\n // Trigger the first animation immediately\r\n this.currentWordIndex.update(current => \r\n (current + 1) % this.config.words.length\r\n );\r\n\r\n // Add a small delay before starting the interval to ensure DOM is ready\r\n setTimeout(() => {\r\n this.intervalId = setInterval(() => {\r\n this.currentWordIndex.update(current => \r\n (current + 1) % this.config.words.length\r\n );\r\n }, this.config.animationDelay || 3000);\r\n }, 100);\r\n }\r\n}","<div class=\"text-animation\">\r\n <span class=\"prefix\" *ngIf=\"config.prefix\">{{ config.prefix }}</span>\r\n <span class=\"words-wrapper\">\r\n <ng-container *ngFor=\"let word of config.words; let i = index\">\r\n <span\r\n class=\"word\"\r\n [@slideAnimation]=\"currentWordIndex() === i ? 'visible' : 'hidden'\"\r\n [style.transition-delay]=\"config.animationDelay + 'ms'\"\r\n >\r\n {{ word }}\r\n </span>\r\n </ng-container>\r\n </span>\r\n </div>","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TestLibraryService {\r\n\r\n constructor() { }\r\n}\r\n","export interface ButtonInterface {\r\n id: string | number,\r\n text: string,\r\n type: string,\r\n size: ButtonSize,\r\n state: string,\r\n imagePath?: string,\r\n icon?: any,\r\n iconPosition?: ButtonIconPosition,\r\n href?: string,\r\n hrefTarget?: string,\r\n isSubmit?: boolean,\r\n width?: any,\r\n buttonIconSize?: any,\r\n showSpinner?: boolean,\r\n onClick?: (event: any) => void\r\n}\r\n\r\nexport const buttonSizes = [\r\n 'small', 'medium', 'large'\r\n] as const;\r\n\r\ntype PredefinedButtonSizes = typeof buttonSizes[number];\r\n\r\nexport type ButtonSize = PredefinedButtonSizes | string;\r\n\r\nexport const buttonPosition = [\r\n 'left', 'right', 'both'\r\n] as const;\r\n\r\ntype PredefinedButtonPositions = typeof buttonPosition[number]\r\n\r\nexport type ButtonIconPosition = PredefinedButtonPositions | string;\r\n\r\n\r\nexport const buttonType = [\r\n 'primary', 'outline', 'transparent'\r\n] as const;\r\n\r\ntype PredefinedButtonType = typeof buttonType[number]\r\n\r\nexport type ButtonType = PredefinedButtonType | string;\r\n\r\n\r\nexport interface ButtonClickEvent {\r\n type: 'primary' | 'secondary';\r\n button: ButtonInterface;\r\n originalEvent: Event;\r\n}","export const iconNames = [\r\n 'analysis', 'arrowRightOutlined', 'avatar',\r\n 'businessStatsFilled', 'chatHelpOutlined', 'checkCircleFilled',\r\n 'checkCircleOutlined', 'checkOutlined', 'circleFilled',\r\n 'closeBlueOutlined', 'closeCircleFilled', 'closeOutlined',\r\n 'doubleDownOutlined', 'eyeFilled',\r\n 'eyeOutlined', 'formDetailsOutlined', 'gridViewOutlined',\r\n 'homeOutlined', 'infoCircleOutlined', 'infoTriangleFilled',\r\n 'infoTriangleOutlined', 'innosupps', 'locationOutlined',\r\n 'mailOutlined', 'multiConnectionHub', 'personOutlined',\r\n 'rightChevronOutlined', 'sarasWhite', 'settingsOutlined',\r\n 'sourcesOutlined', 'targetScanOutlined', 'upwardTriangleFilled',\r\n 'headsetOutlined', 'sarasFullLogo', 'leftChevronCircle', 'rightChevronCircle', 'errorCircleOutlined',\r\n 'errorCrossOutlined', 'downChevronOutlined', 'peopleAudience', 'screenPerson', 'slideSettings', 'desktopSpeakerOutlined',\r\n 'tabDesktopArrowClockwiseOutlined', 'disabledCheckboxFilled', 'timerOutlined', 'refresh', 'chatIcon', 'add', 'calendar',\r\n 'compassNorthWest'\r\n] as const;\r\n\r\n// Define a type for the predefined icon names\r\ntype PredefinedIconName = typeof iconNames[number];\r\n\r\n// Define IconName as a union of PredefinedIconName and string\r\nexport type IconName = PredefinedIconName | string;\r\n\r\nexport interface IconInterface {\r\n icon?: IconName | string,\r\n size?: string,\r\n iconUrl?: string,\r\n iconPosition?: string\r\n}\r\n\r\n\r\nexport interface saIcon {\r\n icon?: IconName;\r\n iconPath?: string;\r\n iconUrl?: string;\r\n size?: string;\r\n color?: string;\r\n customClass?: string;\r\n }","import { IMenu } from \"./menu.interface\";\r\n\r\nexport interface ILeftNav {\r\n logo?: ILeftNavLogo;\r\n items?: ILeftNavItem[];\r\n templateItems?: ITemplateItem[];\r\n footerItems?: ILeftNavItem[];\r\n }\r\n\r\n export interface ILeftNavLogo extends ILeftNavItem {\r\n \r\n }\r\n \r\n export interface ILeftNavItem {\r\n title: string,\r\n // icon_url?: string,\r\n icon?: string,\r\n iconSize?: string,\r\n color?: string,\r\n disable?: boolean,\r\n tooltip?: string,\r\n relativePath?: boolean,\r\n path?: string,\r\n active?: boolean,\r\n type?: 'ICON' | 'AVATAR';\r\n menu?: IMenu;\r\n altText?: string,\r\n showSearch?: boolean,\r\n iconLabel?: string,\r\n className?: string;\r\n itemType?: string;\r\n [key: string]: any;\r\n }\r\n \r\n export interface ILeftNavClickEvent {\r\n type: 'NAV_ITEM_CLICK' | 'FOOTER_ITEM_CLICK' | 'LOGO_CLICK' | 'TEMPLATE_ITEM_CLICK' | 'CLICK';\r\n event: any,\r\n item: ILeftNavItem\r\n }\r\n export interface ILeftNavBlurEvent {\r\n type: 'NAV_ITEM_HOVER' | 'FOOTER_ITEM_HOVER' | 'LOGO_HOVER';\r\n event: any,\r\n item: ILeftNavItem\r\n }\r\n \r\n export enum ILeftNavTypes {\r\n \r\n }\r\n\r\n export interface ITemplateItem extends ILeftNavItem {\r\n iconSize?: string;\r\n backgroundColor?: string;\r\n }","/*\n * Public API Surface of component-library\n */\n\n// ... existing code ...\n\n\n// Components\nexport * from './lib/accordion/accordion.component';\nexport * from './lib/avatar/avatar.component';\nexport * from './lib/button/button.component';\nexport * from './lib/calendar-header/calendar-header.component';\nexport * from './lib/card/card-body/card-body.component';\nexport * from './lib/card/card-custom-header/card-custom-header.component';\nexport * from './lib/card/card-footer-actions/card-footer-actions.component';\nexport * from './lib/card/card-icon/card-icon.component';\nexport * from './lib/card/card-title-actions/card-title-actions.component';\nexport * from './lib/card/card.component';\nexport * from './lib/card/checkbox-card/checkbox-card.component';\nexport * from './lib/card/guide-card/guide-card.component';\nexport * from './lib/card/menu-card/menu-card.component';\nexport * from './lib/card/thumbnail-card/thumbnail-card.component';\nexport * from './lib/card-carousel/card-carousel.component';\nexport * from './lib/categories-nav/categories-nav.component';\nexport * from './lib/checkbox/checkbox.component';\nexport * from './lib/chips/chips.component';\nexport * from './lib/component-library.component';\nexport * from './lib/dashboard-loader/dashboard-loader.component';\nexport * from './lib/data-grid/data-grid.component';\nexport * from './lib/datepicker/datepicker.component';\nexport * from './lib/dialog/dialog.component';\nexport * from './lib/dropdown/category-dropdown/category-dropdown.component';\nexport * from './lib/dropdown/ng-select/ng-select.component';\nexport * from './lib/dropdown-menu/dropdown-menu.component';\nexport * from './lib/filter/filter.component';\nexport * from './lib/form-input/form-input.component';\nexport * from './lib/form-select/form-select.component';\nexport * from './lib/grid-cell/grid-cell.component';\nexport * from './lib/grid-header/grid-header.component';\nexport * from './lib/header/header.component';\nexport * from './lib/icon/icon.component';\nexport * from './lib/layout-section/layout-section.component';\nexport * from './lib/left-nav/left-nav.component';\nexport * from './lib/list/list.component';\nexport * from './lib/menu/menu-list/menu-item.component';\nexport * from './lib/menu/menu.component';\nexport * from './lib/message-banner/message-banner.component';\nexport * from './lib/message-banner-v2/message-banner-v2.component';\nexport * from './lib/mini-card/mini-card.component';\nexport * from './lib/page-layout/page-layout.component';\nexport * from './lib/progress-bar/progress-bar.component';\nexport * from './lib/query-builder/query-builder-demo.component';\nexport * from './lib/query-builder/query-builder.component';\nexport * from './lib/query-builder-formly/query-builder-formly.component';\nexport * from './lib/query-builder-textarea/query-builder-textarea-demo.component';\nexport * from './lib/query-builder-textarea/query-builder-textarea.component';\nexport * from './lib/radio-button/radio-button.component';\nexport * from './lib/scrolling-cards/scrolling-cards.component';\nexport * from './lib/skeleton/skeleton-base.component';\nexport * from './lib/skeleton/skeleton-container.component';\nexport * from './lib/skeleton/skeleton-loader.component';\nexport * from './lib/skeleton/skeleton-shapes.component';\nexport * from './lib/spinner/spinner.component';\nexport * from './lib/status-dot/status-dot.component';\nexport * from './lib/stepper/stepper.component';\nexport * from './lib/tabs/tabs.component';\nexport * from './lib/toast/toast.component';\nexport * from './lib/tool-tip/tool-tip.component';\nexport * from './lib/typography-animation/typography-animation.component';\n\n// Services\nexport * from './lib/component-library.service';\nexport * from './lib/icon/icon.service';\nexport * from './lib/query-builder/query-builder.service';\n\n// Interfaces\nexport * from './interfaces/avatar-interface';\nexport * from './interfaces/button-interface';\nexport * from './interfaces/card-carousel-interface';\nexport * from './interfaces/chip-interface';\nexport * from './interfaces/form-layout.interface';\nexport * from './interfaces/grid-interface';\nexport * from './interfaces/guide-card-interface';\nexport * from './interfaces/header-interface';\nexport * from './interfaces/icon-interface';\nexport * from './interfaces/layout-section-interface';\nexport * from './interfaces/left-nav-interface';\nexport * from './interfaces/menu.interface';\nexport * from './interfaces/message-banner';\nexport * from './interfaces/option-interface';\nexport * from './interfaces/scrolling-card-interface';\nexport * from './interfaces/select-interface';\nexport * from './interfaces/status-dot.interface';\nexport * from './interfaces/tab-interface';\nexport * from './interfaces/toast-interface';\nexport * from './interfaces/typography-animation-interface';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["nextId","i1","_get","_includes","_replace","_toString","i3","i2","_isUndefined","_first","_find","_map","_words","_isString","_split","_join","_size","_repeat","_takeRight","i4","_keys","_has","_startCase","_set","NgSelectComponent","i5","_toLower","_forEach","_filter","i6","takeUntil","i7","i8","i1.QueryBuilderService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAUa,yBAAyB,CAAA;8GAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,gFCVtC,qEAAiE,EAAA,MAAA,EAAA,CAAA,qyCAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FDUpD,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBARrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cACpB,IAAI,EAAA,OAAA,EACP,EAAE,EAGI,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,qyCAAA,CAAA,EAAA,CAAA;;;AEDvC,IAAIA,QAAM,GAAG,CAAC,CAAC;MASF,cAAc,CAAA;AAP3B,IAAA,WAAA,GAAA;AAoBY,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QAE5C,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAA;QACb,IAAc,CAAA,cAAA,GAAG,EAAE,CAAA;QACnB,IAAe,CAAA,eAAA,GAAG,EAAE,CAAA;QACpB,IAAI,CAAA,IAAA,GAAWA,QAAM,EAAE,CAAC;AAsBzB,KAAA;IApBC,WAAW,GAAA;QACT,IAAI,CAAC,QAAQ,GAAG;AACd,YAAA,oBAAoB,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,QAAQ,CAAG,CAAA,CAAA;AAC7C,YAAA,YAAY,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,QAAQ,CAAG,CAAA,CAAA;SACtC,CAAA;QACD,IAAI,CAAC,cAAc,GAAG;AACpB,YAAA,oBAAoB,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,cAAc,CAAG,CAAA,CAAA;AACnD,YAAA,YAAY,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,cAAc,CAAG,CAAA,CAAA;SAC5C,CAAA;QACD,IAAI,CAAC,eAAe,GAAG;YACrB,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAA;KACF;AAED,IAAA,aAAa,CAAC,GAAU,EAAA;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,GAAG,IAAI,CAAC,eAAe;YACvB,GAAG;AACJ,SAAA,CAAC,CAAC;KACJ;8GAvCU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EChB3B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,q7BAiBA,EDLY,MAAA,EAAA,CAAA,kgGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,8BAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAI7B,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,cACP,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,q7BAAA,EAAA,MAAA,EAAA,CAAA,kgGAAA,CAAA,EAAA,CAAA;8BAKhC,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEI,YAAY,EAAA,CAAA;sBAArB,MAAM;;;MEtBI,WAAW,CAAA;AAOtB,IAAA,WAAA,CAAoB,QAAkB,EAAA;QAAlB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;;QAJ9B,IAAI,CAAA,IAAA,GAAW,SAAS,CAAC;QAEzB,IAAU,CAAA,UAAA,GAAsB,IAAI,CAAC;KAEH;AAE1C,IAAA,IAAY,IAAI,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SACjD;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;IAED,MAAM,CAAC,QAAgB,EAAE,UAAmB,EAAA;QAC1C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,IAAI,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACxF,QAAA,MAAM,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,GAAG,IAAI,CAAC,IAAI,CAAG,EAAA,QAAQ,MAAM,CAAC;QAEhE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;KACrG;AAED,IAAA,WAAW,CAAC,IAAY,EAAA;AACtB,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAC5B;8GA1BU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCSY,aAAa,CAAA;AA2BxB,IAAA,WAAA,CAAoB,GAAsB,EAAA;QAAtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AA1B1C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAClC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;QASd,IAAQ,CAAA,QAAA,GAAW,EAAE,CAAC;QAChC,IAAO,CAAA,OAAA,GAAW,EAAE,CAAC;QACR,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;AAKrC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QAG5C,IAAe,CAAA,eAAA,GAAG,EAAE,CAAA;AACpB,QAAA,IAAA,CAAA,UAAU,GAAQ;;;SAGjB,CAAC;KAE6C;IAC/C,QAAQ,GAAA;KACP;AACD,IAAA,WAAW,CAAC,OAAsB,EAAA;AAGhC,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE;YACjD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;gBACxE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;AAC7D,aAAC,CAAC,CAAA;SACH;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC;YACvC,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;oBAC9C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;AAC3D,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAA;AAC1B,iBAAC,CAAC,CAAA;aACH;iBAAM;AACL,gBAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;aACnB;SACF;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACvC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAC5C,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,aAAa,GAAG,KAAK,CAAC;AAC7D,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,aAAa,GAAG,KAAK,CAAC;YAC9D,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;SACpC;KAGF;AACD,IAAA,WAAW,CAAC,GAAU,EAAA;AACpB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,GAAG,IAAI,CAAC,eAAe;YACvB,GAAG;AACJ,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACnB,YAAA,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,iBAAA,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM;AAAE,gBAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SAC/D;KACF;8GAnEU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,+VALb,CAAC,WAAW,CAAC,ECV1B,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,2WAQC,46BDCW,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAMX,aAAa,EAAA,UAAA,EAAA,CAAA;kBATzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EACP,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EACZ,SAAA,EAAA,CAAC,WAAW,CAAC,EAGT,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,2WAAA,EAAA,MAAA,EAAA,CAAA,q3BAAA,CAAA,EAAA,CAAA;sFAMvB,GAAG,EAAA,CAAA;sBAAhB,KAAK;uBAAC,KAAK,CAAA;gBACO,QAAQ,EAAA,CAAA;sBAA1B,KAAK;uBAAC,UAAU,CAAA;gBACG,SAAS,EAAA,CAAA;sBAA5B,KAAK;uBAAC,WAAW,CAAA;gBAET,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACS,IAAI,EAAA,CAAA;sBAAlB,KAAK;uBAAC,MAAM,CAAA;gBACG,KAAK,EAAA,CAAA;sBAApB,KAAK;uBAAC,OAAO,CAAA;gBACK,QAAQ,EAAA,CAAA;sBAA1B,KAAK;uBAAC,UAAU,CAAA;gBACR,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACgB,WAAW,EAAA,CAAA;sBAAhC,KAAK;uBAAC,aAAa,CAAA;gBACX,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEI,YAAY,EAAA,CAAA;sBAArB,MAAM;;;MEtBI,eAAe,CAAA;AAP5B,IAAA,WAAA,GAAA;QAaY,IAAY,CAAA,YAAA,GAAG,IAAI,YAAY,CAAA;QAC/B,IAAc,CAAA,cAAA,GAAG,IAAI,YAAY,CAAA;QACjC,IAAe,CAAA,eAAA,GAAG,IAAI,YAAY,CAAA;QAE5C,IAAe,CAAA,eAAA,GAAG,EAAE,CAAA;AA4BrB,KAAA;IA1BC,WAAW,GAAA;QACT,IAAI,CAAC,eAAe,GAAG;YACrB,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAA;KACF;AAED,IAAA,aAAa,CAAC,GAAU,EAAA;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,GAAG,IAAI,CAAC,eAAe;YACvB,GAAG;AACJ,SAAA,CAAC,CAAA;KACH;AAED,IAAA,UAAU,CAAC,GAAU,EAAA;AACnB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACvB,GAAG,IAAI,CAAC,eAAe;YACvB,GAAG;AACJ,SAAA,CAAC,CAAA;KACH;AAED,IAAA,UAAU,CAAC,GAAU,EAAA;AACnB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YACxB,GAAG,IAAI,CAAC,eAAe;YACvB,GAAG;AACJ,SAAA,CAAC,CAAA;KACH;8GArCU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECX5B,oUAKA,EAAA,MAAA,EAAA,CAAA,4iBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDEY,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIH,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EACT,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,IAAI,CAAC,EAAA,QAAA,EAAA,oUAAA,EAAA,MAAA,EAAA,CAAA,4iBAAA,CAAA,EAAA,CAAA;8BAKN,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,eAAe,EAAA,CAAA;sBAAxB,MAAM;;;MELI,aAAa,CAAA;AAP1B,IAAA,WAAA,GAAA;QAQkB,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;QACV,IAAc,CAAA,cAAA,GAAY,KAAK,CAAC;QAClC,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;QACrB,IAAqB,CAAA,qBAAA,GAAY,KAAK,CAAC;QAC1C,IAAkB,CAAA,kBAAA,GAAY,KAAK,CAAC;QACpC,IAAkB,CAAA,kBAAA,GAAW,EAAE,CAAC;QAC9C,IAAI,CAAA,IAAA,GAAyB,IAAI,CAAC;QAClC,IAAI,CAAA,IAAA,GAAW,EAAE,CAAC;QAChB,IAAM,CAAA,MAAA,GAAW,EAAE,CAAC;QACrB,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;QACd,IAAU,CAAA,UAAA,GAAW,EAAE,CAAC;QAK9B,IAAI,CAAA,IAAA,GAAW,EAAE,CAAC;QAGd,IAAQ,CAAA,QAAA,GAAW,EAAE,CAAC;QACtB,IAAQ,CAAA,QAAA,GAAW,EAAE,CAAC;QAIxB,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;QAEzC,IAAU,CAAA,UAAA,GAAQ,EAAE,CAAC;AActB,KAAA;AAZC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE;AACrE,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,YAAY,KAAK,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,GAAG,CAAC;AACtJ,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,YAAY,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,GAAG,CAAC;SAC3J;KACF;AACD,IAAA,WAAW,CAAC,GAAU,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACnB,YAAA,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,iBAAA,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM;AAAE,gBAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SAC/D;KACF;8GAvCU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECd1B,iiEA4CM,EDlCM,MAAA,EAAA,CAAA,81FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,sNAAE,cAAc,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAI3D,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;+BACE,SAAS,EAAA,UAAA,EACP,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,iiEAAA,EAAA,MAAA,EAAA,CAAA,81FAAA,CAAA,EAAA,CAAA;8BAKvD,KAAK,EAAA,CAAA;sBAApB,KAAK;uBAAC,OAAO,CAAA;gBACW,cAAc,EAAA,CAAA;sBAAtC,KAAK;uBAAC,gBAAgB,CAAA;gBACA,YAAY,EAAA,CAAA;sBAAlC,KAAK;uBAAC,cAAc,CAAA;gBACW,qBAAqB,EAAA,CAAA;sBAApD,KAAK;uBAAC,uBAAuB,CAAA;gBACD,kBAAkB,EAAA,CAAA;sBAA9C,KAAK;uBAAC,oBAAoB,CAAA;gBACE,kBAAkB,EAAA,CAAA;sBAA9C,KAAK;uBAAC,oBAAoB,CAAA;gBACZ,IAAI,EAAA,CAAA;sBAAlB,KAAK;uBAAC,MAAM,CAAA;gBACE,IAAI,EAAA,CAAA;sBAAlB,KAAK;uBAAC,MAAM,CAAA;gBACI,MAAM,EAAA,CAAA;sBAAtB,KAAK;uBAAC,QAAQ,CAAA;gBACC,KAAK,EAAA,CAAA;sBAApB,KAAK;uBAAC,OAAO,CAAA;gBACO,UAAU,EAAA,CAAA;sBAA9B,KAAK;uBAAC,YAAY,CAAA;gBACE,UAAU,EAAA,CAAA;sBAA9B,KAAK;uBAAC,YAAY,CAAA;gBACJ,IAAI,EAAA,CAAA;sBAAlB,KAAK;uBAAC,MAAM,CAAA;gBACQ,UAAU,EAAA,CAAA;sBAA9B,KAAK;uBAAC,YAAY,CAAA;gBAEJ,IAAI,EAAA,CAAA;sBAAlB,KAAK;uBAAC,MAAM,CAAA;gBACM,QAAQ,EAAA,CAAA;sBAA1B,KAAK;uBAAC,UAAU,CAAA;gBAEE,QAAQ,EAAA,CAAA;sBAA1B,KAAK;uBAAC,UAAU,CAAA;gBACE,QAAQ,EAAA,CAAA;sBAA1B,KAAK;uBAAC,UAAU,CAAA;gBAED,KAAK,EAAA,CAAA;sBAApB,KAAK;uBAAC,OAAO,CAAA;gBACG,MAAM,EAAA,CAAA;sBAAtB,KAAK;uBAAC,QAAQ,CAAA;gBACE,MAAM,EAAA,CAAA;sBAAtB,KAAK;uBAAC,QAAQ,CAAA;;;ME5BJ,gBAAgB,CAAA;AAP7B,IAAA,WAAA,GAAA;QAQoB,IAAO,CAAA,OAAA,GAAY,KAAK,CAAC;AAG5C,KAAA;8GAJY,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECV7B,iHAAyG,EAAA,MAAA,EAAA,CAAA,qgBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDM7F,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIX,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EACV,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,iHAAA,EAAA,MAAA,EAAA,CAAA,qgBAAA,CAAA,EAAA,CAAA;8BAKL,OAAO,EAAA,CAAA;sBAAxB,KAAK;uBAAC,SAAS,CAAA;gBACD,IAAI,EAAA,CAAA;sBAAlB,KAAK;uBAAC,MAAM,CAAA;;;AEDf,IAAID,QAAM,GAAG,CAAC,CAAC;MAWF,eAAe,CAAA;AAT5B,IAAA,WAAA,GAAA;QAqBW,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;QAG1B,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAE5B,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAClC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE,CAAC;AACpC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAE,CAAC;QAE/C,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAA;QACb,IAAe,CAAA,eAAA,GAAG,EAAE,CAAA;QACpB,IAAI,CAAA,IAAA,GAAWA,QAAM,EAAE,CAAC;AAoCzB,KAAA;AAlCC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,QAAQ,GAAG;AACd,YAAA,oBAAoB,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,SAAS,CAAG,CAAA,CAAA;AAC9C,YAAA,YAAY,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,SAAS,CAAG,CAAA,CAAA;SACvC,CAAA;QACD,IAAI,CAAC,eAAe,GAAG;YACrB,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAA;AACD,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE;AAChE,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;SACxB;KACF;AAED,IAAA,aAAa,CAAC,GAAU,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU;YAAE,OAAO;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,GAAG,IAAI,CAAC,eAAe;YACvB,GAAG;AACJ,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE;AACnB,YAAA,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO;AAAE,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClD,iBAAA,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM;AAAE,gBAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SAC/D;KACF;IAED,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU;YAAE,OAAO;AACrC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;KAC5B;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU;YAAE,OAAO;AACrC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;KAC7B;8GA1DU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EALf,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAAA,CAAC,WAAW,CAAC,ECjB1B,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,k0CAyBA,EDTkB,MAAA,EAAA,CAAA,g/GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EAAE,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAAE,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,+BAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAM/D,eAAe,EAAA,UAAA,EAAA,CAAA;kBAT3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cACT,IAAI,EAAA,OAAA,EACP,CAAC,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAChE,SAAA,EAAA,CAAC,WAAW,CAAC,EAAA,QAAA,EAAA,k0CAAA,EAAA,MAAA,EAAA,CAAA,g/GAAA,CAAA,EAAA,CAAA;8BAMf,EAAE,EAAA,CAAA;sBAAV,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,eAAe,EAAA,CAAA;sBAAxB,MAAM;;;AElBH,MAAO,kBAAmB,SAAQ,SAAS,CAAA;AAPjD,IAAA,WAAA,GAAA;;QAQE,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;QAClB,IAAgB,CAAA,gBAAA,GAAW,SAAS,CAAC;QAC7C,IAAuB,CAAA,uBAAA,GAAY,KAAK,CAAC;QACzC,IAAsB,CAAA,sBAAA,GAAW,EAAE,CAAA;AAE3B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAO,CAAC;AAwJ1C,KAAA;IAtJC,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,GAAGE,GAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;SAC1D;QACD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC,CAAC;QACpE,IAAI,CAAC,2BAA2B,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB,YAAY,CAAC,GAAG,CAAC,CAClB,CAAC,SAAS,CAAC,MAAM,IAAG;YACnB,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAC/C,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACxC,IAAI,CAAC,WAAW,GAAGA,GAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC9C,YAAA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,EAAE;AACxC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;aAC1D;YACD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC,CAAC;YACpE,IAAI,CAAC,2BAA2B,EAAE,CAAC;SACpC;KACF;IAED,2BAA2B,GAAA;;QAEzB,IAAI,KAAK,GAAG,CAAC,CAAC;;AAGd,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;AAC9B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1D,gBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;AAC5C,oBAAA,KAAK,EAAE,CAAC;iBACT;aACF;SACF;;AAGD,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE;AAClC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9D,gBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;AAChD,oBAAA,KAAK,EAAE,CAAC;iBACT;aACF;SACF;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,eAAe,EAAE,CAAC;KACxB;IAED,WAAW,GAAA;AACT,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;AACvD,QAAA,IAAIC,QAAS,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE;AAC9B,YAAA,OAAOC,OAAQ,CAAC,IAAI,EAAE,SAAS,EAAEC,QAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;SACjE;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,WAAW,CAAC,WAAgB,EAAA;AAC1B,QAAA,WAAW,CAAC,UAAU,GAAG,WAAW,EAAE,QAAQ,GAAG,WAAW,CAAC,UAAU,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC;AAClG,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;KACxC;IAED,eAAe,CAAC,KAAU,EAAE,WAAgB,EAAA;QAC1C,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;KACxC;IAED,iBAAiB,GAAA;QACf,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAAC;SACxC;KACF;IAED,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,KAAK,CAAC;SACzC;KACF;AAED,IAAA,oBAAoB,CAAC,WAAgB,EAAA;AACnC,QAAA,IAAI,WAAW,EAAE,QAAQ,EAAE;YACzB,OAAO;SACR;;AAGD,QAAA,IAAI,WAAW,CAAC,UAAU,EAAE;YAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB;aAAM;YACL,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB;;QAGD,IAAI,CAAC,eAAe,EAAE,CAAC;;QAGvB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QACtD,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAC9D,MAAM,gBAAgB,GAAG,EAAE,CAAC;;AAG5B,QAAA,IAAI,OAAO,CAAC;;AAGZ,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACvD,YAAA,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAA,IAAI,OAAO,CAAC,UAAU,EAAE;AACtB,gBAAA,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAChC;SACF;;AAGD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC3D,YAAA,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,OAAO,CAAC,UAAU,EAAE;AACtB,gBAAA,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAChC;SACF;;AAGD,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;KAC7C;IAGD,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,EAAE;AACvE,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;SAC9H;KACF;IAED,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,GAAG,IAAI,CAAC;KAC/C;IAED,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,GAAG,KAAK,CAAC;KAChD;IAED,aAAa,CAAC,MAAW,EAAE,KAAY,EAAA;QACrC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC/B;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;KAC7B;8GA3JU,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvB/B,80WAoKgB,EDjJJ,MAAA,EAAA,CAAA,gjLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yBAAyB,iEAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAiB,6WAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAE,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,4TAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAI3K,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EACP,OAAA,EAAA,CAAC,yBAAyB,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,80WAAA,EAAA,MAAA,EAAA,CAAA,gjLAAA,CAAA,EAAA,CAAA;;;AECzL,IAAIN,QAAM,GAAG,CAAC,CAAC;MAaF,uBAAuB,CAAA;IAKlC,WACU,CAAA,QAAwB;AACxB,IAAA,WAA2B;IAC3B,MAA6B,EACH,WAA2B;IAC7D,GAAsB,EAAA;QAJd,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAgB;QACxB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAgB;QAC3B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAuB;QACH,IAAW,CAAA,WAAA,GAAX,WAAW,CAAgB;QAR/D,IAAI,CAAA,IAAA,GAAWA,QAAM,EAAE,CAAC;AAEP,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;QAgBhD,IAAc,CAAA,cAAA,GAAG,QAAQ,CAAA;AACzB,QAAA,IAAA,CAAA,OAAO,GAAG;YACR,cAAc;YACd,cAAc;YACd,eAAe;YACf,WAAW;YACX,WAAW;YACX,QAAQ;SACT,CAAA;AA8CD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;;AA5DjB,QAAA,QAAQ,CAAC,YAAY;aAClB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;KAExC;;IAaD,QAAQ,GAAA;AACN,QAAA,MAAM,YAAY,GAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAEjD,QAAA,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzC,QAAA,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;;;;AAMvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE;gBAC5H,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACtC,MAAM;aACP;SACF;KACF;AAED,IAAA,IAAI,WAAW,GAAA;;QAEb,OAAO,IAAI,CAAC,WAAW;AACpB,aAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC;AACzE,aAAA,iBAAiB,EAAE,CAAC;KACxB;AAED,IAAA,eAAe,CAAC,IAAsB,EAAA;QACpC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;KAC3B;AAED,IAAA,WAAW,CAAC,IAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KAC1B;IAED,UAAU,GAAA;QACR,IAAI,CAAC,QAAQ,CAAC,WAAW;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,OAAO;AAClC,kBAAE,MAAM;AACR,kBAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,MAAM;AACnC,sBAAE,YAAY;sBACZ,OAAO,CAAC;KACjB;AAID,IAAA,aAAa,CAAC,GAAQ,EAAA;AACpB,QAAA,MAAM,QAAQ,GAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KACrC;AAED,IAAA,QAAQ,CAAC,QAAgB,EAAA;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AACtC,QAAA,IAAI,QAAa,CAAC;AAClB,QAAA,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;QAC/B,QAAQ,QAAQ;YACd,KAAK,cAAc,EAAE;AACnB,gBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACnD,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;AACrE,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACvE,gBAAA,QAAQ,GAAG;AACT,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,MAAM,EAAE,GAAG;iBACZ,CAAA;gBACD,MAAM;aACP;YACD,KAAK,cAAc,EAAE;AACnB,gBAAA,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACzD,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;AACrE,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACvE,gBAAA,QAAQ,GAAG;AACT,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,MAAM,EAAE,GAAG;iBACZ,CAAA;gBACD,MAAM;aACP;YACD,KAAK,eAAe,EAAE;AACpB,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3D,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1D,gBAAA,QAAQ,GAAG;AACT,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,MAAM,EAAE,GAAG;iBACZ,CAAA;gBACD,MAAM;aACP;YACD,KAAK,WAAW,EAAE;AAChB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACtD,gBAAA,QAAQ,GAAG;AACT,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,MAAM,EAAE,GAAG;iBACZ,CAAA;gBACD,MAAM;aACP;YACD,KAAK,WAAW,EAAE;AAChB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1D,gBAAA,QAAQ,GAAG;AACT,oBAAA,QAAQ,EAAE,KAAK;AACf,oBAAA,MAAM,EAAE,GAAG;iBACZ,CAAA;gBACD,MAAM;aACP;YACD,SAAS;AACP,gBAAA,QAAQ,GAAG;oBACT,QAAQ,EAAE,IAAI,IAAI,EAAE;oBACpB,MAAM,EAAE,IAAI,IAAI,EAAE;iBACnB,CAAA;aACF;SACF;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;IAEO,UAAU,CAAC,IAAsB,EAAE,MAAc,EAAA;;QAEvD,IAAI,CAAC,QAAQ,CAAC,UAAU;AACtB,YAAA,IAAI,KAAK,OAAO;AACd,kBAAE,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;AACtE,kBAAE,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;KAC3E;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACtB;AA5JU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,4GASxB,gBAAgB,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AATf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,wECjCpC,i4BAoBA,EAAA,MAAA,EAAA,CAAA,yhCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDOI,KAAK,EACL,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,sLACb,SAAS,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIA,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAXnC,SAAS;AAGI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,EACP,OAAA,EAAA;wBACP,KAAK;wBACL,aAAa;wBACb,SAAS;AACV,qBAAA,EAAA,QAAA,EAAA,i4BAAA,EAAA,MAAA,EAAA,CAAA,yhCAAA,CAAA,EAAA,CAAA;;0BAYE,MAAM;2BAAC,gBAAgB,CAAA;;;MEjCf,iBAAiB,CAAA;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,+ECT9B,6DAAyD,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDS5C,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EAAA,6DAAA,EAAA,CAAA;;;MEIA,0BAA0B,CAAA;8GAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,kFCTvC,mFAEM,EAAA,MAAA,EAAA,CAAA,6DAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDOO,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EAAA,mFAAA,EAAA,MAAA,EAAA,CAAA,6DAAA,CAAA,EAAA,CAAA;;;MEIA,iBAAiB,CAAA;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,wECT9B,2BAAyB,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDSZ,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EAAA,2BAAA,EAAA,CAAA;;;MEIA,yBAAyB,CAAA;8GAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,iFCTtC,sEAAkE,EAAA,MAAA,EAAA,CAAA,6CAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDSrD,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,6CAAA,CAAA,EAAA,CAAA;;;MEMA,aAAa,CAAA;AAP1B,IAAA,WAAA,GAAA;QAQW,IAAQ,CAAA,QAAA,GAAsC,EAAE,CAAC;QACnC,IAAY,CAAA,YAAA,GAAW,EAAE,CAAC;AAClD,KAAA;8GAHY,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,ECX1B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,oZASM,EDFM,MAAA,EAAA,CAAA,6dAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,6NAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAI1B,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,cACR,IAAI,EAAA,OAAA,EACP,CAAC,aAAa,EAAE,YAAY,CAAC,EAAA,QAAA,EAAA,oZAAA,EAAA,MAAA,EAAA,CAAA,6dAAA,CAAA,EAAA,CAAA;8BAK7B,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACiB,YAAY,EAAA,CAAA;sBAAlC,KAAK;uBAAC,cAAc,CAAA;;;AEOjB,MAAO,qBAAsB,SAAQ,SAAS,CAAA;IAElD,QAAQ,GAAA;;KAEP;AAED,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACpD;AAED,IAAA,eAAe,CAAC,KAAY,EAAA;QAC1B,KAAK,CAAC,eAAe,EAAE,CAAC;KACzB;AAGD,IAAA,IAAa,WAAW,GAAA;QACtB,OAAO,KAAK,CAAC,WAA0B,CAAC;KACzC;AAED,IAAA,aAAa,CAAC,MAAW,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/C;8GAtBU,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpBlC,0qGAsDU,EDtCE,MAAA,EAAA,CAAA,qgFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,4UAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,yBAAyB,EAAE,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yBAAyB,gEAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIvM,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,CAAC,EAAA,QAAA,EAAA,0qGAAA,EAAA,MAAA,EAAA,CAAA,qgFAAA,CAAA,EAAA,CAAA;;;MEDxM,kBAAkB,CAAA;AAR/B,IAAA,WAAA,GAAA;QASW,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;QACnB,IAAK,CAAA,KAAA,GAAsB,EAAE,CAAA;QAC7B,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;QAC5B,IAAY,CAAA,YAAA,GAAQ,EAAE,CAAC;AACtB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAa,CAAC;AAoBzD,KAAA;;AAjBC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,UAAU,IAAIE,WAAY,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACrG,MAAM,YAAY,GAAGC,KAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;SAChC;KACF;IACD,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,UAAU,IAAID,WAAY,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;SAEvD;KACF;AAED,IAAA,WAAW,CAAC,IAAS,EAAA;AACnB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;;AAEzB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC/B;8GAxBU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,+OCf/B,m7DAyCM,EAAA,MAAA,EAAA,CAAA,02GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/BM,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,2NAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAK1C,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAR9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EACb,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,EAGvC,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,m7DAAA,EAAA,MAAA,EAAA,CAAA,02GAAA,CAAA,EAAA,CAAA;8BAG5B,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACI,aAAa,EAAA,CAAA;sBAAtB,MAAM;;;MEFI,sBAAsB,CAAA;AATnC,IAAA,WAAA,GAAA;QAUW,IAAI,CAAA,IAAA,GAAgB,MAAM,CAAC;QAE3B,IAAO,CAAA,OAAA,GAAY,EAAE,CAAC;QAEtB,IAAc,CAAA,cAAA,GAAY,EAAE,CAAC;AAO7B,QAAA,IAAA,CAAA,QAAQ,GAAe,MAAK,GAAI,CAAC;AAChC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAO,CAAC;AAiBjD,KAAA;IAfC,iBAAiB,CAAC,KAAU,EAAE,MAAwB,EAAA;AACrD,QAAA,IAAG,WAAW,CAAC,MAAM,CAAC,EAAE;AACvB,YAAA,MAAM,GAAG;gBACP,IAAI,EAAE,IAAI,CAAC,UAAU;gBACrB,YAAY,EAAE,IAAI,CAAC,kBAAkB;gBACrC,IAAI,EAAE,IAAI,CAAC,UAAU;gBACrB,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,IAAI,EAAE,IAAI,CAAC,UAAU;gBACrB,IAAI,EAAE,IAAI,CAAC,UAAU;gBACrB,EAAE,EAAE,kBAAkB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAE,CAAA;AAClD,gBAAA,KAAK,EAAE,SAAS;aACjB,CAAA;SACD;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC/B;8GA7BU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EALtB,CAAC,WAAW,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECb1B,usCA6BM,EAAA,MAAA,EAAA,CAAA,+zCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjBM,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAM/C,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBATlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,cACjB,IAAI,EAAA,OAAA,EACP,CAAC,gBAAgB,EAAE,aAAa,EAAE,eAAe,CAAC,aAChD,CAAC,WAAW,CAAC,EAGT,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,usCAAA,EAAA,MAAA,EAAA,CAAA,+zCAAA,CAAA,EAAA,CAAA;8BAG5B,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACI,WAAW,EAAA,CAAA;sBAApB,MAAM;;;AERH,MAAO,iBAAkB,SAAQ,SAAS,CAAA;AAPhD,IAAA,WAAA,GAAA;;QAQW,IAAK,CAAA,KAAA,GAAW,aAAa,CAAC;AAG7B,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAO,CAAC;AAC7C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAO,CAAC;AAC3C,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAO,CAAC;AAC7C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAO,CAAC;QAEtD,IAAiB,CAAA,iBAAA,GAAe,IAAI,CAAC;QACrC,IAAkB,CAAA,kBAAA,GAAG,yBAAyB,CAAC;AAsChD,KAAA;AApCC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,GAAGS,IAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;SAC5D;KACF;AAED,IAAA,aAAa,CAAC,KAAK,EAAA;AACjB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACpC;AAED,IAAA,WAAW,CAAC,MAAW,EAAE,MAAW,EAAE,KAAY,EAAA;QAChD,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;KAC5F;IAED,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,wBAAwB,GAAG,IAAI,CAAC;KACnD;IAED,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,wBAAwB,GAAG,KAAK,CAAC;KACpD;IAED,aAAa,CAAC,MAAW,EAAE,KAAY,EAAA;QACrC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;KAC/E;AAED,IAAA,WAAW,CAAC,UAAe,EAAA;AACzB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;AAEzC,QAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;KAC/B;8GA/CU,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,ECvB9B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,koWAkLc,ED/JF,MAAA,EAAA,CAAA,mpMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,EAAE,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,kBAAkB,EAAE,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,EAAE,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yBAAyB,EAAE,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,EAAE,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,EAAE,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yBAAyB,EAAE,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,6TAAE,sBAAsB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,YAAA,EAAA,SAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIlQ,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EACZ,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,aAAa,EAAE,yBAAyB,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,sBAAsB,CAAC,EAAA,QAAA,EAAA,koWAAA,EAAA,MAAA,EAAA,CAAA,mpMAAA,CAAA,EAAA,CAAA;8BAKrQ,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACI,kBAAkB,EAAA,CAAA;sBAA3B,MAAM;gBACG,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBACG,kBAAkB,EAAA,CAAA;sBAA3B,MAAM;gBACG,iBAAiB,EAAA,CAAA;sBAA1B,MAAM;;;MEiBI,sBAAsB,CAAA;AAfnC,IAAA,WAAA,GAAA;QAiBW,IAAI,CAAA,IAAA,GAAiC,QAAQ,CAAC;AAC7C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAiB,CAAC;AA6EzD,KAAA;AA3EC;;;AAGG;AACH,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;YACnB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC;YACzC,IAAI,CAAC,wBAAwB,EAAE,CAAC;SACjC;KACF;AAED;;;AAGG;IACK,wBAAwB,GAAA;QAC9B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;SAC/D;KACF;IAED,WAAW,GAAA;QACT,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAChC;AAED,IAAA,aAAa,CAAC,MAAc,EAAA;QAC1B,QAAQ,MAAM;AACZ,YAAA,KAAK,QAAQ;gBACX,OAAO;AACL,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,OAAO,EAAE,QAAQ;iBAClB,CAAC;AACJ,YAAA;gBACE,OAAO;AACL,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,OAAO,EAAE,SAAS;iBACnB,CAAC;SACL;KACF;AAED,IAAA,gBAAgB,CAAC,OAAY,EAAA;AAC3B,QAAA,IAAI;;YAEF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;;AAEvC,YAAA,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;;gBAEvB,IACE,KAAK,CACH,UAAU,EACV,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI,CAC7D,EACD;AACA,oBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,IAAS,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;iBAC9D;;AAED,gBAAA,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;AAC/C,oBAAA,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;iBAC/B;AACD,gBAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;aAC5C;iBAAM;AACL,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;aAChD;SACF;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;gBAC3B,OAAO,OAAO,CAAC;aAChB;AACD,YAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;;AAEpD,YAAA,OAAO,EAAE,CAAC;SACX;KACF;8GA/EU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/CnC,0uDA8BA,EAAA,MAAA,EAAA,CAAA,grDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDMI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,cAAc,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEb,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEjB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAKP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAflC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,cAAc;wBACd,aAAa;wBACb,aAAa;wBACb,iBAAiB;wBACjB,yBAAyB;wBACzB,gBAAgB;AACjB,qBAAA,EAAA,QAAA,EAAA,0uDAAA,EAAA,MAAA,EAAA,CAAA,grDAAA,CAAA,EAAA,CAAA;8BAKQ,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACI,SAAS,EAAA,CAAA;sBAAlB,MAAM;;;MEjCI,qBAAqB,CAAA;IAchC,WACU,CAAA,GAAsB,EACtB,MAAc,EAAA;QADd,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACtB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAfd,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC;QAEb,IAAK,CAAA,KAAA,GAAmB,EAAE,CAAC;QAC3B,IAAQ,CAAA,QAAA,GAAW,IAAI,CAAC;QACxB,IAAQ,CAAA,QAAA,GAAY,IAAI,CAAC;QACzB,IAAoB,CAAA,oBAAA,GAAY,IAAI,CAAC;QACrC,IAAc,CAAA,cAAA,GAAY,IAAI,CAAC;QAC/B,IAAe,CAAA,eAAA,GAAY,IAAI,CAAC;QAEzC,IAAY,CAAA,YAAA,GAA4D,EAAE,CAAC;QAC3E,IAAY,CAAA,YAAA,GAAW,CAAC,CAAC;KAMrB;IAEJ,QAAQ,GAAA;QACN,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;KACF;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;AAC9C,YAAA,IAAI,CAAC,KAAK,GAAGI,GAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,KAAI;gBACrC,MAAM,SAAS,GAAGC,KAAM,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACnD,gBAAA,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;AACrC,sBAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;sBAC/C,SAAS,CAAC;gBACd,MAAM,QAAQ,GAAGD,GAAI,CAAC,UAAU,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjF,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACxC,aAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC1C,gBAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;aACvB;YACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,UAAU,EAAE,CAAC;aACnB;AACD,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;SACzB;KACF;IAED,WAAW,GAAA;QACT,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;IAED,UAAU,GAAA;QACR,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;AACjC,YAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,MAAK;AAC5B,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;oBACnB,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,oBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC1B,iBAAC,CAAC,CAAC;AACL,aAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACpB,SAAC,CAAC,CAAC;KACJ;IAED,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACnB;KACF;IAED,UAAU,GAAA;QACR,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;KACF;AAED,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,YAAY,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC1E,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;SACzB;KACF;IAED,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAChE,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;SACzB;KACF;IAED,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACpF,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;SACzB;KACF;IAED,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACvB,OAAO;SACR;AAED,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACvD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzD,QAAA,MAAM,SAAS,GAAG,eAAe,GAAG,WAAW,CAAC;AAEhD,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,QAAA,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;YAC5C,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAC9E,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACpB,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,QAAQ,EAAE,KAAK,KAAK,IAAI,CAAC,YAAY;AACtC,aAAA,CAAC,CAAC;SACJ;KACF;8GA5HU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBlC,uwFAsDM,ED3CM,MAAA,EAAA,CAAA,2kDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,4UAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,yBAAyB,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;2FAMvE,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAChB,IAAI,EAAA,OAAA,EACP,CAAC,aAAa,EAAE,aAAa,EAAE,yBAAyB,EAAE,eAAe,CAAC,iBAGpE,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,uwFAAA,EAAA,MAAA,EAAA,CAAA,2kDAAA,CAAA,EAAA,CAAA;2GAKtC,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;;;MEwBK,sBAAsB,CAAA;AAPnC,IAAA,WAAA,GAAA;AAQW,QAAA,IAAA,CAAA,MAAM,GAAwB,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;QACjD,IAAkB,CAAA,kBAAA,GAAW,EAAE,CAAC;AAC/B,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAgB,CAAC;AACpD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAQ,CAAC;AAqBxD,KAAA;AAnBC,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC;KACtC;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,aAAa,CAAC;KAC5C;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC;KACjC;AAED,IAAA,eAAe,CAAC,QAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACtC;IAED,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;KAC/B;8GAxBU,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,gPCjDnC,4qDA4CA,EAAA,MAAA,EAAA,CAAA,sxEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDCY,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,eAAe,wRAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAI3C,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,eAAe,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,4qDAAA,EAAA,MAAA,EAAA,CAAA,sxEAAA,CAAA,EAAA,CAAA;8BAK9C,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACI,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBACG,iBAAiB,EAAA,CAAA;sBAA1B,MAAM;;;AEtCH,MAAO,iBAAkB,SAAQ,SAAS,CAAA;AAC9C,IAAA,eAAe,CAAC,MAAW,EAAA;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7C,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,YAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC7B;aAAM;AACL,YAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SAC3B;QACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;KAC1C;;AAGD,IAAA,UAAU,CAAC,MAAW,EAAA;AACpB,QAAA,OAAOE,QAAS,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;KAChE;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;AACpC,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;KAC5D;8GApBU,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,8FCf9B,shCA0BM,EAAA,MAAA,EAAA,CAAA,6zEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDfM,cAAc,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,oFAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,oNAAE,WAAW,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIxC,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EACP,OAAA,EAAA,CAAC,cAAc,EAAE,YAAY,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,shCAAA,EAAA,MAAA,EAAA,CAAA,6zEAAA,CAAA,EAAA,CAAA;;;MEEzC,oBAAoB,CAAA;8GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAPrB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAXhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EACrB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,EAAE,EACD,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,CAAA;;;MCGU,wBAAwB,CAAA;AAVrC,IAAA,WAAA,GAAA;AAWW,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,CAAC;AACrB,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAQ,CAAC;AAqB7D,KAAA;IAjBC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,EAAE;AAC/B,YAAA,OAAO,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;AACtF,YAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;SAC5B;;AAGD,QAAA,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,MAAK;AACxC,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;AACrC,SAAC,EAAE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;KACnC;IAED,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SACvC;KACF;8GAtBU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,uRCbrC,gCAA4B,EAAA,MAAA,EAAA,CAAA,yjDAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDaf,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAVpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EACnB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,EAAE,EAGL,IAAA,EAAA;AACJ,wBAAA,8BAA8B,EAAE,yBAAyB;AAC1D,qBAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,yjDAAA,CAAA,EAAA,CAAA;8BAGQ,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACI,sBAAsB,EAAA,CAAA;sBAA/B,MAAM;;;MEHI,gBAAgB,CAAA;AAP7B,IAAA,WAAA,GAAA;QAQW,IAAQ,CAAA,QAAA,GAAa,EAAE,CAAC;QACxB,IAAe,CAAA,eAAA,GAAW,QAAQ,CAAC;QACnC,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;AAE3B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE,CAAC;AACpC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAE,CAAC;QAC3C,IAAS,CAAA,SAAA,GAAG,oCAAoC,CAAC;QACjD,IAAO,CAAA,OAAA,GAAG,oCAAoC,CAAC;AAE/C,QAAA,IAAA,CAAA,MAAM,GAAW,CAAC,CAAC;AAepB,KAAA;AAbC,IAAA,YAAY,CAAC,CAAS,EAAA;AACpB,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AACjB,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACrC,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;SACzB;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;KAC5B;8GAvBU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,kPCZ7B,4lEAwCA,EAAA,MAAA,EAAA,CAAA,44FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDhCY,eAAe,EAAE,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,KAAK,mHAAE,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAI3B,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EACP,OAAA,EAAA,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,EAAA,QAAA,EAAA,4lEAAA,EAAA,MAAA,EAAA,CAAA,44FAAA,CAAA,EAAA,CAAA;8BAK9B,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEI,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,WAAW,EAAA,CAAA;sBAApB,MAAM;;;MEuBI,iBAAiB,CAAA;AAgB5B,IAAA,WAAA,CAAoB,GAAsB,EAAU,OAAgB,EAAU,gBAAkC,EAAA;QAA5F,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAU,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;QAAU,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAZhH,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;QACZ,IAAiB,CAAA,iBAAA,GAAG,CAAC,CAAC;QAC/B,IAAc,CAAA,cAAA,GAAoB,EAAE,CAAC;QACrC,IAAmB,CAAA,mBAAA,GAAG,CAAC,CAAC;QAExB,IAAM,CAAA,MAAA,GAAG,CAAC,CAAC;AAED,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAqB,CAAC;AAC3D,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAqB,CAAC;AACzD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAE,CAAC;AACtC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAqB,CAAC;QAIrE,IAAW,CAAA,WAAA,GAAQ,IAAI,CAAC;QAChB,IAAmB,CAAA,mBAAA,GAA0C,IAAI,CAAC;KAH0C;AAKpH,IAAA,MAAM,CAAC,MAAkB,EAAA;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;;AAG9B,QAAA,IAAI,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE;YACpD,MAAM,aAAa,GAAG,CAAG,EAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAA,WAAA,CAAa,CAAC;AAC1D,YAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACvC;QAED,IAAI,CAAC,MAAM,GAAG;AACZ,YAAA,GAAG,MAAM;AACT,YAAA,IAAI,QAAQ,IAAI,EAAE;SACnB,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;AACnE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9E,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAChG;aACI;YACF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AAC7C,YAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;SAC/B;KACF;AAED,IAAA,OAAO,CAAC,MAAkB,EAAA;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACpB,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,MAAM,CAAC,KAAc,EAAA;QACnB,OAAO,OAAO,KAAK,CAAC;KACrB;AAED,IAAA,aAAa,CAAC,KAAU,EAAA;QACtB,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE;YACrC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACzC;QACD,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;AACrD,YAAA,GAAG,KAAK;YACR,KAAK,EAAE,IAAI,CAAC,MAAM;AACnB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KAChE;AAED,IAAA,cAAc,CAAC,OAAoB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAW,CAAC;SAC/B;AAED,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;aAC7C,mBAAmB,CAAC,OAAO,CAAC;aAC5B,QAAQ,CAAC,IAAI,CAAC;aACd,sBAAsB,CAAC,IAAI,CAAC;aAC5B,kBAAkB,CAAC,CAAC,CAAC;AACrB,aAAA,aAAa,CAAC;AACb,YAAA;AACE,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;AACF,SAAA,CAAC,CAAC;QAEL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACpC,gBAAgB;AAChB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,kCAAkC;AACjD,YAAA,UAAU,EAAE,wBAAwB;YACpC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE;AAC3D,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAChF,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE/B,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,MAAK;AAC7C,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAC1B,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAW,CAAC;aAC/B;AACH,SAAC,CAAC,CAAC;KACJ;IAED,iBAAiB,CAAC,MAAW,EAAE,KAAY,EAAA;QACzC,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,QAAA,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,MAAM,CAAC,OAAO,EAAE,CAAC;SAClB;KACF;AAGD,IAAA,eAAe,CAAC,KAAY,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACxF,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;SAC3B;KACF;AAED,IAAA,WAAW,CAAC,GAAU,EAAA;QACpB,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACjD,YAAA,GAAG,GAAG;YACN,KAAK,EAAE,IAAI,CAAC,MAAM;AACnB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KAC5D;IAED,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,aAAa;YAAE,OAAO;QAElD,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YACjD,KAAK,EAAE,IAAI,CAAC,MAAM;AACnB,SAAA,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,EAAE;YACrC,IAAI,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,OAAO,EAAE;gBAChD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAE,CAAC;aAC3C;iBACI,IAAI,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,MAAM,EAAE;gBACpD,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,eAAgB,CAAC;aAC9C;SACF;AACD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KACpD;AAED,IAAA,aAAa,CAAC,GAAU,EAAA;QACtB,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;AACrD,YAAA,GAAG,GAAG;YACN,KAAK,EAAE,IAAI,CAAC,MAAM;AACnB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KAC9D;IAED,WAAW,CAAC,MAAW,EAAE,KAAkB,EAAA;AACzC,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;AAC1B,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,aAAa,EAAE;AAChC,YAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAA4B,CAAC;YACzD,MAAM,WAAW,GAAG,aAAa,CAAC,aAAa,CAAC,SAAS,CAAgB,CAAC;YAC1E,IAAI,WAAW,EAAE;AACf,gBAAA,MAAM,IAAI,GAAG,WAAW,CAAC,qBAAqB,EAAE,CAAC;AACjD,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAChD,gBAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;aACxD;SACF;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAChC;IAED,sBAAsB,CAAC,GAAW,EAAE,IAAY,EAAA;QAC9C,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;QACnF,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACnE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;QACpD,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,eAAe,GAAG,KAAK,CAAC;QAE1D,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,aAAa,CAAC;AACvE,QAAA,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,CAAA;;aAEtB,GAAG,CAAA;cACF,IAAI,CAAA;;;;KAIb,CAAC;AACF,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;KAC5D;IAED,uBAAuB,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,aAAa,CAAC;AACvE,YAAA,IAAI,cAAc,CAAC,UAAU,EAAE;AAC7B,gBAAA,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;aACvD;AACD,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;AACnC,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;SACjC;KACF;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU;AAAE,YAAA,OAAO,EAAE,CAAC;AACxC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;KACtD;AAGD;;;;;;;;AAQG;AACH,IAAA,SAAS,CAAC,KAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,GAAG,CAAC;;AAGvB,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAE/B,QAAA,IAAI,CAACY,QAAS,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,GAAG,CAAC;QAErC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,OAAO,IAAI,CAAC;YAAE,OAAO,QAAQ,CAAC;AAElC,QAAA,MAAM,CAAC,SAAS,EAAE,GAAG,WAAW,CAAC,GAAGC,KAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,GAAG,GAAGC,IAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAE7C,QAAA,MAAM,WAAW,GAAGC,IAAK,CAAC,SAAS,CAAC,CAAC;AAErC,QAAA,IAAI,WAAW,IAAI,CAAC,EAAE;;AAEpB,YAAA,OAAOP,KAAM,CAAC,SAAS,CAAC,GAAGQ,MAAO,CAAC,GAAG,EAAE,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;SACnE;;AAGD,QAAA,MAAM,SAAS,GAAGR,KAAM,CAAC,SAAS,CAAC,CAAC;AACpC,QAAA,MAAM,YAAY,GAAGS,SAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvD,QAAA,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,CAAC;AAErC,QAAA,OAAO,SAAS,GAAGD,MAAO,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,YAAY,GAAG,MAAM,CAAC;KACvE;IAED,WAAW,GAAA;QACT,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;SAC3B;KACF;8GArQU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAhB,IAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,whBCzC9B,q3HAmEA,EAAA,MAAA,EAAA,CAAA,2uFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvCI,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,cAAc,EACd,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,EACf,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,KAAK,mHACL,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEJ,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,6NACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAKP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAjB7B,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EACP,OAAA,EAAA;wBACP,eAAe;wBACf,cAAc;wBACd,eAAe;wBACf,KAAK;wBACL,IAAI;wBACJ,gBAAgB;wBAChB,YAAY;wBACZ,aAAa;wBACb,gBAAgB;AACjB,qBAAA,EAAA,QAAA,EAAA,q3HAAA,EAAA,MAAA,EAAA,CAAA,2uFAAA,CAAA,EAAA,CAAA;6IAK8B,gBAAgB,EAAA,CAAA;sBAA9C,SAAS;uBAAC,kBAAkB,CAAA;gBAEE,gBAAgB,EAAA,CAAA;sBAA9C,SAAS;uBAAC,kBAAkB,CAAA;gBAQnB,kBAAkB,EAAA,CAAA;sBAA3B,MAAM;gBACG,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBACG,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBACG,kBAAkB,EAAA,CAAA;sBAA3B,MAAM;gBA4GP,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MEnJ/B,iBAAiB,CAAA;AAP9B,IAAA,WAAA,GAAA;QASW,IAAU,CAAA,UAAA,GAAa,EAAE,CAAC;QAC1B,IAAO,CAAA,OAAA,GAAU,EAAE,CAAC;AACpB,QAAA,IAAA,CAAA,aAAa,GAAW;AAC/B,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,SAAS,EAAE,IAAI;SAChB,CAAC;;QAGO,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;QAC5B,IAAkB,CAAA,kBAAA,GAAW,EAAE,CAAC;QAChC,IAA0B,CAAA,0BAAA,GAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACzD,IAAU,CAAA,UAAA,GAAW,GAAG,CAAC;QAEzB,IAAU,CAAA,UAAA,GAAQ,EAAE,CAAC;AACpB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAuB,CAAC;AAqK/D,KAAA;;IAhKC,mBAAmB,GAAA;;AAEjB,QAAA,OAAO,IAAI,CAAC,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;KACnD;AAED,IAAA,WAAW,CAAC,MAA2B,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AAC1B,QAAA,iBAAiB,CAAC,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC;AAC/C,QAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;;AAG9B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,OAAO,CAAC,aAAa;AAC1B,kBAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC;kBACzD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC/C;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC7B;IAED,OAAO,iBAAiB,CACtB,OAAgB,EAChB,QAAgB,EAChB,KAAa,EACb,SAAiC,EAAA;QAEjC,MAAM,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAEzD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,gBAAgB,QAAQ,CAAA,WAAA,CAAa,CAAC,CAAC;YACrD,OAAO;SACR;AAED,QAAA,MAAM,QAAQ,GAAG,CAAG,EAAA,KAAK,aAAa,CAAC;QAEvC,MAAM,cAAc,GAClB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAE/B,QAAA,MAAM,aAAa,GAA2B;AAC5C,YAAA,GAAG,cAAc;AACjB,YAAA,GAAG,SAAS;SACb,CAAC;AAEF,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC;AAEvC,QAAA,OAAO,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;KAC9E;;AAGD,IAAA,OAAO,eAAe,CAAC,KAAY,EAAE,SAAiC,EAAE,EAAA;QACtE,OAAO;AACL,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,gBAAgB,EAAE,KAAK;AACvB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK;AAC7B,gBAAA,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AACjB,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;AACrB,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS;AAC5B,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;AAC9B,gBAAA,GAAG,IAAI;AACR,aAAA,CAAC,CAAC;AACH,YAAA,GAAG,MAAM;SACV,CAAC;KACH;;AAGD,IAAA,OAAO,cAAc,CAAC,IAAY,EAAE,SAAiC,EAAE,EAAA;QACrE,OAAO;AACL,YAAA,QAAQ,EAAE,MAAM;AAChB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,gBAAgB,EAAE,KAAK;AACvB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,UAAU,EAAE,KAAK;YACjB,IAAI;AACJ,YAAA,GAAG,MAAM;SACV,CAAC;KACH;;IAGD,OAAO,gBAAgB,CAAC,MAQvB,EAAA;QACC,OAAO;AACL,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,gBAAgB,EAAE,KAAK;AACvB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;AACvB,YAAA,YAAY,EAAE;gBACZ,EAAE,EAAE,MAAM,CAAC,IAAI;AACf,gBAAA,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI;AAC9B,gBAAA,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,SAAS;AACxC,gBAAA,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO;AACrC,aAAA;SACF,CAAC;KACH;;IAGD,OAAO,iBAAiB,CAAC,MAA0L,EAAA;QACjN,OAAO;AACL,YAAA,QAAQ,EAAE,SAAS;AACnB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,gBAAgB,EAAE,KAAK;AACvB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,cAAc,EAAE,MAAM,CAAC,cAAc;AACrC,YAAA,YAAY,EAAE;AACZ,gBAAA,EAAE,EAAE,gBAAgB;AACpB,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,SAAS,EAAE,uBAAuB;AAClC,gBAAA,YAAY,EAAE,MAAM;AACpB,gBAAA,OAAO,EAAE,CAAC,KAAU,KAAI;AACtB,oBAAA,IAAI,MAAM,CAAC,OAAO,EAAE;wBAClB,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAClD,wBAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;4BAC9B,OAAO,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,MAAM,CAAC,KAAK,CAAY,UAAA,CAAA,CAAC,CAAC;AAClD,yBAAC,CAAC,CAAC;qBACJ;iBACF;AACF,aAAA;SACF,CAAC;KACH;;AAGD,IAAA,OAAO,qBAAqB,CAAC,KAAa,EAAE,SAAiC,EAAE,EAAA;QAC7E,OAAO;AACL,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,eAAe,EAAE,KAAK;AACtB,YAAA,gBAAgB,EAAE,KAAK;AACvB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,GAAG,MAAM;SACV,CAAC;KACH;8GApLU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,ECf9B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,+kBAcA,EDHY,MAAA,EAAA,CAAA,4tEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,8BAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,6BAAA,EAAA,gCAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,wBAAA,EAAA,6BAAA,EAAA,oBAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,8BAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,wBAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,8BAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,+BAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,0BAAA,EAAA,mCAAA,EAAA,8BAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,qCAAA,EAAA,mCAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,sCAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,sCAAA,EAAA,sBAAA,EAAA,6BAAA,EAAA,cAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,0BAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,uBAAA,EAAA,2BAAA,EAAA,eAAA,EAAA,2BAAA,EAAA,qBAAA,EAAA,+BAAA,EAAA,4BAAA,EAAA,yBAAA,EAAA,OAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,+BAAA,EAAA,wBAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,8BAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,4BAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,gBAAA,EAAA,yBAAA,EAAA,+BAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,wBAAA,EAAA,6BAAA,EAAA,yBAAA,EAAA,2CAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,4BAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,8BAAA,EAAA,mCAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,6BAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,6BAAA,EAAA,oBAAA,EAAA,gCAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,yBAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,iCAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,wBAAA,EAAA,uCAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,yBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,4BAAA,EAAA,2CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,kCAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iCAAA,EAAA,yBAAA,EAAA,qBAAA,EAAA,sBAAA,EAAA,yBAAA,EAAA,gCAAA,EAAA,qCAAA,EAAA,2BAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,qCAAA,EAAA,oBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,wBAAA,EAAA,4BAAA,EAAA,oCAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,yBAAA,EAAA,wBAAA,EAAA,2BAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,6BAAA,EAAA,yBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,8BAAA,EAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,+BAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,2BAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,gCAAA,EAAA,0BAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,yBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,aAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,6BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,aAAA,EAAA,eAAA,EAAA,+BAAA,EAAA,gCAAA,EAAA,8BAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,yBAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,qCAAA,EAAA,cAAA,EAAA,4BAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,0BAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,6BAAA,EAAA,0BAAA,EAAA,0BAAA,EAAA,4BAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIzB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,YAAY,EAAE,iBAAiB,CAAC,EAAA,QAAA,EAAA,+kBAAA,EAAA,MAAA,EAAA,CAAA,4tEAAA,CAAA,EAAA,CAAA;8BAM/C,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAOG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACG,0BAA0B,EAAA,CAAA;sBAAlC,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACI,SAAS,EAAA,CAAA;sBAAlB,MAAM;;;AEGH,MAAO,mBAAoB,SAAQ,SAA0B,CAAA;AArBnE,IAAA,WAAA,GAAA;;QAsBW,IAAK,CAAA,KAAA,GAAc,IAAI,SAAS,CAAC;AACxC,YAAA,KAAK,EAAE,IAAI,WAAW,CAAc,IAAI,CAAC;AACzC,YAAA,GAAG,EAAE,IAAI,WAAW,CAAc,IAAI,CAAC;AACxC,SAAA,CAAC,CAAC;QACM,IAAQ,CAAA,QAAA,GAAuB,OAAO,CAAC;QACvC,IAAO,CAAA,OAAA,GAAgB,IAAI,CAAC;QAC5B,IAAO,CAAA,OAAA,GAAgB,IAAI,CAAC;QAC5B,IAAQ,CAAA,QAAA,GAAW,YAAY,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAO,CAAC;AACvC,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,WAAW,CAAc,IAAI,CAAC,CAAC;QAEvD,IAAuB,CAAA,uBAAA,GAAG,uBAAuB,CAAC;AAY5D,KAAA;AAVC,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC;KACpD;AAED,IAAA,YAAY,CAAC,KAAU,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE;YAC9B,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SACnC;KACF;8GAvBU,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAlBnB,EAAE,ECjBf,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,osCAsBA,w+BDHI,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,olCAGnB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAY,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,EAEX,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,8BACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,eAAe,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAKN,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBArB/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EACb,UAAA,EAAA,IAAI,EACL,SAAA,EAAA,EAAE,EACJ,OAAA,EAAA;wBACP,kBAAkB;wBAClB,cAAc;wBACd,mBAAmB;wBACnB,KAAK;wBACL,IAAI;wBACJ,mBAAmB;wBACnB,WAAW;wBACX,uBAAuB;wBACvB,YAAY;wBACZ,mBAAmB;wBACnB,aAAa;wBACb,eAAe;AAChB,qBAAA,EAAA,QAAA,EAAA,osCAAA,EAAA,MAAA,EAAA,CAAA,i7BAAA,CAAA,EAAA,CAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAIG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACI,UAAU,EAAA,CAAA;sBAAnB,MAAM;;;AEvCH,SAAU,oBAAoB,CAAC,SAAkB,EAAA;IACnD,OAAO,CAAC,OAAwB,KAA6B;AACzD,QAAA,MAAM,oBAAoB,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAC/E,IAAI,oBAAoB,IAAI,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE;YAC9D,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAErD,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE;gBACxC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAClD,oBAAA,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;iBAC9C;aACJ;SACJ;AACD,QAAA,OAAO,IAAI,CAAC;AAChB,KAAC,CAAA;AACL,CAAC;AAEK,SAAU,mBAAmB,CAAC,SAAkB,EAAA;IAClD,OAAO,CAAC,OAAwB,KAA6B;AACzD,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;AAC3B,QAAA,MAAM,UAAU,GAAG,SAAS,IAAI,MAAM,CAAC;QAEvC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AAC7B,YAAA,OAAO,EAAE,OAAO,EAAE,GAAG,UAAU,CAAA,aAAA,CAAe,EAAE,CAAC;SACpD;;QAGD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;AACzB,YAAA,OAAO,EAAE,OAAO,EAAE,GAAG,UAAU,CAAA,4BAAA,CAA8B,EAAE,CAAC;SACnE;;QAGD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;AAClC,YAAA,OAAO,EAAE,OAAO,EAAE,GAAG,UAAU,CAAA,0BAAA,CAA4B,EAAE,CAAC;SACjE;;QAGD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,YAAA,OAAO,EAAE,OAAO,EAAE,GAAG,UAAU,CAAA,oCAAA,CAAsC,EAAE,CAAC;SAC3E;;QAGD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE;AACzB,YAAA,OAAO,EAAE,OAAO,EAAE,GAAG,UAAU,CAAA,6BAAA,CAA+B,EAAE,CAAC;SACpE;QAGD,OAAO,IAAI,CAAC;AAChB,KAAC,CAAC;AACN,CAAC;AAEM,MAAM,oBAAoB,GAAG,CAChC,OAAwB,KACU;AAClC,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;;IAG5B,MAAM,YAAY,GAAG,mDAAmD,CAAC;AAEzE,IAAA,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;QAChD,OAAO,IAAI,CAAC;KACf;SAAM;QACH,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC3B,OAAO;AACH,gBAAA,OAAO,EACH,qCAAqC;AAC5C,aAAA,CAAC;SACL;QACD,OAAO;AACH,YAAA,OAAO,EACH,mFAAmF;AAC1F,SAAA,CAAC;KACL;AACL,CAAC,CAAC;AACF,MAAM,WAAW,GAAG,CAAC,KAAa,KAAa;IAC3C,MAAM,iBAAiB,GAAa,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAClE,IAAI,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,YAAA,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,CAAA,EAAA,EAAK,iBAAiB,CAAC,CAAC,CAAC,CAAM,IAAA,CAAA,CAAC,CAAC;AACrD,YAAA,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACrB,gBAAA,OAAO,KAAK,CAAC;aAChB;SACJ;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC,CAAA;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;AACG,SAAU,oBAAoB,CAAC,MAAW,EAAE,WAAsB,GAAA,OAAO,EAAE,oBAA0B,EAAA;IACvG,MAAM,QAAQ,GAAGjB,GAAI,CAAC,oBAAoB,EAAE,iCAAiC,EAAE,EAAE,CAAC,CAAC;IACnF,MAAM,KAAK,GAAGA,GAAI,CAAC,oBAAoB,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAEtD,IAAI,MAAM,EAAE;;QAER,MAAM,WAAW,GAAGQ,IAAK,CAACU,IAAK,CAAC,MAAM,CAAC,EAAE,GAAG,IAAIC,GAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AACrE,QAAA,IAAI,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE;;YAEtC,IAAI,OAAO,QAAQ,CAAC,WAAW,CAAC,KAAK,UAAU,EAAE;AAC7C,gBAAA,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC;aAC5D;AACD,YAAA,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC;SAChC;;AAGD,QAAA,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE;YACrB,OAAO,CAAA,QAAA,EAAW,MAAM,CAAC,WAAW,CAAC,CAAC,gBAAgB,CAAC,CAAA,oBAAA,CAAsB,CAAC;SACjF;AAAM,aAAA,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE;YAC5B,OAAO,CAAA,WAAA,EAAc,MAAM,CAAC,WAAW,CAAC,CAAC,gBAAgB,CAAC,CAAA,oBAAA,CAAsB,CAAC;SACpF;AAAM,aAAA,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE;YAC3B,OAAO,CAAA,EAAG,WAAW,CAAA,gBAAA,CAAkB,CAAC;SAC3C;AAAM,aAAA,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE;AAC1B,YAAA,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;SAC5B;AAAM,aAAA,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE;AACxB,YAAA,OAAO,qBAAqB,CAAC;SAChC;AAAM,aAAA,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE;;YAE1B,MAAM,SAAS,GAAGnB,GAAI,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,EAAE,CAAC,CAAC;YAC5E,MAAM,UAAU,GAAGA,GAAI,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,WAAW,CAAC,CAAC;YAChF,MAAM,gBAAgB,GAAGA,GAAI,CAAC,oBAAoB,EAAE,yBAAyB,EAAE,WAAW,CAAC,CAAC;AAE5F,YAAA,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACtI,gBAAA,OAAO,2CAA2C,CAAC;aACtD;AAAM,iBAAA,IAAI,SAAS,KAAK,KAAK,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC3E,gBAAA,OAAO,4BAA4B,CAAC;aACvC;AAAM,iBAAA,IAAI,SAAS,KAAK,OAAO,EAAE;AAC9B,gBAAA,OAAO,6BAA6B,CAAC;aACxC;iBAAM;AACH,gBAAA,IAAI,UAAU;AACV,oBAAA,OAAO,wBAAwB,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC;AACzD,qBAAA,IAAI,gBAAgB;AACrB,oBAAA,OAAO,wBAAwB,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC;aACvE;SACJ;aAAM;YACH,OAAO,CAAA,QAAA,EAAW,WAAW,CAAA,CAAE,CAAC;SACnC;KACJ;IACD,OAAO,CAAA,QAAA,EAAW,WAAW,CAAA,CAAE,CAAC;AACpC,CAAC;SAEe,oBAAoB,CAAC,KAAmC,EAAE,IAAI,GAAG,IAAI,EAAA;IACjF,OAAO,CAAC,OAAwB,KAA6B;AACzD,QAAA,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAE1B,IAAI,IAAI,KAAK,YAAY,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpD,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;SAClC;;QAGD,MAAM,YAAY,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;;AAGrF,QAAA,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,KAAK,CAAC,GAAG,IAAI,YAAY,GAAG,KAAK,CAAC,GAAG,EAAE;YAC7E,OAAO;gBACH,OAAO,EAAE,uCAAuC,KAAK,CAAC,GAAG,CAAQ,KAAA,EAAA,KAAK,CAAC,GAAG,CAAE,CAAA;aAC/E,CAAC;SACL;AAED,QAAA,OAAO,IAAI,CAAC;AAChB,KAAC,CAAA;AACL,CAAC;AAEM,MAAM,wBAAwB,GAAG,CAAC,KAAU,EAAE,KAAwB,KAAI;IAC7E,OAAO,CAAA,EAAGoB,SAAU,CAACpB,GAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAA,aAAA,CAAe,CAAC;AACpE,CAAC;;ACjKK,MAAO,kBAAmB,SAAQ,SAA0B,CAAA;AA+BhE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;QAzBV,IAAU,CAAA,UAAA,GAAG,MAAM,CAAC;QACpB,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;QAGd,IAAY,CAAA,YAAA,GAAQ,IAAI,CAAC;;;QAIzB,IAAI,CAAA,IAAA,GAAW,EAAE,CAAC;QAIlB,IAAc,CAAA,cAAA,GAAW,eAAe,CAAC;QAEzC,IAAa,CAAA,aAAA,GAAY,KAAK,CAAC;QAC/B,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;QAC1B,IAAU,CAAA,UAAA,GAAU,EAAE,CAAC;QACvB,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;QAC9B,IAAiB,CAAA,iBAAA,GAAW,EAAE,CAAC;QAC/B,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;QACrB,IAAU,CAAA,UAAA,GAAW,CAAC,CAAC;QAEf,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;AAsQ/B,QAAA,IAAA,CAAA,oBAAoB,GAAQ;YAC1B,KAAK,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC9C,YAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC/B,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;SAC7C,CAAC;KAtQD;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,GAAGA,GAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAEA,GAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9F,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;QACnD,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAE1C,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YAC9CqB,GAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC;;YAEjD,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AAC3C,gBAAA,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;aACvB;AACH,SAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE;AAClE,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAa,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC;AAClF,YAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;SAC7B;;QAGD,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACjD,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,gBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAChD,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;iBAClC;AACD,gBAAA,IAAI,CAAC,aAAa;AAChB,oBAAA,KAAK,KAAK,OAAO;yBAChB,KAAK,KAAK,SAAS;AAClB,4BAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;AACpC,4BAAA,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aAC/B;AACH,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YAC9CA,GAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;KACJ;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACxF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,EAAE,eAAe,IAAI,EAAE,CAAC;AAC1D,QAAA,IAAG,CAACrB,GAAI,CAAC,IAAI,CAAC,KAAK,EAAE,uBAAuB,EAAE,IAAI,CAAC,EAAE;AACnD,YAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC;gBAC9B,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;AAC/D,gBAAA,IAAI,IAAI,CAAC,UAAU;AACpB,aAAA,CAAC,CAAC;SACJ;AACD,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAC5D;KACF;AAED;;AAEE;IACF,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAEzD,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAACA,GAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;AACxE,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;gBACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;aAC7C;YAED,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;gBAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAC9C,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzC,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;oBACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;iBAC7C;AACH,aAAC,CAAC,CAAC;SACJ;KACF;AACD,IAAA,eAAe,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,cAAmB,CAAC;AACxB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,cAAc,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;SACjD;aAAM;YACL,cAAc,GAAG,KAAK,CAAC;SACxB;AACD,QAAA,OAAO,cAAc,CAAC;KACvB;IAED,aAAa,CAAC,iBAAiB,GAAG,OAAO,EAAA;QACvC,IACE,IAAI,CAAC,WAAW;AAChB,YAAA,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK;YACvB,IAAI,CAAC,WAAW,CAAC,OAAO;AACxB,YAAA,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EACzB;AACA,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5B,YAAA,IAAI,CAAC,cAAc;gBACjB,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,OAAO,EAAE;oBAC5G,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,oBAAA,sBAAsB,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;AAC9C,iBAAA,CAAC,IAAI,CAAW,QAAA,EAAA,IAAI,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,OAAO,EAAE,CAAA;SACpF;aAAM;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,iBAAiB,CAAC;SACrC;KACF;IAED,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK;AAAE,YAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;KACvD;IACD,MAAM,GAAA;QACJ,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;AACjC,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;aAC5B;AACD,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;SAC7B,EAAE,GAAG,CAAC,CAAC;KACT;AAED,IAAA,OAAO,CAAC,KAAU,EAAA;QAChB,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,KAAK,EAAE;AAC/B,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7C;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,YAAY,EAAE;AACtC,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAG,EAAA,KAAK,CAAG,CAAA,CAAA,GAAG,EAAE,CAAC;SAC1C;QACD,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB;;;;;;AAMG;KACJ;IAED,oBAAoB,GAAA;QAClB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,eAAe,GAAG,CAAC,CAAC;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5B,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAClC,YAAA,IAAI,EAAE,eAAe,GAAG,CAAC,CAAC,EAAE;AAC1B,gBAAA,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;AAC3C,oBAAA,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;AACtB,oBAAA,eAAe,EAAE,CAAC;iBACnB;aACF;AAAM,iBAAA,IACL,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAChD,gBAAA,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EACpB;AACA,gBAAA,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;AACtB,gBAAA,eAAe,EAAE,CAAC;aACnB;SACF;AAED,QAAA,OAAO,MAAM,CAAC;KACf;IAED,iBAAiB,CAAC,QAAa,OAAO,EAAA;QACpC,IACE,KAAK,KAAK,OAAO;YACjB,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EACjD;AACA,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AACrC,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,OAAO;gBAC/B,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,iBAAiB,CAC9C,IAAI,CAAC,QAAQ,CAAC,MAAM,EACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CACrB,CAAC;iBACH,EAAE,EAAE,CAAC,CAAC;SACV;KACF;IAED,cAAc,GAAA;QACZ,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,UAAU,EAAE;AACpC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AAC5B,gBAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;AACnB,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;aAC3B;iBAAM;AACL,gBAAA,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;AACvB,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;aAChC;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;KACF;AAED,IAAA,OAAO,CAAC,KAAa,EAAA;QACnB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,OAAO;AAChD,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;AACnB,YAAA,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;AACnB,YAAA,SAAS,EAAE,IAAI;SAChB,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAS,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;AAC3F,QAAA,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAa,CAAC,GAAG,YAAY,CAAC;KAC/C;AAED,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC/B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACjC,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAS,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;QAC3F,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAa,CAAC,GAAG,YAAY,CAAC;KAC/C;AAED,IAAA,aAAa,CAAC,KAAoB,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;AAC/B,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YAC9C,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SACtC;AAAM,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7F,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAC7C;KACF;AAED,IAAA,iBAAiB,CAAC,KAAU,EAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC/B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;KAC7C;IAED,UAAU,GAAA;QACR,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;AAC/B,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE;AACjC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SACtC;KACF;AACD;;;AAGG;IAEH,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;YACxD,QACE,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,OAAO,EAAC;gBAC3G,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,sBAAsB,EAAEA,GAAI,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC;aACvD,CAAC;AACF,gBAAA,CAAA,QAAA,EAAW,IAAI,CAAC,MAAM,EAAE,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,OAAO,CAAA,CAAE,EAC3E;SACH;aAAM;AACL,YAAA,OAAO,IAAI,CAAC,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC;SACvC;KACF;IAQD,gBAAgB,GAAA;QACd,IAAI,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE;AAC5B,YAAA,OAAO,oBAAoB,CAAC;SAC7B;aAAM,IAAI,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,EAAE;AAChC,YAAA,OAAO,kBAAkB,CAAC;SAC3B;aAAM;YACL,OAAO,KAAK,CAAC;SACd;KACF;AAED,IAAA,UAAU,CAAC,MAA6B,EAAA;AACtC,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;SACnB;aAAM;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;SACvE;KACF;8GAzTU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,ECnC/B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,+yMAmHM,ED3FF,MAAA,EAAA,CAAA,imHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,0bACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,EACb,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,6TAChB,cAAc,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAKL,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAf9B,SAAS;+BACE,UAAU,EAAA,UAAA,EACR,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,YAAY;wBACZ,aAAa;wBACb,gBAAgB;wBAChB,cAAc;AACf,qBAAA,EAAA,QAAA,EAAA,+yMAAA,EAAA,MAAA,EAAA,CAAA,imHAAA,CAAA,EAAA,CAAA;wDAKuB,SAAS,EAAA,CAAA;sBAAhC,SAAS;uBAAC,WAAW,CAAA;gBAEP,IAAI,EAAA,CAAA;sBAAlB,KAAK;uBAAC,MAAM,CAAA;gBAMJ,MAAM,EAAA,CAAA;sBAAd,KAAK;;IA+UI,gBAIX;AAJD,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AAC7B,IAAA,eAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AAC7B,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AAC3B,CAAC,EAJW,eAAe,KAAf,eAAe,GAI1B,EAAA,CAAA,CAAA;;AEhWK,MAAO,mBAAoB,SAAQ,SAA0B,CAAA;;AAKjE,IAAA,sBAAsB,CAAC,KAAU,EAAA;AAC/B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,KAAK,CAAC;QAE7B,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC;KACjF;AAYD,IAAA,WAAA,CAAoB,UAAsB,EAAA;AACxC,QAAA,KAAK,EAAE,CAAC;QADU,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QAV1C,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;QACd,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;QAE3B,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;QACrB,IAAU,CAAA,UAAA,GAAW,CAAC,CAAC;AAGD,QAAA,IAAA,CAAA,UAAU,GAAmC,IAAI,YAAY,EAAE,CAAC;KAKrF;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AAC5C,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;;AAG/C,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YACzD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;SAChC;AAGD,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;QAC1E,IAAI,CAAC,QAAQ,GAAG;AACd,YAAA,oBAAoB,EAAE,CAAO,IAAA,EAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAK,GAAA,CAAA;AACtD,YAAA,YAAY,EAAE,CAAO,IAAA,EAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAG,CAAA,CAAA;SAC7C,CAAA;;QAGD,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,EAAE;YACzC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;SAC1C;;QAGD,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;IAEO,sBAAsB,GAAA;AAC5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AACjC,QAAA,IAAI,eAAe,GAAG,mBAAmB,CAAC;;QAG1C,QAAO,KAAK;AACV,YAAA,KAAK,SAAS;gBACZ,eAAe,GAAG,gBAAgB,CAAC;gBACnC,MAAM;AACR,YAAA,KAAK,SAAS;gBACZ,eAAe,GAAG,mBAAmB,CAAC;gBACtC,MAAM;AACR,YAAA,KAAK,OAAO;gBACV,eAAe,GAAG,iBAAiB,CAAC;gBACpC,MAAM;AACR,YAAA,KAAK,SAAS;gBACZ,eAAe,GAAG,mBAAmB,CAAC;gBACtC,MAAM;AACR,YAAA,KAAK,SAAS,CAAC;AACf,YAAA;gBACE,eAAe,GAAG,mBAAmB,CAAC;gBACtC,MAAM;SACT;QAED,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE;AACnE,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,qBAAqB,EAAE,eAAe,CAAC,CAAC;SAC3F;KACF;AACD,IAAA,SAAS,CAAC,KAAc,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;YAAE,OAAO;AACtC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;YAC/C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAA;SAC9C;aAAM;YACL,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;SAC7C;KACF;AACD,IAAA,UAAU,CAAC,MAAc,EAAA;QACzB,IAAI,MAAM,IAAI,SAAS;YAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzC,IAAI,MAAM,IAAI,SAAS;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC3C,IAAI,MAAM,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC;YAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC9D,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC;AAC1E,cAAE,IAAI,CAAC,MAAM,CAAC,WAAW;AACzB,cAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;KACvB;IAEC,YAAY,CAAC,IAAS,EAAE,KAAY,EAAA;QAClC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;AAEvB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE;;AAE1B,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,OAAO;SACR;;QAGD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;AAClD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC;AAC5E,QAAA,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAErD,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;AACrD,YAAA,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;YACjE,OAAO,aAAa,KAAK,SAAS,CAAC;AACrC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,QAAQ,CAAC;AACb,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,YAAA,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;AAC7B,YAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SAC3B;aAAM;AACL,YAAA,QAAQ,GAAG,CAAC,GAAG,YAAY,EAAE,IAAI,CAAC,CAAC;SACpC;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;AAEjC,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAE5B,QAAA,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC;KAC3C;AAGD,IAAA,gBAAgB,CAAC,QAAa,EAAA;;AAE5B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE;AAChC,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;SAC7B;aAAM;;;YAGL,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;AAClD,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9D,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACvB,EAAE,CAAC,CAAC,CAAC;SACP;KACF;IAED,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ;YAAE,OAAO;;AAGnC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC;AAE5E,QAAA,IAAI,SAAS,CAAC;QACd,IAAI,SAAS,EAAE;;AAEb,YAAA,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;SAClE;aAAM;;AAEL,YAAA,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;SACnC;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;AAEjC,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AAE7B,QAAA,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC;;QAG1C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACxC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC;SACjD;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ;YAAE,OAAO;QAEnC,MAAM,UAAU,GAAU,EAAE,CAAC;AAE7B,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;AAEjC,QAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AAE9B,QAAA,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC;QAE1C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACxC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC;SACjD;KACF;;IAGD,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ;YAAE,OAAO;AACnC,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YACxB,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;aAAM;YACL,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;KACF;IAED,aAAa,GAAA;QACX,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;AAClD,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;AAC3B,YAAA,YAAY,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM;AAC/C,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;KAC3E;IAED,cAAc,GAAA;QACZ,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;AAClD,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;YAC3B,YAAY,CAAC,MAAM,GAAG,CAAC;YACvB,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;KACtD;IACD,mBAAmB,CAAC,IAAS,EAAE,KAAY,EAAA;QACzC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;AAEvB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ;YAAE,OAAO;QAEnC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;AAClD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC;AAE5E,QAAA,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;AACnB,QAAA,IAAI,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAEnD,IAAI,SAAS,EAAE;;AAEb,YAAA,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,QAAa,KAAK,QAAQ,KAAK,SAAS,CAAC,CAAC;SAC/E;aAAM;;YAEL,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,QAAa,KAAI;gBACnD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5D,oBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;iBAC1D;gBACD,OAAO,QAAQ,KAAK,IAAI,CAAC;AAC3B,aAAC,CAAC,CAAC;SACJ;AAED,QAAA,IAAI,QAAQ,CAAC;AACb,QAAA,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;;AAElB,YAAA,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;AAC7B,YAAA,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;SAC/B;aAAM;;YAEL,IAAI,SAAS,EAAE;;AAEb,gBAAA,QAAQ,GAAG,CAAC,GAAG,YAAY,EAAE,SAAS,CAAC,CAAC;aACzC;iBAAM;;AAEL,gBAAA,QAAQ,GAAG,CAAC,GAAG,YAAY,EAAE,IAAI,CAAC,CAAC;aACpC;SACF;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;AAEjC,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAE5B,QAAA,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC;QAE1C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YACxC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC;SACjD;;QAGD,UAAU,CAAC,MAAK;YACd,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC1C,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;aACtB;SACF,EAAE,CAAC,CAAC,CAAC;KACP;AAED,IAAA,gBAAgB,CAAC,IAAS,EAAA;QACxB,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;AAClD,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;AAE/C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC;QAE5E,IAAI,SAAS,EAAE;;AAEb,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AAClC,YAAA,OAAO,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SACzC;aAAM;;AAEL,YAAA,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,QAAa,KAAI;gBACzC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5D,oBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;iBAC1D;gBACD,OAAO,QAAQ,KAAK,IAAI,CAAC;AAC3B,aAAC,CAAC,CAAC;SACJ;KACF;IAED,YAAY,CAAC,QAAa,EAAE,KAAe,EAAA;;AAEzC,QAAA,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAEhF,QAAA,IAAI,CAAC,QAAQ,GAAG,YAAY,EAAE,MAAM,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;;;;;AAKzD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,KAAK,IAAI,YAAY,EAAE,MAAM,GAAG,CAAC,EAAE;YACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;SACjD;aAAM;YACL,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;SAC3C;KACF;AACD,IAAA,UAAU,CAAC,IAAwB,EAAE,KAAa,GAAA,IAAI,EAAE,OAAmB,EAAA;AACzE,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,KAAK;YACL,IAAI;AACL,SAAA,CAAC,CAAC;QACH,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,IAAI,EAAE,CAAC;SAChB;KACF;8GA5UU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAoBnBiB,mBAAiB,ECnD9B,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,s7NA6HM,0vMD7GF,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvB,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,YAAY,EAEZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,8qCACd,cAAc,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,IAAI,EACJ,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,KAAK,kHACL,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAY,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAMH,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAnB/B,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EACP,OAAA,EAAA;wBACP,mBAAmB;wBACnB,YAAY;wBACZ,mBAAmB;wBACnB,cAAc;wBACd,cAAc;wBACd,IAAI;wBACJ,KAAK;wBACL,gBAAgB;wBAChB,aAAa;wBACb,YAAY;wBACZ,gBAAgB;AACjB,qBAAA,EAAA,QAAA,EAAA,s7NAAA,EAAA,MAAA,EAAA,CAAA,msMAAA,CAAA,EAAA,CAAA;+EAuBqB,UAAU,EAAA,CAAA;sBAA/B,MAAM;uBAAC,YAAY,CAAA;gBACU,QAAQ,EAAA,CAAA;sBAArC,SAAS;uBAACD,mBAAiB,CAAA;;;MEVjB,wBAAwB,CAAA;AARrC,IAAA,WAAA,GAAA;;QAUU,IAAK,CAAA,KAAA,GAAG,MAAM,CAAqB;AACzC,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,eAAe,EAAE;AACf,gBAAA,MAAM,EAAE,SAAS;AAClB,aAAA;AACF,SAAA,CAAC,CAAC;;AAGO,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AACtC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,OAAO;AACL,gBAAA,GAAG,YAAY;gBACf,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,WAAW,CAAC;aAChE,CAAC;AACJ,SAAC,CAAC,CAAC;QAQM,IAAM,CAAA,MAAA,GAAO,EAAE,CAAC;QAChB,IAAU,CAAA,UAAA,GAA6B,IAAI,CAAC;AAE3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAQ,CAAC;AACtD,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;QACzB,IAAK,CAAA,KAAA,GAAQ,EAAE,CAAC;QAChB,IAAM,CAAA,MAAA,GAAwB,EAAE,CAAC;QACjC,IAAY,CAAA,YAAA,GAAwB,EAAE,CAAC;AACvC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,IAAsB,CAAA,sBAAA,GAAwB,EAAE,CAAC;QACjD,IAAe,CAAA,eAAA,GAAwB,EAAE,CAAC;AAC1C,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AA0BxB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAA6B,CAAC;QAoD7D,IAAO,CAAA,OAAA,GAAsB,EAAE,CAAC;AAC/B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAoB,CAAC;AA+b9D,KAAA;;AA5gBC,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,EAAE,CAAC;KACtC;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC;KACrC;AAED,IAAA,IAAI,sBAAsB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,YAAY,IAAI,EAAE,CAAC;KAC5C;AAED,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC;KACnD;AAED,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,OAAO,IAAI,EAAE,CAAC;KACvC;AAED,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,EAAE,CAAC;KACtC;AAID,IAAA,YAAY,CAAC,IAAS,EAAA;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KAC5D;IAED,SAAS,GAAA;AACP,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAChD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE;AAC9C,YAAA,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,IAClD,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,EAAE,KAAK,UAAU,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,CAC9E,CAAC;SACH;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;;AAE5E,QAAA,IAAI,aAAa,EAAE,SAAS,KAAK,KAAK,EAAE;YACtC,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;KACF;;IAGD,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,KAAK,IAAG;AACrC,YAAA,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;AACnB,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IAED,kBAAkB,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;QAC7E,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;KACvF;IAGD,IAAa,WAAW,CAAC,KAAa,EAAA;QACpC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;KACxD;IAED,IAAa,eAAe,CAAC,KAA0C,EAAA;QACrE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;KAC5D;IAED,IAAa,KAAK,CAAC,KAAa,EAAA;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;KAClD;IAED,IAAa,WAAW,CAAC,KAAa,EAAA;QACpC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;KACxD;AAKD,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,MAAM,uBAAuB,GAAG,OAAO,CAAC,aAAa,CAAC;;YAEpD,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC;QAEhF,IAAI,uBAAuB,EAAE;YAC3B,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;SAC9D;;AAGD,QAAA,IAAI,OAAO,CAAC,oBAAoB,CAAC,EAAE;YACjC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SACvD;AAED,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE;gBAC7B,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,CAAC,wBAAwB,EAAE,CAAC;aACjC;SACF;KACF;IACO,wBAAwB,GAAA;;QAE9B,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;gBAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,eAAe,EAAE,CAAC;oBAC1B,OAAO,CAAC,cAAc,EAAE,CAAC;AACzB,oBAAA,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;iBACzB;AACH,aAAC,CAAC,CAAC;SACJ,EAAE,CAAC,CAAC,CAAC;KACP;AAEO,IAAA,wBAAwB,CAAC,IAA8D,EAAA;;AAa7F,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAClC,QAAA,MAAM,OAAO,GAAkF;AAC7F,YAAA,OAAO,EAAE;AACP,gBAAA,KAAK,EAAE,qEAAqE;AAC5E,gBAAA,WAAW,EAAE,kHAAkH;AAC/H,gBAAA,WAAW,EAAE,mBAAmB;AACjC,aAAA;AACD,YAAA,UAAU,EAAE;AACV,gBAAA,KAAK,EAAE,uFAAuF;AAC9F,gBAAA,WAAW,EAAE,4HAA4H;AACzI,gBAAA,WAAW,EAAE,6BAA6B;AAC3C,aAAA;AACD,YAAA,MAAM,EAAE;AACN,gBAAA,KAAK,EAAE,yDAAyD;AAChE,gBAAA,WAAW,EAAE,4EAA4E;AACzF,gBAAA,WAAW,EAAE,0BAA0B;AACxC,aAAA;AACD,YAAA,gBAAgB,EAAE;AAChB,gBAAA,KAAK,EAAE,oBAAoB;AAC3B,gBAAA,WAAW,EAAE,CAAkN,+MAAA,EAAA,IAAI,CAAC,UAAU,IAAI,6BAA6B,CAAmC,iCAAA,CAAA;AAClT,gBAAA,WAAW,EAAE,+BAA+B;AAC5C,gBAAA,iCAAiC,EAAE,KAAK;AACxC,gBAAA,UAAU,EAAC,MAAM;AACjB,gBAAA,UAAU,EAAE,yBAAyB;AACrC,gBAAA,gBAAgB,EAAE,+BAA+B;AAClD,aAAA;SACF,CAAC;AAEF,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK;AACtB,YAAA,GAAG,CAAC;YACJ,IAAI;;AAEJ,YAAA,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK;AACnC,YAAA,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,WAAW;AACrD,YAAA,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,WAAW;;AAErD,YAAA,IAAI,WAAW,CAAC,iCAAiC,IAAI,EAAE,iCAAiC,EAAE,WAAW,CAAC,iCAAiC,EAAE;AACzI,YAAA,IAAI,WAAW,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,UAAU,EAAE;AACpE,YAAA,IAAI,WAAW,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,UAAU,EAAE;AACpE,YAAA,IAAI,WAAW,CAAC,gBAAgB,IAAI,EAAE,gBAAgB,EAAE,WAAW,CAAC,gBAAgB,EAAE;AACvF,SAAA,CAAC,CAAC,CAAC;KACL;AAEO,IAAA,mBAAmB,CAAC,WAAmB,EAAA;QAC7C,OAAO,WAAW,CAAC,OAAO,CACxB,8BAA8B,EAC9B,+DAA+D,CAChE,CAAC;KACH;IAED,aAAa,CAAC,MAAW,EAAE,KAAa,EAAA;;AAEtC,QAAA,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,UAAU,IAAI,MAAM,CAAC,EAAE,KAAK,YAAY,CAAC,EAAE;;AAEhI,YAAA,IAAK,MAAM,CAAC,EAAE,KAAK,UAAU,EAAE;;gBAE7B,IAAI,CAAC,SAAS,EAAE,CAAC;aAClB;iBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE;;gBAElD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;aACpC;AAAM,iBAAA,IAAI,MAAM,CAAC,OAAO,EAAE;;gBAEzB,MAAM,CAAC,OAAO,EAAE,CAAC;aAClB;SACF;aAAM,IAAI,KAAK,EAAE;;AAEhB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBACpB,IAAI,EAAE,MAAM,CAAC,IAA+B;gBAC5C,MAAM;AACN,gBAAA,aAAa,EAAE,KAAK;AACrB,aAAA,CAAC,CAAC;SACJ;KACF;IAED,aAAa,GAAA;QACX,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;KACnD;AAED,IAAA,aAAa,CAAC,GAAQ,EAAA;QACpB,IAAI,GAAG,EAAE;YACP,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;SACtC;aAAI;AACH,YAAA,OAAO,IAAI,CAAC;SACb;KACF;IAEO,kBAAkB,GAAA;;AAExB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;AAC5B,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAC1B,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACtF,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAC1B,OAAO;SACR;;AAGD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACrC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;AAC9C,QAAA,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,YAAY,CAAC;;AAGzE,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;;AAGrC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;;YAEjE,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,EAAE,WAAW,IAAI,KAAK,CAAC,MAAM,EAAE,WAAW,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC;AAE9I,YAAA,MAAM,kBAAkB,GAAG,KAAK,IAAI,oBAAoB,CAAC;AAEzD,YAAA,MAAM,WAAW,GAAsB;gBACrC,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,YAAY,EAAE,YAAY,CAAC;AACrE,gBAAA,cAAc,EAAE,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,KAAK;AACrF,gBAAA,KAAK,EAAE;;AAEL,oBAAA,WAAW,EAAE,gBAAgB;oBAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,IAAI,KAAK;oBAC1D,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,IAAI,KAAK;;AAG1D,oBAAA,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI;AAC1B,wBAAA,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;AAC5B,wBAAA,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK;wBACvC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,OAAO;wBACnD,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,OAAO;wBACnD,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,KAAK,KAAK;wBACtD,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,IAAI,KAAK;qBAC5D;;AAGD,oBAAA,MAAM,EAAE;AACN,wBAAA,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE;wBACtB,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE;;AAE7B,wBAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,gBAAgB;AACpE,wBAAA,WAAW,EAAE,gBAAgB;AAC9B,qBAAA;AACF,iBAAA;AACD,gBAAA,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;aAC5C,CAAC;;AAGF,YAAA,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE;gBAC7B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAa,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;aAC/C;;AAGD,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAa,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACvB,gBAAA,IAAI,WAAwB,CAAC;AAC7B,gBAAA,IAAI,KAAK,CAAC,WAAW,EAAE;AACrB,oBAAA,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;iBACjC;qBAAM;oBACL,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC;AAClD,oBAAA,WAAW,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;iBAC9D;gBACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;aACxC;AAED,YAAA,OAAO,WAAW,CAAC;AACrB,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;QACxE,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;IAEO,iBAAiB,CAAC,KAAa,EAAE,YAAoB,EAAA;AAC3D,QAAA,MAAM,OAAO,GAAG,EAAE,GAAG,YAAY,CAAC;QAClC,OAAO,CAAA,IAAA,EAAO,OAAO,CAAA,CAAE,CAAC;KACzB;AAEO,IAAA,iBAAiB,CAAC,YAAoB,EAAA;;AAE5C,QAAA,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,qBAAqB,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC5F;AAEO,IAAA,mBAAmB,CAAC,KAAU,EAAA;QACpC,MAAM,UAAU,GAAQ,EAAE,CAAC;QAE3B,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE;YACpD,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC;SACrD;AAED,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;YACtE,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;SACjD;AAED,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE;gBAC/B,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;aACrD;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;AAC1C,gBAAA,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;aAC1C;SACF;AAED,QAAA,OAAO,UAAU,CAAC;KACnB;IAGD,0BAA0B,GAAA;QACxB,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;AAE/E,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACrC,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;;AAGrF,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,yBAAyB,EAAE,CAAC;SACzC;;QAGD,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,QAAQ;AAClD,YAAA,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;AACnF,QAAA,OAAO,UAAU,CAAC;KACnB;IAEO,sBAAsB,GAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACrC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;AAC9C,QAAA,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,YAAY,CAAC;;AAGzE,QAAA,MAAM,2BAA2B,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAEtE,QAAA,IAAI,2BAA2B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,oBAAoB,EAAE;;AAEvF,YAAA,MAAM,uBAAuB,GAAG,MAAM,CAAC,iBAAiB,EAAE,MAAM;AAC9D,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,oBAAoB,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,oBAAoB,CAAC,CAAC;YAEjH,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;;AAG7G,YAAA,IAAI,CAAC,sBAAsB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;;gBAElE,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,EAAE,WAAW,IAAI,KAAK,CAAC,MAAM,EAAE,WAAW,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC;AAE9I,gBAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAE3G,gBAAA,MAAM,WAAW,GAAsB;oBACrC,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC;AACtD,oBAAA,KAAK,EAAE;;AAEL,wBAAA,WAAW,EAAE,gBAAgB;wBAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,IAAI,KAAK;wBAC1D,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,IAAI,KAAK;;AAG1D,wBAAA,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI;AAC1B,4BAAA,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;AAC5B,4BAAA,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK;4BACvC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,OAAO;4BACnD,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,OAAO;4BACnD,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,KAAK,KAAK;4BACtD,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,IAAI,KAAK;yBAC5D;;AAGD,wBAAA,MAAM,EAAE;AACN,4BAAA,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE;4BACtB,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE;;AAE7B,4BAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,gBAAgB;AACpE,4BAAA,WAAW,EAAE,gBAAgB;AAC9B,yBAAA;AACF,qBAAA;oBACD,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,EAAE,UAAU,IAAI,EAAE;iBAC9D,CAAC;;AAGF,gBAAA,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE;oBAC7B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAa,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;iBAC/C;;AAGD,gBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAa,CAAC;gBAChC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACvB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;iBACpF;AAED,gBAAA,OAAO,WAAW,CAAC;AACrB,aAAC,CAAC,CAAC;SACJ;aAAM;;AAEL,YAAA,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;SAClC;KACF;AAEO,IAAA,gBAAgB,CAAC,QAAa,EAAA;AACpC,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC;;AAG3B,QAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;YAClC,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SACxC;AAED,QAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;;YAEhC,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE;AAClD,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC;aACtD;SACF;AAED,QAAA,OAAO,IAAI,CAAC;KACb;;AAGD,IAAA,iBAAiB,CAAC,KAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC;;;QAIzC,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;;AAGjD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,EAAE,mBAAmB;AACzB,YAAA,IAAI,EAAE,KAAK;AACZ,SAAA,CAAC,CAAC;KACJ;AAED;;;;;AAKG;AACH,IAAA,sBAAsB,CAAC,KAAiB,EAAA;AACtC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;QACtD,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;YAC1C,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;SAC9B;KACF;;IAGD,gBAAgB,GAAA;QACd,IAAI,CAAC,IAAI,CAAC,gBAAgB;AAAE,YAAA,OAAO,EAAE,CAAC;AAEtC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,IAAI,IAAI,CAAC,gBAAgB,CAAC,YAAY,IAAI,CAAC,CAAC;QAC3G,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;KACrD;;IAGD,yBAAyB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;;AAG9E,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACrC,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;;AAGrF,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAC3E,QAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE,EAAE;AACrC,YAAA,MAAM,uBAAuB,GAAG,MAAM,CAAC,iBAAiB,EAAE,MAAM;gBAC9D,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,oBAAoB,EAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,oBAAoB,CAAC,CAAC;YAChH,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC7G,YAAA,aAAa,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,CAAC;SAC1C;;QAGD,MAAM,eAAe,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,IAAG;AAClD,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;YAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAExC,YAAA,IAAI,CAAC,UAAU;AAAE,gBAAA,OAAO,KAAK,CAAC;;AAG9B,YAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AAClC,gBAAA,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;aACjC;;AAGD,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC7B,gBAAA,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;aAC9B;AAED,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAElC,OAAO,eAAe,IAAI,SAAS,CAAC;KACrC;8GAljBU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iCAAA,EAAA,mCAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAJxB,CAAC,WAAW,CAAC,+CCrC1B,ipMA0HG,EAAA,MAAA,EAAA,CAAA,yoKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtFS,YAAY,EAAiB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAvB,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,uRAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAC,sBAAsB,EAA2C,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,YAAA,EAAA,SAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,uSAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAK7L,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBARpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EACpB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAC,sBAAsB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,cAAc,CAAC,EAC9L,SAAA,EAAA,CAAC,WAAW,CAAC,EAAA,QAAA,EAAA,ipMAAA,EAAA,MAAA,EAAA,CAAA,yoKAAA,CAAA,EAAA,CAAA;8BAyBf,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,iCAAiC,EAAA,CAAA;sBAAzC,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACI,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;gBAkCG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAoCM,WAAW,EAAA,CAAA;sBAAvB,KAAK;gBAIO,eAAe,EAAA,CAAA;sBAA3B,KAAK;gBAIO,KAAK,EAAA,CAAA;sBAAjB,KAAK;gBAIO,WAAW,EAAA,CAAA;sBAAvB,KAAK;gBAIG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACI,WAAW,EAAA,CAAA;sBAApB,MAAM;;;ME3II,eAAe,CAAA;IAkB1B,WACqB,CAAA,SAAwC,EACf,IAAS,EAAA;QADlC,IAAS,CAAA,SAAA,GAAT,SAAS,CAA+B;QACf,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAK;QAnBvD,IAAU,CAAA,UAAA,GAA2B,EAAE,CAAC;AAe9B,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAE,CAAC;AAM/C,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;SAC7B;KACF;IAED,aAAa,CAAC,MAAW,EAAE,KAAW,EAAA;AACpC,QAAA,IAAI,KAAK,EAAE,GAAG,EAAE;AACd,YAAA,KAAK,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC;AAC5B,YAAA,KAAK,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC;SAC9B;QACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,MAAM,EAAC,CAAC,CAAC;KAC9C;AACD,IAAA,yBAAyB,CAAC,KAAgC,EAAA;;QAExD,IAAI,CAAC,IAAI,CAAC,yBAAyB,GAAG,KAAK,CAAC,CAAC;KAC9C;AACD,IAAA,iBAAiB,CAAC,KAAuB,EAAA;QACvC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,CAAC;KACtC;AAED,IAAA,kBAAkB,CAAC,KAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,KAAU,KAAI;AACjF,YAAA,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;AACnB,SAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE;AACtD,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;SAC5D;AACD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;KAC9D;;AAED,IAAA,kBAAkB,CAAC,KAAgC,EAAA;AACjD,QAAA,QAAO,KAAK,CAAC,IAAI;AACf,YAAA,KAAK,mBAAmB;AACtB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnC,MAAM;AACR,YAAA,KAAK,mBAAmB;;AAEtB,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AACxD,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;gBAC9E,MAAM;AACR,YAAA,KAAK,qBAAqB;;AAExB,gBAAA,IAAI,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE;AACzB,oBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;iBACnE;AACD,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM;AACR,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B,MAAM;AACR,YAAA;gBACE,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SACxD;KACF;AACD,IAAA,iBAAiB,CAAC,KAAU,EAAA;AAC1B,QAAA,IAAI,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACxB,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;SACnF;QACD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC;AAC9C,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;KACnE;AAED,IAAA,YAAY,CAAC,IAAS,EAAA;AACpB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;KACnE;;IAGD,SAAS,GAAA;;AAEP,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;;;QAGrB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;KACrD;AAhGU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,gEAoBJ,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AApB1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,ECnB5B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,wpJAwHA,EDzGY,MAAA,EAAA,CAAA,i7IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,2QAAE,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,EAAA,mCAAA,EAAA,YAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAE,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAiB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,6NAAE,eAAe,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIjI,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cACT,IAAI,EAAA,OAAA,EACP,CAAC,sBAAsB,EAAE,wBAAwB,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,wpJAAA,EAAA,MAAA,EAAA,CAAA,i7IAAA,CAAA,EAAA,CAAA;;0BAuB9J,QAAQ;;0BACR,QAAQ;;0BAAI,MAAM;2BAAC,eAAe,CAAA;yCAlB5B,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAcI,iBAAiB,EAAA,CAAA;sBAA1B,MAAM;;;AESH,MAAO,yBAA0B,SAAQ,SAA0B,CAAA;AACvE,IAAA,IAAI,SAAS,GAAA,EAAa,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,EAAE;AACtE,IAAA,IAAI,SAAS,GAAA,EAAa,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,EAAE;AACtE,IAAA,IAAI,cAAc,GAAA,EAAa,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,YAAY,CAAC,EAAE;IAgBrF,WAAoB,CAAA,GAAsB,EAAU,QAAmB,EAAA;AACrE,QAAA,KAAK,EAAE,CAAC;QADU,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAAU,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;AAfvE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAQ,EAAE,CAAC,CAAC;AAChC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC/B,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAElC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAM,SAAS,CAAC,CAAC;AAC1C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAQ,EAAE,CAAC,CAAC;AACvC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAS,EAAE,CAAC,CAAC;AAChC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAM,SAAS,CAAC,CAAC;AAEtC,QAAA,IAAA,CAAA,EAAE,GAAe,MAAM,CAAC,UAAU,CAAC,CAAC;AAwL5C,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC;YAE7C,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,OAAO,EAAE,CAAC;aACX;AAED,YAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,GAAQ,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9H,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC;AAC7C,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,OAAO,UAAU,CAAC;aACnB;YACD,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,IAC/B,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,GAAQ,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CACnH,CAAC;AACJ,SAAC,CAAC,CAAC;;AAGH,QAAA,IAAA,CAAA,uBAAuB,GAAG,QAAQ,CAAC,MAAK;YACtC,MAAM,IAAI,GAAGoB,OAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;AACzC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACtC,YAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAe,CAAC;AAEzC,YAAAC,OAAQ,CAAC,UAAU,EAAE,QAAQ,IAAG;AAC9B,gBAAA,MAAM,UAAU,GAAGzB,GAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;gBAE3D,IAAI,CAAC,IAAI,EAAE;;AAET,oBAAA,SAAS,CAAC,GAAG,CAACA,GAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAEc,IAAK,CAAC,UAAU,CAAC,CAAC,CAAC;iBAClE;qBAAM;;AAEL,oBAAA,MAAM,kBAAkB,GAAGY,MAAO,CAAC,UAAU,EAAE,CAAC,GAAQ,KACtDzB,QAAS,CAACuB,OAAQ,CAACxB,GAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CACzD,CAAC;AACF,oBAAA,SAAS,CAAC,GAAG,CAACA,GAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAEc,IAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;iBAC1E;AACH,aAAC,CAAC,CAAC;AAEH,YAAA,OAAO,SAAS,CAAC;AACnB,SAAC,CAAC,CAAC;QA7ND,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC3C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAE/B,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAACP,KAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5C,OAAO;aACR;;AAGD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;YAC1D,IAAI,YAAY,EAAE;AAChB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACxC,OAAO;aACR;;AAGD,YAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;gBAC/B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;aACxD;iBAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AACxC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAACA,KAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;aACvD;AACH,SAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;KACjC;IAED,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE;AAC5B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAC5C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,GAAG,EAAE,CAAC,CAAC;SAC9E;QAED,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YACpC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,IAAG;gBAC1F,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC;AAC5D,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;AACjE,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBAClD;aACF,CAAC,CAAC,CAAC;SACL;aAAM;AACL,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;AAClF,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;AACjE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAClD;SACF;KACF;AAGD,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AACjD,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;;AAEjB,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;aAClC;AACD,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACxB;KACF;IAED,cAAc,GAAA;AACZ,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE3B,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACxB,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;aAC3C;AACD,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAEzB,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,aAAa,EAAE;gBAChD,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,WAAW,CAAC;AACxE,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC;;AAGvD,gBAAA,MAAM,YAAY,GAAG,EAAE,CAAC;gBACxB,MAAM,aAAa,GAAG,CAAC,cAAc,GAAG,MAAM,IAAI,YAAY,CAAC;AAE/D,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,WAAW,EAAE,GAAG,aAAa,CAAA,GAAA,CAAK,CAAC,CAAC;AAC7F,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,aAAa,CAAA,GAAA,CAAK,CAAC,CAAC;aAC1F;;YAGD,IAAI,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE;gBAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;gBAClD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,GAAG,EAAE,CAAC,CAAC;aAC9E;AAAM,iBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACjC,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;aACvD;iBAAM;AACL,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACjC;;AAGD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;YAC1D,IAAI,YAAY,EAAE;AAChB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;aACzC;AAAM,iBAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE;gBACtC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;aACxD;iBAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AACxC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAClD;SACF;aAAM;;AAEL,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;SAClC;KACF;AAED,IAAA,cAAc,CAAC,QAAa,EAAA;AAC1B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;;QAEpC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1C,YAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;SACzC;KACF;AAED,IAAA,WAAW,CAAC,GAAQ,EAAA;AAClB,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,IAAG;YAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACzF,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,gBAAA,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aAC7B;iBAAM;AACL,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACzC,MAAM,QAAQ,GAAG,EAAE,GAAG,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AAC3G,gBAAA,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC3B;YACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AAC3C,YAAA,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC;AACzB,SAAC,CAAC,CAAC;KACJ;IAEO,6BAA6B,GAAA;AACnC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACxC,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;;YAEpB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,UAAU,CAAC,CAAC;SAChF;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,cAAc,CAAC,GAAQ,EAAA;QACrB,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;KAC7F;AAED,IAAA,WAAW,CAAC,GAAQ,EAAA;AAClB,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,IAAG;YAC1C,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC9F,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AACzC,YAAA,OAAO,aAAa,CAAC;AACvB,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,iBAAiB,CAAC,GAAQ,EAAA;AACxB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;;;AAGzC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACxB;AAED,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,KAAK,GAAI,KAAK,CAAC,MAA2B,CAAC,KAAK,CAAC;AACvD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC5B;AAED,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;QAC1C,KAAK,CAAC,eAAe,EAAE,CAAC;KAEzB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;;AAiDD,IAAA,0BAA0B,CAAC,QAAa,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,uBAAuB,EAAE,CAAC,GAAG,CAACP,GAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;KAChF;8GAvPU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EALzB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,SAAA,EAAA,CAAC,WAAW,CAAC,uWCvC1B,6jLA2GM,EAAA,MAAA,EAAA,CAAA,0kNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnFM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACpB,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+BACZ,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,8BACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAa,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAiB,8BACjB,eAAe,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAMN,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAvBrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EACpB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY;wBACpB,mBAAmB;wBACnB,WAAW;wBACX,YAAY;wBACZ,aAAa;wBACb,kBAAkB;wBAClB,cAAc;wBACd,aAAa;wBACb,eAAe;wBACf,gBAAgB;wBAChB,qBAAqB;wBACrB,mBAAmB;wBACnB,mBAAmB;wBACnB,iBAAiB;AACjB,wBAAA,eAAe,CAAC,EAAA,SAAA,EACP,CAAC,WAAW,CAAC,EAAA,QAAA,EAAA,6jLAAA,EAAA,MAAA,EAAA,CAAA,0kNAAA,CAAA,EAAA,CAAA;8GAoBE,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa,CAAA;gBACQ,iBAAiB,EAAA,CAAA;sBAAhD,SAAS;uBAAC,mBAAmB,CAAA;gBACF,aAAa,EAAA,CAAA;sBAAxC,SAAS;uBAAC,eAAe,CAAA;gBAmD1B,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;AErEtC,MAAO,iBAAkB,SAAQ,SAA+B,CAAA;AAxBtE,IAAA,WAAA,GAAA;;QA0BE,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;QAEzB,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;QAwDvB,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;AAkBzB,KAAA;AAxEC,IAAA,QAAQ,CAAC,KAAY,EAAA;QACnB,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC;QAElD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;YAC9D,OAAO;SACR;AAED,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,CAAC,GAAG,IAAG;YACpE,MAAM,KAAK,GAAG,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;AACrC,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC3D,SAAC,CAAC,CAAC;KACJ;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AACnC,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;;AAGvD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,SAAS,KAAK,UAAU,KAAK,SAAS,EAAE;AACzG,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;SACvC;KACF;IAED,SAAS,GAAA;QACP,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,EAAE;YACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AACnC,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;AAClD,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;SACvB;KACF;;IAKD,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;KAC/E;IAED,eAAe,GAAA;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC;AAClD,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC;SAChC;aAAM;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;SACtF;KACF;IAED,cAAc,CAAC,KAAY,EAAE,KAA0B,EAAA;;AAErD,QAAA,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;KAC7C;IAGD,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;KAC9C;;AAGD,IAAA,wBAAwB,CAAC,KAAoB,EAAA;AAC3C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE;YACpD,KAAK,CAAC,eAAe,EAAE,CAAC;SACzB;KACF;AAED,IAAA,WAAW,CAAC,KAAY,EAAA;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;KACvD;8GA7EU,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAJjB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAAA,CAAC,WAAW,CAAC,iDCtC1B,ixMAwHM,EAAA,MAAA,EAAA,CAAA,03LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlGF,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAlB,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EACX,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,8BACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,OAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,6BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,8BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAmB,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,8BACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,qBAAqB,EACrB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,8BACnB,iBAAiB,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAMR,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAxB7B,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,WAAW;wBACX,YAAY;wBACZ,cAAc;wBACd,aAAa;wBACb,kBAAkB;wBAClB,cAAc;wBACd,aAAa;wBACb,eAAe;wBACf,gBAAgB;wBAChB,qBAAqB;wBACrB,mBAAmB;wBACnB,mBAAmB;wBACnB,iBAAiB;qBAClB,EACU,SAAA,EAAA,CAAC,WAAW,CAAC,EAAA,QAAA,EAAA,ixMAAA,EAAA,MAAA,EAAA,CAAA,03LAAA,CAAA,EAAA,CAAA;;;AENpB,MAAO,qBAAsB,SAAQ,SAA0B,CAAA;AAnBrE,IAAA,WAAA,GAAA;;QAuBE,IAAU,CAAA,UAAA,GAAkB,IAAI,CAAC;QACjC,IAAY,CAAA,YAAA,GAAgB,IAAI,CAAC;QACjC,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;QAGrB,IAAgB,CAAA,gBAAA,GAAW,EAAE,CAAC;QAC9B,IAAiB,CAAA,iBAAA,GAAG,KAAK,CAAC;AAiI3B,KAAA;AA/HC,IAAA,qBAAqB,CAAC,GAAQ,EAAA;AAC5B,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE,CAAC;AACpB,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;KACzC;IAGD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YACzD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;SAChC;AAED,QAAA,IAAI,CAAC,gBAAgB;YACnB,IAAI,CAAC,MAAM,CAAC,WAAW;gBACvB,IAAI,CAAC,MAAM,CAAC,KAAK;AACjB,gBAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW;AAC5B,gBAAA,kBAAkB,CAAC;KACtB;AAED,IAAA,IAAI,SAAS,GAAA;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;QAC1C,IAAI,OAAO,IAAI,OAAQ,OAAe,CAAC,SAAS,KAAK,UAAU,EAAE;AAC/D,YAAA,OAAO,EAAE,CAAC;SACX;AACD,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;KAC9C;AAED,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC;QACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;AAC/C,YAAA,OAAO,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC;SAC1E;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAC9B,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CACpD,CAAC;AACF,QAAA,OAAO,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC;KAC5E;IAED,QAAQ,CAAC,IAAS,EAAE,KAAiB,EAAA;QACnC,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;YAC5B,OAAO;SACR;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAEvB,QAAA,MAAM,YAAY,GAAG;YACnB,YAAY,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI;AAC7C,YAAA,WAAW,EAAE,IAAI;SAClB,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;KAC9B;AAGD,IAAA,IAAa,SAAS,GAAA;QACpB,OAAO,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;KAC/D;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;AAAE,YAAA,OAAO,wBAAwB,CAAC;AAC5E,QAAA,OAAO,8BAA8B,CAAC;KACvC;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,UAAU,CAAC,OAAO,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;KACpD;AAED,IAAA,cAAc,CAAC,IAAU,EAAA;QACvB,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AAEzB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE;AACjD,YAAA,GAAG,EAAE,SAAS;AACd,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,IAAI,EAAE,SAAS;AAChB,SAAA,CAAC,CAAC;AAEH,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE,SAAS;SACvB,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;KAC9B;AAGD,IAAA,iBAAiB,CAAC,KAAiB,EAAA;QACjC,KAAK,CAAC,eAAe,EAAE,CAAC;KACzB;AAED,IAAA,cAAc,CAAC,IAAS,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK;AAAE,YAAA,OAAO,KAAK,CAAC;AAC3C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAE5C,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,IAAI,EAAE;YAC7D,QACE,YAAY,KAAK,IAAI;AACrB,gBAAA,YAAY,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;AACjC,gBAAA,YAAY,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAC3B;SACH;AAED,QAAA,QACE,YAAY,KAAK,IAAI,CAAC,KAAK;YAC3B,YAAY,KAAK,IAAI,CAAC,EAAE;AACxB,YAAA,YAAY,KAAK,IAAI,CAAC,IAAI,EAC1B;KACH;IAED,YAAY,GAAA;AACV,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC;AACjD,QAAA,IAAI,CAAC,EAAE;YAAE,OAAO;AAChB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC,CAAC;AAC3D,QAAA,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,0BAA0B,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;KACtF;IAED,YAAY,GAAA;QACV,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC,0BAA0B,CAAC,CAAC;AAC1E,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;KACxB;8GA1IU,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACrB,cAAc,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjC3B,4rHA0EM,EAAA,MAAA,EAAA,CAAA,kgKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzDF,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA5B,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,6mBACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAY,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,YAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,iBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAKP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAnBjC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,WAAW;wBACX,aAAa;wBACb,mBAAmB;wBACnB,aAAa;wBACb,gBAAgB;wBAChB,gBAAgB;AACnB,qBAAA,EAAA,QAAA,EAAA,4rHAAA,EAAA,MAAA,EAAA,CAAA,kgKAAA,CAAA,EAAA,CAAA;8BAK4B,WAAW,EAAA,CAAA;sBAArC,SAAS;uBAAC,cAAc,CAAA;gBACO,iBAAiB,EAAA,CAAA;sBAAhD,SAAS;uBAAC,mBAAmB,CAAA;;;MErBnB,eAAe,CAAA;IAQ1B,IAA2B,YAAY,CAAC,KAAmB,EAAA;QACzD,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;SACrB;KACF;IAgBD,WAAoB,CAAA,QAAmB,EAAU,WAAuB,EAAA;QAApD,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QAAU,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;AA1B/D,QAAA,IAAA,CAAA,MAAM,GAAiB;AAC9B,YAAA,WAAW,EAAE,WAAW;AACxB,YAAA,iBAAiB,EAAE,UAAU;AAC7B,YAAA,WAAW,EAAE,EAAE;SAChB,CAAC;AAUQ,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAoB,CAAC;AACpD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAwB,CAAC;AAC1D,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAsB,CAAC;AACvD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAW,CAAC;QAExD,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC;QAChB,IAAS,CAAA,SAAA,GAAG,CAAC,CAAC;QACd,IAAc,CAAA,cAAA,GAAY,KAAK,CAAC;QAEhC,IAAe,CAAA,eAAA,GAAoC,EAAE,CAAC;QACtD,IAAa,CAAA,aAAA,GAA4B,EAAE,CAAC;KAEiC;IAE7E,QAAQ,GAAA;QACN,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAQ,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAgB,KAAI;AAC7D,YAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;gBAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC1C,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;KACrE;AAED,IAAA,cAAc,CAAC,KAAY,EAAA;QACzB,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AAC3E,QAAA,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KAChD;IAED,aAAa,CAAC,OAAY,EAAE,KAAY,EAAA;QACtC,KAAK,CAAC,eAAe,EAAE,CAAC;AAExB,QAAA,MAAM,aAAa,GAAI,KAAK,CAAC,aAA6B,CAAC;QAC3D,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;;AAG1D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;AACjF,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAiB,KAAI;AACrC,YAAA,IAAI,IAAI,KAAK,WAAW,EAAE;AACxB,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;aACjC;AACH,SAAC,CAAC,CAAC;;AAGH,QAAA,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;;QAGvC,IAAI,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC5C,MAAM,OAAO,GAAG,WAAW,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;AAC7D,YAAA,IAAI,CAAC,eAAe,CAAC,OAAsB,CAAC,CAAC;SAC9C;;AAGD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,UAAU,EAAE,OAAO;YACnB,QAAQ,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnD,SAAA,CAAC,CAAC;;QAGH,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;SACpC;KACF;AAED,IAAA,YAAY,CAAC,KAAY,EAAA;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;AAExB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,aAA4B,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAC5C,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,WAAW,IAAI,EAAE,CAAC;;QAG7D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAgB,CAAC;QACjE,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO;AAExD,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;;AAGrD,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;YACjC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;QAE5E,IAAI,mBAAmB,EAAE;;AAEvB,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAC9B,OAAO;SACR;;QAGD,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAe,KAAK,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;;AAGzG,QAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;;QAGjC,MAAM,SAAS,GAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC/D,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;;AAG7C,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACvB,UAAU;YACV,SAAS;AACT,YAAA,aAAa,EAAE,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE;AAC3C,SAAA,CAAC,CAAC;;AAGH,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,IAAI,EAAE,KAAK;YACX,UAAU;YACV,SAAS;AACV,SAAA,CAAC,CAAC;QAEH,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;KACxC;AAED,IAAA,YAAY,CAAC,IAAY,EAAA;QACvB,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACpD,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAElC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,OAAA,CAAS,CAAC,CAAC;QAChF,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,GAAgB,KAAK,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;SAC5G;;AAGD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,YAAA,UAAU,EAAE,IAAI;YAChB,gBAAgB;AAChB,YAAA,mBAAmB,EAAE,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE;AACjD,SAAA,CAAC,CAAC;KACJ;;IAGD,sBAAsB,CAAC,UAAkB,EAAE,WAAmB,EAAA;AAC5D,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;YAChC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC;KAC/D;;IAGD,kBAAkB,GAAA;AAChB,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;KACpC;;IAGD,eAAe,GAAA;AACb,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;AAC/C,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC1B,SAAC,CAAC,CAAC;KACJ;;AAGD,IAAA,UAAU,CAAC,OAAwC,EAAA;AACjD,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;;AAEtC,QAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,KAAI;AACpD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,OAAA,CAAS,CAAC,CAAC;YAChF,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAgB,aAAA,EAAA,SAAS,CAAC,KAAK,CAAI,EAAA,CAAA,CAAC,CAAC;gBAC1E,IAAI,MAAM,EAAE;AACV,oBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;iBAClC;aACF;AACH,SAAC,CAAC,CAAC;KACJ;IAED,QAAQ,GAAA;AACN,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AAC3E,QAAA,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,IAAiB,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;KACjI;AAED,IAAA,iBAAiB,CAAC,CAAQ,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAqB,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB;KACF;AAED,IAAA,eAAe,CAAC,OAAoB,EAAA;AAClC,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;AACrB,QAAA,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACtC,QAAA,IAAI,MAAM,CAAC,UAAU,IAAI,GAAG;YAAE,OAAO;QACrC,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;AAC7C,YAAA,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,GAAG,EAAE,EAAE;AAC5D,gBAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;aACpC;SACF,EAAE,EAAE,CAAC,CAAC;KACR;IAED,YAAY,GAAA;AACV,QAAA,YAAY,CAAE,IAAY,CAAC,cAAc,CAAC,CAAC;AAC1C,QAAA,IAAY,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;KACvE;AAED,IAAA,YAAY,CAAC,CAAa,EAAA;QACxB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;KAChD;IAED,UAAU,GAAA;QACR,IAAI,CAAC,SAAS,GAAG,KAAK,YAAY,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;QACnF,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IAED,kBAAkB,GAAA;QAChB,MAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;AACxD,QAAA,IAAI,aAAa,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,KAAK,CAAC,EAAE;AACzF,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AAC3E,YAAA,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SACrC;KACF;IAED,iBAAiB,GAAA;AACf,QAAA,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;KACjD;8GA9OU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECb5B,42GAmDM,ED1CM,MAAA,EAAA,CAAA,y2HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,oWAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAlB,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAI9D,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,42GAAA,EAAA,MAAA,EAAA,CAAA,y2HAAA,CAAA,EAAA,CAAA;uGAMjE,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAMqB,YAAY,EAAA,CAAA;sBAAtC,KAAK;uBAAC,cAAc,CAAA;gBAMS,eAAe,EAAA,CAAA;sBAA5C,SAAS;uBAAC,iBAAiB,CAAA;gBAElB,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,eAAe,EAAA,CAAA;sBAAxB,MAAM;;;MEAI,mBAAmB,CAAA;AAPhC,IAAA,WAAA,GAAA;QASE,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;;QAGzB,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;QACzB,IAAe,CAAA,eAAA,GAAW,IAAI,CAAC;QAC/B,IAAe,CAAA,eAAA,GAAY,KAAK,CAAC;;QAGjC,IAAY,CAAA,YAAA,GAAW,EAAE,CAAC;QAC1B,IAAgB,CAAA,gBAAA,GAAW,IAAI,CAAC;QAChC,IAAgB,CAAA,gBAAA,GAAY,KAAK,CAAC;;QAGlC,IAAO,CAAA,OAAA,GAAW,EAAE,CAAC;QACrB,IAAW,CAAA,WAAA,GAAW,oBAAoB,CAAC;QAC3C,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;QAC9B,IAAe,CAAA,eAAA,GAAW,IAAI,CAAC;AAiChC,KAAA;AA/BC,IAAA,MAAM,CAAC,MAA0B,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;;QAG5C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC;AACtD,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,KAAK,SAAS,GAAG,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;;QAG7F,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,IAAI,CAAC;AACxD,QAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,KAAK,SAAS,GAAG,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC;;QAGhG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,oBAAoB,CAAC;AAC9D,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,KAAK,SAAS,GAAG,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;QACpF,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC;KACvD;AAED,IAAA,OAAO,CAAC,MAA0B,EAAA;AAChC,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACpB,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,eAAe,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;YAC7B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SAC1C;KACF;8GAlDU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,0EChChC,kpCAuCA,EAAA,MAAA,EAAA,CAAA,yUAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDXY,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,6NAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAI5C,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,kpCAAA,EAAA,MAAA,EAAA,CAAA,yUAAA,CAAA,EAAA,CAAA;;;MER7C,eAAe,CAAA;AAS1B,IAAA,WAAA,GAAA;QARS,IAAM,CAAA,MAAA,GAAiB,EAAE,CAAC;QAC1B,IAAU,CAAA,UAAA,GAAuB,EAAE,CAAC;QACpC,IAAI,CAAA,IAAA,GAAqB,EAAE,CAAC;AAI3B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAoB,CAAC;KAE5C;AAEjB,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;YACrB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC;SAC9C;AAAM,aAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE;YAChC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC;SACtD;AAAM,aAAA,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;YAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC;SAC1C;AAAM,aAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;YAClC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC;SAC1D;AAAM,aAAA,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE;YAChC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC;SACtD;KACF;IAED,aAAa,CAAC,IAA6B,EAAE,KAAY,EAAA;AACvD,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,WAAW,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC;QAC1E,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;SAC/D;KACF;8GA9BU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAFf,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAAA,CAAC,WAAW,CAAC,+CClB1B,w3FA0EA,EAAA,MAAA,EAAA,CAAA,83CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDzDY,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAE,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,EAAE,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,8BAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGjF,eAAe,EAAA,UAAA,EAAA,CAAA;kBAR3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cAGT,IAAI,EAAA,OAAA,EACP,CAAC,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,EAClF,SAAA,EAAA,CAAC,WAAW,CAAC,EAAA,QAAA,EAAA,w3FAAA,EAAA,MAAA,EAAA,CAAA,83CAAA,CAAA,EAAA,CAAA;wDAGf,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;;;MEFI,sBAAsB,CAAA;AAdnC,IAAA,WAAA,GAAA;AAgBc,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAoB,CAAC;AAQhE,KAAA;IANG,aAAa,CAAC,IAA6B,EAAE,KAAY,EAAA;QACrD,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;QAC5F,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;SACjE;KACJ;8GATQ,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAJpB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAAA,CAAC,WAAW,CAAC,0BCrB5B,kqGA0EO,EAAA,MAAA,EAAA,CAAA,+oCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3DC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,eAAe,EACf,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,EACd,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,6NACb,gBAAgB,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAMX,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAdlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAEpB,OAAA,EAAA;wBACL,YAAY;wBACZ,eAAe;wBACf,cAAc;wBACd,aAAa;wBACb,gBAAgB;AACnB,qBAAA,EAAA,SAAA,EACU,CAAC,WAAW,CAAC,EAAA,UAAA,EACZ,IAAI,EAAA,QAAA,EAAA,kqGAAA,EAAA,MAAA,EAAA,CAAA,+oCAAA,CAAA,EAAA,CAAA;8BAIP,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACI,WAAW,EAAA,CAAA;sBAApB,MAAM;;;MEiCE,kBAAkB,CAAA;AAvD/B,IAAA,WAAA,GAAA;AAwDW,QAAA,IAAA,CAAA,MAAM,GAAoB;AACjC,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,OAAO,EAAE,EAAE;SACZ,CAAC;AACH,KAAA;8GAPY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAnDnB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;GAQT,EATS,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,orBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,8BAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAoD7B,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAvD9B,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAC/B,QAAA,EAAA,CAAA;;;;;;;;GAQT,EAyCgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,orBAAA,CAAA,EAAA,CAAA;8BAGtC,MAAM,EAAA,CAAA;sBAAd,KAAK;;;MCzCK,mBAAmB,CAAA;AAVhC,IAAA,WAAA,GAAA;AAaY,QAAA,IAAA,CAAA,OAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;AAe3D,KAAA;;IAXC,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;gBAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,aAAC,CAAC,CAAC;SACJ;KACF;AAED,IAAA,aAAa,CAAC,IAAe,EAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;KAC5C;8GAjBU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,8IAJnB,CAAC,WAAW,CAAC,EAQI,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAA,aAAa,iDCxB3C,08CAsBA,EAAA,MAAA,EAAA,CAAA,swCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MDTY,YAAY,CAAE,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAAN,IAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAAA,IAAA,CAAA,IAAA,CAAA,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,UAAA,CAAA,MAAAA,IAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAA,cAAc,+OAAC,gBAAgB,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAE,aAAa,CAAE,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAAA,kBAAkB,mGACvE,aAAa,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAMrB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAV/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EACZ,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,cAAc,EAAC,gBAAgB,EAAE,aAAa,EAAE,kBAAkB;AACxF,wBAAA,UAAU,CAAC,MAAM,aAAa,CAAC;qBAChC,EACU,SAAA,EAAA,CAAC,WAAW,CAAC,EAAA,QAAA,EAAA,08CAAA,EAAA,MAAA,EAAA,CAAA,swCAAA,CAAA,EAAA,CAAA;8BAKT,IAAI,EAAA,CAAA;sBAAlB,KAAK;uBAAC,MAAM,CAAA;gBACO,SAAS,EAAA,CAAA;sBAA5B,KAAK;uBAAC,WAAW,CAAA;gBACR,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBACqC,aAAa,EAAA,CAAA;sBAAxD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,UAAU,CAAC,MAAM,aAAa,CAAC,CAAA;;;ME4B/B,qBAAqB,CAAA;AAlDlC,IAAA,WAAA,GAAA;QAmDW,IAAK,CAAA,KAAA,GAAW,MAAM,CAAC;QACvB,IAAM,CAAA,MAAA,GAAW,MAAM,CAAC;QACxB,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AASpC,KAAA;IARC,IAAkC,MAAM,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE;AACpE,IAAA,IAAgC,QAAQ,GAAA;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED,IAAA,IAAiC,SAAS,GAAA;QACxC,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;8GAXU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,4QA/CtB,CAA2B,yBAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,qoBAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FA+C1B,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAlDjC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,QAAA,EACN,CAA2B,yBAAA,CAAA,EAAA,MAAA,EAAA,CAAA,qoBAAA,CAAA,EAAA,CAAA;8BAgD5B,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAC4B,MAAM,EAAA,CAAA;sBAAvC,WAAW;uBAAC,eAAe,CAAA;gBACI,QAAQ,EAAA,CAAA;sBAAvC,WAAW;uBAAC,aAAa,CAAA;gBAIO,SAAS,EAAA,CAAA;sBAAzC,WAAW;uBAAC,cAAc,CAAA;;;MCpDhB,qBAAqB,CAAA;AANlC,IAAA,WAAA,GAAA;QAOW,IAAK,CAAA,KAAA,GAAW,MAAM,CAAC;QACvB,IAAM,CAAA,MAAA,GAAW,MAAM,CAAC;AAElC,KAAA;8GAJY,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAFtB,CAA+F,6FAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAD/F,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGpB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,qBAAqB,CAAC;AAChC,oBAAA,QAAQ,EAAE,CAA+F,6FAAA,CAAA;AAC1G,iBAAA,CAAA;8BAEU,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;MASK,uBAAuB,CAAA;AANpC,IAAA,WAAA,GAAA;QAOW,IAAI,CAAA,IAAA,GAAW,MAAM,CAAC;AAEhC,KAAA;8GAHY,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAFxB,CAAuH,qHAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EADvH,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGpB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,qBAAqB,CAAC;AAChC,oBAAA,QAAQ,EAAE,CAAuH,qHAAA,CAAA;AAClI,iBAAA,CAAA;8BAEU,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;MASK,0BAA0B,CAAA;AANvC,IAAA,WAAA,GAAA;QAOW,IAAK,CAAA,KAAA,GAAW,MAAM,CAAC;QACvB,IAAM,CAAA,MAAA,GAAW,OAAO,CAAC;AAEnC,KAAA;8GAJY,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAF3B,CAA+F,6FAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAD/F,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGpB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,qBAAqB,CAAC;AAChC,oBAAA,QAAQ,EAAE,CAA+F,6FAAA,CAAA;AAC1G,iBAAA,CAAA;8BAEU,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;MASK,2BAA2B,CAAA;AANxC,IAAA,WAAA,GAAA;QAOW,IAAK,CAAA,KAAA,GAAW,OAAO,CAAC;QACxB,IAAM,CAAA,MAAA,GAAW,MAAM,CAAC;AAElC,KAAA;8GAJY,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAF5B,CAA6H,2HAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAD7H,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGpB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,qBAAqB,CAAC;AAChC,oBAAA,QAAQ,EAAE,CAA6H,2HAAA,CAAA;AACxI,iBAAA,CAAA;8BAEU,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MC1BK,0BAA0B,CAAA;AAlBvC,IAAA,WAAA,GAAA;QAqBW,IAAS,CAAA,SAAA,GAAqB,QAAQ,CAAC;AASjD,KAAA;AAPC,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,IAAI,CAAC,SAAS;SAC9B,CAAC;KACH;8GAXU,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAd3B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,qIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EALS,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAeN,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAlBtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cACrB,IAAI,EAAA,OAAA,EACP,CAAC,OAAO,CAAC,EACR,QAAA,EAAA,CAAA;;;;AAIT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,qIAAA,CAAA,EAAA,CAAA;8BAWQ,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;;;ACHD,MAAM,gBAAgB,GAAG;;AAE9B,IAAA,IAAI,EAAE;AACJ,QAAA,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;YAChD,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;AAC9C,YAAA,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE;AACvC,SAAA;AACD,QAAA,eAAe,EAAE;AACf,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,GAAG,EAAE,SAAS;AACf,SAAA;AACF,KAAA;;AAGD,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE;AACL,YAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;YAClC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;AAC/C,SAAA;AACD,QAAA,eAAe,EAAE;AACf,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,OAAO,EAAE,QAAQ;AAClB,SAAA;AACF,KAAA;;AAGD,IAAA,SAAS,EAAE;AACT,QAAA,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;AAC9C,YAAA,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE;AACxC,SAAA;AACD,QAAA,eAAe,EAAE;AACf,YAAA,GAAG,EAAE,QAAQ;AACd,SAAA;AACF,KAAA;CACO;;MCuEG,uBAAuB,CAAA;IAKlC,QAAQ,GAAA;QACN,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAEO,YAAY,GAAA;QAClB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;YAC/D,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC7C;KACF;8GAjBU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EA9GxB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4GT,EApHC,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAEZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,6FACvB,0BAA0B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,2BAA2B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC3B,0BAA0B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAgHjB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA1HnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,qBAAqB;wBACrB,qBAAqB;wBACrB,uBAAuB;wBACvB,0BAA0B;wBAC1B,2BAA2B;wBAC3B,0BAA0B;AAC3B,qBAAA;AACD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4GT,EAAA,CAAA;AACF,iBAAA,CAAA;8BAEU,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MC/DK,eAAe,CAAA;AAS1B,IAAA,WAAA,CACU,OAAgB,EAAA;QAAhB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;AATjB,QAAA,IAAA,CAAA,QAAQ,GAAwC,QAAQ,CAAC;AAGxD,QAAA,IAAA,CAAA,OAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;AAChD,QAAA,IAAA,CAAA,YAAY,GAAsB,IAAI,YAAY,EAAE,CAAC;AACrD,QAAA,IAAA,CAAA,UAAU,GAAsB,IAAI,YAAY,EAAE,CAAC;;QAE7D,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;AA+D5B,QAAA,IAAA,CAAA,cAAc,GAAW,CAAC,CAAC;KA3D1B;AAGD,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE;AACnD,YAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;;YAG9E,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC3E,gBAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;aACzB;;;YAID,UAAU,CAAC,MAAK;;AAEd,gBAAA,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;aAC9D,EAAE,CAAC,CAAC,CAAC;SACP;KACF;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;KACxB;IAED,WAAW,GAAA;;;;;;;;;;;;;KAcV;AAED,IAAA,WAAW,CAAC,KAAK,EAAA;QACf,IAAI,CAAC,eAAe,CAAC,IAAI,EAAC,KAAK,CAAC,IAAI,CAAC,CAAA;KACtC;IAED,eAAe,CAAC,KAAU,EAAE,IAAe,EAAA;;AAEzC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAC;;AAG1D,QAAA,IAAG,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAC;AACrD,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC7B;KACF;AAED,IAAA,QAAQ,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAC,CAAC,CAAA;KAC9D;IAID,YAAY,CAAC,KAAa,EAAC,OAAO,EAAA;AAChC,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAC,CAAC,CAAA;KAC3E;8GA5EU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,iNAjBjB,CAAC,WAAW,CAAC,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpDxB,6hJAkGM,EDxDF,MAAA,EAAA,CAAA,iqHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,6GAInB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,aAAa,EACb,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,sKACf,uBAAuB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAmBd,eAAe,EAAA,UAAA,EAAA,CAAA;kBA/B3B,SAAS;+BACE,SAAS,EAAA,UAAA,EACP,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,OAAO;wBACP,WAAW;wBACX,cAAc;wBACd,gBAAgB;wBAChB,aAAa;wBACb,eAAe;wBACf,uBAAuB;qBAC1B,EACU,SAAA,EAAA,CAAC,WAAW,CAAC,EAAA,QAAA,EAAA,6hJAAA,EAAA,MAAA,EAAA,CAAA,iqHAAA,CAAA,EAAA,CAAA;8EAkBb,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACI,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBACG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,UAAU,EAAA,CAAA;sBAAnB,MAAM;;;MEhEI,aAAa,CAAA;AAgBxB,IAAA,IACI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IAED,IAAI,MAAM,CAAC,KAAY,EAAA;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;;AAErB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B;AAED,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IACD,IAAI,QAAQ,CAAC,KAA0C,EAAA;AACrD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;AAED,IAAA,WAAA,CACU,OAAgB,EAChB,gBAAkC,EAClC,KAAgB,EAAA;QAFhB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;QAChB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAW;;AApClB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAe,IAAI,CAAC,CAAC;;AAGtD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;;QAGnB,IAAS,CAAA,SAAA,GAAsD,IAAI,CAAC;AACjE,QAAA,IAAA,CAAA,WAAW,GAAsB,IAAI,YAAY,EAAE,CAAC;AACjE,QAAA,IAAA,CAAA,OAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;AAChD,QAAA,IAAA,CAAA,UAAU,GAAuD,IAAI,YAAY,EAAE,CAAC;AACpF,QAAA,IAAA,CAAA,UAAU,GAAuD,IAAI,YAAY,EAAE,CAAC;QAG9F,IAAS,CAAA,SAAA,GAAwC,OAAO,CAAC;QAgCjD,IAAU,CAAA,UAAA,GAAQ,IAAI,CAAC;QACvB,IAAO,CAAA,OAAA,GAAQ,IAAI,CAAC;KATxB;AAGJ,IAAA,OAAO,CAAC,CAAC,EAAA;AACP,QAAA,IAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM;YACpG,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAKD,QAAQ,GAAA;;AAEN,QAAA,IAAI,CAAC,WAAW;AACb,aAAA,IAAI,CAACuB,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,MAAM,IAAG;AAClB,YAAA,IAAI,CAAC,MAAM;gBAAE,OAAO;;YAGpB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE;AACnC,gBAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;gBAClD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;;gBAGpC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE;AACrC,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;AAChC,wBAAA,IAAI,EAAE;AACJ,4BAAA,YAAY,EAAE,MAAM;AACpB,4BAAA,aAAa,EAAE,IAAI;AACnB,4BAAA,WAAW,EAAE,KAAK;AAClB,4BAAA,aAAa,EAAE,MAAM,KAAK;AAC3B,yBAAA;AACF,qBAAA,CAAC,CAAC;iBACJ;aACF;AACH,SAAC,CAAC,CAAC;KACN;IAED,eAAe,GAAA;KACd;;AAID,IAAA,WAAW,CAAC,OAAsB,EAAA;;KAEjC;IAED,WAAW,GAAA;;AAET,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;;QAGzB,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;IAED,UAAU,GAAA;AACR,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AAC7C,QAAA,MAAM,UAAU,GAAG,IAAI,eAAe,CAAC,eAAe,CAAC,CAAC;;QAGxD,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;AAGpD,QAAA,MAAM,gBAAgB,GAAqB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC/D,aAAA,mBAAmB,CAAC,WAAW,CAAC;AAChC,aAAA,aAAa,CAAC,CAAC;AACd,gBAAA,GAAG,YAAY;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,KAAK,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO;gBACtH,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,KAAK,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO;AACvH,aAAA,CAAC,CAAC,CAAC;;AAGN,QAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAEvF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACpC,gBAAgB;YAChB,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE;AAC1D,YAAA,UAAU,EAAE,qBAAqB;AAClC,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC;;AAG3C,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AAC9C,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YACjD,IAAI,CAAC,UAAU,EAAE,CAAC;AACpB,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,SAAS,CAAC,MAAK;YACpD,IAAI,CAAC,UAAU,EAAE,CAAC;AACpB,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,IAAI,CAAC,KAAK;YACnB,IAAI,EAAE,IAAI,CAAC,OAAO;AACnB,SAAA,CAAC,CAAC;KACJ;IAED,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,IAAI,CAAC,KAAK;gBACnB,IAAI,EAAE,IAAI,CAAC,OAAO;AACnB,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAC1B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;;AAGpB,YAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;SAC3F;KACF;8GA3JU,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA7B,IAAA,CAAA,OAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA,CAAA;wIASqB,SAAS,EAAA,CAAA;sBAA5B,KAAK;uBAAC,WAAW,CAAA;gBACK,WAAW,EAAA,CAAA;sBAAjC,MAAM;uBAAC,aAAa,CAAA;gBACX,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBACG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBACG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAKH,MAAM,EAAA,CAAA;sBADT,KAAK;uBAAC,QAAQ,CAAA;gBAYX,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,gBAAgB,CAAA;gBAevB,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA;;AAqHnC,MAAM,cAAc,GAAsB;AACxC,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,OAAO,EAAE,QAAQ;AACjB,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,OAAO,EAAE,CAAC;AACX,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,OAAO,EAAE,QAAQ;AACjB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,OAAO,EAAE,CAAC;AACX,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,OAAO,EAAE,QAAQ;AACjB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,OAAO,EAAE,EAAE;AACZ,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE,QAAQ;AACjB,QAAA,OAAO,EAAE,QAAQ;AACjB,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,OAAO,EAAE,EAAE;AACZ,KAAA;CACF;;MC1KY,gBAAgB,CAAA;IAiB3B,WAAoB,CAAA,KAAqB,EAAU,MAAc,EAAA;QAA7C,IAAK,CAAA,KAAA,GAAL,KAAK,CAAgB;QAAU,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;;AAdjE,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;;QAGvB,IAAiB,CAAA,iBAAA,GAAyD,IAAI,CAAC;AAIpE,QAAA,IAAA,CAAA,OAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;AAQjE,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,EAAE,CAAC;KACtC;IAED,QAAQ,GAAA;QACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YAC5B,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;SAC5C;;;;;KAMF;IAED,eAAe,GAAA;KAEd;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;;AAEvD,YAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC;;AAG/D,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;;AAEtB,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;AACzE,gBAAA,IAAI,eAAe,IAAI,CAAC,EAAE;oBACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;iBACtD;;;;;AAOD,gBAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,KAAK,KAAK,EAAE;AACvE,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;oBACjD,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE;;AAExC,wBAAA,OAAO,CAAC,GAAG,CAAC,iDAAiD,EAAE,WAAW,CAAC,CAAC;qBAC7E;iBACF;aACF;SACF;KACF;AAED,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI;AACF,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC;aAChC;YACD,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;gBAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3C,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;aAC/B;SACF;QAAC,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAChB;KACF;AAED,IAAA,cAAc,CAAC,IAAkB,EAAE,KAAa,EAAE,QAAa,IAAI,EAAA;AAEjE,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,KAAK;AACL,YAAA,IAAI,EAAE,gBAAgB;YACtB,IAAI;AACL,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QAEvC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE;AAC9B,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;SAClC;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;KAC3C;AAED,IAAA,iBAAiB,CAAC,IAAkB,EAAE,KAAa,EAAE,QAAa,IAAI,EAAA;AACpE,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,KAAK;AACL,YAAA,IAAI,EAAE,mBAAmB;YACzB,IAAI;AACL,SAAA,CAAC,CAAC;KACJ;IACD,gBAAgB,CAAC,IAAkB,EAAE,KAAa,EAAE,KAAa,GAAA,IAAI,EAAE,OAAmB,EAAA;AACxF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,KAAK;AACL,YAAA,IAAI,EAAE,mBAAmB;YACzB,IAAI;AACL,SAAA,CAAC,CAAC;QACH,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,IAAI,EAAE,CAAC;SAChB;KACF;IACD,aAAa,CAAC,IAAkB,EAAE,KAAa,EAAE,KAAa,GAAA,IAAI,EAAE,OAAmB,EAAA;AACrF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,KAAK;AACL,YAAA,IAAI,EAAE,gBAAgB;YACtB,IAAI;AACL,SAAA,CAAC,CAAC;QACH,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,IAAI,EAAE,CAAC;SAChB;KACF;AAED,IAAA,mBAAmB,CAAC,KAAU,EAAE,KAAa,EAAE,IAAS,EAAA;AACtD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,KAAK;YACL,IAAI;AACJ,YAAA,IAAI,EAAE,qBAAqB;AAC5B,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,WAAW,CAAC,KAAU,EAAA;AACpB,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;KAClC;IAED,WAAW,CAAC,KAAU,EAAE,IAAkB,EAAA;AACxC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,KAAK;AACL,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,IAAI,EAAE;AACJ,gBAAA,GAAG,IAAI;gBACP,KAAK,EAAE,IAAI,CAAC,OAAO;AACpB,aAAA;AACF,SAAA,CAAC,CAAC;KACJ;AAED;;;;;;;AAOG;AACH,IAAA,cAAc,CAAC,KAA2C,EAAE,QAA0B,EAAE,IAAkB,EAAE,KAAa,EAAA;;AAEvH,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;QAG9B,IAAI,CAAC,iBAAiB,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAE7C,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAChB,YAAA,IAAI,EAAE,eAAe;YACrB,QAAQ;YACR,IAAI;YACJ,KAAK;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;AACjB,SAAA,CAAC,CAAC;KACJ;AAED;;;;;;;AAOG;AACH,IAAA,cAAc,CAAC,KAA2C,EAAE,QAA0B,EAAE,IAAkB,EAAE,KAAa,EAAA;AACvH,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;AAG/B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAE9B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAChB,YAAA,IAAI,EAAE,eAAe;YACrB,QAAQ;YACR,IAAI;YACJ,KAAK;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;AACjB,SAAA,CAAC,CAAC;KACJ;8GApMU,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAJhB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,CAAC,WAAW,CAAC,+CC5B1B,wiJAgEM,EAAA,MAAA,EAAA,CAAA,+0KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED5CF,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,eAAe,EACf,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,EACb,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,6TAChB,aAAa,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAQJ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAhB5B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,eAAe;wBACf,aAAa;wBACb,gBAAgB;wBAChB,aAAa;wBACb,eAAe;wBACf,aAAa;qBACd,EACU,SAAA,EAAA,CAAC,WAAW,CAAC,EAAA,QAAA,EAAA,wiJAAA,EAAA,MAAA,EAAA,CAAA,+0KAAA,CAAA,EAAA,CAAA;4GAWP,MAAM,EAAA,CAAA;sBAAtB,KAAK;uBAAC,QAAQ,CAAA;gBACO,UAAU,EAAA,CAAA;sBAA/B,MAAM;uBAAC,YAAY,CAAA;gBACE,UAAU,EAAA,CAAA;sBAA/B,MAAM;uBAAC,YAAY,CAAA;gBACD,OAAO,EAAA,CAAA;sBAAzB,MAAM;uBAAC,SAAS,CAAA;;AAgMnB,MAAM,IAAI,GAAa;AACrB,IAAA,KAAK,EAAE,CAAC;AACN,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,IAAI,EAAE,MAAM;SACb,EAAE;AACD,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,IAAI,EAAE,EAAE;SACT,EAAE;AACD,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,IAAI,EAAE,EAAE;SACT,CAAC;AACF,IAAA,WAAW,EAAE,CAAC;AACZ,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,OAAO,EAAE,aAAa;SACvB,EAAE;AACD,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,OAAO,EAAE,KAAK;AACd,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,EAAE,QAAQ;SACf,EAAE;AACD,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,IAAI,EAAE,oBAAoB;AAC1B,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,OAAO,EAAE,EAAE;SACZ,CAAC;CACH;;ME5PY,iBAAiB,CAAA;AAV9B,IAAA,WAAA,GAAA;AAYY,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAO,CAAC;QAGrD,IAAkB,CAAA,kBAAA,GAAG,qBAAqB,CAAA;AAE1C,QAAA,IAAA,CAAA,IAAI,GAAQ;AACV,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,QAAQ,EAAE,MAAM;YAChB,oBAAoB,EAAE,IAAI,CAAC,kBAAkB;AAC7C,YAAA,QAAQ,EACN;AACI,gBAAA,IAAI,EAAE,GAAG;AACT,gBAAA,SAAS,EAAE,aAAa;AACxB,gBAAA,SAAS,EAAE,aAAa;AACxB,gBAAA,aAAa,EAAE,SAAS;AACxB,gBAAA,iBAAiB,EAAE,EAAE;AACrB,gBAAA,SAAS,EAAE,kCAAkC;AAC7C,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,WAAW,EAAE,QAAQ;AACrB,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,oBAAoB,EAAE,UAAU;AAChC,gBAAA,MAAM,EAAE,SAAS;AACtB,aAAA;AACD,YAAA,wBAAwB,EAAE,IAAI;AAC9B,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,cAAc,EAAE;AACZ,gBAAA,MAAM,EAAE,YAAY;AACpB,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,IAAI,EAAE,YAAY;AACrB,aAAA;AACD,YAAA,UAAU,EAAE;AACV,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,SAAS,EAAE,QAAQ;AACnB,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,SAAS,EAAE,8CAA8C;AAC1D,aAAA;AACD,YAAA,WAAW,EAAE;AACX,gBAAA,QAAQ,EAAE,SAAS;AACnB,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,SAAS,EAAE,SAAS;AACrB,aAAA;AACD,YAAA,QAAQ,EAAE,SAAS;SACpB,CAAC;AAYH,KAAA;AAVC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;YAC9C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC;SAC9C;KACF;AAED,IAAA,WAAW,CAAC,MAAW,EAAE,MAAW,EAAE,KAAU,EAAA;AAC9C,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;KACvD;8GA1DU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,SAAA,EAJjB,CAAC,WAAW,CAAC,+CCjB1B,olGAgDc,EAAA,MAAA,EAAA,CAAA,i0BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDlCF,aAAa,EAAE,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,yBAAyB,iEAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAE,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,2NAC3F,yBAAyB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,MAAA,EAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAMrD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAV7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EACZ,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,aAAa,EAAE,yBAAyB,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc;wBAC3F,yBAAyB,EAAE,eAAe,EAAE,kBAAkB;qBAC/D,EACU,SAAA,EAAA,CAAC,WAAW,CAAC,EAAA,QAAA,EAAA,olGAAA,EAAA,MAAA,EAAA,CAAA,i0BAAA,CAAA,EAAA,CAAA;8BAKf,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACI,gBAAgB,EAAA,CAAA;sBAAzB,MAAM;;;MEdI,mBAAmB,CAAA;AAPhC,IAAA,WAAA,GAAA;QAQW,IAAgB,CAAA,gBAAA,GAAY,KAAK,CAAC;QAClC,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;AAE7C,KAAA;8GAJY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,sNCThC,2xCA6BM,EAAA,MAAA,EAAA,CAAA,wlCAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDpBO,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,QAAA,EAAA,2xCAAA,EAAA,MAAA,EAAA,CAAA,wlCAAA,CAAA,EAAA,CAAA;8BAKF,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,sBAAsB,EAAA,CAAA;sBAA9B,KAAK;;;MECK,oBAAoB,CAAA;IAK/B,WAAoB,CAAA,EAAc,EAAU,QAAmB,EAAA;QAA3C,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QAAU,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;QAJtD,IAAa,CAAA,aAAA,GAAW,EAAE,CAAC;QAC3B,IAAY,CAAA,YAAA,GAAW,MAAM,CAAC;QAC9B,IAAM,CAAA,MAAA,GAAW,KAAK,CAAC;KAEoC;IAEpE,QAAQ,GAAA;KACP;8GARU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,ECbjC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,wNAGwB,EDOZ,MAAA,EAAA,CAAA,g1BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,oBAAoB,2NAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAG5B,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cACf,IAAI,EAAA,OAAA,EAGP,CAAC,oBAAoB,EAAE,OAAO,CAAC,EAAA,QAAA,EAAA,wNAAA,EAAA,MAAA,EAAA,CAAA,g1BAAA,CAAA,EAAA,CAAA;uGAI/B,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;;;MEoDK,qBAAqB,CAAA;AAqBhC,IAAA,WAAA,CAAoB,EAAe,EAAA;QAAf,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;AApB1B,QAAA,IAAA,CAAA,MAAM,GAAgB;AAC7B,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;AAC1B,gBAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5B,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;AAC1B,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;AAC1B,gBAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5B,gBAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5B,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACxC,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACvC,aAAA;AACD,YAAA,gBAAgB,EAAE,KAAK;SACxB,CAAC;AAEQ,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAc,CAAC;QAMrD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACxB,SAAS,EAAE,CAAC,KAAK,CAAC;YAClB,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACzB,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,GAAG;AACX,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,KAAK,EAAE,EAAE;SACV,CAAC;KACH;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAG;YACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAc,CAAC;KAC5C;IAED,cAAc,GAAA;QACZ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACxB,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,KAAK,CAAC;YAClD,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AACzB,SAAA,CAAC,CAAC;KACJ;IAED,OAAO,GAAA;QACL,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACnC,OAAO;SACR;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,eAAe,GAAG,YAAY,CAAC,eAAe,IAAI,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,GAAG,CAAC;AAErH,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAC9B,YAAA,KAAK,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC;YACzB,QAAQ,EAAE,CAAC,eAAe,CAAC;YAC3B,KAAK,EAAE,CAAC,IAAI,CAAC;YACb,SAAS,EAAE,CAAC,KAAK,CAAC;AACnB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACjC;AAED,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACjC;AAED,IAAA,aAAa,CAAC,GAAW,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;KAC5D;AAED,IAAA,mBAAmB,CAAC,IAAY,EAAA;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;KACjF;AAED,IAAA,oBAAoB,CAAC,QAAgB,EAAA;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE,CAAC;AAEtB,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE;YACnB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;SAChF;QAED,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC7C;AAED,IAAA,YAAY,CAAC,QAAgB,EAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;KACtC;AAED,IAAA,iBAAiB,CAAC,KAAa,EAAA;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAc,CAAC;QACzD,OAAO,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,KAAK,SAAS,CAAC;KACxD;AAED,IAAA,eAAe,CAAC,QAAgB,EAAA;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC3C,QAAA,OAAO,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;KAC7B;IAED,aAAa,CAAC,KAAa,EAAE,QAAgB,EAAA;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAc,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAE3C,IAAI,KAAK,EAAE;YACT,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACtD,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;YAEnG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;YACrD,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;;AAGvC,YAAA,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;gBAC/B,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;aAC7C;AACD,YAAA,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;gBAC7B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;aAC3C;;YAGD,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SACxE;KACF;AAED,IAAA,gBAAgB,CAAC,KAAa,EAAE,QAAgB,EAAE,QAAgB,EAAA;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;;QAG/D,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAc,CAAC;QACzD,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvC,QAAA,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YAC/B,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;SAC7C;AACD,QAAA,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YAC7B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;SAC3C;KACF;AAED;;;;AAIG;AACH,IAAA,aAAa,CAAC,KAAa,EAAA;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAc,CAAC;QACzD,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC;;;AAIrD,QAAA,OAAO,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;KACrD;AAED;;;;AAIG;IACH,iBAAiB,CAAC,KAAa,EAAE,KAAU,EAAA;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAc,CAAC;QACzD,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;AACjD,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;;AAG9B,QAAA,IAAI,OAAO,IAAI,SAAS,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE;YACnE,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;SAC3C;KACF;AAED,IAAA,6BAA6B,CAAC,KAAa,EAAE,QAAgB,EAAE,SAAiB,EAAA;QAC9E,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAc,CAAC;;QAGzD,IAAI,QAAQ,KAAK,SAAS,IAAI,SAAS,KAAK,MAAM,EAAE;;YAElD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AACrC,gBAAA,SAAS,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;aAC3D;YACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACnC,gBAAA,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;aACzD;SACF;aAAM;;AAEL,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AACpC,gBAAA,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;aACvC;AACD,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAClC,gBAAA,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;aACrC;SACF;KACF;AAED,IAAA,oBAAoB,CAAC,SAAc,EAAA;QACjC,OAAO;YACL,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,KAAI;;AAEvC,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,MAAM,EAAE;oBAC3E,OAAO;wBACL,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,wBAAA,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE;wBACrD,SAAS,EAAE,IAAI,CAAC,SAAS;qBAC1B,CAAC;iBACH;;gBAGD,OAAO;oBACL,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,CAAC;AACJ,aAAC,CAAC;SACH,CAAC;KACH;AAED;;;;AAIG;AACH,IAAA,eAAe,CAAC,KAAa,EAAA;QAC3B,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAc,CAAC;QACzD,OAAO,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC;KACnD;AAED;;;;AAIG;IACH,eAAe,CAAC,KAAa,EAAE,SAAuB,EAAA;QACpD,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO;QAExB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAc,CAAC;QACzD,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;KACjD;IAED,eAAe,GAAA;AACb,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;AAC3D,QAAA,MAAM,YAAY,GAAG,gBAAgB,KAAK,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;AAC/D,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;KACpD;IAED,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,KAAK,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;KACnE;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;IAED,UAAU,GAAA;QACR,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACnC;8GA5QU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAhBrB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAAA,CAAC,mBAAmB,CAAC,ECpDlC,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,ygNAsIA,EDhFI,MAAA,EAAA,CAAA,+pFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EACf,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAmB,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,igBACnB,mBAAmB,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGV,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBArBjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAGhB,IAAI,EAAA,SAAA,EACL,CAAC,mBAAmB,CAAC,EACvB,OAAA,EAAA;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,YAAY;wBACZ,eAAe;wBACf,aAAa;wBACb,eAAe;wBACf,kBAAkB;wBAClB,cAAc;wBACd,gBAAgB;wBAChB,qBAAqB;wBACrB,mBAAmB;wBACnB,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,ygNAAA,EAAA,MAAA,EAAA,CAAA,+pFAAA,CAAA,EAAA,CAAA;kFAGQ,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAeI,WAAW,EAAA,CAAA;sBAApB,MAAM;;;ME9EI,mBAAmB,CAAA;AAE9B,IAAA,WAAA,GAAA,GAAiB;AAEjB;;;;AAIG;AACH,IAAA,aAAa,CAAC,KAAiB,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtD,YAAA,OAAO,EAAE,CAAC;SACX;QAED,OAAO,KAAK,CAAC,KAAK;AACf,aAAA,GAAG,CAAC,CAAC,IAAS,KAAI;AACjB,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,OAAO,CAAA,CAAA,EAAI,IAAI,CAAC,aAAa,CAAC,IAAkB,CAAC,GAAG,CAAC;aACtD;iBAAM;AACL,gBAAA,OAAO,CAAG,EAAA,IAAI,CAAC,KAAK,CAAI,CAAA,EAAA,IAAI,CAAC,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,KAAK,EAAE,CAAC;aACvD;AACH,SAAC,CAAC;aACD,IAAI,CAAC,CAAI,CAAA,EAAA,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAG,CAAA,CAAA,CAAC,CAAC;KAC/C;AAED;;;;AAIG;AACH,IAAA,WAAW,CAAC,KAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtD,YAAA,OAAO,EAAE,CAAC;SACX;QAED,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,KAAI;AACnC,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAkB,CAAC,CAAC;iBAC7C;qBAAM;oBACL,OAAO;wBACL,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;qBAClB,CAAC;iBACH;AACH,aAAC,CAAC;SACH,CAAC;KACH;AAED;;;;AAIG;AACH,IAAA,YAAY,CAAC,KAAiB,EAAA;AAC5B,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtD,YAAA,OAAO,KAAK,CAAC;SACd;QAED,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAS,KAAI;AACrC,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAkB,CAAC,CAAC;aAC9C;iBAAM;AACL,gBAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;aACvF;AACH,SAAC,CAAC,CAAC;KACJ;AAED;;;;AAIG;IACH,gBAAgB,CAAC,YAA0B,KAAK,EAAA;QAC9C,OAAO;YACL,SAAS;AACT,YAAA,KAAK,EAAE,EAAE;SACV,CAAC;KACH;AAED;;;;;;AAMG;AACH,IAAA,iBAAiB,CAAC,KAAa,EAAE,QAAgB,EAAE,KAAU,EAAA;QAC3D,OAAO;AACL,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,KAAK,EAAE;AACL,gBAAA;oBACE,KAAK;oBACL,QAAQ;oBACR,KAAK;AACN,iBAAA;AACF,aAAA;SACF,CAAC;KACH;8GApGU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MC6CY,yBAAyB,CAAA;AAoEpC,IAAA,WAAA,CAAoB,mBAAwC,EAAA;QAAxC,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAqB;AAnE5D,QAAA,IAAA,CAAA,WAAW,GAAgB;AACzB,YAAA,MAAM,EAAE;AACN,gBAAA;AACE,oBAAA,GAAG,EAAE,MAAM;AACX,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,IAAI,EAAE,QAAQ;AACf,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,KAAK;AACV,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,SAAS,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC;AACxD,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,OAAO;AACZ,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,SAAS,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC;AACnC,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,WAAW;AAChB,oBAAA,KAAK,EAAE,YAAY;AACnB,oBAAA,IAAI,EAAE,MAAM;AACb,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,QAAQ;AACb,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,OAAO,EAAE;AACP,wBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,wBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACxC,wBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACvC,qBAAA;AACF,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,YAAY;AACjB,oBAAA,KAAK,EAAE,aAAa;AACpB,oBAAA,IAAI,EAAE,SAAS;AAChB,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,WAAW;AAChB,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,OAAO,EAAE;AACP,wBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,wBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,wBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACvC,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;AAC1B,gBAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5B,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;AAC1B,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;AAC1B,gBAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5B,gBAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5B,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACxC,gBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACvC,aAAA;AACD,YAAA,gBAAgB,EAAE,KAAK;SACxB,CAAC;QAEF,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;QACzB,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;QACvB,IAAY,CAAA,YAAA,GAAsB,IAAI,CAAC;KAEyB;AAEhE,IAAA,aAAa,CAAC,KAAiB,EAAA;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;KACvF;8GA1EU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAxC1B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;AAsBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAvBS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA1B,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,kDAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAyCjD,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBA5CrC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,qBAAqB,EAAE,aAAa,CAAC,EACnD,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;AAsBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+LAAA,CAAA,EAAA,CAAA;;;ACwDG,MAAO,2BAA4B,SAAQ,cAAc,CAAA;AAE7D,IAAA,WAAA,CAAoB,GAAsB,EAAA;AAAI,QAAA,KAAK,EAAE,CAAC;QAAlC,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;KAAc;IAExD,QAAQ,GAAA;KAGP;AAED,IAAA,eAAe,CAAC,KAAa,EAAA;QACzB,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;QAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAc,CAAC;QAC1D,OAAO,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC;KACzD;AAED;;;;AAIC;IACH,eAAe,CAAC,KAAa,EAAE,SAAuB,EAAA;QACpD,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO;QAExB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAc,CAAC;QAC1D,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;KACvD;IAED,QAAQ,GAAA;KAEP;AAED,IAAA,WAAW,CAAC,KAAwB,EAAA;AAClC,QAAA,IAAG,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,EAAE,EAAE;AACrD,YAAA,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AACxB,YAAA,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;AAC1B,YAAA,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,cAAc,CAAC;SAC1C;AACD,QAAA,OAAO,KAAK,CAAC;KACd;;;;AASD;;;AAGG;;IAEK,wBAAwB,GAAA;QAC9B,MAAM,OAAO,GAAU,EAAE,CAAC;AAE1B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC/C,YAAA,MAAM,gBAAgB,GAAG,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC,CAAC;YAE9F,IAAI,gBAAgB,EAAE,KAAK,GAAG,eAAe,CAAC,EAAE;gBAC9C,OAAO,CAAC,CAAC,CAAC,GAAG;AACX,oBAAA,KAAK,EAAE,EAAE,GAAG,gBAAgB,CAAC,KAAK,EAAE;AACpC,oBAAA,UAAU,EAAE,gBAAgB,CAAC,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAU,MAAM;wBACzF,GAAG,EAAE,KAAK,CAAC,GAAG;wBACd,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;AAC1B,wBAAA,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE;;AAE1B,qBAAA,CAAC,CAAC,GAAG,IAAI;oBACV,IAAI,EAAE,gBAAgB,CAAC,IAAI;;iBAE5B,CAAC;aACH;SACF;QAED,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAChF,QAAA,OAAO,OAAO,CAAC;KAChB;;AAGO,IAAA,yBAAyB,CAAC,OAAc,EAAA;QAC9C,IAAI,aAAa,GAAG,CAAC,CAAC;AAEtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;gBACd,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC/C,gBAAA,MAAM,gBAAgB,GAAG,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC,CAAC;gBAE9F,IAAI,gBAAgB,EAAE;AACpB,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAoB,iBAAA,EAAA,CAAC,YAAY,EAAE;wBAC7C,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,CAAC,KAAK,GAAG,eAAe,CAAC;AAC7D,wBAAA,aAAa,EAAE,CAAC,CAAC,gBAAgB,CAAC,UAAU;AAC5C,wBAAA,gBAAgB,EAAE,gBAAgB,CAAC,UAAU,EAAE,MAAM;AACtD,qBAAA,CAAC,CAAC;oBAEH,gBAAgB,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;oBAC1C,gBAAgB,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;oBACpD,gBAAgB,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;;oBAGxC,IAAI,gBAAgB,CAAC,WAAW,IAAI,gBAAgB,CAAC,UAAU,EAAE;AAC/D,wBAAA,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,CAAC;AAC/C,wBAAA,IAAI,SAAS,CAAC,GAAG,EAAE;4BACjB,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AACjD,gCAAA,IAAI,KAAK,CAAC,GAAG,EAAE;oCACb,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iCAC9C;AACH,6BAAC,CAAC,CAAC;AACH,4BAAA,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA,WAAA,CAAa,CAAC,CAAC;yBACpE;qBACF;AAED,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAoB,iBAAA,EAAA,CAAC,WAAW,EAAE;wBAC5C,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,CAAC,KAAK,GAAG,eAAe,CAAC;AAC7D,wBAAA,aAAa,EAAE,CAAC,CAAC,gBAAgB,CAAC,UAAU;AAC5C,wBAAA,gBAAgB,EAAE,gBAAgB,CAAC,UAAU,EAAE,MAAM;AACtD,qBAAA,CAAC,CAAC;AAEH,oBAAA,aAAa,EAAE,CAAC;iBACjB;qBAAM;AACL,oBAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAA,CAAE,CAAC,CAAC;iBAC/D;aACF;SACF;AACD,QAAA,OAAO,CAAC,GAAG,CAAC,eAAe,aAAa,CAAA,kBAAA,CAAoB,CAAC,CAAC;KAC/D;;;;;;;;;;;;;;;;;;;;;;AA4BD,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;AACnD,QAAA,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK,CAAC;;AAG5D,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ,CAAC;QAClF,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,KAAK,EAAE,CAAC;;AAGpE,QAAA,MAAM,cAAc,GAAG,aAAa,IAAI,QAAQ;YACzB,QAAQ,CAAC,WAAW,KAAK,SAAS;AAClC,YAAA,QAAQ,CAAC,WAAW,KAAK,IAAI,CAAC;;AAGrD,QAAA,MAAM,iBAAiB,GAAG,QAAQ,CAAC,oBAAoB;AAC5B,YAAA,OAAO,QAAQ,CAAC,oBAAoB,KAAK,QAAQ;AACjD,aAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,IAAI,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;;QAG9G,OAAO,YAAY,IAAI,WAAW,KAAK,cAAc,IAAI,iBAAiB,CAAC,CAAC;KAC7E;IAED,KAAK,GAAA;;AAEH,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAChE,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,OAAO;SACR;;QAGD,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;SAC7C;;AAGD,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC3C,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAC7C;;QAGD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAc,CAAC;QACzD,IAAI,YAAY,EAAE;YAChB,YAAY,CAAC,KAAK,CAAC;AACjB,gBAAA,eAAe,EAAE,KAAK;AACtB,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,oBAAoB,EAAE,IAAI;AAC3B,aAAA,CAAC,CAAC;SACJ;;QAGD,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AAC5D,YAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG;AACd,gBAAA,eAAe,EAAE,KAAK;AACtB,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,oBAAoB,EAAE,IAAI;aAC3B,CAAC;SACH;KACF;AAED,IAAA,aAAa,CAAC,QAA2B,EAAA;QACvC,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,SAAS,CAAC;;QAGnC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE;AACnC,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,YAAY,IAAI,GAAG,EAAE;AACzD,gBAAA,OAAO,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;aAC/B;SACF;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AAED;;AAEG;AACK,IAAA,kBAAkB,CAAC,SAAoB,EAAE,SAAiB,EAAE,KAAU,EAAE,SAAkB,EAAA;QAChG,MAAM,IAAI,GAAG,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;AACvC,QAAA,IAAI,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;YAC/B,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;gBAC5C,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,GAAG,KAAK,EAAE,CAAC,CAAC;aAC9C;AACD,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACtB;KACF;AAED;;AAEG;AACK,IAAA,iBAAiB,CAAC,SAAoB,EAAE,SAAiB,EAAE,KAAU,EAAA;QAC3E,MAAM,IAAI,GAAG,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,IAAI,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC9C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AAC/B,gBAAA,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;AAC5B,oBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;iBACrC;AACH,aAAC,CAAC,CAAC;SACJ;KACF;AAED;;;AAGG;AACH,IAAA,IAAI,CAAC,KAAa,EAAA;QAChB,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAc,CAAC;AAC9D,QAAA,IAAI,CAAC,aAAa;YAAE,OAAO;;QAG3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,gBAAgB;YAAE,OAAO;;AAG9B,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAe,CAAC;QAC5C,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAwB,KAAI;AAChE,YAAA,IAAI,KAAK,CAAC,GAAG,EAAE;AACb,gBAAA,MAAM,MAAM,GAAG;oBACb,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,oBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;oBACpD,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B,CAAC;gBACF,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,GAAa,EAAE,MAAM,CAAC,CAAC;aAC/C;AACH,SAAC,CAAC,CAAC;;AAGH,QAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAe,CAAC;AAC7C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAc,CAAC;YACpD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AAEjD,YAAA,IAAI,OAAO,IAAI,aAAa,EAAE;AAC5B,gBAAA,MAAM,eAAe,GAAG,IAAI,GAAG,EAAe,CAAC;gBAC/C,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAwB,KAAI;AAC7D,oBAAA,IAAI,KAAK,CAAC,GAAG,EAAE;AACb,wBAAA,MAAM,MAAM,GAAG;4BACb,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,4BAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;4BACpD,SAAS,EAAE,KAAK,CAAC,SAAS;yBAC3B,CAAC;wBACF,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,GAAa,EAAE,MAAM,CAAC,CAAC;qBAClD;AACH,iBAAC,CAAC,CAAC;AAEH,gBAAA,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE;AACnB,oBAAA,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE;AAC7B,oBAAA,YAAY,EAAE,eAAe;AAC9B,iBAAA,CAAC,CAAC;aACJ;SACF;;AAGD,QAAA,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;;QAGjD,MAAM,eAAe,GAAG,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACzD,QAAA,MAAM,iBAAiB,GAAG,eAAe,EAAE,KAAK,CAAC;QAEjD,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAChE,QAAA,MAAM,eAAe,GAAG,aAAa,EAAE,KAAK,CAAC;;AAG7C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;;AAG7D,QAAA,MAAM,mBAAmB,GAAG,iBAAiB,YAAY,IAAI;cACzD,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;cACrC,iBAAiB,CAAC;AAEtB,QAAA,MAAM,iBAAiB,GAAG,eAAe,IAAI,OAAO,eAAe,KAAK,QAAQ;cAC5E,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;cAC3C,eAAe,CAAC;;AAGpB,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACf,YAAA,WAAW,CAAC,eAAe,GAAG,KAAK,CAAC;SACrC;;AAGA,QAAA,IAAY,CAAC,UAAU,GAAG,IAAI,CAAC;QAChC,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE;YAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;SAChD;;QAGD,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;;;;AAIjC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;AACzB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC/C,gBAAA,MAAM,aAAa,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;gBACxE,MAAM,YAAY,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,GAAG,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,YAAY,CAAC;AAErG,gBAAA,IAAI,aAAa,IAAI,YAAY,EAAE;oBACjC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAwB,KAAI;AAC7D,wBAAA,IAAI,KAAK,CAAC,GAAG,EAAE;4BACb,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,GAAa,CAAC,CAAC;4BACrD,IAAI,MAAM,EAAE;AACV,gCAAA,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;;gCAEzB,MAAM,UAAU,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;;AAEvC,gCAAA,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE;AACjC,oCAAA,IAAI,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE;AACvC,wCAAA,UAAU,CAAC,UAAU,GAAG,EAAE,CAAC;qCAC5B;;AAED,oCAAA,IAAI,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACvD,wCAAA,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;qCAC5B;iCACF;AACD,gCAAA,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,UAAU,EAAE,CAAC;AAChD,gCAAA,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;6BACpC;yBACF;AACH,qBAAC,CAAC,CAAC;iBACJ;aACF;SACF;;QAGD,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,cAAc,GAAG,KAAK,GAAG,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,cAAc,CAAc,CAAC;YACjE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC;AAE9D,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE;AAC9B,gBAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;gBAC3C,OAAO;aACR;;YAGD,UAAU,CAAC,MAAK;gBACd,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBACnD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;gBAE1D,IAAI,mBAAmB,KAAK,IAAI,IAAI,mBAAmB,KAAK,SAAS,IAAI,eAAe,EAAE;oBACxF,eAAe,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnE,eAAe,CAAC,aAAa,EAAE,CAAC;oBAChC,eAAe,CAAC,sBAAsB,EAAE,CAAC;iBAC1C;AAED,gBAAA,IAAI,iBAAiB,IAAI,aAAa,EAAE;oBACtC,aAAa,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;iBAElE;aACF,EAAE,EAAE,CAAC,CAAC;;YAGP,UAAU,CAAC,MAAK;;AAGd,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAChD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAc,CAAC;oBACpD,MAAM,WAAW,GAAG,OAAO,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC;iBACxD;AAED,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAChD,IAAI,CAAC,KAAK,cAAc;AAAE,wBAAA,SAAS;AAEnC,oBAAA,MAAM,aAAa,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC5C,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBACnD,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AAExD,oBAAA,IAAI,SAAS,IAAI,oBAAoB,EAAE;wBACrC,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,KAAwB,KAAI;AACpE,4BAAA,IAAI,KAAK,CAAC,GAAG,KAAK,aAAa,EAAE;AAC/B,gCAAA,MAAM,eAAe,GAAG,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,GAAa,CAAC,CAAC;gCACxE,IAAI,eAAe,EAAE;oCACnB,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,CAAC;oCACxD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAE7G,oCAAA,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,EAAE;;AAGjC,wCAAA,IAAK,KAAa,CAAC,cAAc,EAAE;AAChC,4CAAA,KAAa,CAAC,cAAc,GAAG,EAAE,CAAC;yCACpC;AACD,wCAAA,KAAK,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC;AAClC,wCAAA,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC;AAC3D,wCAAA,KAAK,CAAC,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC;wCAE5C,UAAU,CAAC,MAAK;AACd,4CAAA,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC;AACjC,gDAAA,IAAI,EAAE,MAAM;gDACZ,KAAK;gDACL,KAAK,EAAE,eAAe,CAAC,IAAI;AAC5B,6CAAA,CAAC,CAAC;AACH,4CAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;yCAC1B,EAAE,EAAE,CAAC,CAAC;qCACR;yCAAM;wCACL,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;qCAC3F;iCACF;6BACF;AACH,yBAAC,CAAC,CAAC;qBACJ;iBACF;aACF,EAAE,GAAG,CAAC,CAAC;;YAGR,UAAU,CAAC,MAAK;gBACd,OAAQ,IAAY,CAAC,UAAU,CAAC;gBAChC,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE;oBAClC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC;iBAChD;AACD,gBAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;aACvC,EAAE,GAAG,CAAC,CAAC;SACT,EAAE,GAAG,CAAC,CAAC;KACT;8GAvdU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAjE3B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,SAAA,EAAA,EAAE,ECvBf,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,84IA6EM,EDJF,MAAA,EAAA,CAAA,q8EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,wRACf,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,gBAAgB,EA7DN,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACV,OAAO,CAAC,cAAc,EAAE;gBACtB,UAAU,CAAC,QAAQ,EAAE;AACnB,oBAAA,KAAK,CAAC;AACJ,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,SAAS,EAAE,8BAA8B;qBAC1C,CAAC;AACF,oBAAA,OAAO,CAAC,sCAAsC,EAAE,KAAK,CAAC;AACpD,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,SAAS,EAAE,wBAAwB;AACpC,qBAAA,CAAC,CAAC;iBACJ,CAAC;gBACF,UAAU,CAAC,QAAQ,EAAE;AACnB,oBAAA,KAAK,CAAC;AACJ,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,SAAS,EAAE,wBAAwB;qBACpC,CAAC;AACF,oBAAA,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC;AAClD,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,SAAS,EAAE,8BAA8B;AAC1C,qBAAA,CAAC,CAAC;iBACJ,CAAC;aACH,CAAC;YACF,OAAO,CAAC,kBAAkB,EAAE;gBAC1B,UAAU,CAAC,QAAQ,EAAE;AACnB,oBAAA,KAAK,CAAC;AACJ,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,eAAe,EAAE,MAAM;qBACxB,CAAC;AACF,oBAAA,OAAO,CAAC,uCAAuC,EAAE,KAAK,CAAC;AACrD,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,SAAS,EAAE,WAAW;AACvB,qBAAA,CAAC,CAAC;iBACJ,CAAC;gBACF,UAAU,CAAC,QAAQ,EAAE;AACnB,oBAAA,KAAK,CAAC;AACJ,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,eAAe,EAAE,MAAM;qBACxB,CAAC;AACF,oBAAA,OAAO,CAAC,sCAAsC,EAAE,KAAK,CAAC;AACpD,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,SAAS,EAAE,WAAW;AACvB,qBAAA,CAAC,CAAC;iBACJ,CAAC;aACH,CAAC;AACH,SAAA,EAAA,CAAA,CAAA,EAAA;;2FAiBU,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAtEvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAGvB,UAAA,EAAA,IAAI,EACL,SAAA,EAAA,EAAE,EACD,UAAA,EAAA;wBACV,OAAO,CAAC,cAAc,EAAE;4BACtB,UAAU,CAAC,QAAQ,EAAE;AACnB,gCAAA,KAAK,CAAC;AACJ,oCAAA,OAAO,EAAE,CAAC;AACV,oCAAA,SAAS,EAAE,8BAA8B;iCAC1C,CAAC;AACF,gCAAA,OAAO,CAAC,sCAAsC,EAAE,KAAK,CAAC;AACpD,oCAAA,OAAO,EAAE,CAAC;AACV,oCAAA,SAAS,EAAE,wBAAwB;AACpC,iCAAA,CAAC,CAAC;6BACJ,CAAC;4BACF,UAAU,CAAC,QAAQ,EAAE;AACnB,gCAAA,KAAK,CAAC;AACJ,oCAAA,OAAO,EAAE,CAAC;AACV,oCAAA,SAAS,EAAE,wBAAwB;iCACpC,CAAC;AACF,gCAAA,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC;AAClD,oCAAA,OAAO,EAAE,CAAC;AACV,oCAAA,SAAS,EAAE,8BAA8B;AAC1C,iCAAA,CAAC,CAAC;6BACJ,CAAC;yBACH,CAAC;wBACF,OAAO,CAAC,kBAAkB,EAAE;4BAC1B,UAAU,CAAC,QAAQ,EAAE;AACnB,gCAAA,KAAK,CAAC;AACJ,oCAAA,OAAO,EAAE,CAAC;AACV,oCAAA,SAAS,EAAE,WAAW;AACtB,oCAAA,eAAe,EAAE,MAAM;iCACxB,CAAC;AACF,gCAAA,OAAO,CAAC,uCAAuC,EAAE,KAAK,CAAC;AACrD,oCAAA,OAAO,EAAE,CAAC;AACV,oCAAA,SAAS,EAAE,WAAW;AACvB,iCAAA,CAAC,CAAC;6BACJ,CAAC;4BACF,UAAU,CAAC,QAAQ,EAAE;AACnB,gCAAA,KAAK,CAAC;AACJ,oCAAA,OAAO,EAAE,CAAC;AACV,oCAAA,SAAS,EAAE,WAAW;AACtB,oCAAA,eAAe,EAAE,MAAM;iCACxB,CAAC;AACF,gCAAA,OAAO,CAAC,sCAAsC,EAAE,KAAK,CAAC;AACpD,oCAAA,OAAO,EAAE,CAAC;AACV,oCAAA,SAAS,EAAE,WAAW;AACvB,iCAAA,CAAC,CAAC;6BACJ,CAAC;yBACH,CAAC;qBACH,EACQ,OAAA,EAAA;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,YAAY;wBACZ,eAAe;wBACf,aAAa;wBACb,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,eAAe;wBACf,aAAa;wBACb,mBAAmB;wBACnB,mBAAmB;wBACnB,gBAAgB;AACjB,qBAAA,EAAA,QAAA,EAAA,84IAAA,EAAA,MAAA,EAAA,CAAA,q8EAAA,CAAA,EAAA,CAAA;;;MENU,6BAA6B,CAAA;AA8CxC,IAAA,WAAA,CAAoB,EAAe,EAAA;QAAf,IAAE,CAAA,EAAA,GAAF,EAAE,CAAa;AA7C1B,QAAA,IAAA,CAAA,MAAM,GAAwB;AACrC,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,SAAS,EAAE;gBACT,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE;gBACnD,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE;gBACzD,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE;gBACvD,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE;gBACpD,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,0BAA0B,EAAE;gBACrE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,uBAAuB,EAAE;gBAClE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE;AACvE,aAAA;AACD,YAAA,gBAAgB,EAAE,KAAK;SACxB,CAAC;AAEQ,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAsB,CAAC;AACrD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,YAAY,EAAkB,CAAC;QAMlE,IAAW,CAAA,WAAA,GAAqB,EAAE,CAAC;QACnC,IAAmB,CAAA,mBAAA,GAAqB,EAAE,CAAC;QAC3C,IAAiB,CAAA,iBAAA,GAAG,KAAK,CAAC;QAC1B,IAAa,CAAA,aAAA,GAAG,CAAC,CAAC;QAClB,IAAgB,CAAA,gBAAA,GAAqB,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACzD,IAAkB,CAAA,kBAAA,GAA0B,IAAI,CAAC;;QAGjD,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAC;QAC5B,IAAkB,CAAA,kBAAA,GAAqB,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC3D,IAAgB,CAAA,gBAAA,GAAkB,IAAI,CAAC;QACvC,IAAmB,CAAA,mBAAA,GAAkB,IAAI,CAAC;QAC1C,IAAkB,CAAA,kBAAA,GAAG,KAAK,CAAC;QAC3B,IAAiB,CAAA,iBAAA,GAAgB,IAAI,CAAC;QACtC,IAAkB,CAAA,kBAAA,GAAgB,IAAI,CAAC;AAE/B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC/B,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAU,CAAC;QACtC,IAAc,CAAA,cAAA,GAAG,CAAC,CAAC;QACnB,IAAc,CAAA,cAAA,GAAiD,OAAO,CAAC;QACvE,IAAiB,CAAA,iBAAA,GAAkB,IAAI,CAAC;QAC/B,IAAc,CAAA,cAAA,GAAG,EAAE,CAAC;QACpB,IAAe,CAAA,eAAA,GAAG,EAAE,CAAC;QAGpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACxB,SAAS,EAAE,CAAC,EAAE,CAAC;AAChB,SAAA,CAAC,CAAC;KACJ;;AAID,IAAA,eAAe,CAAC,KAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC;AAC5D,YAAA,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE;YACrE,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;KACF;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;IAEO,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,EACjC,oBAAoB,EAAE,EACtB,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EACjD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC,WAAW,IAAG;AACxB,YAAA,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC;YACvC,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAChC,SAAC,CAAC,CAAC;KACJ;IAEO,mBAAmB,GAAA;QACzB,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;AAEhC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;;AAGlD,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACpE,QAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChE,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACzE,QAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACzE,QAAA,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KACnE;IAEO,eAAe,GAAA;;QAErB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;AACjC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBACpB,EAAE,EAAE,KAAK,CAAC,GAAG;gBACb,IAAI,EAAE,KAAK,CAAC,KAAK;gBACjB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,CAAG,EAAA,KAAK,CAAC,IAAI,CAAQ,MAAA,CAAA;gBACvD,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,GAAG;AAChB,gBAAA,IAAI,EAAE,OAAO;AACd,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;;QAGH,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,IAAG;AACjC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBACpB,EAAE,EAAE,EAAE,CAAC,KAAK;gBACZ,IAAI,EAAE,EAAE,CAAC,KAAK;gBACd,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,CAAG,EAAA,EAAE,CAAC,KAAK,CAAW,SAAA,CAAA;gBACrD,KAAK,EAAE,EAAE,CAAC,KAAK;AACf,gBAAA,IAAI,EAAE,UAAU;AACjB,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CACnB;AACE,YAAA,EAAE,EAAE,KAAK;AACT,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,WAAW,EAAE,sBAAsB;AACnC,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,WAAW;SAClB,EACD;AACE,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,WAAW,EAAE,qBAAqB;AAClC,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,IAAI,EAAE,WAAW;AAClB,SAAA,CACF,CAAC;KACH;AAEO,IAAA,oBAAoB,CAAC,KAAa,EAAA;QACxC,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;AAEhC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;QAClD,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;AAED;;AAEG;IACH,aAAa,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,EAAE,CAAC;AACnC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAClD,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7E,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;KACxC;AAED;;AAEG;IACH,uBAAuB,GAAA;AACrB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;;QAGxC,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC7C,YAAA,OAAO,KAAK,CAAC;SACd;QACD,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC5C,YAAA,OAAO,IAAI,CAAC;SACb;;QAGD,MAAM,OAAO,GAAG,gCAAgC,CAAC;QACjD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACxD,QAAA,OAAO,EAAE,CAAC;KACX;AAED;;AAEG;AACH,IAAA,UAAU,CAAC,IAAY,EAAE,UAAA,GAAsB,KAAK,EAAA;QAClD,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;AAEhC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAClD,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;QACtC,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACnD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;;QAGhD,IAAI,SAAS,GAAG,SAAS,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,IAAI,QAAQ,EAAE;YAC3B,MAAM,aAAa,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACvD,YAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;gBACxB,SAAS,GAAG,aAAa,CAAC;aAC3B;SACF;;QAGD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC3C,QAAA,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;;QAGrC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;;AAG3C,QAAA,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;;QAGnE,QAAQ,CAAC,KAAK,EAAE,CAAC;AACjB,QAAA,QAAQ,CAAC,cAAc,GAAG,MAAM,CAAC;AACjC,QAAA,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC;AAC/B,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;;;KAI9B;AAEO,IAAA,gBAAgB,CAAC,UAA0B,EAAA;AACjD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC;AACnD,QAAA,IAAI,CAAC,QAAQ;YAAE,OAAO;AAEtB,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC5B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAC1C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;;AAG/C,QAAA,IAAI,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC;QAClC,IAAI,cAAc,GAAG,EAAE,CAAC;;AAGxB,QAAA,QAAQ,UAAU,CAAC,IAAI;AACrB,YAAA,KAAK,OAAO;gBACV,cAAc,GAAG,GAAG,CAAC;gBACrB,MAAM;AACR,YAAA,KAAK,UAAU;gBACb,cAAc,GAAG,GAAG,CAAC;gBACrB,MAAM;AACR,YAAA,KAAK,OAAO;;gBAEV,MAAM;AACR,YAAA,KAAK,WAAW;AACd,gBAAA,UAAU,GAAG,CAAK,EAAA,EAAA,UAAU,CAAC,KAAK,GAAG,CAAC;gBACtC,MAAM;SACT;;QAGD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC;AACpC,YAAA,UAAU,GAAG,cAAc;AAC3B,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;;AAG9C,QAAA,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC;;AAGzB,QAAA,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;AAClF,QAAA,QAAQ,CAAC,iBAAiB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC;;AAGnC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;;QAGpE,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;KACjC;IAED,OAAO,GAAA;AACL,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;QAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;KACnC;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;AAC9B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;AAEpB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SAC1C;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,YAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,KAAK;AAChD,YAAA,KAAK,EAAE,EAAE;AACV,SAAA,CAAC,CAAC;KACJ;AAEO,IAAA,eAAe,CAAC,KAAY,EAAA;AAClC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA6B,CAAC;AACnD,QAAA,IAAI,CAAC,MAAM;YAAE,OAAO;AAEpB,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC;;AAGjD,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;;QAGlE,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAC1C,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAGrC,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;KAC/B;AAEO,IAAA,cAAc,CAAC,KAAiB,EAAA;;QAEtC,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;gBAClE,IAAI,CAAC,YAAY,EAAE,CAAC;aACrB;SACF,EAAE,GAAG,CAAC,CAAC;KACT;IAEO,aAAa,GAAA;QACnB,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;AAEhC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAClD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC5B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;;AAG5D,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;AAE5D,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;SAC/B;AAAM,aAAA,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;AAC5C,YAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;YACjC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;SAC5D;AAAM,aAAA,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;AAC5C,YAAA,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC;SACnC;aAAM;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;SAC/B;KACF;AAEO,IAAA,0BAA0B,CAAC,KAAa,EAAA;QAC9C,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;;AAGnD,QAAA,IAAI,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;;QAGtD,IAAI,eAAe,EAAE;AACnB,YAAA,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,IACvD,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;gBACvD,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;gBACxD,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;AACxD,iBAAC,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAC3F,CAAC;SACH;;QAGD,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;YAChE,OAAO,MAAM,GAAG,MAAM,CAAC;AACzB,SAAC,CAAC,CAAC;QAEH,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;KAC1D;IAEO,qBAAqB,GAAA;AAC3B,QAAA,QAAQ,IAAI,CAAC,cAAc;AACzB,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;AAC1D,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,IAAI,CAAC,sBAAsB,EAAE,CAAC;AACvC,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACpC,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;AAC9D,YAAA;gBACE,OAAO,IAAI,CAAC,WAAW,CAAC;SAC3B;KACF;IAEO,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;SAC5D;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC7E,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;SAC5D;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAC9B,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,SAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAC5D,CAAC;KACH;IAEO,mBAAmB,GAAA;QACzB,IAAI,CAAC,IAAI,CAAC,iBAAiB;AAAE,YAAA,OAAO,EAAE,CAAC;QAEvC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC7E,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE,CAAC;QAExC,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK;YAClC,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,CAAI,CAAA,EAAA,MAAM,CAAC,KAAK,CAAE,CAAA;YAClC,IAAI,EAAE,MAAM,CAAC,KAAK;YAClB,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,YAAA,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE;AAC9B,YAAA,IAAI,EAAE,OAAgB;AACvB,SAAA,CAAC,CAAC,CAAC;KACL;IAEO,uBAAuB,CAAC,UAA0B,EAAE,KAAa,EAAA;AACvE,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,CAAC,CAAC;QAErB,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;;QAG7C,IAAI,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK;AAAE,YAAA,OAAO,GAAG,CAAC;;AAGrE,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;;AAG5F,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;;AAGtF,QAAA,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;AAE9F,QAAA,OAAO,CAAC,CAAC;KACV;AAEO,IAAA,UAAU,CAAC,SAAiB,EAAA;QAClC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,KAAK,GAA+C,EAAE,CAAC;QAC7D,IAAI,gBAAgB,GAAiB,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,KAAK,CAAC;AAE3E,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,WAAW;gBAAE,SAAS;;YAG3B,IAAI,WAAW,KAAK,KAAK,IAAI,WAAW,KAAK,IAAI,EAAE;AACjD,gBAAA,gBAAgB,GAAG,WAAW,CAAC,WAAW,EAAkB,CAAC;gBAC7D,SAAS;aACV;;YAGD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACzC,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC;AAClC,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAClB;SACF;QAED,OAAO;AACL,YAAA,SAAS,EAAE,gBAAgB;YAC3B,KAAK;SACN,CAAC;KACH;AAEO,IAAA,iBAAiB,CAAC,SAAiB,EAAA;AACzC,QAAA,IAAI;YACF,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC9B;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;;AAE7C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,gBAAA,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,KAAK;AAChD,gBAAA,KAAK,EAAE,EAAE;AACV,aAAA,CAAC,CAAC;SACJ;KACF;AAEO,IAAA,SAAS,CAAC,KAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,OAAO;SACR;AAED,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;gBACd,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC3F,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,MAAM;AACR,YAAA,KAAK,SAAS;gBACZ,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,MAAM;AACR,YAAA,KAAK,OAAO,CAAC;AACb,YAAA,KAAK,KAAK;gBACR,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;AAChD,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;iBACrE;gBACD,MAAM;AACR,YAAA,KAAK,QAAQ;gBACX,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,MAAM;AACR,YAAA;gBACE,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC5B,MAAM;SACT;KACF;IAEO,cAAc,GAAA;QACpB,IAAI,CAAC,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,EAAE,CAAC;AAEnC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAClD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE3C,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;KACjD;IAEO,oBAAoB,GAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAErD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAClD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;QAEnC,IAAI,KAAK,GAAG,MAAM,CAAC;QACnB,IAAI,GAAG,GAAG,MAAM,CAAC;;AAGjB,QAAA,OAAO,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE;AAC9C,YAAA,KAAK,EAAE,CAAC;SACT;;AAGD,QAAA,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;AAChD,YAAA,GAAG,EAAE,CAAC;SACP;AAED,QAAA,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;KACvB;AAEO,IAAA,iBAAiB,CAAC,IAAY,EAAA;QACpC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KACnE;AAEO,IAAA,eAAe,CAAC,MAAgB,EAAA;AACtC,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5C,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;KACjE;AAEO,IAAA,YAAY,CAAC,MAAgB,EAAA;AACnC,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;KAC/F;AAEO,IAAA,YAAY,CAAC,MAAgB,EAAA;AACnC,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;;QAGpC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE3C,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;AAClE,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;KAChE;AAEO,IAAA,YAAY,CAAC,MAAgB,EAAA;AACnC,QAAA,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;YACjF,IAAI,KAAK,EAAE;gBACT,OAAO,KAAK,CAAC,GAAG,CAAC;aAClB;SACF;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,iBAAiB,CAAC,UAA0B,EAAA;AAC1C,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;KACnC;AAEO,IAAA,gBAAgB,CAAC,UAA0B,EAAA;AACjD,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;AAE/C,QAAA,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;AACrC,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QAGzC,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC;;AAG1C,YAAA,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE;gBAC/B,IAAI,CAAC,uBAAuB,EAAE,CAAC;aAChC;AAAM,iBAAA,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE;gBACzC,IAAI,CAAC,oBAAoB,EAAE,CAAC;aAC7B;SACF,EAAE,EAAE,CAAC,CAAC;KACR;;AAGD,IAAA,gBAAgB,CAAC,KAAU,EAAA;;;KAG1B;AAEO,IAAA,iBAAiB,CAAC,KAAa,EAAA;QACrC,MAAM,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;AAC3D,QAAA,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC;KACxB;IAEO,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAC/B,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;KAC/B;IAEO,uBAAuB,GAAA;;AAE7B,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAE1D,QAAA,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;AAC/C,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAC/B;KACF;IAEO,oBAAoB,GAAA;;QAE1B,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEpF,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,EAAE;YAChD,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAO;SACR;;AAGD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAEpD,QAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,mBAAmB,GAAG,gBAAgB,CAAC;AAC5C,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAC/B;aAAM;;YAEL,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;KACF;IAEO,sBAAsB,GAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO;AAE3D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAClD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,qBAAqB,EAAE,CAAC;;AAG9C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAEjD,IAAI,CAAC,gBAAgB,GAAG;YACtB,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,GAAG,EAAE;AACrC,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI;SACpC,CAAC;KACH;IAEO,cAAc,GAAA;;QAEpB,IAAI,CAAC,YAAY,EAAE,CAAC;;AAGpB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC;AAC/C,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACrD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,KAAK,SAAS,CAAC;AACjE,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;;AAG/B,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,wBAAwB,EAAE,CAAC;KACjC;IAEO,wBAAwB,GAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAAE,OAAO;AAE7D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAClD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,qBAAqB,EAAE,CAAC;;AAG9C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAEjD,IAAI,CAAC,kBAAkB,GAAG;YACxB,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,GAAG,EAAE;AACrC,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI;SACpC,CAAC;KACH;IAEO,kBAAkB,GAAA;QACxB,IAAI,CAAC,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,IAAI,CAAC;AAErC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAClD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC5B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;;AAGpD,QAAA,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE;AACxD,gBAAA,OAAO,KAAK,CAAC;aACd;SACF;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,mBAAmB,CAAC,IAAU,EAAA;AAC5B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAE9B,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;;YAE3B,OAAO;SACR;aAAM;;AAEL,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;KACF;AAED,IAAA,oBAAoB,CAAC,IAAU,EAAA;AAC7B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAE/B,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,kBAAkB,EAAE;;YAErD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC3E,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;KACF;AAEO,IAAA,eAAe,CAAC,IAAU,EAAA;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;KACrC;IAEO,oBAAoB,CAAC,SAAe,EAAE,OAAa,EAAA;QACzD,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC/C,QAAA,MAAM,WAAW,GAAG,CAAA,EAAG,eAAe,CAAK,EAAA,EAAA,aAAa,EAAE,CAAC;AAC3D,QAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;KACtC;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;;AAE3B,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KACzC;AAEO,IAAA,kBAAkB,CAAC,IAAY,EAAA;QACrC,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;AAEhC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAClD,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC;AACnC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;;AAGtC,QAAA,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;;AAG9F,QAAA,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC;;AAGzB,QAAA,MAAM,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7C,QAAA,QAAQ,CAAC,iBAAiB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,cAAc,GAAG,YAAY,CAAC;;AAGnC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;;AAGpE,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;KACjC;IAED,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;;AAG/B,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SAC1C;KACF;IAEO,oBAAoB,GAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAEpD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AAClD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACrC,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;;AAGhD,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,QAAA,MAAM,UAAU,GAAG,EAAE,CAAC;QAEtB,OAAO;YACL,GAAG,EAAE,WAAW,GAAG,UAAU;YAC7B,IAAI,EAAE,aAAa,GAAG,SAAS;SAChC,CAAC;KACH;IAEO,gBAAgB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;AAE3B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;AAC7C,QAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAgB,aAAA,EAAA,IAAI,CAAC,aAAa,CAAI,EAAA,CAAA,CAAgB,CAAC;QAEtG,IAAI,eAAe,EAAE;YACnB,eAAe,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;SACtD;KACF;AAEO,IAAA,SAAS,CAAC,QAAgB,EAAA;;AAEhC,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;AAC1C,aAAA,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;aAC1D,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAe,YAAA,EAAA,eAAe,CAAY,UAAA,CAAA,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAEpC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI,CAAC;QAExB,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;;QAGjD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAC3C,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAC7C,CAAC;AACF,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,IAAI,CAAC;;QAG9B,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;AAC/E,QAAA,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,IAAI,CAAC;;AAGjC,QAAA,IAAI,WAAW,GAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;AAExC,QAAA,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE;AACjC,YAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;gBACpB,WAAW,GAAG,QAAQ,CAAC;aACxB;SACF;AAAM,aAAA,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,EAAE;AACzC,YAAA,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;SACpD;QAED,OAAO;YACL,KAAK,EAAE,WAAW,CAAC,GAAG;AACtB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,KAAK,EAAE,WAAW;SACnB,CAAC;KACH;8GAz3BU,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAL,IAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,mdChF1C,qoJAyGA,EAAA,MAAA,EAAA,CAAA,4+IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpCI,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,w9BACnB,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,EACd,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,6NACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAChB,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,igBACnB,mBAAmB,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGV,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAjBzC,SAAS;+BACE,2BAA2B,EAAA,UAAA,EAGzB,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,aAAa;wBACb,gBAAgB;wBAChB,mBAAmB;wBACnB,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,qoJAAA,EAAA,MAAA,EAAA,CAAA,4+IAAA,CAAA,EAAA,CAAA;kFAGQ,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAcI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,kBAAkB,EAAA,CAAA;sBAA3B,MAAM;gBAEqB,aAAa,EAAA,CAAA;sBAAxC,SAAS;uBAAC,eAAe,CAAA;gBACH,QAAQ,EAAA,CAAA;sBAA9B,SAAS;uBAAC,UAAU,CAAA;gBAmCrB,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ME/E/B,iCAAiC,CAAA;AAhD9C,IAAA,WAAA,GAAA;AAiDE,QAAA,IAAA,CAAA,WAAW,GAAwB;AACjC,YAAA,MAAM,EAAE;AACN,gBAAA;AACE,oBAAA,GAAG,EAAE,MAAM;AACX,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,IAAI,EAAE,QAAQ;AACf,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,KAAK;AACV,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,SAAS,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC;AACxD,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,OAAO;AACZ,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,SAAS,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC;AACnC,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,WAAW;AAChB,oBAAA,KAAK,EAAE,YAAY;AACnB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,SAAS,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC;AACxD,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,UAAU;AACf,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,IAAI,EAAE,SAAS;AAChB,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,QAAQ;AACb,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,OAAO,EAAE;AACP,wBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,wBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACxC,wBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACvC,qBAAA;AACF,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,WAAW;AAChB,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,OAAO,EAAE;AACP,wBAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AACpC,wBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACtC,wBAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AACvC,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;AAC1B,gBAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5B,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;AAC1B,gBAAA,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;AAC1B,gBAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5B,gBAAA,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5B,gBAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACzC,aAAA;AACD,YAAA,gBAAgB,EAAE,KAAK;SACxB,CAAC;QAEF,IAAY,CAAA,YAAA,GAA8B,IAAI,CAAC;AAMhD,KAAA;AAJC,IAAA,aAAa,CAAC,KAAyB,EAAA;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,QAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;KACtC;8GArEU,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,EAvClC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAxBC,YAAY,EACZ,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,6BAA6B,EAC7B,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,0ZACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAyCP,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAhD7C,SAAS;+BACE,gCAAgC,EAAA,UAAA,EAC9B,IAAI,EACP,OAAA,EAAA;wBACP,YAAY;wBACZ,6BAA6B;wBAC7B,aAAa;wBACb,gBAAgB;qBACjB,EACS,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wKAAA,CAAA,EAAA,CAAA;;;ACnBG,MAAO,oBAAqB,SAAQ,SAAS,CAAA;IAEjD,QAAQ,GAAA;;KAEP;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;AACpC,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;KAC5D;AAED,IAAA,IAAa,WAAW,GAAA;QACtB,OAAO,KAAK,CAAC,WAA0B,CAAC;KACzC;IAED,WAAW,CAAC,KAAU,EAAE,KAAqB,EAAA;AAC3C,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;KACtB;8GAlBU,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfjC,slCA2BM,EAAA,MAAA,EAAA,CAAA,64HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjBM,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAK7E,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EACf,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,CAAC,EAAA,QAAA,EAAA,slCAAA,EAAA,MAAA,EAAA,CAAA,64HAAA,CAAA,EAAA,CAAA;;;MEK9E,uBAAuB,CAAA;AAWlC,IAAA,WAAA,CAAoB,GAAsB,EAAA;QAAtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAVf,IAAK,CAAA,KAAA,GAAyB,EAAE,CAAC;QACnD,IAAQ,CAAA,QAAA,GAAW,EAAE,CAAC;QACtB,IAAS,CAAA,SAAA,GAAqC,IAAI,CAAC;QAG5D,IAAY,CAAA,YAAA,GAAyB,EAAE,CAAC;QACxC,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;QAEhB,IAAc,CAAA,cAAA,GAAkB,IAAI,CAAC;KAEE;IAE/C,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;SACpD;KACF;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;AAC3E,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B;KACF;IAED,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;YACtB,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B;KACF;IAEO,mBAAmB,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SAC3C;AAED,QAAA,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAC,MAAK;YAC/C,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAChC,SAAC,CAAC,CAAC;KACJ;IAEO,sBAAsB,GAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa;YAAE,OAAO;AAE/C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;AACnD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC;;QAGvE,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACxD,QAAA,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAE3D,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,WAAW,CAAC;AACvF,QAAA,MAAM,QAAQ,GAAG,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE/C,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAG,EAAA,QAAQ,CAAG,CAAA,CAAA,CAAC,CAAC;QACjE,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC;;AAGlI,QAAA,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;AACnC,QAAA,SAAS,CAAC,YAAY,CAAC;AACvB,QAAA,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;AAEjC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KACzB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa;YAAE,OAAO;AAC/C,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,kBAAkB,GAAG,QAAQ,CAAC;KACtE;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa;YAAE,OAAO;AAC/C,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,kBAAkB,GAAG,SAAS,CAAC;KACvE;IAED,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SAC3C;KACF;8GAlFU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EALvB,CAAC,WAAW,CAAC,+JCV1B,qmBAUM,EAAA,MAAA,EAAA,CAAA,8+DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDDM,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,MAAA,EAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAM9B,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBATnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAClB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,gBAAgB,EAAE,aAAa,CAAC,EAAA,SAAA,EAC/B,CAAC,WAAW,CAAC,EAGP,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qmBAAA,EAAA,MAAA,EAAA,CAAA,8+DAAA,CAAA,EAAA,CAAA;sFAGpB,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;gBAChB,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACsB,aAAa,EAAA,CAAA;sBAAxC,SAAS;uBAAC,eAAe,CAAA;;;AEd5B,IAAIN,QAAM,GAAG,CAAC,CAAC;AAST,MAAO,gBAAiB,SAAQ,SAA0B,CAAA;AAPhE,IAAA,WAAA,GAAA;;QAQW,IAAU,CAAA,UAAA,GAAW,CAAC,CAAC,CAAC;QACxB,IAAQ,CAAA,QAAA,GAAY,IAAI,CAAC;QAIxB,IAAO,CAAA,OAAA,GAAG,IAAI,YAAY,CAAC;QAErC,IAAI,CAAA,IAAA,GAAWA,QAAM,EAAE,CAAC;QAExB,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;QAE5B,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;AAkCf,KAAA;;;;;IA3BC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;AAC3C,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;AACpD,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAG,EAAA,IAAI,CAAC,GAAG,CAAE,CAAA,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAG,EAAA,IAAI,CAAC,GAAG,CAAA,CAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAChF,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;YAEpD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAS,CAAC;SAC9C;AACD,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG;AACd,YAAA,oBAAoB,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,QAAQ,CAAG,CAAA,CAAA;AAC7C,YAAA,YAAY,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,QAAQ,CAAG,CAAA,CAAA;SACtC,CAAC;KACH;AAED,IAAA,MAAM,CAAC,MAAc,EAAA;QACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ;YAAE,OAAO;AACzD,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,OAAO;SACR;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;YACxB,EAAE,EAAE,IAAI,CAAC,UAAU;AACpB,SAAA,CAAC,CAAC;KACJ;8GA7CU,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,ECd7B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,04BAcA,EDJY,MAAA,EAAA,CAAA,kxCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,KAAK,mHAAE,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIV,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cACV,IAAI,EAAA,OAAA,EACP,CAAC,KAAK,EAAE,IAAI,CAAC,EAAA,QAAA,EAAA,04BAAA,EAAA,MAAA,EAAA,CAAA,kxCAAA,CAAA,EAAA,CAAA;8BAKb,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEI,OAAO,EAAA,CAAA;sBAAhB,MAAM;;;AEdT,IAAI,MAAM,GAAG,CAAC,CAAC;MAQF,aAAa,CAAA;AAP1B,IAAA,WAAA,GAAA;AAYY,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAE,CAAC;QAG1C,IAAI,CAAA,IAAA,GAAW,MAAM,EAAE,CAAC;QACxB,IAAQ,CAAA,QAAA,GAAQ,EAAE,CAAC;AAapB,KAAA;IAXC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YACrC,OAAO;AACL,gBAAA,oBAAoB,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,OAAO,CAAG,CAAA,CAAA;AAC5C,gBAAA,YAAY,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,OAAO,CAAG,CAAA,CAAA;aACrC,CAAA;AACH,SAAC,CAAC,CAAA;KACH;AACD,IAAA,SAAS,CAAC,GAAQ,EAAA;QAChB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;KACvC;8GArBU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,ECd1B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,i4BAgBA,EDNY,MAAA,EAAA,CAAA,0sDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,KAAK,mHAAE,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAIV,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,cACP,IAAI,EAAA,OAAA,EACP,CAAC,KAAK,EAAE,IAAI,CAAC,EAAA,QAAA,EAAA,i4BAAA,EAAA,MAAA,EAAA,CAAA,0sDAAA,CAAA,EAAA,CAAA;8BAKb,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEI,UAAU,EAAA,CAAA;sBAAnB,MAAM;;;MEJI,cAAc,CAAA;AAP3B,IAAA,WAAA,GAAA;QAQW,IAAgB,CAAA,gBAAA,GAAW,CAAC,CAAC,CAAC;QAG9B,IAAU,CAAA,UAAA,GAAW,EAAE,CAAC;QACxB,IAAc,CAAA,cAAA,GAAW,eAAe,CAAC;QAKzC,IAAM,CAAA,MAAA,GAAY,IAAI,CAAC;QACvB,IAAK,CAAA,KAAA,GAAoB,EAAE,CAAC;QAC5B,IAAa,CAAA,aAAA,GAAW,IAAI,CAAC;QAC7B,IAAkB,CAAA,kBAAA,GAAW,IAAI,CAAC;AAEjC,QAAA,IAAA,CAAA,UAAU,GAA8B,IAAI,YAAY,EAAE,CAAC;AAC3D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAE,CAAC;AACjC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAClC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;AAGtC,QAAA,IAAA,CAAA,WAAW,GAAG,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC;AA6BtF,KAAA;AA3BC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE;YACvD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;AAC/C,YAAA,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;AACnE,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;SACxD;AACD,QAAA,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YAC/B,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;SACzF;AAED,QAAA,IAAI,IAAI,CAAC,gBAAgB,GAAG,GAAG;AAAE,YAAA,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;KAE9D;AAED,IAAA,OAAO,CAAC,GAAW,EAAA;QACjB,IAAI,GAAG,IAAI,CAAC;AAAE,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;aACjC,IAAI,GAAG,IAAI,CAAC;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;aACvC,IAAI,GAAG,IAAI,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;KACvC;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,MAAM,EAAE,EAAE;AACX,SAAA,CAAC,CAAA;KACH;8GAhDU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,ECf3B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,20CA4BM,EDjBM,MAAA,EAAA,CAAA,0lDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,4NAAmB,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAI3C,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EACR,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,EAAA,QAAA,EAAA,20CAAA,EAAA,MAAA,EAAA,CAAA,0lDAAA,CAAA,EAAA,CAAA;8BAK9E,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAEI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBACG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBACG,MAAM,EAAA,CAAA;sBAAf,MAAM;;AAkCT,MAAM,SAAS,GAAQ;AACrB,IAAA,SAAS,EAAE;AACT,QAAA,IAAI,EAAE,qBAAqB;AAC3B,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,KAAK,EAAE,SAAS;AACjB,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,IAAI,EAAE,oBAAoB;AAC1B,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,KAAK,EAAE,SAAS;AACjB,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,IAAI,EAAE,sBAAsB;AAC5B,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,KAAK,EAAE,EAAE;AACV,KAAA;CACF;;MElDY,4BAA4B,CAAA;AA1BzC,IAAA,WAAA,GAAA;AA2BW,QAAA,IAAA,CAAA,MAAM,GAAwB;AACrC,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,iBAAiB,EAAE,GAAG;AACtB,YAAA,wBAAwB,EAAE,KAAK;SAChC,CAAC;AAEF,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAS,CAAC,CAAC,CAAC;AACrC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAA6B,cAAc,CAAC,CAAC;AAkDrE,KAAA;IA/CC,QAAQ,GAAA;;;QAGN,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;SACpC,EAAE,EAAE,CAAC,CAAC;QAEP,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;;AAEhC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;;AAEvD,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;AAG7B,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,gBAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAChC;;YAGD,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAChC;KACF;IAEO,cAAc,GAAA;;QAEpB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,IAClC,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CACzC,CAAC;;QAGF,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,MAAK;gBACjC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,IAClC,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CACzC,CAAC;aACH,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC;SACxC,EAAE,GAAG,CAAC,CAAC;KACT;8GA3DU,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,ECjCzC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,qhBAaQ,EDHI,MAAA,EAAA,CAAA,+oBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAGV,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACV,OAAO,CAAC,gBAAgB,EAAE;AACxB,gBAAA,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;AACpB,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,SAAS,EAAE,iBAAiB;AAC7B,iBAAA,CAAC,CAAC;AACH,gBAAA,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AACrB,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,SAAS,EAAE,kBAAkB;AAC9B,iBAAA,CAAC,CAAC;gBACH,UAAU,CAAC,mBAAmB,EAAE;oBAC9B,OAAO,CAAC,yBAAyB,CAAC;iBACnC,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC;gBACjC,UAAU,CAAC,mBAAmB,EAAE;oBAC9B,OAAO,CAAC,wBAAwB,CAAC;iBAClC,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC;aAClC,CAAC;AACH,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAGU,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBA1BxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,cACvB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAGX,UAAA,EAAA;wBACV,OAAO,CAAC,gBAAgB,EAAE;AACxB,4BAAA,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC;AACpB,gCAAA,OAAO,EAAE,CAAC;AACV,gCAAA,SAAS,EAAE,iBAAiB;AAC7B,6BAAA,CAAC,CAAC;AACH,4BAAA,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;AACrB,gCAAA,OAAO,EAAE,CAAC;AACV,gCAAA,SAAS,EAAE,kBAAkB;AAC9B,6BAAA,CAAC,CAAC;4BACH,UAAU,CAAC,mBAAmB,EAAE;gCAC9B,OAAO,CAAC,yBAAyB,CAAC;6BACnC,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC;4BACjC,UAAU,CAAC,mBAAmB,EAAE;gCAC9B,OAAO,CAAC,wBAAwB,CAAC;6BAClC,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC;yBAClC,CAAC;qBACH,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qhBAAA,EAAA,MAAA,EAAA,CAAA,+oBAAA,CAAA,EAAA,CAAA;8BAGtC,MAAM,EAAA,CAAA;sBAAd,KAAK;;;ME7BK,kBAAkB,CAAA;AAE7B,IAAA,WAAA,GAAA,GAAiB;8GAFN,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACcY,MAAA,WAAW,GAAG;IACvB,OAAO,EAAE,QAAQ,EAAE,OAAO;EACnB;AAME,MAAA,cAAc,GAAG;IAC1B,MAAM,EAAE,OAAO,EAAE,MAAM;EAChB;AAOE,MAAA,UAAU,GAAG;IACtB,SAAS,EAAE,SAAS,EAAE,aAAa;;;ACpC1B,MAAA,SAAS,GAAG;IACrB,UAAU,EAAE,oBAAoB,EAAE,QAAQ;IAC1C,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB;IAC9D,qBAAqB,EAAE,eAAe,EAAE,cAAc;IACtD,mBAAmB,EAAE,mBAAmB,EAAE,eAAe;AACzD,IAAA,oBAAoB,EAAE,WAAW;IACjC,aAAa,EAAE,qBAAqB,EAAE,kBAAkB;IACxD,cAAc,EAAE,oBAAoB,EAAE,oBAAoB;IAC1D,sBAAsB,EAAE,WAAW,EAAE,kBAAkB;IACvD,cAAc,EAAE,oBAAoB,EAAE,gBAAgB;IACtD,sBAAsB,EAAE,YAAY,EAAE,kBAAkB;IACxD,iBAAiB,EAAE,oBAAoB,EAAE,sBAAsB;AAC/D,IAAA,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB;IACpG,oBAAoB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,wBAAwB;IACxH,kCAAkC,EAAE,wBAAwB,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU;IACvH,kBAAkB;;;IC8BR,cAEX;AAFD,CAAA,UAAY,aAAa,EAAA;AAEzB,CAAC,EAFW,aAAa,KAAb,aAAa,GAExB,EAAA,CAAA,CAAA;;AC/CH;;AAEG;AAEH;AAGA;;ACPA;;AAEG;;;;"}
1
+ {"version":3,"file":"sarasanalytics-com-design-system.mjs","sources":["../../../projects/component-library/src/lib/card/card-custom-header/card-custom-header.component.ts","../../../projects/component-library/src/lib/card/card-custom-header/card-custom-header.component.html","../../../projects/component-library/src/lib/chips/chips.component.ts","../../../projects/component-library/src/lib/chips/chips.component.html","../../../projects/component-library/src/lib/icon/icon.service.ts","../../../projects/component-library/src/lib/icon/icon.component.ts","../../../projects/component-library/src/lib/icon/icon.component.html","../../../projects/component-library/src/lib/avatar/avatar.component.ts","../../../projects/component-library/src/lib/avatar/avatar.component.html","../../../projects/component-library/src/lib/card/card.component.ts","../../../projects/component-library/src/lib/card/card.component.html","../../../projects/component-library/src/lib/spinner/spinner.component.ts","../../../projects/component-library/src/lib/spinner/spinner.component.html","../../../projects/component-library/src/lib/button/button.component.ts","../../../projects/component-library/src/lib/button/button.component.html","../../../projects/component-library/src/lib/accordion/accordion.component.ts","../../../projects/component-library/src/lib/accordion/accordion.component.html","../../../projects/component-library/src/lib/calendar-header/calendar-header.component.ts","../../../projects/component-library/src/lib/calendar-header/calendar-header.component.html","../../../projects/component-library/src/lib/card/card-body/card-body.component.ts","../../../projects/component-library/src/lib/card/card-body/card-body.component.html","../../../projects/component-library/src/lib/card/card-footer-actions/card-footer-actions.component.ts","../../../projects/component-library/src/lib/card/card-footer-actions/card-footer-actions.component.html","../../../projects/component-library/src/lib/card/card-icon/card-icon.component.ts","../../../projects/component-library/src/lib/card/card-icon/card-icon.component.html","../../../projects/component-library/src/lib/card/card-title-actions/card-title-actions.component.ts","../../../projects/component-library/src/lib/card/card-title-actions/card-title-actions.component.html","../../../projects/component-library/src/lib/list/list.component.ts","../../../projects/component-library/src/lib/list/list.component.html","../../../projects/component-library/src/lib/card/checkbox-card/checkbox-card.component.ts","../../../projects/component-library/src/lib/card/checkbox-card/checkbox-card.component.html","../../../projects/component-library/src/lib/card/guide-card/guide-card.component.ts","../../../projects/component-library/src/lib/card/guide-card/guide-card.component.html","../../../projects/component-library/src/lib/message-banner/message-banner.component.ts","../../../projects/component-library/src/lib/message-banner/message-banner.component.html","../../../projects/component-library/src/lib/card/menu-card/menu-card.component.ts","../../../projects/component-library/src/lib/card/menu-card/menu-card.component.html","../../../projects/component-library/src/lib/card/thumbnail-card/thumbnail-card.component.ts","../../../projects/component-library/src/lib/card/thumbnail-card/thumbnail-card.component.html","../../../projects/component-library/src/lib/card-carousel/card-carousel.component.ts","../../../projects/component-library/src/lib/card-carousel/card-carousel.component.html","../../../projects/component-library/src/lib/categories-nav/categories-nav.component.ts","../../../projects/component-library/src/lib/categories-nav/categories-nav.component.html","../../../projects/component-library/src/lib/checkbox/checkbox.component.ts","../../../projects/component-library/src/lib/checkbox/checkbox.component.html","../../../projects/component-library/src/lib/component-library.component.ts","../../../projects/component-library/src/lib/dashboard-loader/dashboard-loader.component.ts","../../../projects/component-library/src/lib/dashboard-loader/dashboard-loader.component.html","../../../projects/component-library/src/lib/tool-tip/tool-tip.component.ts","../../../projects/component-library/src/lib/tool-tip/tool-tip.component.html","../../../projects/component-library/src/lib/grid-cell/grid-cell.component.ts","../../../projects/component-library/src/lib/grid-cell/grid-cell.component.html","../../../projects/component-library/src/lib/data-grid/data-grid.component.ts","../../../projects/component-library/src/lib/data-grid/data-grid.component.html","../../../projects/component-library/src/lib/datepicker/datepicker.component.ts","../../../projects/component-library/src/lib/datepicker/datepicker.component.html","../../../projects/component-library/src/utils/validators.ts","../../../projects/component-library/src/lib/form-input/form-input.component.ts","../../../projects/component-library/src/lib/form-input/form-input.component.html","../../../projects/component-library/src/lib/form-select/form-select.component.ts","../../../projects/component-library/src/lib/form-select/form-select.component.html","../../../projects/component-library/src/lib/message-banner-v2/message-banner-v2.component.ts","../../../projects/component-library/src/lib/message-banner-v2/message-banner-v2.component.html","../../../projects/component-library/src/lib/dialog/dialog.component.ts","../../../projects/component-library/src/lib/dialog/dialog.component.html","../../../projects/component-library/src/lib/dropdown/category-dropdown/category-dropdown.component.ts","../../../projects/component-library/src/lib/dropdown/category-dropdown/category-dropdown.component.html","../../../projects/component-library/src/lib/dropdown/ng-select/ng-select.component.ts","../../../projects/component-library/src/lib/dropdown/ng-select/ng-select.component.html","../../../projects/component-library/src/lib/dropdown-menu/dropdown-menu.component.ts","../../../projects/component-library/src/lib/dropdown-menu/dropdown-menu.component.html","../../../projects/component-library/src/lib/filter/filter.component.ts","../../../projects/component-library/src/lib/filter/filter.component.html","../../../projects/component-library/src/lib/grid-header/grid-header.component.ts","../../../projects/component-library/src/lib/grid-header/grid-header.component.html","../../../projects/component-library/src/lib/header/header.component.ts","../../../projects/component-library/src/lib/header/header.component.html","../../../projects/component-library/src/lib/layout-section/layout-section.component.ts","../../../projects/component-library/src/lib/layout-section/layout-section.component.html","../../../projects/component-library/src/lib/status-dot/status-dot.component.ts","../../../projects/component-library/src/lib/menu/menu-list/menu-item.component.ts","../../../projects/component-library/src/lib/menu/menu-list/menu-item.component.html","../../../projects/component-library/src/lib/skeleton/skeleton-base.component.ts","../../../projects/component-library/src/lib/skeleton/skeleton-shapes.component.ts","../../../projects/component-library/src/lib/skeleton/skeleton-container.component.ts","../../../projects/component-library/src/lib/skeleton/skeleton-presets.ts","../../../projects/component-library/src/lib/skeleton/skeleton-loader.component.ts","../../../projects/component-library/src/lib/menu/menu.component.ts","../../../projects/component-library/src/lib/menu/menu.component.html","../../../projects/component-library/src/lib/menu/menu.directive.ts","../../../projects/component-library/src/lib/left-nav/left-nav.component.ts","../../../projects/component-library/src/lib/left-nav/left-nav.component.html","../../../projects/component-library/src/lib/mini-card/mini-card.component.ts","../../../projects/component-library/src/lib/mini-card/mini-card.component.html","../../../projects/component-library/src/lib/page-layout/page-layout.component.ts","../../../projects/component-library/src/lib/page-layout/page-layout.component.html","../../../projects/component-library/src/lib/progress-bar/progress-bar.component.ts","../../../projects/component-library/src/lib/progress-bar/progress-bar.component.html","../../../projects/component-library/src/lib/query-builder/query-builder.component.ts","../../../projects/component-library/src/lib/query-builder/query-builder.component.html","../../../projects/component-library/src/lib/query-builder/query-builder.service.ts","../../../projects/component-library/src/lib/query-builder/query-builder-demo.component.ts","../../../projects/component-library/src/lib/query-builder-formly/query-builder-formly.component.ts","../../../projects/component-library/src/lib/query-builder-formly/query-builder-formly.component.html","../../../projects/component-library/src/lib/query-builder-textarea/query-builder-textarea.component.ts","../../../projects/component-library/src/lib/query-builder-textarea/query-builder-textarea.component.html","../../../projects/component-library/src/lib/query-builder-textarea/query-builder-textarea-demo.component.ts","../../../projects/component-library/src/lib/radio-button/radio-button.component.ts","../../../projects/component-library/src/lib/radio-button/radio-button.component.html","../../../projects/component-library/src/lib/scrolling-cards/scrolling-cards.component.ts","../../../projects/component-library/src/lib/scrolling-cards/scrolling-cards.component.html","../../../projects/component-library/src/lib/stepper/stepper.component.ts","../../../projects/component-library/src/lib/stepper/stepper.component.html","../../../projects/component-library/src/lib/tabs/tabs.component.ts","../../../projects/component-library/src/lib/tabs/tabs.component.html","../../../projects/component-library/src/lib/toast/toast.component.ts","../../../projects/component-library/src/lib/toast/toast.component.html","../../../projects/component-library/src/lib/typography-animation/typography-animation.component.ts","../../../projects/component-library/src/lib/typography-animation/typography-animation.component.html","../../../projects/component-library/src/lib/component-library.service.ts","../../../projects/component-library/src/interfaces/button-interface.ts","../../../projects/component-library/src/interfaces/icon-interface.ts","../../../projects/component-library/src/interfaces/left-nav-interface.ts","../../../projects/component-library/src/public-api.ts","../../../projects/component-library/src/sarasanalytics-com-design-system.ts"],"sourcesContent":["import { Component, ViewEncapsulation } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-card-title-header',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './card-custom-header.component.html',\r\n styleUrl: './card-custom-header.component.css',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class CardCustomHeaderComponent {\r\n\r\n}\r\n","<div class=\"sa-card-title-header\"><ng-content></ng-content></div>","import { CommonModule } from '@angular/common';\r\nimport { Component } from '@angular/core';\r\nimport { Input } from '@angular/core';\r\nimport { Output } from '@angular/core';\r\nimport { EventEmitter } from '@angular/core';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nlet nextId = 0; // used to give unique ids to inputs used in html\r\n\r\n@Component({\r\n selector: 'sa-chip',\r\n standalone: true,\r\n imports: [CommonModule, MatTooltipModule],\r\n templateUrl: './chips.component.html',\r\n styleUrl: './chips.component.css'\r\n})\r\nexport class ChipsComponent {\r\n @Input() id: string | number;\r\n @Input() iconPath: string;\r\n @Input() text: string | number;\r\n @Input() type: string;\r\n @Input() state: string;\r\n @Input() filling: string;\r\n @Input() iconPosition: string;\r\n @Input() largeStateIcon: string;\r\n @Input() largeStateText: string;\r\n @Input() tooltip: string;\r\n @Input() className: string;\r\n\r\n @Output() onClickEvent = new EventEmitter();\r\n\r\n svgStyle = {}\r\n secondSvgStyle = {}\r\n eventEmitObject = {}\r\n uuid: number = nextId++;\r\n\r\n ngOnChanges(): void {\r\n this.svgStyle = {\r\n '-webkit-mask-image': `url(${this.iconPath})`,\r\n 'mask-image': `url(${this.iconPath})`,\r\n }\r\n this.secondSvgStyle = {\r\n '-webkit-mask-image': `url(${this.largeStateIcon})`,\r\n 'mask-image': `url(${this.largeStateIcon})`,\r\n }\r\n this.eventEmitObject = {\r\n id: this.id\r\n }\r\n }\r\n\r\n buttonClicked(evt: Event) {\r\n this.onClickEvent.emit({\r\n ...this.eventEmitObject,\r\n evt\r\n });\r\n }\r\n}\r\n\r\nexport interface IChip {\r\n id?: string | number;\r\n text: string;\r\n status?: 'active' | 'inactive' | 'disabled';\r\n type?: 'small' | 'regular' | 'large';\r\n state?: 'primary' | 'secondary' | 'neutral' | 'error' | 'warning' | 'success';\r\n filling?: 'filled' | 'outline';\r\n}\r\n","<div class=\"chip {{type}} {{state}} {{filling}} {{className}}\" [matTooltip]=\"tooltip\">\r\n <button type=\"button\" (click)=\"buttonClicked($event)\" id=\"icon-button_{{uuid}}\" class=\"btn_hide\"></button>\r\n <!-- (click)=\"buttonClicked()\" on button instead of label breaks whole thing -->\r\n <label for=\"icon-button_{{uuid}}\" class=\"svg-icon\" [style]=\"svgStyle\"\r\n [style.display]=\"((iconPosition == 'left' || iconPosition == 'both') && type != 'large') ? 'block' : 'none'\">\r\n </label>\r\n\r\n {{text}}\r\n\r\n <div class=\"second-svg-icon\" [style]=\"secondSvgStyle\" [style.display]=\"(type == 'large') ? 'block' : 'none'\"></div>\r\n\r\n {{type == 'large' ? largeStateText : \"\"}}\r\n\r\n <label for=\"icon-button_{{uuid}}\" class=\"svg-icon\" [style]=\"svgStyle\"\r\n [style.display]=\"((iconPosition == 'right' || iconPosition == 'both') && type != 'large') ? 'block' : 'none'\">\r\n </label>\r\n</div>\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable, Injector } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class IconService {\r\n\r\n // http = inject(HttpClient);\r\n private path: string = 'assets/';\r\n\r\n private httpClient: HttpClient | null = null;\r\n\r\n constructor(private injector: Injector) {}\r\n\r\n private get http(): HttpClient {\r\n if (!this.httpClient) {\r\n this.httpClient = this.injector.get(HttpClient);\r\n }\r\n return this.httpClient;\r\n }\r\n\r\n getSvg(iconName: string, customPath?: string): Observable<string> {\r\n const isUrl = /^https?:\\/\\//.test(iconName);\r\n const customSvgUrl = customPath ? customPath + (iconName ? iconName + '.svg' : '') : '';\r\n const svgUrl = isUrl ? iconName : `${this.path}${iconName}.svg`;\r\n\r\n return this.http.get(customSvgUrl || svgUrl, { headers: { 'skip': 'true' }, responseType: 'text' });\r\n }\r\n\r\n setIconPath(path: string) {\r\n if (path) this.path = path;\r\n }\r\n}","import { ChangeDetectorRef, Component, EventEmitter, inject, Input, Output, SimpleChanges, ViewEncapsulation } from '@angular/core';\r\nimport { IconService } from './icon.service';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconName } from '../../interfaces/icon-interface';\r\n\r\n@Component({\r\n selector: 'sa-icon',\r\n standalone: true,\r\n imports: [CommonModule],\r\n providers: [IconService],\r\n templateUrl: './icon.component.html',\r\n styleUrl: './icon.component.css',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class IconComponent {\r\n iconService = inject(IconService);\r\n sanitizer = inject(DomSanitizer);\r\n\r\n @Input('img') img: string;\r\n @Input('imgWidth') imgWidth: string;\r\n @Input('imgHeight') imgHeight: string;\r\n\r\n @Input() icon?: IconName;\r\n @Input('size') size: string;\r\n @Input('color') color: string;\r\n @Input('iconPath') iconPath: string = \"\";\r\n @Input() iconUrl: string = \"\";\r\n @Input('customClass') customClass: string = \"\";\r\n @Input() href: string;\r\n @Input() hrefTarget: string;\r\n @Input() iconPosition: string;\r\n\r\n @Output() onClickEvent = new EventEmitter();\r\n\r\n svgIcon: any;\r\n eventEmitObject = {}\r\n iconStyles: any = {\r\n // fontSize: '44px',\r\n // color: 'red'\r\n };\r\n\r\n constructor(private cdr: ChangeDetectorRef) { }\r\n ngOnInit() {\r\n }\r\n ngOnChanges(changes: SimpleChanges) {\r\n\r\n\r\n if (changes['iconPath'] && !!this.iconPath.trim()) {\r\n this.iconService.getSvg(this.icon || \"\", this.iconPath).subscribe((svg) => {\r\n this.svgIcon = this.sanitizer.bypassSecurityTrustHtml(svg);\r\n })\r\n }\r\n if (changes['icon'] || changes['iconUrl']) {\r\n const icon = this.icon || this.iconUrl;\r\n if (icon) {\r\n this.iconService.getSvg(icon).subscribe((svg) => {\r\n this.svgIcon = this.sanitizer.bypassSecurityTrustHtml(svg);\r\n this.cdr.detectChanges()\r\n })\r\n } else {\r\n this.svgIcon = '';\r\n }\r\n }\r\n if (changes['size'] || changes['color']) {\r\n this.iconStyles.fontSize = this.size + 'px';\r\n this.iconStyles.width = this.iconUrl ? \"fit-content\" : '1em';\r\n this.iconStyles.height = this.iconUrl ? \"fit-content\" : '1em';\r\n this.iconStyles.color = this.color;\r\n }\r\n\r\n \r\n }\r\n iconClicked(evt: Event) {\r\n this.onClickEvent.emit({\r\n ...this.eventEmitObject,\r\n evt\r\n });\r\n if (this.href != \"\") {\r\n if (this.hrefTarget == \"blank\") window.open(this.href);\r\n else if (this.hrefTarget == \"self\") location.href = this.href;\r\n }\r\n }\r\n\r\n}","@if(img){\r\n<img [src]=\"img\" [height]=\"imgHeight || size\" [width]=\"imgWidth || size\" (click)=\"iconClicked($event)\">\r\n}@else{\r\n<span class=\"sa-icon\" [ngClass]=\"{\r\n 'url-icon': iconUrl\r\n }\" [ngClass]=\"customClass ? [customClass] : []\" [innerHTML]=\"svgIcon\" [ngStyle]=\"iconStyles\" (click)=\"iconClicked($event)\">\r\n\r\n</span>\r\n}","import { Component, EventEmitter } from '@angular/core';\r\nimport { Input, Output } from '@angular/core';\r\nimport { NgIf } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'sa-avatar',\r\n standalone: true,\r\n imports: [NgIf],\r\n templateUrl: './avatar.component.html',\r\n styleUrl: './avatar.component.css'\r\n})\r\nexport class AvatarComponent {\r\n @Input() id: string | number;\r\n @Input() imagePath: string;\r\n @Input() altText: string;\r\n @Input() size: string;\r\n\r\n @Output() onClickEvent = new EventEmitter\r\n @Output() onMouseInEvent = new EventEmitter\r\n @Output() onMouseOutEvent = new EventEmitter\r\n\r\n eventEmitObject = {}\r\n\r\n ngOnChanges(): void {\r\n this.eventEmitObject = {\r\n id: this.id\r\n }\r\n }\r\n\r\n avatarClicked(evt: Event) {\r\n this.onClickEvent.emit({\r\n ...this.eventEmitObject,\r\n evt\r\n })\r\n }\r\n\r\n mouseEnter(evt: Event) {\r\n this.onMouseInEvent.emit({\r\n ...this.eventEmitObject,\r\n evt\r\n })\r\n }\r\n\r\n mouseLeave(evt: Event) {\r\n this.onMouseOutEvent.emit({\r\n ...this.eventEmitObject,\r\n evt\r\n })\r\n }\r\n}\r\n","<div class=\"avatar {{size}}\" (click)=\"avatarClicked($event)\" (mouseenter)=\"mouseEnter($event)\"\r\n (mouseleave)=\"mouseLeave($event)\">\r\n <img *ngIf=\"imagePath\" class=\"avatar-img\" alt=\"{{altText}}\" src=\"{{imagePath}}\">\r\n <span *ngIf=\"!imagePath\" class=\"avatar-img\">{{altText}}</span>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, SimpleChanges } from '@angular/core';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { ChipInterface } from '../../interfaces/chip-interface';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { AvatarComponent } from \"../avatar/avatar.component\";\r\n\r\n@Component({\r\n selector: 'sa-card',\r\n standalone: true,\r\n imports: [CommonModule, ChipsComponent, IconComponent, AvatarComponent],\r\n templateUrl: './card.component.html',\r\n styleUrl: './card.component.css'\r\n})\r\nexport class CardComponent {\r\n @Input('title') title: string = '';\r\n @Input('showCardHeader') showCardHeader: boolean = false;\r\n @Input('showCardBody') showCardBody: boolean = false;\r\n @Input('showHeaderBodyDivider') showHeaderBodyDivider: boolean = false;\r\n @Input('showCustomCardBody') showCustomCardBody: boolean = false;\r\n @Input('customWrapperClass') customWrapperClass: string = '';\r\n @Input('chip') chip: ChipInterface | null = null;\r\n @Input('body') body: string = '';\r\n @Input('avatar') avatar: string = '';\r\n @Input('image') image: string = '';\r\n @Input('imageWidth') imageWidth: string = '';\r\n @Input('avatarSize') avatarSize: string;\r\n @Input('href') href: string;\r\n @Input('hrefTarget') hrefTarget: string;\r\n\r\n @Input('icon') icon: string = '';\r\n @Input('iconSize') iconSize: string;\r\n\r\n @Input('subtitle') subtitle: string = '';\r\n @Input('logoIcon') logoIcon: string = '';\r\n\r\n @Input('width') width: string | number;\r\n @Input('height') height: string | number;\r\n @Input('column') column: boolean = false;\r\n\r\n cardStyles: any = {};\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['width']?.currentValue || changes['height']?.currentValue) {\r\n this.cardStyles['width'] = typeof changes['width']?.currentValue === 'string' ? changes['width']?.currentValue : changes['width']?.currentValue + '%';\r\n this.cardStyles['height'] = typeof changes['height']?.currentValue === 'string' ? changes['height']?.currentValue : changes['height']?.currentValue + '%';\r\n }\r\n }\r\n cardClicked(evt: Event) {\r\n if (this.href != \"\") {\r\n if (this.hrefTarget == \"blank\") window.open(this.href);\r\n else if (this.hrefTarget == \"self\") location.href = this.href;\r\n }\r\n }\r\n}\r\n","<div class=\"sa-card\" [ngStyle]=\"cardStyles\" (click)=\"cardClicked($event)\">\r\n <div class=\"sa-card-wrapper\" [ngClass]=\"[column ? 'column' : '', customWrapperClass]\">\r\n <div class=\"\" [ngClass]=\"avatar || image ? 'sa-card-img' : 'sa-card-icon'\">\r\n @if(avatar){\r\n <sa-avatar [imagePath]=\"avatar\" [size]=\"avatarSize\"></sa-avatar>\r\n <!-- <img [src]=\"avatar\" /> -->\r\n }@else if(image){\r\n <img [src]=\"image\" [width]=\"imageWidth\" />\r\n }@else if(icon){\r\n <sa-icon [icon]=\"icon\" [size]=\"iconSize\"></sa-icon>\r\n }@else{\r\n <ng-content select=\"sa-card-icon\"></ng-content>\r\n }\r\n @if(column){\r\n <ng-content select=\"sa-card-title-actions\"></ng-content>\r\n }\r\n </div>\r\n <div class=\"sa-card-container\" [ngClass]=\"showCardHeader ? 'sa-card-custom-container' : ''\">\r\n @if(showCardHeader){\r\n <ng-content select=\"sa-card-title-header\"></ng-content>\r\n @if (showHeaderBodyDivider && body) {\r\n <div class=\"custom-divider\"></div>\r\n }\r\n }\r\n @else if(title){\r\n <div class=\"sa-card-title-container\">\r\n <div class=\"sa-card-title\">{{title}}</div>\r\n @if(chip){\r\n <sa-chip [text]=\"chip.text\" [type]=\"chip.type\" [state]=\"chip.state\" [filling]=\"chip.filling\"></sa-chip>\r\n }\r\n <ng-content select=\"[sa-card-title-actions]\"></ng-content>\r\n </div>\r\n }\r\n @if (showCustomCardBody) {\r\n <ng-content select=\"sa-card-custom-body\"></ng-content>\r\n }\r\n @if(showCardBody && body){\r\n <div class=\"sa-card-body\">\r\n {{body}}\r\n </div>\r\n }\r\n <ng-content select=\"sa-card-footer-actions\"></ng-content>\r\n </div>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-spinner',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './spinner.component.html',\r\n styleUrl: './spinner.component.css'\r\n})\r\nexport class SpinnerComponent {\r\n @Input('default') default: boolean = false;\r\n @Input('size') size: any;\r\n\r\n}\r\n","<span class=\"sa-spinner\" [ngClass]=\"default ? 'default' : ''\" [ngStyle]=\"{'fontSize': size+'px'}\"></span>","import { Component, Output, SimpleChanges } from '@angular/core';\r\nimport { Input } from '@angular/core';\r\nimport { EventEmitter } from '@angular/core';\r\nimport { NgIf } from '@angular/common';\r\nimport { NgStyle } from '@angular/common';\r\nimport { SpinnerComponent } from '../spinner/spinner.component';\r\nimport { IconName } from '../../interfaces/icon-interface';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { IconService } from '../icon/icon.service';\r\n\r\nlet nextId = 0; // used to give unique ids to inputs used in html\r\n\r\n@Component({\r\n selector: 'sa-button',\r\n standalone: true,\r\n imports: [NgIf, NgStyle, SpinnerComponent, HttpClientModule, IconComponent],\r\n providers: [IconService],\r\n templateUrl: './button.component.html',\r\n styleUrl: './button.component.css'\r\n})\r\n\r\nexport class ButtonComponent {\r\n @Input() id: string | number;\r\n @Input() type: string;\r\n @Input() state: string;\r\n @Input() size: string;\r\n @Input() text: string | number;\r\n @Input() ImagePath: string;\r\n @Input() icon: IconName;\r\n @Input() iconPosition: string;\r\n @Input() href: string;\r\n @Input() hrefTarget: string;\r\n @Input() width: string;\r\n @Input() isSubmit: boolean = false;\r\n @Input() buttonIconSize: string;\r\n\r\n @Input() showSpinner: boolean = false;\r\n\r\n @Output() onClickEvent = new EventEmitter();\r\n @Output() onMouseInEvent = new EventEmitter();\r\n @Output() onMouseOutEvent = new EventEmitter();\r\n\r\n svgStyle = {}\r\n eventEmitObject = {}\r\n uuid: number = nextId++;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.svgStyle = {\r\n '-webkit-mask-image': `url(${this.ImagePath})`,\r\n 'mask-image': `url(${this.ImagePath})`,\r\n }\r\n this.eventEmitObject = {\r\n id: this.id\r\n }\r\n if (changes && changes['width'] && changes['width'].currentValue) {\r\n console.log(this.width)\r\n }\r\n }\r\n\r\n buttonClicked(evt: Event) {\r\n if (this.state == \"disabled\") return;\r\n this.onClickEvent.emit({\r\n ...this.eventEmitObject,\r\n evt\r\n });\r\n if (this.href != \"\") {\r\n if (this.hrefTarget == \"blank\") window.open(this.href);\r\n else if (this.hrefTarget == \"self\") location.href = this.href;\r\n }\r\n }\r\n\r\n mouseIn() {\r\n if (this.state == \"disabled\") return;\r\n this.onMouseInEvent.emit();\r\n }\r\n\r\n mouseOut() {\r\n if (this.state == \"disabled\") return;\r\n this.onMouseOutEvent.emit();\r\n }\r\n}\r\n","<button (click)=\"buttonClicked($event)\" id=\"sa-button-{{uuid}}\" class=\"btn-hide\"\r\n [type]=\"isSubmit ? 'submit' : 'button'\"></button>\r\n<!-- (click)=\"buttonClicked()\" on button instead of label breaks whole thing -->\r\n<label for=\"sa-button-{{uuid}}\" [ngStyle]=\"{'width':width}\" role=\"button\" tabindex=\"0\" (mouseenter)=\"mouseIn()\"\r\n (mouseleave)=\"mouseOut()\" (keydown.enter)=\"buttonClicked($event)\" for=\"sa-button\"\r\n class=\"sa-button {{state}} {{type}} {{size}}\">\r\n @if(showSpinner){\r\n <sa-spinner [default]=\"true\"></sa-spinner>\r\n }\r\n @if(ImagePath) {\r\n <div class=\"svg-icon\" [style]=\"svgStyle\"\r\n [style.display]=\"(iconPosition == 'left' || iconPosition == 'both') ? 'block' : 'none'\"></div>\r\n {{text}}\r\n <div class=\"svg-icon\" [style]=\"svgStyle\"\r\n [style.display]=\"(iconPosition == 'right' || iconPosition == 'both') ? 'block' : 'none'\"></div>\r\n } @else if (icon) {\r\n <sa-icon [icon]=\"icon\" [size]=\"buttonIconSize\"\r\n [style.display]=\"(iconPosition == 'left' || iconPosition == 'both') ? 'flex' : 'none'\"></sa-icon>\r\n {{text}}\r\n <sa-icon [icon]=\"icon\" [size]=\"buttonIconSize\"\r\n [style.display]=\"(iconPosition == 'right' || iconPosition == 'both') ? 'flex' : 'none'\"></sa-icon>\r\n } @else {\r\n {{text}}\r\n }\r\n</label>\r\n","import { Component, EventEmitter, Input, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CardCustomHeaderComponent } from '../card/card-custom-header/card-custom-header.component';\r\nimport { CardComponent } from '../card/card.component'\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { ChipsComponent } from '../chips/chips.component'\r\nimport { FieldType, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { includes as _includes, replace as _replace, toString as _toString, get as _get, filter as _filter, map as _map } from 'lodash';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'sa-accordion',\r\n standalone: true,\r\n imports: [CardCustomHeaderComponent, CardComponent, FormsModule, MatCheckboxModule, CommonModule, IconComponent, MatTooltipModule, MatExpansionModule, ChipsComponent, ButtonComponent],\r\n templateUrl: './accordion.component.html',\r\n styleUrl: './accordion.component.css'\r\n})\r\nexport class AccordionComponent extends FieldType implements OnChanges {\r\n selectedCount: number = 0;\r\n private initialChipState: string = 'neutral';\r\n showingAdvancedFeatures: boolean = false;\r\n advancedFeatureHeading: string = ''\r\n parentField: FormlyFieldConfig;\r\n private buttonClick = new Subject<any>();\r\n\r\n ngOnInit() {\r\n this.parentField = _get(this.field, 'parent')\r\n if (this.props?.['titleChip']?.['state']) {\r\n this.initialChipState = this.props['titleChip']['state'];\r\n }\r\n this.showingAdvancedFeatures = this.props?.['showAdvancedFeatures'];\r\n this.checkForPreselectedFeatures();\r\n this.buttonClick.pipe(\r\n debounceTime(300)\r\n ).subscribe(button => {\r\n this.field?.props?.['onButtonClick'](button);\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['field'] || changes['model']) {\r\n this.parentField = _get(this.field, 'parent');\r\n if (this.props?.['titleChip']?.['state']) {\r\n this.initialChipState = this.props['titleChip']['state'];\r\n }\r\n this.showingAdvancedFeatures = this.props?.['showAdvancedFeatures'];\r\n this.checkForPreselectedFeatures();\r\n }\r\n }\r\n\r\n checkForPreselectedFeatures() {\r\n // Initialize count\r\n let count = 0;\r\n \r\n // Count selected features directly without creating intermediate arrays\r\n if (this.props['featuresList']) {\r\n for (let i = 0; i < this.props['featuresList'].length; i++) {\r\n if (this.props['featuresList'][i].isSelected) {\r\n count++;\r\n }\r\n }\r\n }\r\n \r\n // Count selected advanced features\r\n if (this.props['advancedFeatures']) {\r\n for (let i = 0; i < this.props['advancedFeatures'].length; i++) {\r\n if (this.props['advancedFeatures'][i].isSelected) {\r\n count++;\r\n }\r\n }\r\n }\r\n \r\n this.selectedCount = count;\r\n this.updateChipState();\r\n }\r\n\r\n getChipText(): string {\r\n const text = this.props?.['titleChip']?.['text'] || '';\r\n if (_includes(text, '{count}')) {\r\n return _replace(text, '{count}', _toString(this.selectedCount));\r\n }\r\n return text;\r\n }\r\n\r\n onCardClick(cardDetails: any): void {\r\n cardDetails.isSelected = cardDetails?.disabled ? cardDetails.isSelected : !cardDetails.isSelected;\r\n this.notifyCheckboxChange(cardDetails);\r\n }\r\n\r\n onCheckboxClick(event: any, cardDetails: any): void {\r\n event.stopPropagation();\r\n this.notifyCheckboxChange(cardDetails);\r\n }\r\n\r\n onAccordionOpened() {\r\n if (!this.props['accordionExpanded']) {\r\n this.props['accordionExpanded'] = true;\r\n }\r\n }\r\n\r\n onAccordionClosed() {\r\n if (this.props['accordionExpanded']) {\r\n this.props['accordionExpanded'] = false;\r\n }\r\n }\r\n\r\n notifyCheckboxChange(cardDetails: any) {\r\n if (cardDetails?.disabled) {\r\n return;\r\n }\r\n\r\n // Update the selected count\r\n if (cardDetails.isSelected) {\r\n this.selectedCount++;\r\n } else {\r\n this.selectedCount--;\r\n }\r\n\r\n // Update chip state based on the selection\r\n this.updateChipState();\r\n\r\n // Pre-allocate array with estimated capacity to avoid resizing\r\n const featuresList = this.props['featuresList'] || [];\r\n const advancedFeatures = this.props['advancedFeatures'] || [];\r\n const selectedFeatures = [];\r\n \r\n // Use local variables to avoid repeated property access\r\n let feature;\r\n \r\n // Single pass through featuresList\r\n for (let i = 0, len = featuresList.length; i < len; i++) {\r\n feature = featuresList[i];\r\n if (feature.isSelected) {\r\n selectedFeatures.push(feature);\r\n }\r\n }\r\n \r\n // Single pass through advancedFeatures\r\n for (let i = 0, len = advancedFeatures.length; i < len; i++) {\r\n feature = advancedFeatures[i];\r\n if (feature.isSelected) {\r\n selectedFeatures.push(feature);\r\n }\r\n }\r\n\r\n // Update the form control with the collected selected features\r\n this.formControl.setValue(selectedFeatures);\r\n }\r\n\r\n\r\n updateChipState() {\r\n if (this.props['titleChip'] && this.props['titleChip']['changeStateTo']) {\r\n this.props['titleChip']['state'] = this.selectedCount > 0 ? this.props['titleChip']['changeStateTo'] : this.initialChipState;\r\n }\r\n }\r\n\r\n onAdvancedFeaturesOpened(): void {\r\n this.props['advancedFeaturesExpanded'] = true;\r\n }\r\n\r\n onAdvancedFeaturesClosed(): void {\r\n this.props['advancedFeaturesExpanded'] = false;\r\n }\r\n\r\n actionHandler(button: any, event: Event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n this.buttonClick.next(button);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.buttonClick.complete();\r\n }\r\n\r\n //pending work on preselected data\r\n}\r\n","<mat-accordion class=\"accordion-container\">\r\n <mat-expansion-panel hideToggle [expanded]=\"props?.['accordionExpanded'] || false\" (opened)=\"onAccordionOpened()\"\r\n (closed)=\"onAccordionClosed()\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <div class=\"panel-container\">\r\n @if(props?.['accordionExpanded']){\r\n <span class=\"d-flex align-center\">\r\n <sa-icon [icon]=\"props?.['expandedIcon'] || 'downChevronOutlined'\" class=\"d-flex info-icon\"\r\n size=\"20\"></sa-icon>\r\n </span>\r\n }@else{\r\n <span class=\"d-flex align-center\">\r\n <sa-icon [icon]=\"props?.['collapsedIcon'] || 'rightChevronOutlined'\" class=\"d-flex info-icon\"\r\n size=\"20\"></sa-icon>\r\n </span>\r\n }\r\n <span class=\"panel-title\">{{props?.['panelTitle']}}</span>\r\n <div>\r\n <sa-chip *ngIf=\"props?.['titleChip']\" [type]=\"props['titleChip']?.['type']\"\r\n [state]=\"props['titleChip']?.['state']\" [filling]=\"props['titleChip']?.['filling']\"\r\n [text]=\"getChipText()\"></sa-chip>\r\n </div>\r\n </div>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div class=\"custom-divider\"></div>\r\n <div class=\"accordion-cards-container\">\r\n <div *ngFor=\"let subFeature of props?.['featuresList']\">\r\n <sa-card [column]=\"false\" [showCardHeader]=\"true\" [showCardBody]=\"false\"\r\n [width]=\"props?.['featureCardWidth'] || '632px'\" [showHeaderBodyDivider]=\"false\"\r\n [customWrapperClass]=\"props?.['customWrapperClass']\" (click)=\"onCardClick(subFeature)\"\r\n class=\"{{subFeature?.['disabled'] && subFeature?.['isSelected'] ? 'card-selected' : ''}} {{subFeature?.['disabled'] ? 'disabled-card': ''}}\">\r\n <sa-card-title-header>\r\n <div class=\"sa-card-accordion-title-container\">\r\n @if(subFeature?.['disabled']){\r\n <span class=\"disabled-icon\">\r\n <sa-icon icon=\"disabledCheckboxFilled\"\r\n customClass=\"auto-dimensions disabled-checkbox-icon\" class=\"d-flex\"></sa-icon>\r\n </span>\r\n }@else{\r\n <mat-checkbox class=\"checkbox-style\" [(ngModel)]=\"subFeature.isSelected\"\r\n (click)=\"onCheckboxClick($event, subFeature)\"></mat-checkbox>\r\n }\r\n <div class=\"sa-card-title-icon-container\">\r\n <div class=\"sa-card-custom-title\">\r\n {{subFeature?.title}}\r\n </div>\r\n @if(subFeature?.tooltip){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\"\r\n customClass=\"info-icon\" [matTooltip]=\"subFeature?.tooltip\"\r\n matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon\"></sa-icon>\r\n </span>\r\n }\r\n @if(subFeature?.featureChip && subFeature?.featureChip?.length > 0){\r\n <div class=\"chips-container\">\r\n @for(chip of subFeature.featureChip; track chip) {\r\n <sa-chip [type]=\"chip?.['type']\"\r\n [state]=\"chip?.['state']\"\r\n [filling]=\"chip?.['filling']\"\r\n [tooltip]=\"chip?.['tooltip']\"\r\n [text]=\"chip?.['label']\"></sa-chip>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </sa-card-title-header>\r\n </sa-card>\r\n </div>\r\n </div>\r\n <!-- Advanced Features accordion -->\r\n <div *ngIf=\"props?.['advancedFeatures'] && props['advancedFeatures'].length > 0\"\r\n class=\"advanced-features-section\">\r\n <mat-expansion-panel hideToggle [expanded]=\"props?.['advancedFeaturesExpanded'] || false\"\r\n (opened)=\"onAdvancedFeaturesOpened()\" (closed)=\"onAdvancedFeaturesClosed()\" class=\"advancedAccordion\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <div class=\"panel-container\">\r\n @if(!props?.['advancedFeaturesExpanded']){\r\n <span class=\"d-flex align-center source-icon\">\r\n <sa-icon [icon]=\"props?.['advancedFeatureCollapsedIcon'] || 'sourcesOutlined'\"\r\n class=\"d-flex\" customClass=\"colored-icon\" size=\"16\"></sa-icon>\r\n </span>\r\n }@else{\r\n <span class=\"d-flex align-center\">\r\n <sa-icon [icon]=\"props?.['advancedFeatureExpandedIcon'] || 'downChevronOutlined'\"\r\n class=\"d-flex\" size=\"20\"></sa-icon>\r\n </span>\r\n }\r\n <span class=\"advanced-title\">{{ props?.['advancedFeaturesExpanded'] ?\r\n props?.['advancedFeatureToggleTitle'] :\r\n props?.['advancedFeatureTitle'] }}</span>\r\n </div>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div class=\"accordion-advanced-container\">\r\n <div class=\"disclaimer-container\">\r\n <span class=\"tooltip-container\">\r\n <sa-icon icon=\"infoCircleOutlined\" customClass=\"info-icon\" class=\"tooltip-icon\"></sa-icon>\r\n </span>\r\n <span class=\"disclaimer-style\">{{props?.['advancedFeatureDisclaimer']}}</span>\r\n @if(props?.['advancedFeatureDisclaimerButtons']) {\r\n <div class=\"disclaimer-buttons-container\">\r\n <ng-container *ngFor=\"let button of props['advancedFeatureDisclaimerButtons']\">\r\n <sa-button [text]=\"button.text\" [type]=\"button.type\" [size]=\"button.size\"\r\n [state]=\"button.state\" [iconPosition]=\"button.iconPosition\" [icon]=\"button.icon\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (click)=\"actionHandler(button, $event)\"></sa-button>\r\n </ng-container>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"accordion-cards-container\">\r\n <div *ngFor=\"let subFeature of props?.['advancedFeatures']\">\r\n <sa-card [column]=\"false\" [showCardHeader]=\"true\" [showCardBody]=\"false\"\r\n [width]=\"props?.['advancedFeatureCardWidth'] || '632px'\" [showHeaderBodyDivider]=\"false\"\r\n [customWrapperClass]=\"props?.['customWrapperClass']\" (click)=\"onCardClick(subFeature)\"\r\n class=\"{{subFeature?.['disabled'] && subFeature?.['isSelected'] ? 'card-selected' : ''}} {{subFeature?.['disabled'] ? 'disabled-card': ''}}\">\r\n <sa-card-title-header>\r\n <div class=\"sa-card-accordion-title-container\">\r\n @if(subFeature?.['disabled']){\r\n <span class=\"disabled-icon\">\r\n <sa-icon icon=\"disabledCheckboxFilled\"\r\n customClass=\"auto-dimensions disabled-checkbox-icon\"\r\n class=\"d-flex\"></sa-icon>\r\n </span>\r\n }@else{\r\n <mat-checkbox class=\"checkbox-style\" [(ngModel)]=\"subFeature.isSelected\"\r\n (click)=\"onCheckboxClick($event, subFeature)\"></mat-checkbox>\r\n }\r\n <div class=\"sa-card-title-icon-container\">\r\n <div class=\"sa-card-custom-title\">\r\n {{subFeature?.title}}\r\n </div>\r\n @if(subFeature?.tooltip){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['advancedTooltipIcon'] || 'infoCircleOutlined'\"\r\n customClass=\"info-icon\" [matTooltip]=\"subFeature?.tooltip\"\r\n matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon\"></sa-icon>\r\n </span>\r\n }\r\n </div>\r\n @if(subFeature?.featureChip && subFeature?.featureChip?.length > 0){\r\n <div class=\"chip-container\">\r\n @for(chip of subFeature.featureChip; track chip) {\r\n <sa-chip [type]=\"chip?.['type']\"\r\n [state]=\"chip?.['state']\"\r\n [filling]=\"chip?.['filling']\"\r\n [tooltip]=\"chip?.['tooltip']\"\r\n [text]=\"chip?.['label']\"></sa-chip>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </sa-card-title-header>\r\n </sa-card>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n </div>\r\n </mat-expansion-panel>\r\n</mat-accordion>","import {\r\n ChangeDetectorRef,\r\n Component,\r\n Inject,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport {\r\n DateAdapter,\r\n MatDateFormats,\r\n MAT_DATE_FORMATS,\r\n} from '@angular/material/core';\r\nimport { MatCalendar } from '@angular/material/datepicker';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButton } from '@angular/material/button';\r\nimport { NgFor } from '@angular/common';\r\nimport { MatDateRangePicker } from '@angular/material/datepicker';\r\n\r\n\r\nlet nextId = 0; // used to give unique ids to inputs used in html\r\n\r\n@Component({\r\n templateUrl: './calendar-header.component.html',\r\n styleUrls: ['./calendar-header.component.css'],\r\n standalone: true,\r\n imports: [\r\n NgFor,\r\n MatIconModule,\r\n MatButton\r\n ],\r\n // changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CalendarHeaderComponent<D> implements OnDestroy {\r\n uuid: number = nextId++;\r\n\r\n private readonly destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private calendar: MatCalendar<D>, // calendar instance of picker\r\n private dateAdapter: DateAdapter<D>, // native or moment date adapter\r\n private picker: MatDateRangePicker<D>,\r\n @Inject(MAT_DATE_FORMATS) private dateFormats: MatDateFormats, // for formatting\r\n cdr: ChangeDetectorRef\r\n ) {\r\n // make sure your header stays in sync with the calendar:\r\n calendar.stateChanges\r\n .pipe(takeUntil(this.destroy$)) // unsubscribe when destroyed\r\n .subscribe(() => cdr.markForCheck());\r\n\r\n }\r\n\r\n selectedPreset = \"Custom\"\r\n presets = [\r\n \"This Quarter\",\r\n \"Last Quarter\",\r\n \"Last 6 Months\",\r\n \"This Year\",\r\n \"Last Year\",\r\n \"Custom\"\r\n ]\r\n // active date label rendered between the arrow buttons\r\n\r\n ngOnInit() {\r\n const currentRange: any = this.calendar.selected;\r\n\r\n currentRange?.start.setHours(0, 0, 0, 0);\r\n currentRange?.end.setHours(0, 0, 0, 0);\r\n\r\n // To pre-select a preset when the calendar opens.\r\n // Match the already selected date range with the date-ranges of all presets.\r\n // If already selected date range matches with a preset, pre-select it.\r\n\r\n for (let i = 0; i < this.presets.length; i++) {\r\n const tempRange = this.findDate(this.presets[i]);\r\n if (tempRange.newStart.getTime() == currentRange.start.getTime() && tempRange.newEnd.getTime() == currentRange.end.getTime()) {\r\n this.selectedPreset = this.presets[i];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n get periodLabel(): string {\r\n // use date adapter to format the label, e.g. \"SEP 2020\"\r\n return this.dateAdapter\r\n .format(this.calendar.activeDate, this.dateFormats.display.monthYearLabel)\r\n .toLocaleUpperCase();\r\n }\r\n\r\n previousClicked(mode: 'month' | 'year'): void {\r\n this.changeDate(mode, -1);\r\n }\r\n\r\n nextClicked(mode: 'month' | 'year'): void {\r\n this.changeDate(mode, 1);\r\n }\r\n\r\n changeView() {\r\n this.calendar.currentView =\r\n this.calendar.currentView == \"month\"\r\n ? \"year\"\r\n : this.calendar.currentView == \"year\"\r\n ? \"multi-year\"\r\n : \"month\";\r\n }\r\n\r\n today = new Date();\r\n\r\n presetChanged(evt: any) {\r\n const newRange: any = this.findDate(evt.target.value);\r\n this.calendar.activeDate = newRange.newStart;\r\n this.picker.select(newRange.newStart);\r\n this.picker.select(newRange.newEnd);\r\n }\r\n\r\n findDate(selected: string) {\r\n const date = this.today.getDate();\r\n const month = this.today.getMonth();\r\n const year = this.today.getFullYear();\r\n let newRange: any;\r\n this.selectedPreset = selected;\r\n switch (selected) {\r\n case \"This Quarter\": {\r\n const thisQuarterMonth = Math.floor(month / 3) * 3;\r\n const start = this.dateAdapter.createDate(year, thisQuarterMonth, 1);\r\n const end = this.dateAdapter.createDate(year, thisQuarterMonth + 3, 1);\r\n newRange = {\r\n newStart: start,\r\n newEnd: end,\r\n }\r\n break;\r\n }\r\n case \"Last Quarter\": {\r\n const lastQuarterMonth = (Math.floor(month / 3) * 3) - 3;\r\n const start = this.dateAdapter.createDate(year, lastQuarterMonth, 1);\r\n const end = this.dateAdapter.createDate(year, lastQuarterMonth + 3, 1);\r\n newRange = {\r\n newStart: start,\r\n newEnd: end,\r\n }\r\n break;\r\n }\r\n case \"Last 6 Months\": {\r\n const end = this.dateAdapter.createDate(year, month, date);\r\n const start = this.dateAdapter.addCalendarMonths(end, -6);\r\n newRange = {\r\n newStart: start,\r\n newEnd: end,\r\n }\r\n break;\r\n }\r\n case \"This Year\": {\r\n const start = this.dateAdapter.createDate(year, 0, 1);\r\n const end = this.dateAdapter.createDate(year, 11, 31);\r\n newRange = {\r\n newStart: start,\r\n newEnd: end,\r\n }\r\n break;\r\n }\r\n case \"Last Year\": {\r\n const start = this.dateAdapter.createDate(year - 1, 0, 1);\r\n const end = this.dateAdapter.createDate(year - 1, 11, 31);\r\n newRange = {\r\n newStart: start,\r\n newEnd: end,\r\n }\r\n break;\r\n }\r\n default: {\r\n newRange = {\r\n newStart: new Date(),\r\n newEnd: new Date(),\r\n }\r\n }\r\n }\r\n return newRange;\r\n }\r\n\r\n private changeDate(mode: 'month' | 'year', amount: -1 | 1): void {\r\n // increment or decrement month or year\r\n this.calendar.activeDate =\r\n mode === 'month'\r\n ? this.dateAdapter.addCalendarMonths(this.calendar.activeDate, amount)\r\n : this.dateAdapter.addCalendarYears(this.calendar.activeDate, amount);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next(); // will trigger unsubscription in takeUntil\r\n }\r\n}\r\n","<div class=\"range-preset\">\r\n <div class=\"preset\" *ngFor=\"let preset of presets, let i = index\">\r\n <label class=\"preset-label {{preset == selectedPreset ? 'preset-selected' : ''}}\"\r\n for=\"preset-radio-{{i}}\">{{preset}}</label>\r\n <input class=\"preset-radio\" (change)=\"presetChanged($event)\" [checked]=\"preset == selectedPreset\"\r\n id=\"preset-radio-{{i}}\" type=\"radio\" name=\"preset-radios-{{uuid}}\" value=\"{{preset}}\">\r\n </div>\r\n</div>\r\n\r\n<div class=\"header\">\r\n <button mat-icon-button (click)=\"previousClicked('month')\">\r\n <mat-icon>keyboard_arrow_left</mat-icon>\r\n </button>\r\n\r\n <button mat-button class=\"header-label\" (click)=\"changeView()\">{{ periodLabel }}</button>\r\n\r\n <button mat-icon-button (click)=\"nextClicked('month')\">\r\n <mat-icon>keyboard_arrow_right</mat-icon>\r\n </button>\r\n</div>\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-card-custom-body',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './card-body.component.html',\r\n styleUrl: './card-body.component.css'\r\n})\r\nexport class CardBodyComponent {\r\n\r\n}\r\n","<div class=\"sa-card-body\"><ng-content></ng-content></div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-card-footer-actions',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './card-footer-actions.component.html',\r\n styleUrl: './card-footer-actions.component.css'\r\n})\r\nexport class CardFooterActionsComponent {\r\n\r\n}\r\n","<div class=\"sa-card-footer-actions\">\r\n <ng-content></ng-content>\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-card-icon',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './card-icon.component.html',\r\n styleUrl: './card-icon.component.css'\r\n})\r\nexport class CardIconComponent {\r\n\r\n}\r\n","<ng-content></ng-content>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-card-title-actions',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './card-title-actions.component.html',\r\n styleUrl: './card-title-actions.component.css'\r\n})\r\nexport class CardTitleActionsComponent {\r\n\r\n}\r\n","<div class=\"sa-card-title-actions\"><ng-content></ng-content></div>","import { Component, Input } from '@angular/core';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'lib-list',\r\n standalone: true,\r\n imports: [IconComponent, CommonModule],\r\n templateUrl: './list.component.html',\r\n styleUrl: './list.component.css'\r\n})\r\nexport class ListComponent {\r\n @Input() listData: { icon?: string; text: string }[] = [];\r\n @Input('featuresIcon') featuresIcon: string = '';\r\n}\r\n","<div class=\"feature-list-container\">\r\n <div class=\"feature-item\" *ngFor=\"let item of listData\">\r\n <div *ngIf=\"featuresIcon\" class=\"feature-icon\">\r\n <sa-icon [icon]=\"featuresIcon\" customClass=\"colored-icon\"></sa-icon>\r\n </div>\r\n <div>\r\n <span class=\"feature-text\">{{ item?.text }}</span>\r\n </div>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CardComponent } from '../card.component';\r\nimport { IconComponent } from '../../icon/icon.component';\r\nimport { ListComponent } from '../../list/list.component';\r\nimport { CardBodyComponent } from '../card-body/card-body.component';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CardTitleActionsComponent } from '../card-title-actions/card-title-actions.component';\r\nimport { CardCustomHeaderComponent } from '../card-custom-header/card-custom-header.component';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType } from '@ngx-formly/core';\r\nimport { ButtonComponent } from '../../button/button.component';\r\n\r\n@Component({\r\n selector: 'sa-checkbox-card',\r\n standalone: true,\r\n imports: [CardComponent, IconComponent, ListComponent, CardBodyComponent, MatCheckboxModule, CommonModule, CardTitleActionsComponent, CardCustomHeaderComponent, FormsModule, ReactiveFormsModule, ButtonComponent],\r\n templateUrl: './checkbox-card.component.html',\r\n styleUrl: './checkbox-card.component.css'\r\n})\r\nexport class CheckboxCardComponent extends FieldType {\r\n\r\n ngOnInit() {\r\n // console.log(this)\r\n }\r\n\r\n onCardClick(event: MouseEvent): void {\r\n this.props['isCardSelected'] = !this.props['isCardSelected'];\r\n this.formControl.setValue(!this.formControl.value);\r\n }\r\n\r\n onCheckboxClick(event: Event): void {\r\n event.stopPropagation();\r\n }\r\n\r\n\r\n override get formControl(): FormControl {\r\n return super.formControl as FormControl;\r\n }\r\n\r\n actionHandler(button: any) {\r\n this.field.props['onButtonClick'](this.field);\r\n }\r\n}\r\n","<sa-card [width]=\"props['width']\" [customWrapperClass]=\"props['customWrapperClass']\"\r\n (click)=\"!props['disabled'] && onCardClick($event)\" [showCardBody]=\"false\" [showCardHeader]=\"true\"\r\n [showCustomCardBody]=\"true\" class=\"checkbox-card {{props['isCardSelected'] ? 'card-selected': ''}}\"\r\n [style.width]=\"props['width']\">\r\n <sa-card-title-header>\r\n <div class=\"sa-card-custom-header-container\">\r\n <div class=\"sa-card-title-logo-container\">\r\n <div class=\"sa-card-title-logo {{props['disabled'] ? 'disabled-card': ''}}\"><sa-icon\r\n [icon]=\"props['featureIcon']\" customClass=\"auto-dimensions colored-icon\"></sa-icon>\r\n </div>\r\n <div class=\"sa-card-custom-title\">{{props['title']}}</div>\r\n </div>\r\n <div class=\"sa-card-titleIcon\">\r\n <sa-card-title-actions>\r\n <div class=\"sa-document-action\">\r\n @if(props['disabled']){\r\n <sa-icon icon=\"disabledCheckboxFilled\"\r\n customClass=\"auto-dimensions disabled-checkbox-icon\"></sa-icon>\r\n }@else{\r\n <mat-checkbox class=\"checkbox-style\" [formControl]=\"formControl\"\r\n (click)=\"onCheckboxClick($event)\" [disabled]=\"props['disabled']\"></mat-checkbox>\r\n }\r\n </div>\r\n </sa-card-title-actions>\r\n </div>\r\n </div>\r\n </sa-card-title-header>\r\n <sa-card-custom-body>\r\n @if(props['listItems']){\r\n <lib-list [listData]=\"props['listItems']\" [featuresIcon]=\"props['listIcon']\"></lib-list>\r\n }@else if(props['showButtons']){\r\n <div class=\"buttons-container\">\r\n <ng-container *ngFor=\"let button of props['showButtons']\">\r\n <ng-container *ngIf=\"button.type === 'submit'\">\r\n <div class=\"button-content\">\r\n @if(props['description']){\r\n @if(props['descriptionIcon']){\r\n <div class=\"description-container\">\r\n <sa-icon [icon]=\"props['descriptionIcon']\" customClass=\"auto-dimensions disabled-icon\"\r\n class=\"description-icon\"></sa-icon>\r\n <span class=\"description-style\">{{props['description']}}</span>\r\n </div>\r\n }\r\n }\r\n <sa-button (click)=\"actionHandler(button)\" [text]=\"button.label\" [type]=\"button.buttonType\"\r\n [size]=\"button.size\" [state]=\"button.state\" [icon]=\"button.icon\"\r\n [iconPosition]='button.iconPosition' class=\"checkbox-card-action-button\"\r\n [buttonIconSize]=\"button.iconSize\"></sa-button>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n }\r\n </sa-card-custom-body>\r\n</sa-card>","import { Component, Input, Output, EventEmitter, ViewEncapsulation, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { GuideStep } from '../../../interfaces/guide-card-interface';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ChipsComponent } from '../../chips/chips.component';\r\nimport { isUndefined as _isUndefined, first as _first } from 'lodash'\r\nimport { IconComponent } from '../../icon/icon.component';\r\n\r\n@Component({\r\n selector: 'sa-guide-card',\r\n standalone: true,\r\n imports: [CommonModule, ChipsComponent, IconComponent],\r\n templateUrl: './guide-card.component.html',\r\n styleUrls: ['./guide-card.component.css'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class GuideCardComponent implements OnChanges {\r\n @Input() title: string = '';\r\n @Input() steps: GuideStep[] | any = []\r\n @Input() selectable: boolean = false;\r\n @Input() selectedStep: any = {};\r\n @Output() onStepClicked = new EventEmitter<GuideStep>();\r\n //selectedStep: any;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if ((changes['steps'] || changes['selectable']) && this.selectable && _isUndefined(this.selectedStep)) {\r\n const selectedStep = _first(this.steps);\r\n this.onStepClick(selectedStep);\r\n }\r\n }\r\n ngOnInit() {\r\n if (this.selectable && _isUndefined(this.selectedStep)) {\r\n \r\n }\r\n }\r\n\r\n onStepClick(step: any) {\r\n this.selectedStep = step;\r\n //console.log(this.selectedStep)\r\n this.onStepClicked.emit(step);\r\n }\r\n}\r\n","<div class=\"guide-container\">\r\n <div class=\"guide-header\">\r\n <p class=\"guide-header-title\">{{ title }}</p>\r\n </div>\r\n <div class=\"guide-content\">\r\n @for (step of steps; track step; let last = $last) {\r\n <div class=\"step\" [ngClass]=\"step?.isCompleted ? 'connectedSource-step': '' \">\r\n <div class=\"step-indicator\">\r\n @if(selectable) {\r\n @if(step?.isCompleted){\r\n <sa-icon [icon]=\"'checkCircleFilled'\" class=\"source-circle\" customClass=\"colored-icon\"\r\n size=\"20\"></sa-icon>\r\n }\r\n @else{\r\n <div [ngClass]=\"step === selectedStep ? 'step-circle-selected': 'step-circle-normal'\">\r\n </div>\r\n }\r\n }@else{\r\n <div class=\"step-circle\"></div>\r\n }\r\n @if (!last) {\r\n <div class=\"step-line\"></div>\r\n }\r\n </div>\r\n <div class=\"step-content\">\r\n <div class=\"step-title\" (click)=\"selectable ? onStepClick(step) : null\"\r\n [ngClass]=\"selectable ? (step === selectedStep ? 'selected-step' : 'other-step') : ''\">\r\n {{ step.title }}\r\n @if(step?.chipData) {\r\n <sa-chip [type]=\"step?.chipData.type\" [state]=\"step?.chipData.state\"\r\n [filling]=\"step?.chipData.filling\" [text]=\"step?.chipData.text\"\r\n [iconPosition]='step?.chipData.iconPosition' [iconPath]=\"step?.chipData.iconPath\"></sa-chip>\r\n }\r\n </div>\r\n @if (step?.description) {\r\n <p class=\"step-description\">{{ step.description }}</p>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>","import { Component, Input, ViewEncapsulation, Output, EventEmitter } from '@angular/core';\r\nimport { MessageType } from '../../interfaces/message-banner';\r\nimport { IconComponent } from \"../icon/icon.component\";\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IconService } from '../icon/icon.service';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { IconName } from '../../interfaces/icon-interface';\r\nimport { ButtonIconPosition, ButtonInterface, ButtonSize, ButtonType } from '../../interfaces/button-interface';\r\nimport { isUndefined, kebabCase } from 'lodash'\r\n@Component({\r\n selector: 'sa-message-banner',\r\n standalone: true,\r\n imports: [HttpClientModule, IconComponent, ButtonComponent],\r\n providers: [IconService],\r\n templateUrl: './message-banner.component.html',\r\n styleUrl: './message-banner.component.css',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class MessageBannerComponent {\r\n @Input() type: MessageType = 'info';\r\n @Input() actionText?: string;\r\n @Input() content?: string = '';\r\n @Input() bannerIcon?: IconName;\r\n @Input() bannerIconSize?: string = '';\r\n @Input() buttonIcon?: IconName;\r\n @Input() buttonType?: ButtonType;\r\n @Input() buttonIconPosition?: ButtonIconPosition;\r\n @Input() buttonSize?: ButtonSize;\r\n @Input() buttonIconSize?: string;\r\n @Input() button?: ButtonInterface;\r\n @Input() onAction: () => void = () => { };\r\n @Output() actionClick = new EventEmitter<any>();\r\n\r\n handleButtonClick(event: any, button?: ButtonInterface): void {\r\n if(isUndefined(button)) {\r\n button = {\r\n icon: this.buttonIcon,\r\n iconPosition: this.buttonIconPosition,\r\n size: this.buttonSize,\r\n buttonIconSize: this.buttonIconSize,\r\n type: this.buttonType,\r\n text: this.actionText,\r\n id: `message-banner-${kebabCase(this.actionText)}`,\r\n state: 'default'\r\n }\r\n }\r\n this.actionClick.emit(button);\r\n }\r\n}\r\n","<div class=\"message-banner\" [class]=\"type\">\r\n <div class=\"content\">\r\n @if (bannerIcon) {\r\n <sa-icon class=\"icon\" [icon]=\"bannerIcon\" [size]=\"bannerIconSize\" [style.height.px]=\"bannerIconSize\"></sa-icon>\r\n }\r\n <ng-content></ng-content>\r\n </div>\r\n @if (actionText) {\r\n <sa-button class=\"action-button\" [text]=\"actionText\" [icon]=\"buttonIcon\" [size]=\"buttonSize\" [type]=\"buttonType\"\r\n [iconPosition]=\"buttonIconPosition\" [size]=\"buttonSize\" [buttonIconSize]=\"buttonIconSize\"\r\n (click)=\"onAction()\" (onClickEvent)=\"handleButtonClick($event)\">{{\r\n actionText\r\n }}</sa-button>\r\n }\r\n @else if(button) {\r\n <sa-button\r\n [text]=\"button?.text\"\r\n [icon]=\"button?.icon\"\r\n [size]=\"button?.size\"\r\n [type]=\"button?.type\"\r\n [iconPosition]=\"button?.iconPosition\"\r\n [buttonIconSize]=\"button?.buttonIconSize\"\r\n (onClickEvent)=\"handleButtonClick(button, $event)\"\r\n role=\"button\"\r\n [attr.aria-label]=\"button?.text\"\r\n >\r\n \r\n </sa-button>\r\n }\r\n</div>","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { GuideCardComponent } from '../guide-card/guide-card.component';\r\nimport { FieldType, } from '@ngx-formly/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { CardComponent } from '../card.component';\r\nimport { CardCustomHeaderComponent } from '../card-custom-header/card-custom-header.component';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { ChipsComponent } from '../../chips/chips.component';\r\nimport { IconComponent } from '../../icon/icon.component';\r\nimport { ButtonComponent } from '../../button/button.component';\r\nimport { CardTitleActionsComponent } from '../card-title-actions/card-title-actions.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { find as _find } from 'lodash'\r\nimport { MessageBannerComponent } from '../../message-banner/message-banner.component';\r\n@Component({\r\n selector: 'sa-menu-card',\r\n standalone: true,\r\n imports: [ChipsComponent, CommonModule, GuideCardComponent, FormsModule, ReactiveFormsModule, FormlyModule, CardComponent, CardCustomHeaderComponent, IconComponent, MatExpansionModule, ButtonComponent, CardTitleActionsComponent, MatTooltipModule, MessageBannerComponent],\r\n templateUrl: './menu-card.component.html',\r\n styleUrl: './menu-card.component.css'\r\n})\r\nexport class MenuCardComponent extends FieldType {\r\n @Input() title: string = 'Categories:';\r\n @Input() steps: any[];\r\n @Input() footerDetails: any;\r\n @Output() onButtonClickEvent = new EventEmitter<any>();\r\n @Output() onCardClickEvent = new EventEmitter<any>();\r\n @Output() onFooterClickEvent = new EventEmitter<any>();\r\n @Output() onStepChangeEvent = new EventEmitter<any>();\r\n selectedStep: any;\r\n selectedGuideStep: any | null = null;\r\n customClassWrapper = 'menuCardSourceContainer';\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['steps']) {\r\n this.selectedStep = _find(this.steps, { isSelected: true })\r\n }\r\n }\r\n\r\n onStepChanged(event) {\r\n this.selectedStep = event;\r\n this.onStepChangeEvent.emit(event);\r\n }\r\n\r\n onCardClick(source: any, button: any, event: Event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n this.onCardClickEvent.emit({ category: this.selectedStep, source: source, button: button })\r\n }\r\n\r\n onAdvancedFeaturesOpened() {\r\n this.selectedStep.advancedFeaturesExpanded = true;\r\n }\r\n\r\n onAdvancedFeaturesClosed() {\r\n this.selectedStep.advancedFeaturesExpanded = false;\r\n }\r\n\r\n actionHandler(button: any, event: Event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n this.onButtonClickEvent.next({ category: this.selectedStep, button: button });\r\n }\r\n\r\n showSources(sourceType: any) {\r\n this.onFooterClickEvent.emit(sourceType);\r\n //console.log(sourceType)\r\n this.onStepChanged(sourceType)\r\n }\r\n}\r\n","<div class=\"menu-card-container\">\r\n <div class=\"left-card-container\">\r\n <sa-guide-card [title]=\"'Categories:'\" [steps]=\"steps\" [selectable]=\"true\"\r\n (onStepClicked)=\"onStepChanged($event)\" [selectedStep]=\"selectedStep\"></sa-guide-card>\r\n <div class=\"card-footer-container\">\r\n <span class=\"horizontal-line\"></span>\r\n <ng-container *ngFor=\"let footerDetail of footerDetails\">\r\n <div (click)=\"showSources(footerDetail)\" class=\"footer\"\r\n [ngClass]=\"footerDetail === selectedStep ? 'selected-step' : 'other-step'\">\r\n <span class=\"footer-text\">\r\n {{footerDetail?.title}}\r\n <ng-container *ngIf=\"footerDetail?.count\">\r\n <span>({{footerDetail?.count}})</span>\r\n </ng-container>\r\n </span>\r\n <ng-container *ngIf=\"footerDetail?.chipData\">\r\n <span>\r\n <sa-chip [type]=\"footerDetail?.chipData.type\" [state]=\"footerDetail?.chipData.state\"\r\n [filling]=\"footerDetail?.chipData.filling\" [text]=\"footerDetail?.chipData.text\"\r\n [iconPosition]='footerDetail?.chipData.iconPosition'\r\n [iconPath]=\"footerDetail?.chipData.iconPath\">\r\n </sa-chip>\r\n </span>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"right-card-container\">\r\n @if(selectedStep?.messageContent || selectedStep?.messageBanner?.content){\r\n <div class=\"message-container\">\r\n <sa-message-banner [bannerIcon]=\"selectedStep?.messageBanner?.bannerIcon\"\r\n [bannerIconSize]=\"selectedStep?.messageBanner?.bannerIconSize\" \r\n [buttonIcon]=\"selectedStep?.messageBanner?.buttonIcon\"\r\n [buttonType]=\"selectedStep?.messageBanner?.buttonType\"\r\n [buttonSize]=\"selectedStep?.messageBanner?.buttonSize\"\r\n [buttonIconPosition]=\"selectedStep?.messageBanner?.buttonIconPosition\"\r\n [actionText]=\"selectedStep?.messageBanner?.buttonText\"\r\n [buttonIconSize]=\"selectedStep?.messageBanner?.buttonIconSize\"\r\n [type]=\"selectedStep?.messageBanner?.type || 'info'\">\r\n <div class=\"message-content\" [innerHtml]=\"selectedStep?.messageContent || selectedStep?.messageBanner?.content\">\r\n </div>\r\n </sa-message-banner>\r\n </div>\r\n }\r\n <div class=\"heading-container\">\r\n <span class=\"heading-style\">{{selectedStep?.sourcesHeading || 'Available Sources'}}:</span>\r\n </div>\r\n <div *ngIf=\"selectedStep?.sourcesList\" class=\"cards-container\">\r\n <ng-container *ngFor=\"let source of selectedStep.sourcesList\">\r\n <ng-container\r\n *ngTemplateOutlet=\"cardTemplate; context: { source: source, selectedStep: selectedStep, actionButton: selectedStep?.actionButton }\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <!-- for advanced options -->\r\n <div *ngIf=\"selectedStep?.advancedSourcesList && selectedStep.advancedSourcesList.length > 0\"\r\n class=\"menu-card-advanced-features-section\">\r\n\r\n <mat-expansion-panel hideToggle [expanded]=\"selectedStep?.advancedFeaturesExpanded || false\"\r\n (opened)=\"onAdvancedFeaturesOpened()\" (closed)=\"onAdvancedFeaturesClosed()\"\r\n class=\"menuAdvancedAccordion\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <div class=\"panel-container\">\r\n @if(!selectedStep?.['advancedFeaturesExpanded']){\r\n <span class=\"d-flex align-center source-icon\">\r\n <sa-icon [icon]=\"props?.['advancedFeatureCollapsedIcon'] || 'sourcesOutlined'\" class=\"d-flex\"\r\n customClass=\"colored-icon\" size=\"16\"></sa-icon>\r\n </span>\r\n }@else{\r\n <span class=\"d-flex align-center\">\r\n <sa-icon [icon]=\"props?.['advancedFeatureExpandedIcon'] || 'downChevronOutlined'\" class=\"d-flex\"\r\n size=\"20\"></sa-icon>\r\n </span>\r\n }\r\n <span class=\"advanced-title\">{{ selectedStep?.['advancedFeaturesExpanded'] ?\r\n selectedStep?.['advancedFeatureToggleTitle'] :\r\n selectedStep?.['advancedFeatureTitle'] }}</span>\r\n </div>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div class=\"expansion-container\">\r\n @if(selectedStep?.advancedFeatureDisclaimer){\r\n <div class=\"disclaimer-container\">\r\n <sa-message-banner [type]=\"'disclaimer'\">\r\n <div class=\"disclaimer-content\">\r\n @if(selectedStep?.advancedFeatureDisclaimerTooltip){\r\n <span class=\"tooltip-container\">\r\n <sa-icon icon=\"infoCircleOutlined\"\r\n [matTooltip]=\"selectedStep?.advancedFeatureDisclaimerTooltip\" customClass=\"info-icon\"\r\n class=\"tooltip-icon\"></sa-icon>\r\n </span>\r\n }\r\n <span class=\"disclaimer-style\">{{selectedStep?.advancedFeatureDisclaimer}}</span>\r\n </div>\r\n @if(selectedStep?.advancedFeatureDisclaimerButtons) {\r\n <div class=\"disclaimer-buttons-container\">\r\n <ng-container *ngFor=\"let button of selectedStep.advancedFeatureDisclaimerButtons\">\r\n <sa-button [text]=\"button.text\" [type]=\"button.type\" [size]=\"button.size\"\r\n [state]=\"button.state\" [iconPosition]=\"button.iconPosition\" [icon]=\"button.icon\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (click)=\"actionHandler(button, $event)\"></sa-button>\r\n </ng-container>\r\n </div>\r\n }\r\n </sa-message-banner>\r\n </div>\r\n }\r\n <div class=\"cards-container\">\r\n <ng-container *ngFor=\"let source of selectedStep?.advancedSourcesList\">\r\n <ng-container\r\n *ngTemplateOutlet=\"cardTemplate; context: { source: source, selectedStep: selectedStep, actionButton: selectedStep?.actionButton }\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n </div>\r\n @if(selectedStep?.connectedSourcesList && selectedStep.connectedSourcesList.length > 0) {\r\n <div class=\"heading-container\">\r\n <span class=\"heading-style\">{{selectedStep?.sourcesHeading || 'Connected Sources'}}:</span>\r\n </div>\r\n <div class=\"cards-container\">\r\n <ng-container *ngFor=\"let source of selectedStep.connectedSourcesList\">\r\n <ng-container\r\n *ngTemplateOutlet=\"cardTemplate; context: { source: source, selectedStep: selectedStep, actionButton: selectedStep?.actionButton }\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<ng-template #cardTemplate let-source=\"source\" let-selectedStep=\"selectedStep\" let-actionButton=\"actionButton\">\r\n <sa-card [column]=\"false\" [showCardHeader]=\"true\" [showCardBody]=\"false\"\r\n [width]=\"selectedStep.sourcesCardWidth || '471px'\" [showHeaderBodyDivider]=\"false\"\r\n [customWrapperClass]=\"selectedStep.customWrapperClass || customClassWrapper\"\r\n class=\"{{source.disabled ? 'disabled-card': 'enabled-card'}}\">\r\n <sa-card-title-header>\r\n <div class=\"sa-card-accordion-title-container\">\r\n <div class=\"sa-menu-card-title-icon-container\">\r\n <div class=\"sa-menu-card-custom-title\">\r\n <ng-container *ngIf=\"source.logoUrl\">\r\n <sa-icon [img]=\"source.logoUrl\" [size]=\"'20'\" class=\"d-flex\" [customClass]=\"'auto-dimensions'\"></sa-icon>\r\n </ng-container>\r\n <span [matTooltip]=\"source?.tooltip\">\r\n {{source?.name}}\r\n <ng-container *ngIf=\"source?.count\">\r\n <span>({{source.count}})</span>\r\n </ng-container>\r\n </span>\r\n <ng-container *ngIf=\"source?.chipData\">\r\n <span>\r\n <sa-chip [type]=\"source?.chipData.type\" [state]=\"source?.chipData.state\"\r\n [filling]=\"source?.chipData.filling\" [text]=\"source?.chipData.text\"\r\n [iconPosition]='source?.chipData.iconPosition'\r\n [iconPath]=\"source?.chipData.iconPath\">\r\n </sa-chip>\r\n </span>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ng-container\r\n *ngIf=\"!source.disabled && (selectedStep?.actionButton && (selectedStep?.showActionActionButton ? actionButton : null)) as button\">\r\n <div class=\"sa-card-titleIcon no-margin\">\r\n <sa-card-title-actions>\r\n <sa-button [text]=\"button.text\" [type]=\"button.type\" [size]=\"button.size\"\r\n [state]=\"button.state\" [iconPosition]=\"button.iconPosition\" [icon]=\"button.icon\"\r\n [buttonIconSize]=\"button.buttonIconSize\" (click)=\"onCardClick(source, button, $event)\">\r\n </sa-button>\r\n </sa-card-title-actions>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </sa-card-title-header>\r\n </sa-card>\r\n</ng-template>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, SimpleChanges } from '@angular/core';\r\nimport { ChipsComponent } from '../../chips/chips.component';\r\nimport { CardComponent } from '../card.component';\r\nimport { IconComponent } from '../../icon/icon.component';\r\nimport { CardBodyComponent } from '../card-body/card-body.component';\r\nimport { CardCustomHeaderComponent } from '../card-custom-header/card-custom-header.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { isArray, isString, map, join, every, get, isUndefined, includes } from 'lodash';\r\n\r\nexport interface ThumbnailStatus {\r\n text: string;\r\n type: 'regular' | 'small' | 'large';\r\n state: 'primary' | 'secondary' | 'neutral' | 'error' | 'warning' | 'success';\r\n filling: 'outline' | 'filled';\r\n iconPath?: string;\r\n iconPosition?: 'left' | 'right' | 'both' | '';\r\n largeStateIcon?: string;\r\n largeStateText?: string;\r\n tooltip?: string;\r\n}\r\n\r\nexport interface ThumbnailData {\r\n title: string;\r\n subtitle: string;\r\n description: string;\r\n descriptionTooltip?: string;\r\n thumbnailUrl: string;\r\n statuses: ThumbnailStatus[];\r\n [key: string]: any\r\n}\r\n\r\n@Component({\r\n selector: 'sa-thumbnail-card',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ChipsComponent,\r\n CardComponent,\r\n IconComponent,\r\n CardBodyComponent,\r\n CardCustomHeaderComponent,\r\n MatTooltipModule,\r\n ],\r\n templateUrl: './thumbnail-card.component.html',\r\n styleUrls: ['./thumbnail-card.component.css']\r\n})\r\nexport class ThumbnailCardComponent {\r\n @Input() data: ThumbnailData;\r\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\r\n @Output() cardClick = new EventEmitter<ThumbnailData>();\r\n\r\n /**\r\n * Handles changes to component inputs\r\n * @param changes SimpleChanges object containing changed properties\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['data']) {\r\n this.data = changes['data'].currentValue;\r\n this.updateDescriptionTooltip();\r\n }\r\n }\r\n \r\n /**\r\n * Updates the description tooltip if it exists\r\n * @private\r\n */\r\n private updateDescriptionTooltip(): void {\r\n const tooltip = get(this.data, 'descriptionTooltip');\r\n if (!isUndefined(tooltip)) {\r\n this.data.descriptionTooltip = this.formattedTooltip(tooltip);\r\n }\r\n }\r\n\r\n onCardClick(): void {\r\n this.cardClick.emit(this.data);\r\n }\r\n\r\n getChipConfig(status: string): Partial<ThumbnailStatus> {\r\n switch (status) {\r\n case 'active':\r\n return {\r\n type: 'small',\r\n state: 'success',\r\n filling: 'filled'\r\n };\r\n default:\r\n return {\r\n type: 'small',\r\n state: 'neutral',\r\n filling: 'outline'\r\n };\r\n }\r\n }\r\n\r\n formattedTooltip(tooltip: any): string {\r\n try {\r\n // Parse the JSON string\r\n const parsedData = JSON.parse(tooltip);\r\n // Check if parsedData is an array\r\n if (isArray(parsedData)) {\r\n // Handle case where it's an array of objects\r\n if (\r\n every(\r\n parsedData,\r\n (item) => item && typeof item === 'object' && 'name' in item,\r\n )\r\n ) {\r\n return join(map(parsedData, (item: any) => item.name), '\\n');\r\n }\r\n // Handle case where it's an array of strings\r\n if (every(parsedData, (item) => isString(item))) {\r\n return join(parsedData, '\\n');\r\n }\r\n throw new Error('Invalid array structure');\r\n } else {\r\n throw new Error('Parsed data is not an array');\r\n }\r\n } catch (error) {\r\n if (includes(tooltip, '\\n')) {\r\n return tooltip; // Assuming it's already formatted correctly\r\n }\r\n console.error('Error parsing tooltip data:', error);\r\n // Return a fallback message in case of an error\r\n return '';\r\n }\r\n }\r\n}\r\n","<div class=\"thumbnail-card\" [class.small]=\"size === 'small'\" [class.medium]=\"size === 'medium'\"\r\n [class.large]=\"size === 'large'\" (click)=\"onCardClick()\" role=\"button\" tabindex=\"0\" (keydown.enter)=\"onCardClick()\">\r\n <sa-card [showCustomCardBody]=\"true\" [customWrapperClass]=\"'sa-card-custom-wrapper'\">\r\n <sa-card-custom-body>\r\n <div class=\"thumbnail-content\">\r\n <div class=\"thumbnail-container\">\r\n <img [src]=\"data?.thumbnailUrl\" [alt]=\"data?.title\" class=\"thumbnail\">\r\n </div>\r\n <div class=\"thumbnail-info\">\r\n <div class=\"thumbnail-header\">\r\n <h3 class=\"thumbnail-title\">{{ data?.title }}</h3>\r\n <div class=\"status-chips\">\r\n @for (status of data?.statuses; track status.text) {\r\n <sa-chip [text]=\"status.text\" [type]=\"'small'\" [state]=\"status.state\" [filling]=\"status.filling\"\r\n [iconPath]=\"status.iconPath\" [iconPosition]=\"status.iconPosition\"\r\n [largeStateIcon]=\"status.largeStateIcon\" [largeStateText]=\"status.largeStateText\" [matTooltip]=\"status?.tooltip\" matTooltipClass=\"custom-status-tooltip\">\r\n </sa-chip>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"thumbnail-metadata\">\r\n <span class=\"thumbnail-description\" [matTooltip]=\"data?.descriptionTooltip\" matTooltipClass=\"custom-description-tooltip\">{{ data?.description }}</span>\r\n <span class=\"separator\"></span>\r\n <span class=\"thumbnail-subtitle\">{{ data?.subtitle }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </sa-card-custom-body>\r\n </sa-card>\r\n</div>\r\n","import { Component, OnInit, Input, OnDestroy, ViewEncapsulation, SimpleChanges, OnChanges, ChangeDetectionStrategy, ChangeDetectorRef, NgZone } from '@angular/core';\r\nimport { CardComponent } from '../card/card.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { CardCustomHeaderComponent } from '../card/card-custom-header/card-custom-header.component';\r\nimport { CardCarousel } from '../../interfaces/card-carousel-interface';\r\nimport { AvatarComponent } from \"../avatar/avatar.component\";\r\nimport { map as _map, split as _split, words as _words } from 'lodash';\r\n\r\n@Component({\r\n selector: 'sa-card-carousel',\r\n standalone: true,\r\n imports: [CardComponent, IconComponent, CardCustomHeaderComponent, AvatarComponent],\r\n templateUrl: './card-carousel.component.html',\r\n styleUrls: ['./card-carousel.component.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CardCarouselComponent implements OnInit, OnDestroy, OnChanges {\r\n protected Math = Math;\r\n\r\n @Input() cards: CardCarousel[] = [];\r\n @Input() interval: number = 5000;\r\n @Input() autoPlay: boolean = true;\r\n @Input() showNavigationArrows: boolean = true;\r\n @Input() showIndicators: boolean = true;\r\n @Input() showBrandFooter: boolean = true;\r\n\r\n visibleLogos: (CardCarousel & { index: number; isActive: boolean })[] = [];\r\n currentIndex: number = 0;\r\n private timer: any;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private ngZone: NgZone\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.updateVisibleLogos();\r\n if (this.autoPlay && this.cards.length > 0) {\r\n this.startTimer();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['cards'] && this.cards?.length > 0) {\r\n this.cards = _map(this.cards, (card) => {\r\n const nameWords = _words(card.title, /[A-Za-z]+/g);\r\n const wordsToUse = nameWords.length > 2 \r\n ? [nameWords[0], nameWords[nameWords.length - 1]]\r\n : nameWords;\r\n const initials = _map(wordsToUse, word => word.charAt(0).toUpperCase()).join('');\r\n return { ...card, altText: initials };\r\n });\r\n \r\n if (this.currentIndex >= this.cards.length) {\r\n this.currentIndex = 0;\r\n }\r\n this.updateVisibleLogos();\r\n if (this.autoPlay) {\r\n this.resetTimer();\r\n }\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.stopTimer();\r\n }\r\n\r\n startTimer() {\r\n this.stopTimer();\r\n this.ngZone.runOutsideAngular(() => {\r\n this.timer = setInterval(() => {\r\n this.ngZone.run(() => {\r\n this.next();\r\n this.cdr.markForCheck();\r\n });\r\n }, this.interval);\r\n });\r\n }\r\n\r\n stopTimer() {\r\n if (this.timer) {\r\n clearInterval(this.timer);\r\n this.timer = null;\r\n }\r\n }\r\n\r\n resetTimer() {\r\n this.stopTimer();\r\n if (this.autoPlay && this.cards.length > 0) {\r\n this.startTimer();\r\n }\r\n }\r\n\r\n selectCard(index: number) {\r\n if (index !== this.currentIndex && index >= 0 && index < this.cards.length) {\r\n this.currentIndex = index;\r\n this.updateVisibleLogos();\r\n this.resetTimer();\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n next() {\r\n if (this.cards.length > 0) {\r\n this.currentIndex = (this.currentIndex + 1) % this.cards.length;\r\n this.updateVisibleLogos();\r\n this.resetTimer();\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n prev() {\r\n if (this.cards.length > 0) {\r\n this.currentIndex = (this.currentIndex - 1 + this.cards.length) % this.cards.length;\r\n this.updateVisibleLogos();\r\n this.resetTimer();\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n updateVisibleLogos() {\r\n if (this.cards.length === 0) {\r\n this.visibleLogos = [];\r\n return;\r\n }\r\n\r\n const maxVisibleCards = Math.min(5, this.cards.length);\r\n const startOffset = Math.floor(maxVisibleCards / 2) * -1;\r\n const endOffset = maxVisibleCards + startOffset;\r\n \r\n this.visibleLogos = [];\r\n for (let i = startOffset; i < endOffset; i++) {\r\n const index = (this.currentIndex + i + this.cards.length) % this.cards.length;\r\n this.visibleLogos.push({\r\n ...this.cards[index],\r\n index: index,\r\n isActive: index === this.currentIndex\r\n });\r\n }\r\n }\r\n}\r\n","<!-- card-carousel.component.html -->\r\n<div class=\"carousel-container\">\r\n <div class=\"carousel-top-wrapper\">\r\n <div class=\"controls\">\r\n @if (showIndicators) {\r\n <div class=\"dots\">\r\n @for (card of cards; track card.id; let i = $index) {\r\n <span class=\"dot\" [class.active]=\"i === currentIndex\" (click)=\"selectCard(i)\"></span>\r\n }\r\n </div>\r\n }\r\n @if (showNavigationArrows) {\r\n <div class=\"arrow-controls\">\r\n <sa-icon [icon]=\"'leftChevronCircle'\" size=\"24\" (click)=\"prev()\"></sa-icon>\r\n <sa-icon [icon]=\"'rightChevronCircle'\" size=\"24\" (click)=\"next()\"></sa-icon>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"card-container\">\r\n @if (cards[currentIndex]) {\r\n <sa-card [customWrapperClass]=\"'sa-card-custom-wrapper'\" [width]=\"'24.063rem'\" [column]=\"false\"\r\n [showCardHeader]=\"true\" [showCardBody]=\"true\" [body]=\"cards[currentIndex]?.body\"\r\n [showHeaderBodyDivider]=\"true\">\r\n <sa-card-title-header>\r\n <div class=\"sa-card-custom-header-container\">\r\n <sa-avatar [altText]=\"cards[currentIndex]?.altText\" [imagePath]=\"cards[currentIndex]?.avatarIcon\" [size]=\"'extra-large'\"></sa-avatar>\r\n <div class=\"sa-card-title-subtitle-container\">\r\n <div class=\"sa-card-custom-title\">{{ cards[currentIndex]?.title }}</div>\r\n <div class=\"sa-card-subtitle\">{{ cards[currentIndex]?.subtitle }}</div>\r\n </div>\r\n <div class=\"sa-card-titleIcon\">\r\n <sa-icon [icon]=\"cards[currentIndex]?.logoIcon\" [iconUrl]=\"cards[currentIndex]?.logoUrl\" [size]=\"cards[currentIndex]?.logoSize || '50'\" customClass=\"logo-style\"></sa-icon>\r\n </div>\r\n </div>\r\n </sa-card-title-header>\r\n </sa-card>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (showBrandFooter) {\r\n <div class=\"brand-logos-container\">\r\n <div class=\"brand-logos\">\r\n @for (logo of visibleLogos; track logo.id) {\r\n <div> \r\n <sa-icon [icon]=\"logo.logoIcon\" [iconUrl]=\"logo.logoUrl\" [size]=\"logo.logoSize || '50'\" [class.active]=\"logo.isActive\" (click)=\"selectCard(logo.index)\"\r\n [customClass]=\"'logo-style'\">\r\n </sa-icon>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n</div>","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { IconName } from '../../interfaces/icon-interface';\r\n\r\nexport interface CategoryItem {\r\n id: string;\r\n label: string;\r\n icon?: IconName | string;\r\n}\r\n\r\nexport interface HelpButtonConfig {\r\n id?: string | number;\r\n type?: string;\r\n state?: string;\r\n size?: string;\r\n text?: string | number;\r\n ImagePath?: string;\r\n icon?: IconName | string;\r\n iconPosition?: string;\r\n href?: string;\r\n hrefTarget?: string;\r\n width?: string;\r\n isSubmit?: boolean;\r\n buttonIconSize?: string;\r\n showSpinner?: boolean;\r\n}\r\n\r\nexport interface HelpSectionConfig {\r\n enabled: boolean;\r\n icon?: IconName | string;\r\n title?: string;\r\n button?: HelpButtonConfig;\r\n}\r\n\r\nexport interface CategoriesNavConfig {\r\n title?: string;\r\n categories: CategoryItem[];\r\n helpSection?: HelpSectionConfig;\r\n}\r\n\r\n@Component({\r\n selector: 'sa-categories-nav',\r\n standalone: true,\r\n imports: [CommonModule, ButtonComponent, IconComponent],\r\n templateUrl: './categories-nav.component.html',\r\n styleUrls: ['./categories-nav.component.css']\r\n})\r\nexport class CategoriesNavComponent {\r\n @Input() config: CategoriesNavConfig = { categories: [] };\r\n @Input() selectedCategoryId: string = '';\r\n @Output() categorySelected = new EventEmitter<CategoryItem>();\r\n @Output() helpButtonClicked = new EventEmitter<void>();\r\n\r\n get categories(): CategoryItem[] {\r\n return this.config?.categories || [];\r\n }\r\n\r\n get title(): string {\r\n return this.config?.title || 'Categories:';\r\n }\r\n\r\n get helpSection(): HelpSectionConfig | undefined {\r\n return this.config?.helpSection;\r\n }\r\n\r\n onCategoryClick(category: CategoryItem): void {\r\n this.categorySelected.emit(category);\r\n }\r\n\r\n onHelpButtonClick(): void {\r\n this.helpButtonClicked.emit();\r\n }\r\n}\r\n","<div class=\"categories-nav\">\r\n <div class=\"categories-header\">\r\n <h3>{{ title }}</h3>\r\n </div>\r\n <div class=\"categories-list\">\r\n <div \r\n *ngFor=\"let category of categories\" \r\n class=\"category-item\"\r\n [class.selected]=\"category.id === selectedCategoryId\"\r\n (click)=\"onCategoryClick(category)\">\r\n <span class=\"category-label\">{{ category.label }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Configurable Help Section -->\r\n <div *ngIf=\"helpSection?.enabled\" class=\"help-section\">\r\n <div class=\"help-content\">\r\n <div class=\"help-icon\" *ngIf=\"helpSection.icon\">\r\n <sa-icon [icon]=\"helpSection.icon\" [size]=\"'20'\"></sa-icon>\r\n </div>\r\n <div class=\"help-text\" *ngIf=\"helpSection.title\">\r\n {{ helpSection.title }}\r\n </div>\r\n </div>\r\n <sa-button\r\n *ngIf=\"helpSection.button?.text\"\r\n [size]=\"helpSection.button?.size\"\r\n [type]=\"helpSection.button?.type\"\r\n [id]=\"helpSection.button?.id\"\r\n [state]=\"helpSection.button?.state\"\r\n [text]=\"helpSection.button?.text\"\r\n [ImagePath]=\"helpSection.button?.ImagePath\"\r\n [icon]=\"helpSection.button?.icon\"\r\n [iconPosition]=\"helpSection.button?.iconPosition\"\r\n [href]=\"helpSection.button?.href\"\r\n [hrefTarget]=\"helpSection.button?.hrefTarget\"\r\n [width]=\"helpSection.button?.width\"\r\n [isSubmit]=\"helpSection.button?.isSubmit\"\r\n [buttonIconSize]=\"helpSection.button?.buttonIconSize\"\r\n [showSpinner]=\"helpSection.button?.showSpinner\"\r\n (onClickEvent)=\"onHelpButtonClick()\">\r\n </sa-button>\r\n </div>\r\n</div>\r\n","import { Component } from '@angular/core';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, FormsModule } from '@angular/forms';\r\nimport { FieldType } from '@ngx-formly/core';\r\nimport { isObservable, of } from 'rxjs';\r\nimport { includes as _includes } from 'lodash'\r\n\r\n@Component({\r\n selector: 'sa-checkbox',\r\n standalone: true,\r\n imports: [MatChipsModule, CommonModule, FormsModule],\r\n templateUrl: './checkbox.component.html',\r\n styleUrl: './checkbox.component.css'\r\n})\r\nexport class CheckboxComponent extends FieldType {\r\n toggleSelection(option: any): void {\r\n const selected = this.formControl.value || [];\r\n const index = selected.indexOf(option.value);\r\n if (index === -1) {\r\n selected.push(option.value);\r\n } else {\r\n selected.splice(index, 1);\r\n }\r\n this.formControl.setValue([...selected]);\r\n }\r\n\r\n // Checks if an option is selected\r\n isSelected(option: any): boolean {\r\n return _includes((this.formControl.value || []), option.value);\r\n }\r\n\r\n get options$() {\r\n const options = this.props?.options;\r\n return isObservable(options) ? options : of(options || []);\r\n }\r\n\r\n}\r\n","<div class=\"checkbox-container\">\r\n <div class=\"title-container\">\r\n @if(props['label']){\r\n <div class=\"form-field-title\">\r\n <span>{{ props['label'] }}</span>\r\n </div>\r\n }\r\n @if(props['description']){\r\n <div class=\"form-field-description\">\r\n <span>{{ props['description'] }}</span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"form-field\">\r\n <mat-chip-listbox selectable multiple [disabled]=\"props.disabled\" aria-label=\"Select options\">\r\n <mat-chip-option *ngFor=\"let option of options$ | async\" class=\"custom-chip\" [value]=\"option.value\"\r\n (click)=\"toggleSelection(option)\" [selected]=\"isSelected(option)\">\r\n {{ option.label }}\r\n </mat-chip-option>\r\n </mat-chip-listbox>\r\n </div>\r\n @if(props['helpText']){\r\n <div class=\"form-field-helpText\">\r\n <span>{{ props['helpText'] }}</span>\r\n </div>\r\n }\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-component-library',\r\n standalone: true,\r\n imports: [],\r\n template: `\r\n <p>\r\n component-library works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class TestLibraryComponent {\r\n\r\n}\r\n","\r\nimport { Component, Input, OnInit, Output, EventEmitter, OnDestroy } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-dashboard-loader',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './dashboard-loader.component.html',\r\n styleUrl: './dashboard-loader.component.css',\r\n host: {\r\n '[style.--animation-duration]': 'animationDuration + \"s\"'\r\n }\r\n})\r\nexport class DashboardLoaderComponent implements OnInit, OnDestroy {\r\n @Input() animationDuration = 6; // Default duration in seconds\r\n @Output() animationCycleComplete = new EventEmitter<void>();\r\n\r\n private animationInterval: any;\r\n\r\n ngOnInit() {\r\n if (this.animationDuration <= 0) {\r\n console.warn('Animation duration must be greater than 0. Using default value of 6s.');\r\n this.animationDuration = 6;\r\n }\r\n\r\n // Emit event at the end of each animation cycle\r\n this.animationInterval = setInterval(() => {\r\n this.animationCycleComplete.emit();\r\n }, this.animationDuration * 1000);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.animationInterval) {\r\n clearInterval(this.animationInterval);\r\n }\r\n }\r\n}\r\n","<span class=\"loader\"></span>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { NgFor } from '@angular/common';\r\nimport { NgIf } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'sa-tool-tip',\r\n standalone: true,\r\n imports: [ButtonComponent, NgFor, NgIf],\r\n templateUrl: './tool-tip.component.html',\r\n styleUrl: './tool-tip.component.css'\r\n})\r\nexport class ToolTipComponent {\r\n @Input() messages: string[] = [];\r\n @Input() pointerPosition: string = 'bottom';\r\n @Input() simpleMode: boolean = false;\r\n\r\n @Output() toolTipSkipped = new EventEmitter();\r\n @Output() toolTipSeen = new EventEmitter();\r\n arrowIcon = \"../assets/rightChevronOutlined.svg\";\r\n pointer = \"../assets/upwardTriangleFilled.svg\";\r\n\r\n msgInd: number = 0; // is the index of current message being displayed\r\n\r\n updateMsgInd(k: number) {\r\n this.msgInd += k;\r\n if (this.msgInd < 0) this.msgInd = 0;\r\n if (this.msgInd > this.messages.length - 1) {\r\n this.msgInd = this.messages.length - 1;\r\n this.toolTipSeen.emit();\r\n }\r\n }\r\n\r\n skipToolTip() {\r\n this.toolTipSkipped.emit();\r\n }\r\n\r\n}\r\n","<div class=\"tool-tip-vertical\">\r\n <div class=\"tool-tip-pointer-icon pointer-top\" *ngIf=\"pointerPosition == 'top'\"></div>\r\n <div class=\"tool-tip-horizontal\">\r\n <div class=\"tool-tip-pointer-icon pointer-left\" *ngIf=\"pointerPosition == 'left'\"></div> \r\n <div class=\"tool-tip simple-tooltip\" *ngIf=\"simpleMode\">\r\n <div class=\"simple-tooltip-content\" \r\n [class]=\"{ 'vertical-stack': messages.length <= 5, 'grid-stack': messages.length > 5, 'single-item': messages.length === 1 }\">\r\n <span class=\"simple-tooltip-message\" *ngFor=\"let message of messages\">\r\n {{message}}\r\n </span>\r\n </div>\r\n \r\n </div>\r\n <div class=\"tool-tip\" *ngIf=\"!simpleMode\">\r\n <div class=\"tool-tip-content\">\r\n <div class=\"tool-tip-heading\">Heading</div>\r\n <div *ngFor=\"let msg of messages, let i = index\" class=\"tool-tip-message {{msgInd != i ? 'hidden-msg': ''}}\">\r\n {{msg}}\r\n </div>\r\n </div>\r\n <div class=\"tool-tip-break\">\r\n </div>\r\n <div class=\"tool-tip-controls\">\r\n <div class=\"tool-tip-navigate\">\r\n <img class=\"left-icon tool-tip-navigate-icon\" (click)=\"updateMsgInd(-1)\" [src]=\"arrowIcon\" alt=\"\">\r\n {{msgInd+1}} of {{messages.length}}\r\n <img class=\"right-icon tool-tip-navigate-icon\" (click)=\"updateMsgInd(1)\" [src]=\"arrowIcon\" alt=\"\">\r\n </div>\r\n <div class=\"tool-tip-control-buttons\">\r\n <sa-button (onClickEvent)=\"skipToolTip()\" class=\"skip-button\" text=\"Skip\" type=\"transparent\" size=\"medium\"\r\n state=\"default\"></sa-button>\r\n <sa-button (onClickEvent)=\"updateMsgInd(1)\" text=\"Next\" type=\"primary\" size=\"medium\" state=\"default\">\r\n </sa-button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tool-tip-pointer-icon pointer-right\" *ngIf=\"pointerPosition == 'right'\"></div>\r\n </div>\r\n <div class=\"tool-tip-pointer-icon pointer-bottom\" *ngIf=\"pointerPosition == 'bottom'\"></div>\r\n</div>\r\n","import { Component, Output, EventEmitter, ChangeDetectorRef, ElementRef, ViewChild, HostListener, OnDestroy } from '@angular/core';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { ICellRendererAngularComp, IHeaderAngularComp } from 'ag-grid-angular';\r\nimport { GridInterface } from '../../interfaces/grid-interface';\r\nimport { AvatarComponent } from '../avatar/avatar.component';\r\nimport { ToolTipComponent } from '../tool-tip/tool-tip.component';\r\nimport { ChipInterface } from '../../interfaces/chip-interface';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { CommonModule, NgFor, NgIf } from '@angular/common';\r\nimport { ComponentRef } from '@angular/core';\r\nimport { TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { ICellRendererParams } from 'ag-grid-community';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { isString as _isString, split as _split, join as _join, size as _size, first as _first, takeRight as _takeRight, repeat as _repeat } from 'lodash';\r\n\r\ninterface CellParams extends ICellRendererParams {\r\n rowIndex: number;\r\n value: any;\r\n data: { you?: boolean };\r\n}\r\n\r\n@Component({\r\n selector: 'sa-grid-cell',\r\n standalone: true,\r\n imports: [\r\n AvatarComponent,\r\n ChipsComponent,\r\n ButtonComponent,\r\n NgFor,\r\n NgIf,\r\n ToolTipComponent,\r\n CommonModule,\r\n IconComponent,\r\n MatTooltipModule\r\n ],\r\n templateUrl: './grid-cell.component.html',\r\n styleUrl: './grid-cell.component.css'\r\n})\r\nexport class GridCellComponent implements ICellRendererAngularComp, OnDestroy {\r\n @ViewChild('dropdownTemplate') dropdownTemplate!: TemplateRef<any>;\r\n overlayRef!: OverlayRef;\r\n @ViewChild('actionsContainer') actionsContainer!: ElementRef;\r\n showDropdown = false;\r\n readonly MAX_VISIBLE_CHIPS = 1; \r\n displayedChips: ChipInterface[] = [];\r\n remainingChipsCount = 0;\r\n params!: GridInterface;\r\n rowNum = 0;\r\n\r\n @Output() onClickButtonEvent = new EventEmitter<{ rowId: number }>();\r\n @Output() onClickChipEvent = new EventEmitter<{ rowId: number }>();\r\n @Output() onClickLinkEvent = new EventEmitter();\r\n @Output() onClickAvatarEvent = new EventEmitter<{ rowId: number }>();\r\n\r\n constructor(private cdr: ChangeDetectorRef, private overlay: Overlay, private viewContainerRef: ViewContainerRef) {}\r\n\r\n hoveredChip: any = null;\r\n private tooltipComponentRef: ComponentRef<ToolTipComponent> | null = null;\r\n\r\n agInit(params: CellParams): void {\r\n this.rowNum = params.rowIndex;\r\n \r\n // Check for direct field value first, then fallback to _cellParams\r\n let cellData = params.value;\r\n if (!cellData && params.data && params.colDef?.field) {\r\n const cellParamsKey = `${params.colDef.field}_cellParams`;\r\n cellData = params.data[cellParamsKey];\r\n }\r\n \r\n this.params = {\r\n ...params,\r\n ...(cellData ?? {})\r\n };\r\n \r\n if (this.params.chipConfig && Array.isArray(this.params.chipConfig)) {\r\n this.displayedChips = this.params.chipConfig.slice(0, this.MAX_VISIBLE_CHIPS);\r\n this.remainingChipsCount = Math.max(0, this.params.chipConfig.length - this.MAX_VISIBLE_CHIPS);\r\n }\r\n else {\r\n this.displayedChips = this.params.chipConfig;\r\n this.remainingChipsCount = 0;\r\n }\r\n }\r\n\r\n refresh(params: CellParams): boolean {\r\n this.agInit(params);\r\n return true;\r\n }\r\n\r\n typeOf(value: unknown): string {\r\n return typeof value;\r\n }\r\n \r\n buttonClicked(event: any) {\r\n if (this.params.buttonConfig?.onClick) {\r\n this.params.buttonConfig.onClick(event);\r\n }\r\n this.params.buttonClicked && this.params.buttonClicked({ \r\n ...event,\r\n rowId: this.rowNum\r\n });\r\n this.onClickButtonEvent.emit({ ...event, rowId: this.rowNum }); \r\n }\r\n\r\n toggleDropdown(element: HTMLElement) {\r\n if (this.overlayRef) {\r\n this.overlayRef.dispose();\r\n this.overlayRef = null as any;\r\n }\r\n\r\n const positionStrategy = this.overlay.position()\r\n .flexibleConnectedTo(element)\r\n .withPush(true) \r\n .withFlexibleDimensions(true) \r\n .withViewportMargin(8) \r\n .withPositions([\r\n {\r\n originX: 'end',\r\n originY: 'bottom',\r\n overlayX: 'end',\r\n overlayY: 'top',\r\n offsetY: 4,\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: 4,\r\n }\r\n ]);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n panelClass: 'actions-dropdown-panel',\r\n scrollStrategy: this.overlay.scrollStrategies.reposition() \r\n });\r\n\r\n const portal = new TemplatePortal(this.dropdownTemplate, this.viewContainerRef);\r\n this.overlayRef.attach(portal);\r\n\r\n this.overlayRef.backdropClick().subscribe(() => {\r\n if (this.overlayRef) {\r\n this.overlayRef.dispose();\r\n this.overlayRef = null as any;\r\n }\r\n });\r\n }\r\n\r\n handleActionClick(action: any, event: Event) {\r\n event.stopPropagation();\r\n this.showDropdown = false;\r\n if (action.onClick) {\r\n action.onClick();\r\n }\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: Event) {\r\n if (this.actionsContainer && !this.actionsContainer.nativeElement.contains(event.target)) {\r\n this.showDropdown = false;\r\n }\r\n }\r\n\r\n chipClicked(evt: Event) {\r\n this.params.chipClicked && this.params.chipClicked({\r\n ...evt,\r\n rowId: this.rowNum\r\n });\r\n this.onClickChipEvent.emit({ ...evt, rowId: this.rowNum });\r\n }\r\n\r\n linkClicked() {\r\n if (this.params.cellType != \"interactive\") return;\r\n\r\n this.params.linkClicked && this.params.linkClicked({ \r\n rowId: this.rowNum\r\n });\r\n\r\n if (this.params.interactiveLink != \"\") {\r\n if (this.params.interactiveLinkTarget == \"blank\") {\r\n window.open(this.params.interactiveLink)!;\r\n }\r\n else if (this.params.interactiveLinkTarget == \"self\") {\r\n location.href = this.params.interactiveLink!;\r\n }\r\n }\r\n this.onClickLinkEvent.emit({ rowId: this.rowNum });\r\n }\r\n\r\n avatarClicked(evt: Event) {\r\n this.params.avatarClicked && this.params.avatarClicked({\r\n ...evt,\r\n rowId: this.rowNum\r\n });\r\n this.onClickAvatarEvent.emit({ ...evt, rowId: this.rowNum });\r\n }\r\n\r\n showTooltip(config: any, event?: MouseEvent) {\r\n this.hoveredChip = config; \r\n if (event && event.currentTarget) {\r\n const chipContainer = event.currentTarget as HTMLElement;\r\n const chipElement = chipContainer.querySelector('sa-chip') as HTMLElement;\r\n if (chipElement) {\r\n const rect = chipElement.getBoundingClientRect();\r\n const topPosition = rect.bottom + 8;\r\n const leftPosition = rect.left + rect.width / 2;\r\n this.createTooltipComponent(topPosition, leftPosition);\r\n }\r\n }\r\n }\r\n\r\n hideTooltip() {\r\n this.hoveredChip = null;\r\n this.destroyTooltipComponent();\r\n }\r\n\r\n createTooltipComponent(top: number, left: number) {\r\n this.destroyTooltipComponent();\r\n this.tooltipComponentRef = this.viewContainerRef.createComponent(ToolTipComponent); \r\n this.tooltipComponentRef.instance.messages = this.getTooltipText(); \r\n this.tooltipComponentRef.instance.simpleMode = true;\r\n this.tooltipComponentRef.instance.pointerPosition = 'top';\r\n \r\n const tooltipElement = this.tooltipComponentRef.location.nativeElement;\r\n tooltipElement.style.cssText = `\r\n position: fixed;\r\n top: ${top}px;\r\n left: ${left}px;\r\n z-index: 99999;\r\n transform: translateX(-50%);\r\n pointer-events: none;\r\n `;\r\n document.body.appendChild(tooltipElement);\r\n this.tooltipComponentRef.changeDetectorRef.detectChanges();\r\n }\r\n\r\n destroyTooltipComponent() {\r\n if (this.tooltipComponentRef) {\r\n const tooltipElement = this.tooltipComponentRef.location.nativeElement;\r\n if (tooltipElement.parentNode) {\r\n tooltipElement.parentNode.removeChild(tooltipElement);\r\n }\r\n this.tooltipComponentRef.destroy();\r\n this.tooltipComponentRef = null;\r\n }\r\n }\r\n\r\n getTooltipText(): string[] {\r\n if (!this.params?.chipConfig) return [];\r\n return this.params.chipConfig.map(chip => chip.text);\r\n }\r\n\r\n\r\n /**\r\n * Masks an email address for privacy\r\n * Shows first character, masks middle characters, shows last 2 characters before @\r\n * @param email - The email address to mask\r\n * @returns Masked email string (e.g., mark@outlook.com -> m••••••rk@outlook.com)\r\n * @example\r\n * maskEmail('mark@outlook.com') // Returns: 'm••••••rk@outlook.com'\r\n * maskEmail('ab@test.com') // Returns: 'a•@test.com'\r\n */\r\n maskEmail(email: string | number): string {\r\n if (!email) return '-';\r\n \r\n // Convert to string if it's a number\r\n const emailStr = String(email);\r\n \r\n if (!_isString(emailStr)) return '-';\r\n \r\n const atIndex = emailStr.indexOf('@');\r\n if (atIndex <= 0) return emailStr; // Invalid email format\r\n \r\n const [localPart, ...domainParts] = _split(emailStr, '@');\r\n const domain = '@' + _join(domainParts, '@');\r\n \r\n const localLength = _size(localPart);\r\n \r\n if (localLength <= 2) {\r\n // For very short local parts, just mask the middle\r\n return _first(localPart) + _repeat('•', localLength - 1) + domain;\r\n }\r\n \r\n // Show first character, mask middle, show last 2 characters before @\r\n const firstChar = _first(localPart);\r\n const lastTwoChars = _takeRight(localPart, 2).join('');\r\n const maskedLength = localLength - 3; // Total length minus first and last 2\r\n \r\n return firstChar + _repeat('•', maskedLength) + lastTwoChars + domain;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.hideTooltip();\r\n if (this.overlayRef) {\r\n this.overlayRef.dispose();\r\n }\r\n }\r\n}\r\n","<div class=\"grid-cell {{params.cellType}}\">\r\n\r\n <img class=\"icons\" src={{params.iconPath}} [style.display]=\"(params.viewLeadingIcon) ? 'block' : 'none'\" alt=\"\">\r\n\r\n <sa-avatar [id]=\"params.avatarConfig?.id\" [altText]=\"params.avatarConfig?.altText\"\r\n [imagePath]=\"params.avatarConfig?.imagePath\" [size]=\"params.avatarConfig?.size\"\r\n [style.display]=\"(params.viewAvatar) ? 'block' : 'none'\" (onClickEvent)=\"avatarClicked($event)\">\r\n </sa-avatar>\r\n\r\n <div class=\"grid-text\" [style.display]=\"(params.viewText) ? 'block' : 'none'\">\r\n <div [style.display]=\"(params.text) ? 'block' : 'none'\" (click)=\"linkClicked()\" class=\"main-text\">\r\n @if(params.cellType === 'masked') {\r\n {{maskEmail(params.text)}}\r\n } @else {\r\n {{params.text}}\r\n }\r\n </div>\r\n\r\n <div [style.display]=\"(params.subText) ? 'block' : 'none'\" class=\"sub-text\">{{params.subText}}</div>\r\n </div>\r\n\r\n <img class=\"icons\" src={{params.iconPath}} [style.display]=\"(params.viewTrailingIcon) ? 'block' : 'none'\" alt=\"\">\r\n @if(params?.tooltip){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"params?.tooltipIcon || 'infoCircleOutlined'\"\r\n customClass=\"info-icon\" [matTooltip]=\"params?.tooltip\"\r\n matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon\"></sa-icon>\r\n </span>\r\n }\r\n <div class=\"chips-container\" [style.display]=\"(params.viewChip) ? 'flex' : 'none'\">\r\n\r\n <div *ngFor=\"let config of displayedChips\">\r\n <sa-chip [id]=\"config.id\" [filling]=\"config.filling\" id=\"chip_{{rowNum}}_{{config.id}}\" [iconPath]=\"config.iconPath\"\r\n [iconPosition]=\"config.iconPosition\" [largeStateIcon]=\"config.largeStateIcon\" [state]=\"config.state\"\r\n [type]=\"config.type\" [text]=\"config.text\" [class.small]=\"config.type === 'small'\"\r\n [class.neutral]=\"config.state === 'neutral'\" (onClickEvent)=\"chipClicked($event)\"></sa-chip>\r\n </div>\r\n <div class=\"chip-tooltip-container\" *ngIf=\"remainingChipsCount > 0\" style=\"position: relative;\"\r\n (mouseenter)=\"showTooltip(remainingChipsCount, $event)\" (mouseleave)=\"hideTooltip()\">\r\n <sa-chip [id]=\"'chip_' + rowNum + '_more'\" [text]=\"'+' + remainingChipsCount\" [filling]=\"displayedChips[0]?.filling\"\r\n [type]=\"displayedChips[0]?.type\" [state]=\"displayedChips[0]?.state\" (onClickEvent)=\"chipClicked($event)\"></sa-chip>\r\n</div>\r\n\r\n <sa-button [iconPosition]=\"params.buttonConfig?.iconPosition\" [ImagePath]=\"params.buttonConfig?.imagePath\"\r\n [id]=\"params.buttonConfig?.id\" [size]=\"params.buttonConfig?.size\" [state]=\"params.buttonConfig?.state\"\r\n [type]=\"params.buttonConfig?.type\" [text]=\"params.buttonConfig?.text\" [href]=\"params.buttonConfig?.href\"\r\n [hrefTarget]=\"params.buttonConfig?.hrefTarget\" [style.display]=\"(params.viewButton) ? 'block' : 'none'\"\r\n (onClickEvent)=\"buttonClicked($event)\"></sa-button>\r\n\r\n</div>\r\n\r\n <div *ngIf=\"params.cellType === 'actions'\" class=\"actions-container\">\r\n @if(params?.downloadAction){\r\n <sa-icon [icon]=\"params?.downloadAction?.icon\" [size]=\"params?.downloadAction?.iconSize\" (click)=\"handleActionClick(params?.downloadAction, $event)\" />\r\n }\r\n <img [src]=\"params.buttonConfig?.imagePath\" alt=\"actions\" class=\"actions-icon\" (click)=\"toggleDropdown(actionsButton)\"\r\n #actionsButton />\r\n <ng-template #dropdownTemplate>\r\n <div class=\"actions-dropdown\">\r\n <div *ngFor=\"let action of params.actions\" class=\"action-item\" (click)=\"handleActionClick(action, $event)\">\r\n <img *ngIf=\"action.icon\" [src]=\"action.icon\" class=\"action-icon\" />\r\n <span class=\"action-label\">{{action.label}}</span>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AgGridModule } from 'ag-grid-angular';\r\nimport { GridCellComponent } from '../grid-cell/grid-cell.component';\r\nimport { ColDef, GridApi, GridReadyEvent } from 'ag-grid-community';\r\nimport { GridInterface } from '../../interfaces/grid-interface';\r\nimport { ButtonInterface } from '../../interfaces/button-interface';\r\n\r\n@Component({\r\n selector: 'sa-data-grid',\r\n standalone: true,\r\n imports: [CommonModule, AgGridModule, GridCellComponent],\r\n templateUrl: './data-grid.component.html',\r\n styleUrl: './data-grid.component.css'\r\n})\r\nexport class DataGridComponent {\r\n public static gridApiInstance: GridApi;\r\n @Input() columnDefs: ColDef[] = [];\r\n @Input() rowData: any[] = [];\r\n @Input() defaultColDef: ColDef = {\r\n sortable: true,\r\n filter: true,\r\n resizable: true\r\n };\r\n\r\n // Pagination inputs (optional)\r\n @Input() pagination: boolean = false;\r\n @Input() paginationPageSize: number = 10;\r\n @Input() paginationPageSizeSelector: number[] = [10, 25, 50, 100];\r\n @Input() gridHeight: number = 420;\r\n @Input() datasource: any;\r\n @Input() localeText: any = {};\r\n @Output() gridReady = new EventEmitter<GridReadyEvent<any>>();\r\n\r\n private gridApi!: GridApi;\r\n\r\n // Method to determine which row data to use\r\n getEffectiveRowData(): any[] | undefined {\r\n // If datasource is provided, rowData must be undefined\r\n return this.datasource ? undefined : this.rowData;\r\n }\r\n\r\n onGridReady(params: GridReadyEvent<any>) {\r\n this.gridApi = params.api;\r\n DataGridComponent.gridApiInstance = params.api;\r\n this.gridApi.sizeColumnsToFit();\r\n\r\n // Setup server-side row model if enabled\r\n if (this.datasource) {\r\n this.gridApi.setGridOption\r\n ? this.gridApi.setGridOption('datasource', this.datasource)\r\n : this.gridApi.setDatasource(this.datasource);\r\n } \r\n this.gridReady.emit(params);\r\n }\r\n\r\n static updateCellContent(\r\n gridApi: GridApi,\r\n rowIndex: number,\r\n field: string,\r\n newParams: Partial<GridInterface>\r\n ) {\r\n const rowNode = gridApi.getDisplayedRowAtIndex(rowIndex);\r\n \r\n if (!rowNode) {\r\n console.error(`Row at index ${rowIndex} not found.`);\r\n return;\r\n }\r\n \r\n const paramKey = `${field}_cellParams`;\r\n \r\n const existingParams: Partial<GridInterface> =\r\n rowNode.data[paramKey] || {};\r\n \r\n const updatedParams: Partial<GridInterface> = {\r\n ...existingParams,\r\n ...newParams,\r\n };\r\n \r\n rowNode.data[paramKey] = updatedParams;\r\n \r\n gridApi.applyTransaction({ update: [rowNode.data] });\r\n gridApi.refreshCells({ rowNodes: [rowNode], columns: [field], force: true });\r\n }\r\n\r\n // Helper method to create a cell with chips\r\n static createChipsCell(chips: any[], config: Partial<GridInterface> = {}): GridInterface {\r\n return {\r\n cellType: 'chips',\r\n viewChip: true,\r\n viewText: false,\r\n viewLeadingIcon: false,\r\n viewTrailingIcon: false,\r\n viewButton: false,\r\n viewAvatar: false,\r\n chipConfig: chips.map(chip => ({\r\n id: chip.id || '',\r\n text: chip.text || '',\r\n type: chip.type || 'default',\r\n state: chip.state || 'default',\r\n ...chip\r\n })),\r\n ...config\r\n };\r\n }\r\n\r\n // Helper method to create a text cell\r\n static createTextCell(text: string, config: Partial<GridInterface> = {}): GridInterface {\r\n return {\r\n cellType: 'text',\r\n viewText: true,\r\n viewChip: false,\r\n viewLeadingIcon: false,\r\n viewTrailingIcon: false,\r\n viewButton: false,\r\n viewAvatar: false,\r\n text,\r\n ...config\r\n };\r\n }\r\n\r\n // Helper method to create an avatar cell\r\n static createAvatarCell(config: {\r\n text: string;\r\n subText?: string;\r\n avatarConfig: {\r\n size: 'small' | 'medium' | 'large';\r\n imagePath: string;\r\n altText: string;\r\n };\r\n }): GridInterface {\r\n return {\r\n cellType: 'avatar',\r\n viewText: true,\r\n viewChip: false,\r\n viewLeadingIcon: false,\r\n viewTrailingIcon: false,\r\n viewButton: false,\r\n viewAvatar: true,\r\n text: config.text,\r\n subText: config.subText,\r\n avatarConfig: {\r\n id: config.text,\r\n size: config.avatarConfig.size,\r\n imagePath: config.avatarConfig.imagePath,\r\n altText: config.avatarConfig.altText\r\n }\r\n };\r\n }\r\n\r\n // Helper method to create an actions cell\r\n static createActionsCell(config: { actions: Array<{ label: string, onClick: () => void, icon: string, class?: string }>, downloadAction?: { label: string, onClick: () => void, icon: string, iconSize?: string } }): GridInterface {\r\n return {\r\n cellType: 'actions',\r\n viewText: false,\r\n viewChip: false,\r\n viewLeadingIcon: false,\r\n viewTrailingIcon: false,\r\n viewButton: true,\r\n viewAvatar: false,\r\n actions: config.actions,\r\n downloadAction: config.downloadAction,\r\n buttonConfig: {\r\n id: 'actions-button',\r\n text: '',\r\n type: 'transparent',\r\n state: 'default',\r\n size: 'small',\r\n imagePath: '/assets/frameIcon.svg',\r\n iconPosition: 'both',\r\n onClick: (event: any) => {\r\n if (config.actions) {\r\n console.log('Actions available:', config.actions);\r\n config.actions.forEach(action => {\r\n console.log(`Action ${action.label} available`);\r\n });\r\n }\r\n }\r\n }\r\n };\r\n }\r\n\r\n // Helper method to create a masked email cell\r\n static createMaskedEmailCell(email: string, config: Partial<GridInterface> = {}): GridInterface {\r\n return {\r\n cellType: 'masked',\r\n viewText: true,\r\n viewChip: false,\r\n viewLeadingIcon: false,\r\n viewTrailingIcon: false,\r\n viewButton: false,\r\n viewAvatar: false,\r\n text: email,\r\n ...config\r\n };\r\n }\r\n \r\n}\r\n","<ag-grid-angular\r\n class=\"ag-theme-alpine sa-grid-theme\"\r\n [columnDefs]=\"columnDefs\"\r\n [rowData]=\"getEffectiveRowData()\"\r\n [defaultColDef]=\"defaultColDef\"\r\n (gridReady)=\"onGridReady($event)\"\r\n [domLayout]=\"gridHeight ? 'normal' : 'autoHeight'\"\r\n [style.height.px]=\"gridHeight || null\"\r\n [pagination]=\"pagination\"\r\n [paginationPageSize]=\"paginationPageSize\"\r\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\"\r\n [localeText]=\"localeText\"\r\n [rowModelType]=\"datasource ? 'infinite' : 'clientSide'\"\r\n></ag-grid-angular>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { NgFor } from '@angular/common';\r\nimport { NgIf } from '@angular/common';\r\nimport { ReactiveFormsModule, FormsModule, FormControl, FormGroup } from '@angular/forms';\r\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { CalendarHeaderComponent } from '../calendar-header/calendar-header.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'sa-datepicker',\r\n standalone: true,\r\n providers: [],\r\n imports: [\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatDatepickerModule,\r\n NgFor,\r\n NgIf,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n CalendarHeaderComponent,\r\n CommonModule,\r\n MatNativeDateModule,\r\n MatIconModule,\r\n MatButtonModule\r\n ],\r\n templateUrl: './datepicker.component.html',\r\n styleUrl: './datepicker.component.css'\r\n})\r\nexport class DatepickerComponent extends FieldType<FieldTypeConfig> {\r\n @Input() range: FormGroup = new FormGroup({\r\n start: new FormControl<Date | null>(null),\r\n end: new FormControl<Date | null>(null)\r\n });\r\n @Input() dateType: 'range' | 'single' = 'range';\r\n @Input() minDate: Date | null = null;\r\n @Input() maxDate: Date | null = null;\r\n @Input() hintText: string = 'MM/DD/YYYY';\r\n @Output() dateChange = new EventEmitter<any>();\r\n private _singleDateControl = new FormControl<Date | null>(null);\r\n\r\n readonly CalendarHeaderComponent = CalendarHeaderComponent;\r\n\r\n get singleFormControl(): FormControl {\r\n return this.formControl ?? this._singleDateControl;\r\n }\r\n\r\n onDateChange(event: any) {\r\n if (this.dateType === 'single') {\r\n this.singleFormControl.setValue(event.value);\r\n this.dateChange.emit(event.value);\r\n }\r\n }\r\n}\r\n","@if (dateType === 'range') {\r\n <mat-form-field class=\"date-picker\">\r\n <mat-label>Choose a date</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker\" [formGroup]=\"range\">\r\n <input formControlName=\"start\" matStartDate placeholder=\"Start date\">\r\n <input formControlName=\"end\" matEndDate placeholder=\"End date\">\r\n </mat-date-range-input>\r\n <mat-hint>{{ hintText }}</mat-hint>\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker [calendarHeaderComponent]=\"CalendarHeaderComponent\" #picker>\r\n </mat-date-range-picker>\r\n </mat-form-field>\r\n} @else if(dateType === 'single') {\r\n <mat-form-field appearance=\"outline\" class=\"date-picker-field\">\r\n <mat-label>Select Date</mat-label>\r\n <input matInput [matDatepicker]=\"pickerSingle\" [formControl]=\"singleFormControl\"\r\n [min]=\"minDate\" [max]=\"maxDate\" (dateChange)=\"onDateChange($event)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"pickerSingle\"></mat-datepicker-toggle>\r\n <mat-datepicker #pickerSingle></mat-datepicker>\r\n <mat-hint>{{ hintText }}</mat-hint>\r\n </mat-form-field>\r\n}\r\n","import { AbstractControl, AsyncValidatorFn, ValidationErrors, ValidatorFn } from '@angular/forms';\r\nimport { catchError, debounceTime, delay, distinctUntilChanged, map, Observable, of, Subject, switchMap } from 'rxjs';\r\nimport { get as _get, find as _find, has as _has, keys as _keys, startCase as _startCase } from 'lodash';\r\nimport { FormlyFieldConfig } from '@ngx-formly/core';\r\n\r\nexport function phoneNumberValidator(dependent?: string): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const dependentFormControl = dependent ? control.parent?.get(dependent) : null;\r\n if (dependentFormControl && !!dependentFormControl.value?.length) {\r\n console.log('validator', dependentFormControl.value);\r\n\r\n if (dependentFormControl.value[0].id === 0) {\r\n if (!/^\\+1[2-9]\\d{2}[2-9]\\d{6}$/.test(control.value)) {\r\n return { invalid: 'invalid phone number' };\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n\r\nexport function customNameValidator(fieldName?: string): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const name = control.value;\r\n const fieldLabel = fieldName || 'Name';\r\n \r\n if (!name || name.trim() === '') {\r\n return { invalid: `${fieldLabel} is required.` };\r\n }\r\n \r\n // Check if name starts with a number\r\n if (/^\\d/.test(name.trim())) {\r\n return { invalid: `${fieldLabel} cannot start with a number.` };\r\n }\r\n \r\n // Check if name contains only alphabetic characters (no spaces allowed)\r\n if (!/^[a-zA-Z]+$/.test(name.trim())) {\r\n return { invalid: `${fieldLabel} can only contain letters.` };\r\n }\r\n \r\n // Check minimum length (at least 2 characters)\r\n if (name.trim().length < 2) {\r\n return { invalid: `${fieldLabel} must be at least 2 characters long.` };\r\n }\r\n \r\n // Check maximum length (50 characters)\r\n if (name.trim().length > 50) {\r\n return { invalid: `${fieldLabel} cannot exceed 50 characters.` };\r\n }\r\n \r\n \r\n return null; // Valid name\r\n };\r\n}\r\n\r\nexport const customEmailValidator = (\r\n control: AbstractControl\r\n): { [key: string]: string } | null => {\r\n const email = control.value;\r\n // Replace the regular expression with the pattern you want to use.\r\n\r\n const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$/;\r\n\r\n if (emailPattern.test(email) && isWorkEmail(email)) {\r\n return null; // Valid email\r\n } else {\r\n if (!emailPattern.test(email)) {\r\n return {\r\n invalid:\r\n 'Please enter a valid email address.',\r\n }; // Invalid email\r\n }\r\n return {\r\n invalid:\r\n 'Please use a work email; personal emails (e.g., @gmail, @yahoo) are not accepted.',\r\n }; // Invalid email\r\n }\r\n};\r\nconst isWorkEmail = (email: string): boolean => {\r\n const invalidEmailHosts: string[] = ['gmail', 'yahoo', 'hotmail'];\r\n if (email) {\r\n let [userName, domainName] = email.split('@');\r\n for (let i = 0; i < invalidEmailHosts.length; i++) {\r\n let re = new RegExp(`.*${invalidEmailHosts[i]}\\..*`);\r\n if (re.test(domainName)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n return false;\r\n}\r\n/*\r\nexport function workEmailValidation(): AsyncValidatorFn {\r\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\r\n if (!control.value) {\r\n return of(null); // No value to validate\r\n }\r\n\r\n !control.pending && control.markAsPending();\r\n // !control.touched && control.markAsTouched();\r\n // return of({ invalid: 'Enter your work email' });\r\n return of(null);\r\n return new Observable((ob) => {\r\n setTimeout(() => {\r\n if (control.value === 'sairaj@gmail.com')\r\n return ob.next(null)\r\n return ob.next({ invalid: 'This is not a workemail' });\r\n }, 500)\r\n });\r\n\r\n return of(control.value).pipe(\r\n delay(500), // Simulate network delay\r\n\r\n map(value => {\r\n return of({ invalid: 'This is not a workemail' })//existingUsernames.includes(username) ? { usernameTaken: true } : null;\r\n })\r\n // catchError(() => of(null)) // Handle any errors\r\n );\r\n };\r\n}*/\r\nexport function getValidationMessage(errors: any, placeholder: string = 'Input', additionalProperties?: any): string {\r\n const messages = _get(additionalProperties, 'nativeValidationObject.messages', {});\r\n const field = _get(additionalProperties, 'field', {});\r\n \r\n if (errors) {\r\n // Check if any key in errors matches with messages using lodash\r\n const matchingKey = _find(_keys(errors), key => _has(messages, key));\r\n if (matchingKey && messages[matchingKey]) {\r\n // If message is a function, execute it with errors and nativeValidationObject\r\n if (typeof messages[matchingKey] === 'function') {\r\n return messages[matchingKey](errors[matchingKey], field);\r\n }\r\n return messages[matchingKey];\r\n }\r\n \r\n // Fall back to default messages\r\n if (errors['minlength']) {\r\n return `Minimum ${errors['minlength']['requiredLength']} characters required`;\r\n } else if (errors['maxlength']) {\r\n return `Maximum of ${errors['maxlength']['requiredLength']} characters accepted`;\r\n } else if (errors['required']) {\r\n return `${placeholder} cannot be empty`;\r\n } else if (errors['invalid']) {\r\n return errors['invalid'];\r\n } else if (errors['email']) {\r\n return 'Enter a valid email';\r\n } else if (errors['pattern']) {\r\n // Context-aware pattern validation messages\r\n const fieldType = _get(additionalProperties, 'field.props.params.type', '');\r\n const fieldLabel = _get(additionalProperties, 'field.props.label', placeholder);\r\n const fieldPlaceholder = _get(additionalProperties, 'field.props.placeholder', placeholder);\r\n \r\n if (fieldLabel.toLowerCase().includes('name') || fieldLabel.toLowerCase().includes('first') || fieldLabel.toLowerCase().includes('last')) {\r\n return 'Names can only contain letters and spaces';\r\n } else if (fieldType === 'tel' || placeholder.toLowerCase().includes('phone')) {\r\n return 'Enter a valid phone number';\r\n } else if (fieldType === 'email') {\r\n return 'Enter a valid email address';\r\n } else {\r\n if (fieldLabel)\r\n return `Please enter a valid ${fieldLabel.toLowerCase()}`;\r\n else if (fieldPlaceholder)\r\n return `Please enter a valid ${fieldPlaceholder.toLowerCase()}`;\r\n }\r\n } else {\r\n return `Invalid ${placeholder}`;\r\n }\r\n }\r\n return `Invalid ${placeholder}`;\r\n}\r\n\r\nexport function numberRangeValidator(range: { min: number; max: number }, type = null): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n let value = control.value;\r\n\r\n if (type === 'percentage' && typeof value === 'string') {\r\n value = value.replace('%', '');\r\n }\r\n\r\n // Convert to a number if it's not null or undefined\r\n const numericValue = value !== null && value !== undefined ? parseFloat(value) : NaN;\r\n\r\n // Check if the value is a valid number and within the range\r\n if (isNaN(numericValue) || numericValue < range.min || numericValue > range.max) {\r\n return {\r\n invalid: `Please enter a valid number between ${range.min} and ${range.max}`\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n\r\nexport const requiredValidatorMessage = (error: any, field: FormlyFieldConfig) => {\r\n return `${_startCase(_get(field, 'props.label'))} is required.`;\r\n}","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n FormControl,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n getValidationMessage,\r\n phoneNumberValidator,\r\n} from '../../utils/validators';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { get as _get, set as _set, map } from 'lodash';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n@Component({\r\n selector: 'sa-input',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n IconComponent,\r\n MatTooltipModule,\r\n ChipsComponent\r\n ],\r\n templateUrl: './form-input.component.html',\r\n styleUrl: './form-input.component.css',\r\n})\r\nexport class FormInputComponent extends FieldType<FieldTypeConfig> {\r\n @ViewChild('formInput') formInput!: ElementRef;\r\n\r\n @Input('icon') icon: IInputIcon;\r\n\r\n pretext: string;\r\n\r\n inputState = 'idle';\r\n inputVal = '';\r\n @Input() params: IInputParam | null;\r\n dependent: AbstractControl<any, any> | null;\r\n dependentVal: any = null;\r\n // dynamicIcon: DynamicIcon | null;\r\n // icon: IInputIcon | null;\r\n\r\n type: string = '';\r\n validators: any[];\r\n asyncValidators: any[];\r\n\r\n inputErrorText: string = 'invalid input';\r\n\r\n showEmailIcon: boolean = false;\r\n disabled: boolean = false;\r\n chipValues: any[] = [];\r\n isMultiValue: boolean = false;\r\n currentInputValue: string = '';\r\n startInd: number = 0;\r\n labelLimit: number = 1;\r\n\r\n private suppressOnBlur = false;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit() {\r\n this.inputVal = _get(this.field.props, 'value', _get(this.model, [this.key as string])) || '';\r\n this.disabled = this.field.props.disabled || false;\r\n this.formControl?.setValue(this.inputVal);\r\n\r\n this.params = this.params || this.field.props['params'];\r\n this.icon = this.icon || this.field.props['icon'] || {};\r\n this.type = this.params?.type || '';\r\n this.formControl.valueChanges.subscribe((val) => {\r\n _set(this.formInput, 'nativeElement.value', val);\r\n // Handle multi-value chip updates\r\n if (this.isMultiValue && Array.isArray(val)) {\r\n this.chipValues = val;\r\n }\r\n });\r\n\r\n // Initialize multi-value mode if specified\r\n if (this.params?.type === 'multi-value' || this.params?.multiValue) {\r\n this.isMultiValue = true;\r\n this.chipValues = this.model[this.key as string] || this.params?.chipValues || [];\r\n this.currentInputValue = '';\r\n }\r\n\r\n // this.dynamicIcon = this.field.props['dynamicIcon'];\r\n this.setValidators();\r\n this.setDependents();\r\n\r\n this.formControl.statusChanges.subscribe((state) => {\r\n if (this.type === 'email') {\r\n if (!!this.inputVal && !this.formControl.touched) {\r\n this.formControl.markAsTouched();\r\n }\r\n this.showEmailIcon =\r\n state === 'VALID' ||\r\n (state === 'INVALID' &&\r\n this.formControl.hasError('invalid') &&\r\n !!this.formControl.value);\r\n }\r\n });\r\n this.formControl.valueChanges.subscribe((val) => {\r\n _set(this.formInput, 'nativeElement.value', val);\r\n });\r\n }\r\n\r\n setValidators() {\r\n this.validators = this.params?.validators || this.predefinedValidators[this.type] || [];\r\n this.asyncValidators = this.params?.asyncValidators || [];\r\n if(!_get(this.field, 'validators.validation', null)) {\r\n this.formControl?.setValidators([\r\n ...(this.type ? this.predefinedValidators[this.type] || [] : []),\r\n ...(this.validators),\r\n ]);\r\n }\r\n if (this.asyncValidators) {\r\n this.formControl?.setAsyncValidators(this.asyncValidators);\r\n }\r\n }\r\n\r\n /*\r\n Assuming dependent field is a single select dropdown\r\n */\r\n setDependents() {\r\n if (this.params?.dependent) {\r\n this.dependent = this.form.get([this.params?.dependent]);\r\n\r\n this.dependentVal = this.getDependentVal(_get(this.dependent, 'value'));\r\n if (this.type === 'tel') {\r\n this.pretext = this.dependentVal?.dial_code;\r\n }\r\n\r\n this.dependent?.valueChanges.subscribe((val) => {\r\n this.dependentVal = this.getDependentVal(val);\r\n this.formControl.reset();\r\n this.formControl.setValue(this.inputVal);\r\n if (this.type === 'tel') {\r\n this.pretext = this.dependentVal?.dial_code;\r\n }\r\n });\r\n }\r\n }\r\n getDependentVal(value: any) {\r\n let dependentValue: any;\r\n if (Array.isArray(value)) {\r\n dependentValue = value.length ? value[0] : null;\r\n } else {\r\n dependentValue = value;\r\n }\r\n return dependentValue;\r\n }\r\n\r\n checkValidity(defaultInputState = 'focus') {\r\n if (\r\n this.formControl &&\r\n !this.formControl.valid &&\r\n this.formControl.touched &&\r\n !this.formControl.pending\r\n ) {\r\n this.inputState = 'invalid';\r\n this.inputErrorText =\r\n getValidationMessage(this.formControl.errors, this.params?.placeholder || this.field.props?.label || 'Input', {\r\n field: this.field,\r\n nativeValidationObject: this.field.validation,\r\n }) || `invalid ${this.params?.placeholder || this.field.props?.label || 'input'}`\r\n } else {\r\n this.inputState = defaultInputState;\r\n }\r\n }\r\n\r\n onFocus() {\r\n if (this.formControl.valid) this.inputState = 'focus';\r\n }\r\n onBlur() {\r\n setTimeout(() => {\r\n if (!this.suppressOnBlur) {\r\n this.formControl.markAsTouched();\r\n this.checkValidity('idle');\r\n }\r\n this.suppressOnBlur = false;\r\n }, 200);\r\n }\r\n\r\n onInput(event: any) {\r\n if (this.params?.type === 'tel') {\r\n this.inputVal = this.inputVal.replace(/[^0-9()+\\- ]/g, '');\r\n this.inputVal = this.hyphenatePhoneNumber();\r\n }\r\n if (this.params?.type === 'percentage') {\r\n let value = this.inputVal.replace(/[^0-9.]/g, '');\r\n this.inputVal = value ? `${value}%` : '';\r\n }\r\n this.formControl?.setValue(this.inputVal);\r\n this.checkValidity();\r\n /*if (this.params?.eventListener) {\r\n this.params?.eventListener({\r\n type: IInputEventType.INPUT_CHANGE,\r\n value: this.inputVal,\r\n formControl: this.formControl\r\n } as IInputEvent).then(this.onFieldCallback.bind(this));\r\n }*/\r\n }\r\n\r\n hyphenatePhoneNumber() {\r\n let newStr = '';\r\n let i = 0;\r\n let hyphenatedCount = 1;\r\n const value = this.inputVal.replaceAll('-', '');\r\n for (; i < value.length; i++) {\r\n newStr = newStr + value.charAt(i);\r\n if (!(hyphenatedCount % 3)) {\r\n if (!((i + 1) % 10) && i + 1 < value.length) {\r\n newStr = newStr + '-';\r\n hyphenatedCount++;\r\n }\r\n } else if (\r\n !((i + 1 - Math.floor(hyphenatedCount / 3)) % 3) &&\r\n i + 1 < value.length\r\n ) {\r\n newStr = newStr + '-';\r\n hyphenatedCount++;\r\n }\r\n }\r\n\r\n return newStr;\r\n }\r\n\r\n onInputFieldClick(event: any = 'input') {\r\n if (\r\n event === 'input' ||\r\n event.target.classList.contains('sa-input-field')\r\n ) {\r\n this.formInput.nativeElement.focus();\r\n if (this.params?.type !== 'email')\r\n setTimeout(() => {\r\n this.formInput?.nativeElement?.setSelectionRange(\r\n this.inputVal.length,\r\n this.inputVal.length,\r\n );\r\n }, 10);\r\n }\r\n }\r\n\r\n inputIconClick() {\r\n if (this.params?.type === 'password') {\r\n this.suppressOnBlur = true;\r\n if (this.type === 'password') {\r\n this.type = 'text';\r\n this.icon.name = 'eyeOff';\r\n } else {\r\n this.type = 'password';\r\n this.icon.name = 'eyeOutlined';\r\n }\r\n this.onInputFieldClick();\r\n }\r\n }\r\n\r\n addChip(value: string) {\r\n if (!this.isMultiValue || !value.trim()) return; \r\n const chipValue = {\r\n label: value.trim(),\r\n value: value.trim(),\r\n removable: true\r\n };\r\n this.chipValues.push(chipValue); \r\n const actualValues = map(this.chipValues, (chip: any) => chip.value || chip.label || chip);\r\n this.formControl?.setValue(actualValues);\r\n this.currentInputValue = '';\r\n this.model[this.key as string] = actualValues;\r\n }\r\n \r\n removeChip(index: number) {\r\n if (!this.isMultiValue) return; \r\n this.chipValues.splice(index, 1); \r\n const actualValues = map(this.chipValues, (chip: any) => chip.value || chip.label || chip);\r\n this.model[this.key as string] = actualValues;\r\n }\r\n\r\n onChipKeyDown(event: KeyboardEvent) {\r\n if (!this.isMultiValue) return;\r\n if (event.key === 'Enter' || event.key === ',') {\r\n event.preventDefault();\r\n this.addChip(this.currentInputValue);\r\n } else if (event.key === 'Backspace' && !this.currentInputValue && this.chipValues.length > 0) {\r\n this.removeChip(this.chipValues.length - 1);\r\n }\r\n }\r\n \r\n onChipInputChange(event: any) {\r\n if (!this.isMultiValue) return;\r\n this.currentInputValue = event.target.value;\r\n }\r\n\r\n onChipBlur() {\r\n if (!this.isMultiValue) return;\r\n if (this.currentInputValue.trim()) {\r\n this.addChip(this.currentInputValue);\r\n }\r\n }\r\n /*onFieldCallback(param: IInputParam) {\r\n this.icon = param.icon || this.icon;\r\n this.checkValidity();\r\n }*/\r\n\r\n getFormSupportText() {\r\n if (this.formControl.invalid && this.formControl.touched) {\r\n return (\r\n getValidationMessage(this.formControl.errors, this.params?.placeholder || this.field.props?.label || 'Input',{\r\n field: this.field,\r\n nativeValidationObject: _get(this.field, 'validation'),\r\n }) ||\r\n `invalid ${this.params?.placeholder || this.field.props?.label || 'input'}`\r\n );\r\n } else {\r\n return this.params?.supportText || '';\r\n }\r\n }\r\n\r\n predefinedValidators: any = {\r\n email: [Validators.email, Validators.required],\r\n password: [Validators.required],\r\n tel: [Validators.pattern('^[0-9 +\\\\-()]*$')],\r\n };\r\n\r\n getLabelFieldGap(): string {\r\n if (this.props?.['bigLabel']) {\r\n return 'var(--medium-20px)';\r\n } else if (this.props?.['label']) {\r\n return 'var(--small-4px)';\r\n } else {\r\n return '0px'; // No gap\r\n }\r\n }\r\n\r\n shiftLabel(action: 'clicked' | 'cleared') {\r\n if (action === 'clicked') {\r\n this.startInd = 0;\r\n } else {\r\n this.startInd = Math.max(0, this.chipValues.length - this.labelLimit);\r\n }\r\n }\r\n}\r\n\r\nexport interface IInputIcon {\r\n name: string;\r\n show?: boolean;\r\n color?: string;\r\n size?: string;\r\n}\r\n\r\nexport interface IInputParam {\r\n validators?: any[];\r\n asyncValidators?: any[];\r\n supportText?: string;\r\n placeholder?: string;\r\n type?: string;\r\n dependent?: string;\r\n eventListener?: Function;\r\n icon?: IInputIcon;\r\n errors?: { [key: string]: any };\r\n className?: string;\r\n multiValue?: boolean; // for multi-value chip support\r\n chipValues?: any[]; // for multi-value chip support\r\n}\r\n\r\nexport interface IInputEvent {\r\n type: IInputEventType;\r\n value: string;\r\n callBack: any;\r\n formControl: FormControl;\r\n}\r\nexport enum IInputEventType {\r\n INPUT_CHANGE = 'INPUT_CHANGE',\r\n STATE_CHANGE = 'STATE_CHANGE',\r\n ICON_CLICK = 'ICON_CLICK',\r\n}\r\n","<div class=\"sa-input-container {{props?.['inputContainerClass']}}\" [ngStyle]=\"{'gap': getLabelFieldGap()}\">\r\n @if (!!props?.['bigLabel'] || !!props?.['bigDescription']) {\r\n <div class=\"sa-input-big-label-container\" [ngClass]=\"disabled ? 'disabled' : '' \">\r\n <h2 class=\"sa-input-big-label\">\r\n {{props?.['bigLabel']}}\r\n </h2>\r\n <p class=\"sa-input-big-description\">\r\n {{props?.['bigDescription']}}\r\n </p>\r\n </div>\r\n }\r\n @if(!!props?.['label']){\r\n <div class=\"sa-input-label-container\" [ngClass]=\"disabled ? 'disabled' : '' \">\r\n <div class=\"sa-input-label-tooltip-container\">\r\n <span class=\"sa-input-label\">\r\n {{props?.['label']}}\r\n </span>\r\n @if(!!props?.['tooltip']){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\r\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\r\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\r\n </span>\r\n }\r\n </div>\r\n @if(!!props?.['description']) {\r\n <p class=\"sa-input-description\">\r\n {{props?.['description']}}\r\n </p>\r\n }\r\n </div>\r\n }\r\n <div class=\"sa-input\" [ngClass]=\"disabled ? 'disabled' : '' \">\r\n @if((pretext || (!!inputVal?.length && (!!params?.placeholder || !!props?.placeholder))) && props?.['showTag']\r\n !== false){\r\n <span class=\"sa-input-tag\">{{params?.placeholder || props?.placeholder}}</span>\r\n }\r\n <div class=\"sa-input-field\" [ngClass]=\"formControl.invalid && formControl.touched ? 'invalid' : 'idle' \"\r\n (click)=\"onInputFieldClick($event)\">\r\n @if(pretext){\r\n <div class=\"sa-input-pretext\">\r\n {{pretext}}\r\n </div>\r\n }\r\n\r\n <!-- Multi-value chip display -->\r\n @if(isMultiValue) {\r\n <div class=\"chip-container\">\r\n <sa-chip \r\n *ngFor=\"let chip of (chipValues || [])?.slice(startInd,startInd+labelLimit) let i = index\"\r\n [text]=\"chip?.value || chip?.label || chip\"\r\n [type]=\"'regular'\"\r\n [state]=\"'primary'\"\r\n [filling]=\"'filled'\"\r\n [iconPosition]=\"'right'\"\r\n [iconPath]=\"'../assets/closeBlueOutlined.svg'\"\r\n (onClickEvent)=\"removeChip(i)\">\r\n </sa-chip>\r\n \r\n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\r\n *ngIf=\"(chipValues || []).length > (startInd + labelLimit)\">\r\n <sa-chip [text]=\"'+' + ((chipValues || []).length - (startInd + labelLimit))\" \r\n type=\"regular\" \r\n state=\"primary\" \r\n filling=\"filled\">\r\n </sa-chip>\r\n </div>\r\n <input\r\n [ngClass]=\"'chip-input'\"\r\n matInput [type]=\"type\"\r\n [disabled]=\"field.props.disabled || false\"\r\n [placeholder]=\"chipValues.length === 0 ? (props?.placeholder || params?.placeholder || '') : ''\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onChipBlur()\"\r\n (input)=\"onChipInputChange($event)\"\r\n (keydown)=\"onChipKeyDown($event)\"\r\n [(ngModel)]=\"currentInputValue\"\r\n #formInput />\r\n </div>\r\n } @else {\r\n <!-- Standard single-value input (backward compatibility) -->\r\n @if(!!props?.['prefix']){\r\n <span matPrefix>{{props?.['prefix']}}&nbsp;</span>\r\n }\r\n <input\r\n [ngClass]=\"(!!inputVal && (params?.type === 'password' || props?.type === 'password') && icon.name !== 'eyeOff') ? 'masked' : ''\"\r\n matInput [type]=\"props?.type || type\" value=\"\" [pattern]=\"type==='tel' ? '[0-9]' : '' \"\r\n [disabled]=\"field.props.disabled || false\"\r\n [placeholder]=\"!pretext && props?.placeholder || params?.placeholder || ''\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" (input)=\"onInput($event)\" [(ngModel)]=\"inputVal\" #formInput />\r\n }\r\n\r\n @if(params?.type === 'password'){\r\n <sa-icon class=\"flex\" icon=\"eyeOutlined\" [size]=\"icon.size || '24'\" (click)=\"inputIconClick()\"\r\n [ngClass]=\"!icon.name || icon.name === 'eyeOutlined' ? '' : 'hide'\"></sa-icon>\r\n <sa-icon class=\"flex\" icon=\"eyeOff\" [size]=\"icon.size || '24'\" (click)=\"inputIconClick()\"\r\n [ngClass]=\"icon.name === 'eyeOff' ? '' : 'hide'\"></sa-icon>\r\n }@else if(params?.type === 'email' && icon.show){\r\n <sa-icon class=\"flex\" [icon]=\"icon.name || 'checkCircleOutlined'\" [size]=\"icon.size || '24'\"\r\n (click)=\"inputIconClick()\" [ngClass]=\"showEmailIcon ? '' : 'hide'\"></sa-icon>\r\n }\r\n @else if(icon?.name){\r\n <sa-icon class=\"flex\" [icon]=\"icon.name\" [size]=\"icon?.size || '24'\" [color]=\"icon?.color || ''\"\r\n [ngClass]=\"icon?.show ? '' : 'hide'\"></sa-icon>\r\n }\r\n </div>\r\n @if((!formControl.valid) || (params?.supportText)){\r\n <div class=\"support-label {{formControl.invalid && formControl.touched ? params?.className : ''}}\" [ngClass]=\"[\r\n formControl.invalid && formControl.touched ? 'invalid' : 'idle'\r\n ]\">\r\n <!-- {{!formControl.valid ? inputErrorText : params.supportText}} -->\r\n {{getFormSupportText()}}\r\n </div>\r\n }\r\n </div>\r\n</div>","import { Component, EventEmitter, Output, ViewChild, ElementRef } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { NgSelectComponent, NgSelectModule } from '@ng-select/ng-select';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { NgIf, NgFor } from '@angular/common';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SelectInterface, SelectSubInterface } from '../../public-api';\r\n\r\n@Component({\r\n selector: 'lib-form-select',\r\n standalone: true,\r\n imports: [\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n ReactiveFormsModule,\r\n NgSelectModule,\r\n ChipsComponent,\r\n NgIf,\r\n NgFor,\r\n MatTooltipModule,\r\n IconComponent,\r\n CommonModule,\r\n MatTooltipModule\r\n ],\r\n templateUrl: './form-select.component.html',\r\n styleUrl: './form-select.component.css'\r\n})\r\nexport class FormSelectComponent extends FieldType<FieldTypeConfig> {\r\n selectables: any;\r\n params: any;\r\n\r\n // Helper method to get full object from bound value\r\n getFullObjectFromValue(value: any): any {\r\n const bindValue = this.params?.bindValue || this.field.props?.['bindValue'];\r\n if (!bindValue) return value;\r\n \r\n return this.selectables.find((item: any) => item[bindValue] === value) || value;\r\n }\r\n\r\n override get showError(): boolean {\r\n return this.formControl.invalid && (this.formControl.touched || this.formControl.dirty);\r\n }\r\n\r\n svgStyle = {};\r\n openState: boolean = false;\r\n topLabel: boolean;\r\n startInd: number = 0;\r\n labelLimit: number = 2;\r\n\r\n placeholderLabel: string;\r\n @Output('hoverEvent') hoverEvent: EventEmitter<selectHoverEvent> = new EventEmitter();\r\n @ViewChild(NgSelectComponent) ngSelect!: NgSelectComponent;\r\n\r\n constructor(private elementRef: ElementRef) {\r\n super();\r\n }\r\n \r\n ngOnInit() {\r\n this.selectables = this.field.props.options; \r\n this.params = this.field.props['params'] || {};\r\n \r\n // Fallback to field.props if params is empty\r\n if (!this.params || Object.keys(this.params).length === 0) {\r\n this.params = this.field.props;\r\n }\r\n \r\n \r\n this.placeholderLabel = this.params.label || this.field.props.placeholder;\r\n this.svgStyle = {\r\n '-webkit-mask-image': `url(${this.params.dropIcon})})`,\r\n 'mask-image': `url(${this.params.dropIcon})`,\r\n }\r\n \r\n // Set labelLimit from params if provided\r\n if (this.params?.labelLimit !== undefined) {\r\n this.labelLimit = this.params.labelLimit;\r\n }\r\n \r\n // Set CSS custom property for chip background based on state\r\n this.setChipBackgroundColor();\r\n }\r\n\r\n private setChipBackgroundColor(): void {\r\n const state = this.params?.state;\r\n let backgroundColor = 'var(--primary-50)'; // default fallback\r\n \r\n // Map chip states to appropriate background colors\r\n switch(state) {\r\n case 'neutral':\r\n backgroundColor = 'var(--grey-50)';\r\n break;\r\n case 'success':\r\n backgroundColor = 'var(--success-50)';\r\n break;\r\n case 'error':\r\n backgroundColor = 'var(--error-50)';\r\n break;\r\n case 'warning':\r\n backgroundColor = 'var(--warning-50)';\r\n break;\r\n case 'primary':\r\n default:\r\n backgroundColor = 'var(--primary-50)';\r\n break;\r\n }\r\n \r\n if (typeof document !== 'undefined' && this.elementRef?.nativeElement) {\r\n this.elementRef.nativeElement.style.setProperty('--ng-select-chip-bg', backgroundColor);\r\n }\r\n }\r\n openClose(state: boolean) {\r\n if (this.field.props.disabled) return;\r\n this.openState = state;\r\n if (state || this.formControl.value?.length > 0) {\r\n this.placeholderLabel = this.params.placeholder\r\n } else {\r\n this.placeholderLabel = this.params.label;\r\n }\r\n }\r\n shiftLabel(action: string) {\r\n if (action == 'clicked') this.startInd++;\r\n if (action == 'cleared') this.startInd = 0;\r\n if (action == 'removed' && this.startInd > 0) this.startInd--;\r\n this.topLabel = this.formControl.value?.length > 0; \r\n this.placeholderLabel = this.openState || this.formControl.value?.length > 0 \r\n ? this.params.placeholder \r\n : this.params.label;\r\n}\r\n\r\n toggleOption(item: any, event: Event): void {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n \r\n if (!this.params?.multiple) {\r\n // Single select mode\r\n this.formControl.setValue(item);\r\n this.openState = false; \r\n return;\r\n }\r\n\r\n // Multi-select mode\r\n const currentValue = this.formControl.value || [];\r\n const bindValue = this.params?.bindValue || this.field.props?.['bindValue'];\r\n const itemValue = bindValue ? item[bindValue] : item;\r\n \r\n const index = currentValue.findIndex((selected: any) => {\r\n const selectedValue = bindValue ? selected[bindValue] : selected;\r\n return selectedValue === itemValue;\r\n });\r\n\r\n let newValue;\r\n if (index > -1) {\r\n newValue = [...currentValue];\r\n newValue.splice(index, 1);\r\n } else {\r\n newValue = [...currentValue, item];\r\n }\r\n \r\n this.formControl.setValue(newValue);\r\n this.formControl.markAsDirty();\r\n this.formControl.markAsTouched();\r\n \r\n this.checkForZero(newValue);\r\n \r\n this.formControl.updateValueAndValidity();\r\n }\r\n\r\n\r\n onNgSelectChange(selected: any): void {\r\n // Only handle ng-select changes when NOT in checkbox mode\r\n if (!this.params?.showCheckboxes) {\r\n this.checkForZero(selected);\r\n } else {\r\n // In checkbox mode, prevent ng-select from changing the form control\r\n // Restore the current value to prevent ng-select interference\r\n const currentValue = this.formControl.value || [];\r\n this.openState = true;\r\n setTimeout(() => {\r\n this.formControl.setValue(currentValue, { emitEvent: false });\r\n this.openState = true;\r\n }, 0);\r\n }\r\n }\r\n\r\n selectAll(): void {\r\n if (!this.params?.multiple) return;\r\n \r\n // Check if we have bindValue configured\r\n const bindValue = this.params?.bindValue || this.field.props?.['bindValue'];\r\n \r\n let allValues;\r\n if (bindValue) {\r\n // If bindValue is configured, extract only the bound values\r\n allValues = this.selectables.map((item: any) => item[bindValue]);\r\n } else {\r\n // If no bindValue, store full objects\r\n allValues = [...this.selectables];\r\n }\r\n \r\n this.formControl.setValue(allValues);\r\n this.formControl.markAsDirty();\r\n this.formControl.markAsTouched();\r\n \r\n this.checkForZero(allValues);\r\n \r\n this.formControl.updateValueAndValidity();\r\n \r\n // Ensure Formly integration\r\n if (this.field && this.field.formControl) {\r\n this.field.formControl.setValue(allValues);\r\n this.field.formControl.updateValueAndValidity();\r\n }\r\n }\r\n\r\n unselectAll(): void {\r\n if (!this.params?.multiple) return;\r\n \r\n const emptyValue: any[] = [];\r\n \r\n this.formControl.setValue(emptyValue);\r\n this.formControl.markAsDirty();\r\n this.formControl.markAsTouched();\r\n \r\n this.checkForZero(emptyValue);\r\n \r\n this.formControl.updateValueAndValidity();\r\n \r\n if (this.field && this.field.formControl) {\r\n this.field.formControl.setValue(emptyValue);\r\n this.field.formControl.updateValueAndValidity();\r\n }\r\n }\r\n\r\n // Toggle behavior for the single \"Select all\" label in header\r\n toggleSelectAll(): void {\r\n if (!this.params?.multiple) return;\r\n if (this.isAllSelected()) {\r\n this.unselectAll();\r\n } else {\r\n this.selectAll();\r\n }\r\n }\r\n\r\n isAllSelected(): boolean {\r\n const currentValue = this.formControl.value || [];\r\n return Array.isArray(currentValue) && \r\n currentValue.length === this.selectables.length &&\r\n this.selectables.every((item: any) => this.isOptionSelected(item));\r\n }\r\n\r\n isSomeSelected(): boolean {\r\n const currentValue = this.formControl.value || [];\r\n return Array.isArray(currentValue) && \r\n currentValue.length > 0 && \r\n currentValue.length < this.selectables.length;\r\n }\r\n toggleItemSelection(item: any, event: Event): void {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n \r\n if (!this.params?.multiple) return;\r\n \r\n const currentValue = this.formControl.value || [];\r\n const bindValue = this.params?.bindValue || this.field.props?.['bindValue'];\r\n \r\n let itemIndex = -1;\r\n let itemValue = bindValue ? item[bindValue] : item;\r\n \r\n if (bindValue) {\r\n // When using bindValue, currentValue should contain only the bound values\r\n itemIndex = currentValue.findIndex((selected: any) => selected === itemValue);\r\n } else {\r\n // When not using bindValue, compare full objects\r\n itemIndex = currentValue.findIndex((selected: any) => {\r\n if (typeof selected === 'object' && typeof item === 'object') {\r\n return JSON.stringify(selected) === JSON.stringify(item);\r\n }\r\n return selected === item;\r\n });\r\n }\r\n \r\n let newValue;\r\n if (itemIndex > -1) {\r\n // Remove the item\r\n newValue = [...currentValue];\r\n newValue.splice(itemIndex, 1);\r\n } else {\r\n // Add the item\r\n if (bindValue) {\r\n // Add only the bound value\r\n newValue = [...currentValue, itemValue];\r\n } else {\r\n // Add the full object\r\n newValue = [...currentValue, item];\r\n }\r\n }\r\n \r\n this.formControl.setValue(newValue);\r\n this.formControl.markAsDirty();\r\n this.formControl.markAsTouched();\r\n \r\n this.checkForZero(newValue);\r\n \r\n this.formControl.updateValueAndValidity();\r\n \r\n if (this.field && this.field.formControl) {\r\n this.field.formControl.setValue(newValue);\r\n this.field.formControl.updateValueAndValidity();\r\n }\r\n \r\n // Force Angular change detection to update the UI\r\n setTimeout(() => {\r\n if (this.ngSelect && !this.ngSelect.isOpen) {\r\n this.ngSelect.open();\r\n }\r\n }, 0);\r\n }\r\n\r\n isOptionSelected(item: any): boolean {\r\n const currentValue = this.formControl.value || [];\r\n if (!Array.isArray(currentValue)) return false;\r\n \r\n const bindValue = this.params?.bindValue || this.field.props?.['bindValue'];\r\n \r\n if (bindValue) {\r\n // When using bindValue, currentValue contains only the bound values\r\n const itemValue = item[bindValue];\r\n return currentValue.includes(itemValue);\r\n } else {\r\n // When not using bindValue, compare full objects\r\n return currentValue.some((selected: any) => {\r\n if (typeof selected === 'object' && typeof item === 'object') {\r\n return JSON.stringify(selected) === JSON.stringify(item);\r\n }\r\n return selected === item;\r\n });\r\n }\r\n }\r\n\r\n checkForZero(selected: any, state?: boolean) {\r\n // Use the passed selected parameter if available, otherwise fall back to form control value\r\n const valueToCheck = selected !== undefined ? selected : this.formControl.value;\r\n \r\n this.topLabel = valueToCheck?.length == 0 ? false : true;\r\n // console.log(\"test\", this.formControl.value?.length)\r\n // console.log(\"test\", this.openState)\r\n // console.log(\"placeholder--- \", this.placeholderLabel)\r\n // console.log(\"params.label--- \", this.params.label)\r\n this.openState = state;\r\n if (state || valueToCheck?.length > 0) {\r\n this.placeholderLabel = this.params.placeholder;\r\n } else {\r\n this.placeholderLabel = this.params.label;\r\n }\r\n }\r\n mouseHover(item: SelectSubInterface, event: any = null, tooltip: MatTooltip) { // New method for mouseenter event\r\n this.hoverEvent.emit({\r\n event,\r\n item\r\n });\r\n if (tooltip) {\r\n tooltip.show();\r\n }\r\n }\r\n}\r\n\r\nexport interface selectHoverEvent {\r\n event: any,\r\n item: SelectSubInterface\r\n}","<div class=\"sa-select-container {{props?.['inputContainerClass']}}\">\r\n @if(!!props?.['label']){\r\n <div class=\"sa-select-label-container\">\r\n <div class=\"sa-select-label-tooltip-container\">\r\n <span class=\"sa-select-label\">\r\n {{props?.['label']}}\r\n </span>\r\n @if(!!props?.['tooltip']){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\r\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\r\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\r\n </span>\r\n }\r\n </div>\r\n @if(!!props?.['description']) {\r\n <p class=\"sa-select-description\">\r\n {{props?.['description']}}\r\n </p>\r\n }\r\n </div>\r\n }\r\n <div class=\"sa-select-field-container\">\r\n <div [style.visibility]=\"(props?.['showTag'] !== false && (openState || topLabel)) ? 'visible' : 'hidden'\"\r\n class=\"clicked-label\">{{params.label}}\r\n </div>\r\n <div\r\n class=\"ng-select-field {{openState ? 'activated' : 'idle'}} {{field.props.disabled ? 'disabled' : ''}} {{showError ? 'invalid' : ''}}\">\r\n <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"left-icon svg-icon\" [style]=\"svgStyle\"\r\n (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\"\r\n *ngIf=\"(params.dropIconPosition == 'left' || params.dropIconPosition == 'both')\">\r\n </div>\r\n <ng-select (change)=\"onNgSelectChange($event)\" (remove)=\"shiftLabel('removed')\" (clear)=\"shiftLabel('cleared')\"\r\n (search)=\"openClose(true)\" (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\" [isOpen]=\"openState\"\r\n [placeholder]=\"placeholderLabel\" [bindLabel]=\"props?.['bindLabel'] || 'name'\" [bindValue]=\"props?.['bindValue'] || null\" [items]=\"selectables\" [multiple]=\"params?.multiple\"\r\n [formControl]=\"formControl\" [style] [formlyAttributes]=\"field\" [searchable]=\"field.props['searchable']\" [clearable]=\"false\" [closeOnSelect]=\"!params?.showCheckboxes\" class=\"form-ng-select\"> \r\n <!-- Multi-label template for displaying selected items as chips -->\r\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\r\n <div *ngFor=\"let item of (items ? items.slice(startInd,startInd+labelLimit): [])\">\r\n <sa-chip (onClickEvent)=\" (!field.props.disabled) ? clear(item) : null\" \r\n [id]=\"getFullObjectFromValue(item)[params?.bindValue || props?.['bindValue'] || 'id']\"\r\n [iconPath]=\"params.iconPath\" \r\n [text]=\"getFullObjectFromValue(item)[params?.bindLabel || props?.['bindLabel'] || 'name']\" \r\n [type]=\"params.type\"\r\n [state]=\"field.props.disabled ? 'neutral' : params.state\" \r\n [filling]=\"params.filling\"\r\n [iconPosition]=\"params.iconPosition\">\r\n </sa-chip>\r\n </div>\r\n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\r\n *ngIf=\"items.length > (startInd+labelLimit)\">\r\n <sa-chip text=\"+{{items.length-(startInd+labelLimit)}}\" \r\n [type]=\"params.type || 'regular'\" \r\n [state]=\"params.state || 'primary'\" \r\n [filling]=\"params.filling || 'filled'\">\r\n </sa-chip>\r\n </div>\r\n <div (click)=\"shiftLabel('cleared')\" *ngIf=\"startInd > 0\"\r\n class=\"ng-value overflow-label\">\r\n <sa-chip text=\"...\" \r\n [type]=\"params.type || 'regular'\" \r\n [state]=\"params.state || 'default'\" \r\n [filling]=\"params.filling || 'filled'\">\r\n </sa-chip>\r\n </div>\r\n </ng-template>\r\n \r\n <!-- Universal option template with tooltip support for any select type -->\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\">\r\n <div class=\"option-container\" [ngClass]=\"{'checkbox-option': params?.showCheckboxes, 'single-option-with-tooltip': !params?.showCheckboxes}\">\r\n <!-- Checkbox for multi-select -->\r\n <input *ngIf=\"params?.showCheckboxes\" \r\n type=\"checkbox\" \r\n [checked]=\"isOptionSelected(item)\" \r\n (mousedown)=\"toggleItemSelection(item, $event)\"\r\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\r\n class=\"option-checkbox\">\r\n \r\n <!-- Option label -->\r\n <span class=\"option-label\">{{ item[props?.['bindLabel'] || 'name'] }}</span>\r\n \r\n <!-- Tooltip icon - shows when item has description/tooltip -->\r\n <sa-icon *ngIf=\"item.description || item.tooltip\" \r\n [icon]=\"'infoCircleOutlined'\" \r\n [size]=\"'16'\" \r\n class=\"option-tooltip-icon d-flex\"\r\n [matTooltip]=\"item.description || item.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\"\r\n [matTooltipDisabled]=\"!(item.description || item.tooltip)\">\r\n </sa-icon>\r\n </div>\r\n </ng-template>\r\n \r\n <!-- Simple header template for Select All / Unselect All when in checkbox mode -->\r\n <ng-template ng-header-tmp *ngIf=\"params?.showCheckboxes && params?.multiple\">\r\n <div class=\"select-all-header\">\r\n <span class=\"select-all-label\" (click)=\"toggleSelectAll()\">Select all</span>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ng-arrow-tmp>\r\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex custom-dropdown-arrow\" [size]=\"'18'\"></sa-icon>\r\n </ng-template>\r\n </ng-select>\r\n <div *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\" class=\"right-icon\">\r\n <sa-icon [icon]=\"'downChevronOutlined'\" tabindex=\"0\" class=\"d-flex\" [size]=\"'18'\" (click)=\"openClose(!this.openState)\"\r\n (blur)=\"openClose(false)\" ></sa-icon>\r\n </div>\r\n <!-- <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"right-icon svg-icon\" [style]=\"svgStyle\"\r\n (click)=\"openClose(true)\" (blur)=\"openClose(false)\"\r\n *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\">\r\n </div> -->\r\n\r\n <div class=\"fallback-arrow\" *ngIf=\"!openState\">\r\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex\" [size]=\"'18'\"></sa-icon>\r\n </div>\r\n </div>\r\n @if(showError){\r\n <div class=\"error-message-container\">\r\n <span class=\"error-message\">\r\n <formly-validation-message [field]=\"field\"></formly-validation-message>\r\n </span>\r\n </div>\r\n }\r\n <div class=\"support-label\">{{params.supportText}}</div>\r\n</div>","import { Component, Input, computed, signal, effect, EventEmitter, Output, SimpleChanges, OnChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconService } from '../icon/icon.service';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { IconName } from '../../interfaces/icon-interface';\r\nimport { ButtonIconPosition, ButtonSize, ButtonType, ButtonInterface, ButtonClickEvent } from '../../interfaces/button-interface';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MessageBannerComponent } from '../message-banner/message-banner.component';\r\nimport { FormInputComponent } from '../form-input/form-input.component';\r\nimport { FormSelectComponent } from '../form-select/form-select.component';\r\nimport { FormsModule, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyModule, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { FormLayoutConfig, FormFieldConfig, UnifiedFormConfig } from '../../interfaces/form-layout.interface';\r\nimport { TemplateRef } from '@angular/core';\r\n\r\ninterface MessageBannerState {\r\n type: 'default' | 'connection' | 'access' | 'accessRestricted';\r\n title: string;\r\n description: string;\r\n messageIcon: string;\r\n messageIconSize?: {\r\n width?: string;\r\n height?: string;\r\n };\r\n spacingBetweenImageAndDescription?: string;\r\n contentGap?: string; \r\n contactUrl?: string;\r\n titleClass?: string;\r\n descriptionClass?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'sa-message-banner-v2',\r\n standalone: true,\r\n imports: [CommonModule, IconComponent, ButtonComponent, HttpClientModule,MessageBannerComponent, FormInputComponent, FormSelectComponent, FormsModule, ReactiveFormsModule, FormlyModule, ChipsComponent],\r\n providers: [IconService],\r\n templateUrl: './message-banner-v2.component.html',\r\n styleUrls: ['./message-banner-v2.component.css']\r\n})\r\nexport class MessageBannerV2Component implements OnChanges {\r\n // State management using signals\r\n private state = signal<MessageBannerState>({\r\n type: 'default',\r\n title: '',\r\n description: '',\r\n messageIcon: '',\r\n messageIconSize: {\r\n height: '12.5rem'\r\n }\r\n });\r\n\r\n // Computed properties\r\n protected bannerContent = computed(() => {\r\n const currentState = this.state();\r\n return {\r\n ...currentState,\r\n description: this.sanitizeDescription(currentState.description)\r\n };\r\n });\r\n\r\n @Input() messageType: 'default' | 'connection' | 'access' | 'accessRestricted';\r\n @Input() contactUrl?: string;\r\n @Input() spacingBetweenImageAndDescription?: string;\r\n @Input() contentGap?: string;\r\n @Input() titleClass?: string;\r\n @Input() descriptionClass?: string;\r\n @Input() banner:any = {};\r\n @Input() formConfig: UnifiedFormConfig | null = null;\r\n @Input() prebuiltFormFields: TemplateRef<any> \r\n @Output() onContactUsClick = new EventEmitter<void>();\r\n form = new FormGroup({});\r\n model: any = {};\r\n fields: FormlyFieldConfig[] = [];\r\n formlyFields: FormlyFieldConfig[] = [];\r\n allFieldsFilled = signal(false);\r\n additionalFormlyFields: FormlyFieldConfig[] = [];\r\n allFormlyFields: FormlyFieldConfig[] = [];\r\n usePrebuiltFields = signal(false);\r\n // Computed properties for unified access\r\n get activeFormInputs(): any[] {\r\n return this.formConfig?.fields || [];\r\n }\r\n\r\n get activeChips(): any[] {\r\n return this.formConfig?.chips || [];\r\n }\r\n\r\n get activeCustomFormButton(): any {\r\n return this.formConfig?.customButton || [];\r\n }\r\n\r\n get activeDivider(): boolean {\r\n return this.formConfig?.divider?.enabled ?? false;\r\n } \r\n\r\n get activeDividerConfig(): any {\r\n return this.formConfig?.divider || {};\r\n }\r\n\r\n get activeFormLayout(): FormLayoutConfig {\r\n return this.formConfig?.layout || {};\r\n }\r\n\r\n @Output() onFormEvent = new EventEmitter<{type: string, data: any}>();\r\n \r\n onChipRemove(chip: any): void {\r\n this.onFormEvent.emit({ type: 'chip-remove', data: chip });\r\n }\r\n \r\n onAddUser(): void {\r\n let clickedButton = this.activeCustomFormButton;\r\n if (Array.isArray(this.activeCustomFormButton)) {\r\n clickedButton = this.activeCustomFormButton.find(btn => \r\n btn.text === 'Add User' || btn.id === 'add-user' || btn.action === 'add-user'\r\n );\r\n }\r\n this.onFormEvent.emit({ type: 'custom-button-click', data: clickedButton });\r\n // Only reset form if explicitly configured to do so\r\n if (clickedButton?.resetForm !== false) {\r\n this.resetForm();\r\n }\r\n }\r\n \r\n // Separate method for form reset that can be called externally\r\n resetForm(): void {\r\n this.model = {};\r\n this.form.reset();\r\n this.activeFormInputs?.forEach(input => {\r\n input.value = '';\r\n });\r\n this.updateFormlyFields();\r\n }\r\n \r\n areAllFieldsFilled(): boolean {\r\n if (!this.activeFormInputs || this.activeFormInputs.length < 4) return false;\r\n return this.activeFormInputs.every(field => field.value && field.value.trim() !== '');\r\n }\r\n \r\n\r\n @Input() set messageIcon(value: string) {\r\n this.state.update(s => ({ ...s, messageIcon: value }));\r\n }\r\n\r\n @Input() set messageIconSize(value: { width?: string; height?: string }) {\r\n this.state.update(s => ({ ...s, messageIconSize: value }));\r\n }\r\n\r\n @Input() set title(value: string) {\r\n this.state.update(s => ({ ...s, title: value }));\r\n }\r\n\r\n @Input() set description(value: string) {\r\n this.state.update(s => ({ ...s, description: value }));\r\n }\r\n\r\n @Input() buttons: ButtonInterface[] = [];\r\n @Output() buttonClick = new EventEmitter<ButtonClickEvent>();\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Check if this is the first initialization or if messageType has changed\r\n const shouldUpdateBasedOnType = changes['messageType'] && \r\n // Only update based on type if we don't have custom values set\r\n !(this.state().title || this.state().description || this.state().messageIcon);\r\n \r\n if (shouldUpdateBasedOnType) {\r\n this.updateContentBasedOnType(this.messageType || 'default');\r\n }\r\n \r\n // Check if prebuilt fields are provided\r\n if (changes['prebuiltFormFields']) {\r\n this.usePrebuiltFields.set(!!this.prebuiltFormFields);\r\n }\r\n \r\n if (changes['formConfig']) {\r\n if (!this.usePrebuiltFields()) {\r\n this.updateFormlyFields();\r\n this.initializeCleanFormState();\r\n }\r\n }\r\n }\r\n private initializeCleanFormState(): void {\r\n // this.model = {};\r\n setTimeout(() => {\r\n Object.keys(this.form.controls).forEach(key => {\r\n const control = this.form.get(key);\r\n if (control) {\r\n control.markAsUntouched();\r\n control.markAsPristine();\r\n control.setErrors(null);\r\n }\r\n });\r\n }, 0);\r\n }\r\n\r\n private updateContentBasedOnType(type: 'default' | 'connection' | 'access' | 'accessRestricted') { \r\n // Define a type for the content items to ensure all properties are properly typed\r\n type ContentItem = {\r\n title: string;\r\n description: string;\r\n messageIcon: string;\r\n spacingBetweenImageAndDescription?: string;\r\n contentGap?: string;\r\n titleClass?: string;\r\n descriptionClass?: string;\r\n };\r\n\r\n // Only apply default content if custom content hasn't been provided\r\n const currentState = this.state();\r\n const content: Record<'default' | 'connection' | 'access' | 'accessRestricted', ContentItem> = {\r\n default: {\r\n title: 'Oops! Something went wrong. Please try again or try after some time',\r\n description: 'If the issue persists, contact our support team at <span class=\"support-email\">support@sarasanalytics.com</span>',\r\n messageIcon: '/assets/error.gif'\r\n },\r\n connection: {\r\n title: 'We\\'re having trouble connecting. Please check your internet connection and try again',\r\n description: 'You can also reach out to our support team at <span class=\"support-email\">support@sarasanalytics.com</span> for assistance',\r\n messageIcon: '/assets/lost-connection.gif'\r\n },\r\n access: {\r\n title: 'This is taking a bit longer than usual. Please hold on!',\r\n description: 'If the delay continues, check your connection and try refreshing the page.',\r\n messageIcon: '/assets/long-loading.gif'\r\n },\r\n accessRestricted: {\r\n title: 'Access Restricted!',\r\n description: `Looks like you don't have access to this module just yet. No worries—reach out to your admin to request access to this feature. If you're facing any issues, feel free to <a class=\"custom-contact-link\" href=\"${this.contactUrl ?? 'https://support.default.com'}\" target=\"_blank\">Contact Us</a>.`,\r\n messageIcon: '/assets/access-restricted.gif',\r\n spacingBetweenImageAndDescription: '0px',\r\n contentGap:'20px',\r\n titleClass: 'access-restricted-title',\r\n descriptionClass: 'access-restricted-description',\r\n }\r\n };\r\n\r\n const contentItem = content[type];\r\n\r\n this.state.update(s => ({\r\n ...s,\r\n type,\r\n // Only apply default values if custom values haven't been provided\r\n title: s.title || contentItem.title,\r\n description: s.description || contentItem.description,\r\n messageIcon: s.messageIcon || contentItem.messageIcon,\r\n // For other properties, only apply them if they exist in the contentItem\r\n ...(contentItem.spacingBetweenImageAndDescription && { spacingBetweenImageAndDescription: contentItem.spacingBetweenImageAndDescription }),\r\n ...(contentItem.contentGap && { contentGap: contentItem.contentGap }),\r\n ...(contentItem.titleClass && { titleClass: contentItem.titleClass }),\r\n ...(contentItem.descriptionClass && { descriptionClass: contentItem.descriptionClass })\r\n }));\r\n }\r\n\r\n private sanitizeDescription(description: string): string {\r\n return description.replace(\r\n /support@sarasanalytics\\.com/g,\r\n '<span class=\"support-email\">support@sarasanalytics.com</span>'\r\n );\r\n }\r\n\r\n onButtonClick(button: any, event?: Event): void {\r\n // Check if this is a form button (from activeCustomFormButton) or regular banner button\r\n if (!event && (button.action === 'submit' || button.action === 'link' || button.id === 'add-user' || button.id === 'learn-more')) {\r\n // Handle form buttons with new logic\r\n if ( button.id === 'add-user') {\r\n // Handle form submission (existing Add User functionality)\r\n this.onAddUser();\r\n } else if (button.action === 'link' && button.link) {\r\n // Handle link navigation (Learn More functionality)\r\n window.open(button.link, '_blank');\r\n } else if (button.onClick) {\r\n // Handle custom click function\r\n button.onClick();\r\n }\r\n } else if (event) {\r\n // Handle regular banner buttons with original logic (backward compatibility)\r\n this.buttonClick.emit({\r\n type: button.type as 'primary' | 'secondary',\r\n button,\r\n originalEvent: event\r\n });\r\n }\r\n }\r\n\r\n isButtonArray(): boolean {\r\n return Array.isArray(this.activeCustomFormButton);\r\n }\r\n\r\n isEmptyObject(obj: any): boolean {\r\n if (obj) {\r\n return Object.keys(obj).length === 0;\r\n }else{\r\n return true;\r\n }\r\n }\r\n\r\n private updateFormlyFields(): void {\r\n // Skip Formly field generation if using prebuilt fields\r\n if (this.usePrebuiltFields()) {\r\n this.formlyFields = [];\r\n this.allFormlyFields = [];\r\n return;\r\n }\r\n\r\n if (!this.formConfig || !this.formConfig.fields || this.formConfig.fields.length === 0) {\r\n this.formlyFields = [];\r\n this.allFormlyFields = [];\r\n return;\r\n }\r\n\r\n // Get layout configuration\r\n const layout = this.activeFormLayout;\r\n const fieldsPerRow = layout.fieldsPerRow || 2;\r\n const initialVisibleFields = layout.initialVisibleFields || fieldsPerRow;\r\n \r\n // Update CSS grid columns dynamically\r\n this.updateGridColumns(fieldsPerRow);\r\n \r\n // Create all fields with proper hide expressions for conditional fields\r\n this.allFormlyFields = this.formConfig.fields.map((field, index) => {\r\n // Normalize field structure to proper Formly format\r\n const placeholderValue = field.placeholder || field.props?.placeholder || field.params?.placeholder || field.props?.params?.placeholder || '';\r\n \r\n const isConditionalField = index >= initialVisibleFields;\r\n \r\n const formlyField: FormlyFieldConfig = {\r\n key: field.key,\r\n type: field.type,\r\n className: this.getFieldClassName(index % fieldsPerRow, fieldsPerRow),\r\n hideExpression: isConditionalField ? () => !this.shouldShowAdditionalFields() : false,\r\n props: {\r\n // Handle mixed structure - some fields have props at root, others nested\r\n placeholder: placeholderValue,\r\n required: field.required || field.props?.required || false,\r\n disabled: field.disabled || field.props?.disabled || false,\r\n \r\n // For select fields, include select-specific properties\r\n ...(field.props?.options && {\r\n options: field.props.options,\r\n multiple: field.props.multiple || false,\r\n bindLabel: field.props.params?.bindLabel || 'label',\r\n bindValue: field.props.params?.bindValue || 'value',\r\n isClearable: field.props.params?.isClearable !== false,\r\n showCheckboxes: field.props.params?.showCheckboxes || false\r\n }),\r\n \r\n // Include params for component-specific configuration\r\n params: {\r\n ...(field.params || {}),\r\n ...(field.props?.params || {}),\r\n // Ensure label and placeholder are set\r\n label: field.label || field.props?.params?.label || placeholderValue,\r\n placeholder: placeholderValue\r\n }\r\n },\r\n validators: this.getFormlyValidators(field),\r\n };\r\n\r\n // Set initial value if provided\r\n if (field.value !== undefined) {\r\n this.model[field.key as string] = field.value;\r\n }\r\n\r\n // Add form control to form group if not already present\r\n const key = field.key as string;\r\n if (!this.form.get(key)) {\r\n let formControl: FormControl;\r\n if (field.formControl) {\r\n formControl = field.formControl;\r\n } else {\r\n const validators = field.params?.validators || [];\r\n formControl = new FormControl(field.value || '', validators);\r\n }\r\n this.form.addControl(key, formControl);\r\n }\r\n\r\n return formlyField;\r\n });\r\n\r\n this.formlyFields = this.allFormlyFields.slice(0, initialVisibleFields);\r\n this.updateAdditionalFields();\r\n }\r\n\r\n private getFieldClassName(index: number, fieldsPerRow: number): string {\r\n const colSize = 12 / fieldsPerRow;\r\n return `col-${colSize}`;\r\n }\r\n\r\n private updateGridColumns(fieldsPerRow: number): void {\r\n // Use CSS custom property to dynamically update grid columns\r\n document.documentElement.style.setProperty('--form-grid-columns', fieldsPerRow.toString());\r\n }\r\n\r\n private getFormlyValidators(field: any): any {\r\n const validators: any = {};\r\n \r\n if (field.formControl && field.formControl.validator) {\r\n validators.validation = field.formControl.validator;\r\n }\r\n \r\n if (field.params?.validators && Array.isArray(field.params.validators)) {\r\n validators.validation = field.params.validators;\r\n }\r\n \r\n if (field.validators) {\r\n if (field.validators.validation) {\r\n validators.validation = field.validators.validation;\r\n } else if (Array.isArray(field.validators)) {\r\n validators.validation = field.validators;\r\n }\r\n }\r\n \r\n return validators;\r\n }\r\n\r\n\r\n shouldShowAdditionalFields(): boolean {\r\n if (!this.activeFormInputs || this.activeFormInputs.length === 0) return false;\r\n \r\n const layout = this.activeFormLayout;\r\n const initialVisibleFields = layout.initialVisibleFields || layout.fieldsPerRow || 2;\r\n \r\n // If no conditional fields configuration, check if initial fields are filled\r\n if (!layout.conditionalFields) {\r\n return this.areAllVisibleFieldsFilled();\r\n }\r\n \r\n // Use custom showWhen function if provided\r\n const shouldShow = layout.conditionalFields.showWhen ? \r\n layout.conditionalFields.showWhen(this.model) : this.areAllVisibleFieldsFilled();\r\n return shouldShow;\r\n }\r\n\r\n private updateAdditionalFields(): void {\r\n const layout = this.activeFormLayout;\r\n const fieldsPerRow = layout.fieldsPerRow || 2;\r\n const initialVisibleFields = layout.initialVisibleFields || fieldsPerRow;\r\n \r\n // Check if we should show additional fields\r\n const shouldShowConditionalFields = this.shouldShowAdditionalFields();\r\n \r\n if (shouldShowConditionalFields && this.formConfig.fields.length > initialVisibleFields) {\r\n // Get specific conditional field indices or all remaining fields\r\n const conditionalFieldIndices = layout.conditionalFields?.fields || \r\n Array.from({length: this.formConfig.fields.length - initialVisibleFields}, (_, i) => i + initialVisibleFields);\r\n \r\n const additionalFields = conditionalFieldIndices.map(index => this.formConfig.fields[index]).filter(Boolean);\r\n \r\n // Normalize additional fields to proper Formly format\r\n this.additionalFormlyFields = additionalFields.map((field, index) => {\r\n // Normalize field structure to proper Formly format\r\n const placeholderValue = field.placeholder || field.props?.placeholder || field.params?.placeholder || field.props?.params?.placeholder || '';\r\n \r\n console.log('Processing conditional field:', field.key, 'placeholder:', placeholderValue, 'field:', field);\r\n \r\n const formlyField: FormlyFieldConfig = {\r\n key: field.key,\r\n type: field.type,\r\n className: this.getFieldClassName(index, fieldsPerRow),\r\n props: {\r\n // Handle mixed structure - some fields have props at root, others nested\r\n placeholder: placeholderValue,\r\n required: field.required || field.props?.required || false,\r\n disabled: field.disabled || field.props?.disabled || false,\r\n \r\n // For select fields, include select-specific properties\r\n ...(field.props?.options && {\r\n options: field.props.options,\r\n multiple: field.props.multiple || false,\r\n bindLabel: field.props.params?.bindLabel || 'label',\r\n bindValue: field.props.params?.bindValue || 'value',\r\n isClearable: field.props.params?.isClearable !== false,\r\n showCheckboxes: field.props.params?.showCheckboxes || false\r\n }),\r\n \r\n // Include params for component-specific configuration\r\n params: {\r\n ...(field.params || {}),\r\n ...(field.props?.params || {}),\r\n // Ensure label and placeholder are set\r\n label: field.label || field.props?.params?.label || placeholderValue,\r\n placeholder: placeholderValue\r\n }\r\n },\r\n validators: field.validators || field.props?.validators || {}\r\n };\r\n\r\n // Set initial value if provided\r\n if (field.value !== undefined) {\r\n this.model[field.key as string] = field.value;\r\n }\r\n\r\n // Add form control to form group if not already present\r\n const key = field.key as string;\r\n if (!this.form.get(key)) {\r\n this.form.addControl(key, field.formControl || new FormControl(field.value || ''));\r\n }\r\n\r\n return formlyField;\r\n });\r\n } else {\r\n // Clear additional fields if conditions are not met\r\n this.additionalFormlyFields = [];\r\n }\r\n }\r\n\r\n private evaluateShowWhen(showWhen: any): boolean {\r\n if (!showWhen) return true;\r\n \r\n // Handle different showWhen conditions\r\n if (typeof showWhen === 'function') {\r\n return showWhen(this.model, this.form);\r\n }\r\n \r\n if (typeof showWhen === 'object') {\r\n // Handle field-based conditions like { field: 'role', value: 'admin' }\r\n if (showWhen.field && showWhen.value !== undefined) {\r\n return this.model[showWhen.field] === showWhen.value;\r\n }\r\n }\r\n \r\n return true;\r\n }\r\n\r\n // Handle form model changes from Formly\r\n onFormModelChange(model: any): void {\r\n this.model = { ...this.model, ...model };\r\n \r\n // Trigger field visibility updates by updating the allFormlyFields array\r\n // This will cause Formly to re-evaluate hideExpression for all fields\r\n this.allFormlyFields = [...this.allFormlyFields];\r\n \r\n // Emit the change event\r\n this.onFormEvent.emit({ \r\n type: 'form-model-change', \r\n data: model \r\n });\r\n }\r\n\r\n /**\r\n * Handles click events on the description area, specifically for custom contact links.\r\n * If a custom contact link is clicked and there's an observer for onContactUsClick,\r\n * it prevents the default navigation and emits the custom event instead.\r\n * @param event - The mouse click event from the description area\r\n */\r\n handleDescriptionClick(event: MouseEvent): void {\r\n const target = event.target as HTMLElement;\r\n const link = target?.closest('a.custom-contact-link');\r\n if (link && this.onContactUsClick.observed) {\r\n event.preventDefault();\r\n this.onContactUsClick.emit();\r\n }\r\n }\r\n\r\n // Get initial fields to display in the first row\r\n getInitialFields(): FormFieldConfig[] {\r\n if (!this.activeFormInputs) return [];\r\n \r\n const initialCount = this.activeFormLayout.initialVisibleFields || this.activeFormLayout.fieldsPerRow || 2;\r\n return this.activeFormInputs.slice(0, initialCount);\r\n }\r\n\r\n // Check if all visible fields are filled and form is valid\r\n areAllVisibleFieldsFilled(): boolean {\r\n if (!this.activeFormInputs || this.activeFormInputs.length === 0) return true;\r\n \r\n // Get layout configuration to determine which fields should be visible\r\n const layout = this.activeFormLayout;\r\n const initialVisibleFields = layout.initialVisibleFields || layout.fieldsPerRow || 2;\r\n \r\n // Get all currently visible fields (initial + conditional if shown)\r\n const visibleFields = this.activeFormInputs.slice(0, initialVisibleFields);\r\n if (this.shouldShowAdditionalFields()) {\r\n const conditionalFieldIndices = layout.conditionalFields?.fields || \r\n Array.from({length: this.activeFormInputs.length - initialVisibleFields}, (_, i) => i + initialVisibleFields);\r\n const conditionalFields = conditionalFieldIndices.map(index => this.activeFormInputs[index]).filter(Boolean);\r\n visibleFields.push(...conditionalFields);\r\n }\r\n \r\n // Check if all visible fields have values using their keys\r\n const allFieldsFilled = visibleFields.every(field => {\r\n const fieldKey = field.key;\r\n const fieldValue = this.model[fieldKey];\r\n \r\n if (!fieldValue) return false;\r\n \r\n // For string values, check if not empty after trim\r\n if (typeof fieldValue === 'string') {\r\n return fieldValue.trim() !== '';\r\n }\r\n \r\n // For arrays (multi-select), check if not empty\r\n if (Array.isArray(fieldValue)) {\r\n return fieldValue.length > 0;\r\n }\r\n \r\n return true;\r\n });\r\n \r\n const formValid = this.form.valid;\r\n\r\n return allFieldsFilled && formValid;\r\n }\r\n \r\n}\r\n","@if (bannerContent(); as content) {\r\n <div class=\"error-page message-banner-v2\">\r\n <div class=\"content-container\" [ngStyle]=\"{ gap: contentGap || 'var(--medium-32px, 32px)' }\">\r\n @if(content?.messageIcon){\r\n <div class=\"image-container\"\r\n [ngStyle]=\"{ 'margin-bottom': spacingBetweenImageAndDescription ?? 'var(--small-16px, 16px)' }\">\r\n <img [src]=\"content.messageIcon\" [alt]=\"content.type + ' image'\"\r\n [style.--message-icon-height]=\"content.messageIconSize?.height\"\r\n [style.--message-icon-width]=\"content.messageIconSize?.width\" />\r\n </div>\r\n }\r\n <div class=\"details\">\r\n <div class=\"title-description\">\r\n <div class=\"title-class\" [ngClass]=\"titleClass || 'title-class'\" [innerHTML]=\"content.title\"></div>\r\n <p class=\"description\" [ngClass]=\"descriptionClass || 'description'\" [innerHTML]=\"content.description\" (click)=\"handleDescriptionClick($event)\"></p> \r\n <div [ngStyle]=\"{ margin: banner?.spacing + 'px 0px' }\">\r\n <sa-message-banner *ngIf=\"!isEmptyObject(banner)\" [type]=\"banner?.type\" [bannerIcon]=\"banner?.bannerIcon\" [buttonIcon]=\"banner?.buttonIcon\"\r\n [bannerIconSize]=\"banner?.bannerIconSize\" [buttonType]=\"banner?.buttonType\" [buttonSize]=\"banner?.buttonSize\" [buttonIconPosition]=\"banner?.buttonIconPosition\"\r\n [buttonIconSize]=\"banner?.buttonIconSize\" [actionText]=\"banner?.actionText\" >\r\n <div [innerHTML]=\"banner?.text\"></div>\r\n </sa-message-banner>\r\n </div>\r\n </div>\r\n \r\n <!-- Form inputs section -->\r\n <ng-container *ngIf=\"prebuiltFormFields || activeFormInputs?.length\">\r\n <div class=\"form-fields-container\">\r\n <!-- Prebuilt form fields (direct component rendering) -->\r\n <ng-container *ngIf=\"usePrebuiltFields() && prebuiltFormFields\">\r\n <ng-container *ngTemplateOutlet=\"prebuiltFormFields\"></ng-container>\r\n </ng-container>\r\n \r\n <!-- Use Formly for proper form rendering -->\r\n <form [formGroup]=\"form\" class=\"dialog-form\" *ngIf=\"!usePrebuiltFields() && activeFormInputs?.length\">\r\n <formly-form \r\n [form]=\"form\" \r\n [fields]=\"allFormlyFields\" \r\n [model]=\"model\"\r\n (modelChange)=\"onFormModelChange($event)\">\r\n </formly-form>\r\n </form>\r\n </div>\r\n\r\n <!-- Custom form button(s) -->\r\n <div class=\"form-button-container\" *ngIf=\"activeCustomFormButton && !usePrebuiltFields()\">\r\n <!-- Support both single button and array of buttons -->\r\n <ng-container *ngIf=\"isButtonArray(); else singleButton\">\r\n <sa-button \r\n *ngFor=\"let button of activeCustomFormButton\"\r\n class=\"action-button\"\r\n [id]=\"button.id\"\r\n [text]=\"button.text\"\r\n [type]=\"button.type\"\r\n [size]=\"button.size\"\r\n [state]=\"button.state\"\r\n [ImagePath]=\"button.ImagePath\"\r\n [iconPosition]=\"button.iconPosition\"\r\n (click)=\"onButtonClick(button)\">\r\n </sa-button>\r\n </ng-container>\r\n \r\n <ng-template #singleButton>\r\n <sa-button class=\"action-button\"\r\n [id]=\"activeCustomFormButton.id\"\r\n [text]=\"activeCustomFormButton.text\"\r\n [type]=\"activeCustomFormButton.type\"\r\n [size]=\"activeCustomFormButton.size\"\r\n [state]=\"activeCustomFormButton.state\"\r\n [ImagePath]=\"activeCustomFormButton.ImagePath\"\r\n [iconPosition]=\"activeCustomFormButton.iconPosition\"\r\n (click)=\"onButtonClick(activeCustomFormButton)\">\r\n </sa-button>\r\n </ng-template>\r\n </div>\r\n \r\n <!-- Divider section -->\r\n <div class=\"divider-section\" *ngIf=\"activeDivider && !usePrebuiltFields()\">\r\n <div class=\"divider\"></div>\r\n <div class=\"divider-header\">\r\n <h3 class=\"divider-title\" *ngIf=\"activeDividerConfig.title\">{{ activeDividerConfig.title }}</h3>\r\n <p class=\"divider-subtitle\" *ngIf=\"activeDividerConfig.subtitle || activeDividerConfig.showSubtitleWhenEmpty\">\r\n {{ activeDividerConfig.subtitle || 'No items added yet' }}\r\n </p>\r\n </div>\r\n \r\n <!-- Chips section -->\r\n <div class=\"chip-list\" *ngIf=\"activeChips?.length && !usePrebuiltFields()\">\r\n <sa-chip \r\n *ngFor=\"let chip of activeChips\"\r\n [text]=\"chip.label || chip.text || chip\"\r\n [type]=\"'regular'\"\r\n [state]=\"'default'\"\r\n [filling]=\"'filled'\"\r\n [iconPosition]=\"'right'\"\r\n [iconPath]=\"'../assets/closeBlueOutlined.svg'\"\r\n (onClickEvent)=\"chip.removable ? onChipRemove(chip) : null\">\r\n </sa-chip>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n @if(buttons){\r\n <div class=\"button-group\">\r\n @for (button of buttons; track button.text) {\r\n <sa-button \r\n [text]=\"button.text\"\r\n [icon]=\"button.icon\"\r\n [size]=\"button.size\"\r\n [type]=\"button.type\"\r\n [iconPosition]=\"button.iconPosition\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (onClickEvent)=\"onButtonClick(button, $event)\"\r\n role=\"button\"\r\n [state]=\"!areAllVisibleFieldsFilled() ? 'disabled' : button?.state\"\r\n [attr.aria-label]=\"button.text\">\r\n </sa-button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }","import { Component, EventEmitter, Inject, Input, OnInit, Optional, Output } from '@angular/core';\r\nimport { MessageBannerComponent } from '../message-banner/message-banner.component';\r\nimport { ButtonClickEvent, ButtonInterface } from '../../interfaces/button-interface';\r\nimport { MessageBannerV2Component } from '../message-banner-v2/message-banner-v2.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\r\nimport { FormInputComponent } from '../form-input/form-input.component';\r\nimport { isArray } from 'lodash';\r\n\r\n@Component({\r\n selector: 'sa-dialog',\r\n standalone: true,\r\n imports: [MessageBannerComponent, MessageBannerV2Component, CommonModule, ButtonComponent, MatCheckboxModule, IconComponent, MatDialogModule, FormInputComponent],\r\n templateUrl: './dialog.component.html',\r\n styleUrls: ['./dialog.component.css']\r\n})\r\nexport class DialogComponent {\r\n formValues: { [key: string]: any } = {};\r\n @Input() dialogData: {\r\n topMessageBanners?: any[];\r\n topRegionIconSize?: string;\r\n className?: string;\r\n closeButtonSize?: string;\r\n middleRegion?: any;\r\n topRegionIcon?: string;\r\n lowerMessageBanners?: any[];\r\n buttons?: ButtonInterface[];\r\n buttonsWithType?: any[];\r\n closeButton?: string;\r\n showCloseButton?: boolean;\r\n };\r\n\r\n @Output() dialogButtonClick = new EventEmitter();\r\n\r\n constructor(\r\n @Optional() public dialogRef: MatDialogRef<DialogComponent>,\r\n @Optional() @Inject(MAT_DIALOG_DATA) public data: any\r\n ) {\r\n if (this.data) {\r\n this.dialogData = this.data;\r\n }\r\n }\r\n\r\n onButtonClick(button: any, event?: any): void {\r\n if (event?.evt) {\r\n event?.evt.preventDefault();\r\n event?.evt.stopPropagation();\r\n }\r\n this.dialogButtonClick.emit({event, button});\r\n }\r\n onMiddleRegionButtonClick(event: {button: any, data?: any}): void {\r\n // Pass the event up to the parent component\r\n this.data.onMiddleRegionButtonClick?.(event);\r\n }\r\n handleButtonClick(event: ButtonClickEvent) {\r\n this.dialogButtonClick.emit({event});\r\n }\r\n\r\n onCloseButtonClick(event: Event): void {\r\n this.dialogData?.middleRegion?.content?.formConfig?.fields?.forEach((input: any) => {\r\n input.value = '';\r\n });\r\n if (this.dialogData?.middleRegion?.content?.formConfig) {\r\n this.dialogData.middleRegion.content.formConfig.chips = [];\r\n } \r\n this.dialogButtonClick.emit({ event: event, type: 'close' });\r\n }\r\n// all form related events\r\n onUnifiedFormEvent(event: {type: string, data: any}): void {\r\n switch(event.type) {\r\n case 'form-input-change':\r\n this.onFormInputChange(event.data);\r\n break;\r\n case 'form-model-change':\r\n // Store the form model for external access\r\n this.formValues = { ...this.formValues, ...event.data };\r\n this.dialogButtonClick.emit({ event: event.data, type: 'form-model-change' });\r\n break;\r\n case 'custom-button-click':\r\n // Store form model data if provided\r\n if (event.data?.formModel) {\r\n this.formValues = { ...this.formValues, ...event.data.formModel };\r\n }\r\n this.onButtonClick(event.data);\r\n break;\r\n case 'chip-remove':\r\n this.onRemoveUser(event.data);\r\n break;\r\n default:\r\n console.warn('Unknown form event type:', event.type);\r\n }\r\n }\r\n onFormInputChange(event: any) {\r\n let processedValue = event.value; \r\n if (isArray(event.value)) {\r\n processedValue = event.value.map((chip: any) => chip.value || chip.label || chip);\r\n }\r\n this.formValues[event.label] = processedValue;\r\n this.dialogButtonClick.emit({ event, type: 'form-input-change' });\r\n }\r\n\r\n onRemoveUser(chip: any) {\r\n this.dialogButtonClick.emit({ event: chip, type: 'chip-remove' });\r\n }\r\n\r\n // Method to reset the form through message-banner-v2 component\r\n resetForm(): void {\r\n // Emit form reset event to message-banner-v2\r\n this.formValues = {};\r\n // The message-banner-v2 component will handle the actual form reset\r\n // when it receives this event\r\n this.dialogButtonClick.emit({ type: 'form-reset' });\r\n }\r\n}\r\n","<div class=\"dialog-container {{ dialogData?.className }}\">\r\n <!-- top banner region -->\r\n <div class=\"top-container\">\r\n @if (!!dialogData?.topMessageBanners) {\r\n <div class=\"top-message-container\">\r\n @for (\r\n messageBanner of dialogData?.topMessageBanners;\r\n track messageBanner.content\r\n ) {\r\n <sa-message-banner\r\n [type]=\"messageBanner?.type\"\r\n [bannerIcon]=\"messageBanner?.bannerIcon\"\r\n [bannerIconSize]=\"messageBanner?.bannerIconSize || '24'\"\r\n [button]=\"messageBanner?.button\"\r\n (actionClick)=\"onButtonClick(messageBanner?.button, $event)\"\r\n [style]=\"messageBanner?.style || 'width:39.438rem'\"\r\n >\r\n <div class=\"{{ messageBanner?.className }} message-content-style\">\r\n {{ messageBanner?.content }}\r\n </div>\r\n </sa-message-banner>\r\n }\r\n </div>\r\n }\r\n @if(!!dialogData?.topRegionIcon){\r\n <div class=\"top-icon-container\">\r\n <sa-icon\r\n [icon]=\"dialogData?.topRegionIcon\"\r\n class=\"d-flex\"\r\n size=\"{{ dialogData?.topRegionIconSize }}\"\r\n ></sa-icon>\r\n </div>\r\n }\r\n @if (!!dialogData?.closeButton || dialogData?.showCloseButton) {\r\n <div class=\"cross-btn\" (click)=\"onCloseButtonClick($event)\">\r\n <sa-icon\r\n [icon]=\"dialogData?.closeButton || 'closeOutlined'\"\r\n class=\"d-flex\"\r\n size=\"{{ dialogData?.closeButtonSize || '20' }}\"\r\n ></sa-icon>\r\n </div>\r\n }\r\n </div>\r\n <!-- middle region -->\r\n @if (!!dialogData?.middleRegion) {\r\n <ng-container *ngIf=\"dialogData?.middleRegion as middleRegion\">\r\n <div class=\"image-description-container {{ middleRegion?.className }}\">\r\n <sa-message-banner-v2\r\n [messageType]=\"middleRegion?.messageType || 'default'\"\r\n [messageIcon]=\"middleRegion?.messageIcon\"\r\n [messageIconSize]=\"middleRegion?.messageIconSize\"\r\n [title]=\"middleRegion?.title\"\r\n [description]=\"middleRegion?.description\"\r\n [buttons]=\"middleRegion?.buttons\"\r\n [formConfig]=\"middleRegion?.content?.formConfig\"\r\n (onFormEvent)=\"onUnifiedFormEvent($event)\"\r\n (buttonClick)=\"middleRegion?.buttons ? onButtonClick($event) : ''\"\r\n >\r\n </sa-message-banner-v2>\r\n </div>\r\n </ng-container>\r\n }\r\n <!-- lower message banner region -->\r\n @if (!!dialogData?.lowerMessageBanners) {\r\n <div class=\"lower-message-container\">\r\n @for (\r\n messageBanner of dialogData?.lowerMessageBanners;\r\n track messageBanner.content\r\n ) {\r\n <sa-message-banner\r\n [type]=\"messageBanner?.type\"\r\n [bannerIcon]=\"messageBanner?.bannerIcon\"\r\n [buttonIcon]=\"messageBanner?.buttonIcon\"\r\n [bannerIconSize]=\"messageBanner?.bannerIconSize || '24'\"\r\n [button]=\"messageBanner?.button\"\r\n [style]=\"messageBanner?.style || 'width:-webkit-fill-available'\"\r\n (actionClick)=\"onButtonClick(messageBanner?.button, $event)\"\r\n >\r\n <div\r\n class=\"{{ messageBanner?.className }} message-content-style\"\r\n ></div>\r\n {{ messageBanner?.content }}\r\n </sa-message-banner>\r\n }\r\n </div>\r\n }\r\n <!-- button region -->\r\n @if (!!dialogData?.buttons) {\r\n <div class=\"button-group-container\">\r\n @for (button of dialogData?.buttons; track button.text) {\r\n <sa-button\r\n [text]=\"button.text\"\r\n [icon]=\"button.icon\"\r\n [size]=\"button.size\"\r\n [type]=\"button.type\"\r\n [state]=\"button.state\"\r\n [iconPosition]=\"button.iconPosition\"\r\n [buttonIconSize]=\"button.buttonIconSize\"\r\n (onClickEvent)=\"onButtonClick(button, $event)\"\r\n role=\"button\"\r\n [attr.aria-label]=\"button.text\"\r\n >\r\n </sa-button>\r\n }\r\n </div>\r\n }\r\n @if (!!dialogData?.buttonsWithType) {\r\n <div class=\"buttonWithType-group-container\">\r\n @for (button of dialogData?.buttonsWithType; track button.text) {\r\n @if (button?.type === \"checkbox\") {\r\n <div class=\"checkbox-container {{ button.className }}\">\r\n <mat-checkbox [id]=\"button.id\" (change)=\"onButtonClick(button)\" class=\"checkbox-style\">{{\r\n button.text\r\n }}</mat-checkbox>\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { ChangeDetectorRef, Component, computed, effect, ElementRef, HostListener, inject, OnDestroy, OnInit, Renderer2, signal, ViewChild } from '@angular/core';\r\nimport { isObservable, Subject, Subscription } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { IconComponent } from '../../icon/icon.component';\r\nimport { IconService } from '../../icon/icon.service';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { first as _first, get as _get, filter as _filter, size as _size, toLower as _toLower, includes as _includes, forEach as _forEach } from 'lodash';\r\n\r\n@Component({\r\n selector: 'sa-category-dropdown',\r\n standalone: true,\r\n imports: [CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n FormlyModule,\r\n IconComponent,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatButtonToggleModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule,\r\n MatCheckboxModule,\r\n MatSelectModule],\r\n providers: [IconService],\r\n templateUrl: './category-dropdown.component.html',\r\n styleUrl: './category-dropdown.component.css'\r\n})\r\n\r\nexport class CategoryDropdownComponent extends FieldType<FieldTypeConfig> implements OnInit, OnDestroy {\r\n get bindLabel(): string { return this.props['bindLabel'] || 'label'; }\r\n get bindValue(): string { return this.props['bindValue'] || 'value'; }\r\n get bindAttributes(): string { return this.props['bindAttributes'] || 'attributes'; }\r\n _categories = signal<any[]>([]);\r\n destroy$ = new Subject<void>();\r\n subscription = new Subscription();\r\n\r\n selectedCategory = signal<any>(undefined);\r\n selectedAttributes = signal<any[]>([]);\r\n searchTerm = signal<string>('');\r\n isOpen = signal(false);\r\n userSelectedCategory = signal<any>(undefined); // To hold the user's explicit selection\r\n\r\n private el: ElementRef = inject(ElementRef);\r\n @ViewChild('searchInput') searchInput: ElementRef;\r\n @ViewChild('categoryContainer') categoryContainer: ElementRef;\r\n @ViewChild('dropdownPanel') dropdownPanel: ElementRef;\r\n\r\n constructor(private cdr: ChangeDetectorRef, private renderer: Renderer2) {\r\n super();\r\n effect(() => {\r\n const filtered = this.filteredCategories();\r\n const term = this.searchTerm();\r\n\r\n if (term && filtered.length > 0) {\r\n this.selectedCategory.set(_first(filtered));\r\n return;\r\n }\r\n\r\n // If attributes exist, stick with their category\r\n const attrCategory = this.getSelectedAttributesCategory();\r\n if (attrCategory) {\r\n this.selectedCategory.set(attrCategory);\r\n return;\r\n }\r\n\r\n // Else fallback to user-selected or first\r\n if (this.userSelectedCategory()) {\r\n this.selectedCategory.set(this.userSelectedCategory());\r\n } else if (this._categories().length > 0) {\r\n this.selectedCategory.set(_first(this._categories()));\r\n }\r\n }, { allowSignalWrites: true });\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.props?.['multiple']) {\r\n const initialValue = this.formControl.value;\r\n this.selectedAttributes.set(Array.isArray(initialValue) ? initialValue : []);\r\n }\r\n\r\n if (isObservable(this.props.options)) {\r\n this.subscription.add(this.props.options.pipe(takeUntil(this.destroy$)).subscribe(options => {\r\n this._categories.set(Array.isArray(options) ? options : []);\r\n if (this._categories().length > 0 && !this.userSelectedCategory()) {\r\n this.selectedCategory.set(this._categories()[0]);\r\n }\r\n }));\r\n } else {\r\n this._categories.set(Array.isArray(this.props.options) ? this.props.options : []);\r\n if (this._categories().length > 0 && !this.userSelectedCategory()) {\r\n this.selectedCategory.set(this._categories()[0]);\r\n }\r\n }\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onClick(event: MouseEvent) {\r\n if (!this.el.nativeElement.contains(event.target)) {\r\n if (this.isOpen()) {\r\n // Mark as touched when closing via outside click\r\n this.formControl.markAsTouched();\r\n }\r\n this.isOpen.set(false);\r\n }\r\n }\r\n\r\n toggleDropdown() {\r\n const isOpening = !this.isOpen();\r\n this.isOpen.set(isOpening);\r\n\r\n if (isOpening) {\r\n this.searchTerm.set('');\r\n if (this.searchInput) {\r\n this.searchInput.nativeElement.value = '';\r\n }\r\n this.cdr.detectChanges();\r\n\r\n if (this.categoryContainer && this.dropdownPanel) {\r\n const containerWidth = this.categoryContainer.nativeElement.offsetWidth;\r\n const offset = this.props?.['panelWidthOffset'] ?? 160; // fallback if undefined\r\n\r\n // Use explicit pixel width to avoid reflows caused by fit-content\r\n const baseFontSize = 16; // default 1rem = 16px\r\n const panelWidthRem = (containerWidth + offset) / baseFontSize;\r\n\r\n this.renderer.setStyle(this.dropdownPanel.nativeElement, 'min-width', `${panelWidthRem}rem`);\r\n this.renderer.setStyle(this.dropdownPanel.nativeElement, 'width', `${panelWidthRem}rem`);\r\n }\r\n\r\n // 🔑 Sync selectedAttributes from formControl on every open\r\n if (this.props?.['multiple']) {\r\n const currentValue = this.formControl.value || [];\r\n this.selectedAttributes.set(Array.isArray(currentValue) ? currentValue : []);\r\n } else if (this.formControl.value) {\r\n this.selectedAttributes.set([this.formControl.value]);\r\n } else {\r\n this.selectedAttributes.set([]);\r\n }\r\n\r\n // 👇 Now this works, because selectedAttributes isn’t empty anymore\r\n const attrCategory = this.getSelectedAttributesCategory();\r\n if (attrCategory) {\r\n this.selectedCategory.set(attrCategory);\r\n } else if (this.userSelectedCategory()) {\r\n this.selectedCategory.set(this.userSelectedCategory());\r\n } else if (this._categories().length > 0) {\r\n this.selectedCategory.set(this._categories()[0]);\r\n }\r\n } else {\r\n // Mark as touched when closing the dropdown\r\n this.formControl.markAsTouched();\r\n }\r\n }\r\n\r\n selectCategory(category: any) {\r\n this.selectedCategory.set(category);\r\n // Only update userSelectedCategory if there are NO attributes selected\r\n if (this.selectedAttributes().length === 0) {\r\n this.userSelectedCategory.set(category);\r\n }\r\n }\r\n\r\n toggleValue(val: any) {\r\n this.selectedAttributes.update(attributes => {\r\n const index = attributes.findIndex(item => item[this.bindValue] === val[this.bindValue]);\r\n if (index > -1) {\r\n attributes.splice(index, 1);\r\n } else {\r\n const category = this.selectedCategory();\r\n const newValue = { ...val, categoryId: category[this.bindValue], categoryLabel: category[this.bindLabel] };\r\n attributes.push(newValue);\r\n }\r\n this.formControl.setValue([...attributes]);\r\n return [...attributes];\r\n });\r\n }\r\n\r\n private getSelectedAttributesCategory(): any {\r\n const attrs = this.selectedAttributes();\r\n if (attrs.length > 0) {\r\n // always prefer category of last selected attribute\r\n const lastAttr = attrs[attrs.length - 1];\r\n return this._categories().find(c => c[this.bindValue] === lastAttr.categoryId);\r\n }\r\n return null;\r\n }\r\n\r\n isItemSelected(val: any): boolean {\r\n return this.selectedAttributes().some(item => item[this.bindValue] === val[this.bindValue]);\r\n }\r\n\r\n removeValue(val: any) {\r\n this.selectedAttributes.update(attributes => {\r\n const newAttributes = attributes.filter(item => item[this.bindValue] !== val[this.bindValue]);\r\n this.formControl.setValue(newAttributes);\r\n return newAttributes;\r\n });\r\n }\r\n\r\n selectSingleValue(val: any) {\r\n const category = this.selectedCategory();\r\n // const newValue = { ...val, categoryId: category[this.bindValue], categoryLabel: category[this.bindLabel] };\r\n // this.formControl.setValue(newValue);\r\n this.formControl.setValue(val);\r\n this.formControl.markAsTouched();\r\n this.isOpen.set(false);\r\n }\r\n\r\n onSearch(event: Event) {\r\n const value = (event.target as HTMLInputElement).value;\r\n this.searchTerm.set(value);\r\n }\r\n\r\n clearSearch(event: Event) {\r\n this.searchTerm.set('');\r\n this.searchInput.nativeElement.value = '';\r\n event.stopPropagation();\r\n\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n filteredAttributes = computed(() => {\r\n const category = this.selectedCategory();\r\n const term = this.searchTerm().toLowerCase();\r\n\r\n if (!category) {\r\n return [];\r\n }\r\n\r\n return (category[this.bindAttributes] || []).filter((val: any) => (val[this.bindLabel] || '').toLowerCase().includes(term));\r\n });\r\n\r\n filteredCategories = computed(() => {\r\n const term = this.searchTerm().toLowerCase();\r\n const categories = this._categories();\r\n if (!term) {\r\n return categories;\r\n }\r\n return categories.filter(category =>\r\n (category[this.bindAttributes] || []).some((val: any) => (val[this.bindLabel] || '').toLowerCase().includes(term))\r\n );\r\n });\r\n\r\n // Computed signal that creates a Map of category ID to filtered attribute count\r\n categoryAttributeCounts = computed(() => {\r\n const term = _toLower(this.searchTerm());\r\n const categories = this._categories();\r\n const countsMap = new Map<any, number>();\r\n \r\n _forEach(categories, category => {\r\n const attributes = _get(category, this.bindAttributes, []);\r\n \r\n if (!term) {\r\n // No search term, return total count\r\n countsMap.set(_get(category, this.bindValue), _size(attributes));\r\n } else {\r\n // Return count of matching attributes\r\n const matchingAttributes = _filter(attributes, (val: any) => \r\n _includes(_toLower(_get(val, this.bindLabel, '')), term)\r\n );\r\n countsMap.set(_get(category, this.bindValue), _size(matchingAttributes));\r\n }\r\n });\r\n \r\n return countsMap;\r\n });\r\n\r\n // Helper method to get count from the computed map\r\n getFilteredAttributesCount(category: any): number {\r\n return this.categoryAttributeCounts().get(_get(category, this.bindValue)) || 0;\r\n }\r\n}","<div class=\"custom-category-dropdown relative\" (click)=\"toggleDropdown()\">\r\n <!-- Dropdown Trigger / Display -->\r\n <div #categoryContainer class=\"custom-category-container\" \r\n [ngClass]=\"{\r\n 'category-invalid': formControl.invalid,\r\n 'category-touched': formControl.touched\r\n }\" \r\n [class.open]=\"isOpen()\">\r\n <div class=\"custom-category-attribute-container\">\r\n @if(props?.['multiple']){\r\n @if (selectedAttributes().length > 0) {\r\n @for (item of selectedAttributes(); track item[bindValue]) {\r\n <div class=\"custom-category-attribute custom-category-custom-chip\" (click)=\"$event.stopPropagation()\">\r\n <span class=\"custom-category-attribute-label\">{{ item[bindLabel] }}</span>\r\n <span class=\"custom-category-attribute-icon right\">\r\n <sa-icon icon=\"closeOutlined\" (click)=\"removeValue(item)\" size=\"11\"></sa-icon>\r\n </span>\r\n </div>\r\n }\r\n } @else {\r\n <span class=\"placeholder\">Select items</span>\r\n }\r\n } @else {\r\n @if(formControl.value) {\r\n <span class=\"custom-category-attribute-label\">{{ formControl.value[bindLabel] }}</span>\r\n } @else {\r\n <span class=\"placeholder\">Select item</span>\r\n }\r\n }\r\n </div>\r\n <div class=\"custom-category-arrow-wrapper\">\r\n <sa-icon icon=\"upDownChevronOutlined\" size=\"11\" class=\"searchIcons\"></sa-icon>\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown Panel -->\r\n @if (isOpen()) {\r\n <div #dropdownPanel class=\"dropdown-panel\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"search-input-container mat-form-field-density-5\">\r\n <mat-form-field [appearance]=\"props['appearance'] || 'outline'\" class=\"w-100\">\r\n <sa-icon icon=\"searchIcon\" size=\"20\" class=\"searchIcons\" matPrefix></sa-icon>\r\n <input #searchInput matInput type=\"text\" name=\"menu-search-bar\" class=\"search-input\"\r\n (keyup)=\"onSearch($event)\" [placeholder]=\"props?.['searchPlaceholder'] || 'Search'\" />\r\n <sa-icon class=\"pointer\" icon=\"closeOutlined\" size=\"15\" class=\"searchIcons\" matSuffix\r\n (click)=\"clearSearch($event)\"></sa-icon>\r\n </mat-form-field>\r\n </div>\r\n\r\n @if (filteredCategories().length > 0) {\r\n <div class=\"two-panel-dropdown\">\r\n <!-- Left Panel: Categories -->\r\n <div class=\"category-panel\">\r\n @for (cat of filteredCategories(); track cat[bindValue]) {\r\n <div class=\"category-item\" [class.active]=\"cat[bindValue] === selectedCategory()?.[bindValue]\"\r\n (click)=\"selectCategory(cat); $event.stopPropagation()\">\r\n <span class=\"category-label\">{{ cat[bindLabel] }}\r\n @if(props?.['showAttributesCount']){\r\n <span class=\"attributes-count\">({{ getFilteredAttributesCount(cat) }})</span>\r\n }\r\n </span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"dropdown-divider\"></div>\r\n\r\n <!-- Right Panel: Attributes -->\r\n <div class=\"attributes-panel\">\r\n @if(filteredAttributes().length > 0) {\r\n @for (val of filteredAttributes(); track val[bindValue]) {\r\n <div class=\"attribute-item pointer\"\r\n [class.active]=\"props?.['multiple'] ? isItemSelected(val) : formControl.value?.[bindValue] === val[bindValue]\"\r\n (click)=\"props?.['multiple'] ? toggleValue(val) : selectSingleValue(val); $event.stopPropagation()\">\r\n @if(props?.['multiple']){\r\n <label class=\"custom-checkbox-container\" (click)=\"$event.stopPropagation()\">\r\n <input type=\"checkbox\" [checked]=\"isItemSelected(val)\" (change)=\"toggleValue(val)\">\r\n <span class=\"checkmark\"></span>\r\n <span class=\"attribute-label\">{{ val[bindLabel] }}</span>\r\n </label>\r\n }\r\n @else{\r\n <label class=\"custom-checkbox-container\">\r\n <span class=\"attribute-label\">{{ val[bindLabel] }}</span>\r\n @if(val?.tooltip || val?.description){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\r\n [matTooltip]=\"val?.tooltip || val?.description\" matTooltipClass=\"custom-tooltip\"\r\n class=\"tooltip-icon\"></sa-icon>\r\n </span>\r\n }\r\n </label>\r\n }\r\n </div>\r\n }\r\n }@else {\r\n <div class=\"p-4 text-center text-gray-500 w-full\">\r\n No items found.\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"p-4 text-center text-gray-500 w-full\">\r\n No items found.\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>","import { Component, DoCheck } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { IconComponent } from '../../icon/icon.component';\r\nimport { IconService } from '../../icon/icon.service';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\n\r\n@Component({\r\n selector: 'sa-ng-select',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n FormlyModule,\r\n NgSelectModule,\r\n IconComponent,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatTooltipModule,\r\n MatButtonToggleModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule,\r\n MatCheckboxModule,\r\n ],\r\n providers: [IconService],\r\n templateUrl: './ng-select.component.html',\r\n styleUrl: './ng-select.component.css'\r\n})\r\nexport class NgSelectComponent extends FieldType<FieldTypeConfig<any>> implements DoCheck {\r\n filteredOptions: any[];\r\n searchValue: string = '';\r\n private _options: any[];\r\n isDropdownOpen = false;\r\n\r\n onSearch(event: Event) {\r\n const searchValue = this.searchValue.trim().toLowerCase();\r\n const bindLabel = this.props.bindLabel || 'label';\r\n\r\n if (!searchValue) {\r\n this.filteredOptions = [...(this.field.props?.options || [])];\r\n return;\r\n }\r\n\r\n this.filteredOptions = (this.field.props?.options || []).filter(opt => {\r\n const label = opt?.[bindLabel] ?? '';\r\n return String(label).toLowerCase().includes(searchValue);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this._options = this.props.options;\r\n this.filteredOptions = [...(this.props.options || [])];\r\n\r\n // If a default value is provided in props and the form control has no value yet, set it\r\n const defaultVal = this.props?.defaultValue;\r\n if ((this.formControl.value === null || this.formControl.value === undefined) && defaultVal !== undefined) {\r\n this.formControl.setValue(defaultVal);\r\n }\r\n }\r\n\r\n ngDoCheck() {\r\n if (this.props.options !== this._options) {\r\n this._options = this.props.options;\r\n this.filteredOptions = [...(this._options || [])];\r\n this.searchValue = ''; // Clear search value when options change\r\n }\r\n }\r\n\r\n\r\n\r\n // (Optional) Select/Deselect all helpers\r\n allSelected() {\r\n return this.props?.selectedValues.length === this.field.props?.options.length;\r\n }\r\n\r\n toggleSelectAll() {\r\n const bindValue = this.props.bindValue || 'value';\r\n if (this.allSelected()) {\r\n this.props.selectedValues = [];\r\n } else {\r\n this.props.selectedValues = (this.field.props?.options || []).map(o => o[bindValue]);\r\n }\r\n }\r\n\r\n clearRemaining(items: any[], clear: (item: any) => void): void {\r\n // remove only the items after the first two\r\n items.slice(2).forEach(item => clear(item));\r\n }\r\n expandedSummary = false;\r\n\r\n toggleSummary(): void {\r\n this.expandedSummary = !this.expandedSummary;\r\n }\r\n\r\n // This method will stop the event from bubbling up\r\n stopBackspacePropagation(event: KeyboardEvent) {\r\n if (event.key === 'Backspace' || event.keyCode === 8) {\r\n event.stopPropagation();\r\n }\r\n }\r\n\r\n clearSearch(event: Event) {\r\n this.searchValue = '';\r\n event.stopPropagation();\r\n this.filteredOptions = [...this.field.props?.options];\r\n }\r\n}\r\n","<div class=\"ng-select-tooltip-wrapper\"\r\n [matTooltip]=\"(!props?.multiple && formControl?.value) ? ((formControl?.value[props?.bindLabel || 'label'] || formControl?.value)?.length > 30 ? (formControl?.value[props?.bindLabel || 'label'] || formControl?.value) : '') : ''\"\r\n matTooltipPosition=\"above\"\r\n [matTooltipDisabled]=\"isDropdownOpen\">\r\n<ng-select [items]=\"filteredOptions\" [multiple]=\"props?.multiple || false\" [bindLabel]=\"props?.bindLabel || 'label'\"\r\n [closeOnSelect]=\"props?.closeOnSelect ?? true\" [bindValue]=\"props?.bindValue || 'value'\"\r\n [placeholder]=\"props?.placeholder || 'Select'\" [searchable]=\"false\" [formControl]=\"formControl\"\r\n [clearable]=\"props?.isClearable\" [appearance]=\"props['appearance'] || 'outline'\" [loading]=\"props?.loading || false\" \r\n class=\"ng-select-custom\"\r\n (open)=\"isDropdownOpen = true\"\r\n (close)=\"isDropdownOpen = false\">\r\n\r\n @if(!!props?.showSearchBar){\r\n <ng-template ng-header-tmp>\r\n <div class=\"search-input-container mat-form-field-density-5\">\r\n <mat-form-field [appearance]=\"props['appearance'] || 'outline'\" class=\"w-100\">\r\n <sa-icon icon=\"searchIcon\" class=\"searchIcons\" size=\"20\" matPrefix></sa-icon>\r\n <input matInput type=\"text\" name=\"menu-search-bar\" class=\"search-input searchIcons\"\r\n (keyup)=\"onSearch($event)\" (keydown)=\"stopBackspacePropagation($event)\"\r\n [placeholder]=\"props?.searchPlaceholder || 'Search'\" [(ngModel)]=\"searchValue\" />\r\n <sa-icon icon=\"closeOutlined\" class=\"pointer searchIcons\" size=\"15\" matSuffix\r\n (click)=\"clearSearch($event)\"></sa-icon>\r\n </mat-form-field>\r\n </div>\r\n </ng-template>\r\n }\r\n <!-- Option template with a checkbox in front of each row -->\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <div class=\"option-row\" \r\n [matTooltip]=\"(item[props.bindLabel || 'label']?.length > 40) ? item[props.bindLabel || 'label'] : ''\" \r\n matTooltipPosition=\"right\">\r\n @if(props?.multiple){\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" tabindex=\"-1\" />\r\n }\r\n <span class=\"option-label\">{{ item[props.bindLabel || 'label'] }}</span>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Single select label template -->\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <span class=\"ng-value-label ng-value-label-full\">\r\n {{ item[props.bindLabel || 'label'] }}\r\n </span>\r\n </ng-template>\r\n\r\n <!-- Selected items chip template (optional) -->\r\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\r\n <div class=\"chips ng-values-list\">\r\n\r\n <!-- If collapsed: show only first 2 + summary -->\r\n <ng-container *ngIf=\"!expandedSummary\">\r\n @for (s of items.slice(0, 2); track s[props.bindValue || 'value']) {\r\n <div class=\"ng-value\" \r\n [matTooltip]=\"(s[props.bindLabel || 'label']?.length > 30) ? s[props.bindLabel || 'label'] : ''\" \r\n matTooltipPosition=\"above\">\r\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\r\n size=\"11\"></sa-icon></span>\r\n </div>\r\n }\r\n\r\n @if (items.length > 2) {\r\n <div class=\"ng-value summary-chip pointer\" \r\n (click)=\"toggleSummary()\" \r\n matTooltip=\"Click to expand all selected items\" \r\n matTooltipPosition=\"above\">\r\n <span class=\"ng-value-label\">+{{ items.length - 2 }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clearRemaining(items, clear)\"><sa-icon\r\n icon=\"closeOutlined\" size=\"11\"></sa-icon></span>\r\n </div>\r\n }\r\n </ng-container>\r\n\r\n <!-- If expanded: show all items -->\r\n <ng-container *ngIf=\"expandedSummary\">\r\n @for (s of items; track s[props.bindValue || 'value']) {\r\n <div class=\"ng-value\" \r\n [matTooltip]=\"(s[props.bindLabel || 'label']?.length > 30) ? s[props.bindLabel || 'label'] : ''\" \r\n matTooltipPosition=\"above\">\r\n <span class=\"ng-value-label\">{{ s[props.bindLabel || 'label'] }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clear(s)\"><sa-icon icon=\"closeOutlined\"\r\n size=\"11\"></sa-icon></span>\r\n </div>\r\n }\r\n <!-- Collapse button -->\r\n <div class=\"ng-value summary-chip pointer\" \r\n (click)=\"toggleSummary()\" \r\n matTooltip=\"Click to collapse\" \r\n matTooltipPosition=\"above\">\r\n <sa-icon class=\"ng-value-label\" size=\"18\" icon=\"leftChevronCircle\"></sa-icon>\r\n </div>\r\n </ng-container>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n @if(props?.footer){\r\n <ng-template ng-footer-tmp>\r\n <div class=\"dropdown-footer\">{{props?.footer?.description}}</div>\r\n </ng-template>\r\n }\r\n\r\n <ng-template ng-notfound-tmp>\r\n <div class=\"no-results\">\r\n @if (searchValue?.length > 0) {\r\n {{ props?.searchNotFoundText || '❌ No items match \"' + searchValue + '\"' }}\r\n } @else {\r\n {{ props?.notFoundText || '⚠️ No options available' }}\r\n }\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ng-loadingtext-tmp>\r\n <div class=\"loading\">\r\n <sa-icon icon=\"loader\" size=\"16\" class=\"loading-spinner\"></sa-icon>\r\n <span>Loading options...</span>\r\n </div>\r\n </ng-template>\r\n</ng-select>\r\n</div>","import { Component, ViewChild, ElementRef } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyModule, FieldType, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDatepickerModule, MatCalendar } from '@angular/material/datepicker';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ToolTipComponent } from \"../tool-tip/tool-tip.component\";\r\n\r\n@Component({\r\n selector: 'sa-dropdown-menu',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n MatMenuModule,\r\n MatButtonModule,\r\n MatCalendar,\r\n MatCardModule,\r\n MatNativeDateModule,\r\n IconComponent,\r\n MatTooltipModule,\r\n ToolTipComponent\r\n],\r\n templateUrl: './dropdown-menu.component.html',\r\n styleUrls: ['./dropdown-menu.component.css'],\r\n})\r\nexport class DropdownMenuComponent extends FieldType<FieldTypeConfig> {\r\n @ViewChild(MatMenuTrigger) menuTrigger!: MatMenuTrigger;\r\n @ViewChild('dropdownContainer') dropdownContainer!: ElementRef<HTMLElement>;\r\n\r\n activeItem: string | null = null;\r\n selectedDate: Date | null = null;\r\n isNavigating = false;\r\n\r\n params: any;\r\n placeholderLabel: string = '';\r\n showCustomTooltip = false;\r\n\r\n convertTooltipToArray(msg: any): string[] {\r\n if (!msg) return [];\r\n return Array.isArray(msg) ? msg : [msg];\r\n }\r\n\r\n\r\n ngOnInit() {\r\n this.params = this.field.props['params'] || {};\r\n if (!this.params || Object.keys(this.params).length === 0) {\r\n this.params = this.field.props;\r\n }\r\n\r\n this.placeholderLabel =\r\n this.params.placeholder ||\r\n this.params.label ||\r\n this.field.props.placeholder ||\r\n 'Select an option';\r\n }\r\n\r\n get menuItems(): any[] {\r\n const options = this.field.props?.options;\r\n if (options && typeof (options as any).subscribe === 'function') {\r\n return [];\r\n }\r\n return Array.isArray(options) ? options : [];\r\n }\r\n\r\n get selectedItem(): string {\r\n const value = this.formControl.value;\r\n if (!value) return this.placeholderLabel;\r\n if (typeof value === 'object' && value !== null) {\r\n return value.name || value.label || value.value || this.placeholderLabel;\r\n }\r\n const item = this.menuItems.find(\r\n (item) => item.value === value || item.id === value\r\n );\r\n return item?.name || item?.label || String(value) || this.placeholderLabel;\r\n }\r\n\r\n onSelect(item: any, event: MouseEvent) {\r\n event.stopPropagation();\r\n if (item.type === 'date') {\r\n this.activeItem = item.type;\r\n return;\r\n }\r\n this.activeItem = null;\r\n\r\n const updatedValue = {\r\n historyYears: item.value || item.name || null,\r\n historyDate: null,\r\n };\r\n\r\n this.formControl.setValue(item.value);\r\n this.formControl.markAsTouched();\r\n this.menuTrigger.closeMenu();\r\n }\r\n\r\n\r\n override get showError(): boolean {\r\n return this.formControl?.invalid && this.formControl?.touched;\r\n }\r\n\r\n getError(): string {\r\n if (this.formControl?.hasError('required')) return 'This field is required';\r\n return 'Please select a valid option';\r\n }\r\n\r\n onViewChanged() {\r\n this.isNavigating = true;\r\n setTimeout(() => (this.isNavigating = false), 300);\r\n }\r\n\r\n onDateSelected(date: Date) {\r\n if (this.isNavigating) return;\r\n this.selectedDate = date;\r\n\r\n const formatted = date.toLocaleDateString('en-US', {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n });\r\n\r\n const updatedValue = {\r\n historyYears: null,\r\n historyDate: formatted,\r\n };\r\n\r\n this.formControl.setValue(formatted);\r\n this.formControl.markAsTouched();\r\n this.menuTrigger.closeMenu();\r\n }\r\n\r\n\r\n stopCalendarClose(event: MouseEvent): void {\r\n event.stopPropagation();\r\n }\r\n\r\n isItemSelected(item: any): boolean {\r\n if (!this.formControl?.value) return false;\r\n const currentValue = this.formControl.value;\r\n\r\n if (typeof currentValue === 'object' && currentValue !== null) {\r\n return (\r\n currentValue === item ||\r\n currentValue.value === item.value ||\r\n currentValue.id === item.id\r\n );\r\n }\r\n\r\n return (\r\n currentValue === item.value ||\r\n currentValue === item.id ||\r\n currentValue === item.name\r\n );\r\n }\r\n\r\n onMenuOpened(): void {\r\n const el = this.dropdownContainer?.nativeElement;\r\n if (!el) return;\r\n const width = Math.round(el.getBoundingClientRect().width);\r\n document.documentElement.style.setProperty('--dropdown-trigger-width', width + 'px');\r\n }\r\n\r\n onMenuClosed(): void {\r\n document.documentElement.style.removeProperty('--dropdown-trigger-width');\r\n this.activeItem = null;\r\n }\r\n}\r\n","<div class=\"sa-dropdown-container {{ props?.['inputContainerClass'] }}\">\r\n <!-- Label and Tooltip Section -->\r\n @if(!!props?.['label']){\r\n <div class=\"sa-dropdown-label-container\">\r\n <div class=\"sa-dropdown-label-tooltip-container\">\r\n <span class=\"sa-dropdown-label\">\r\n {{ props?.['label'] }}\r\n </span>\r\n @if(!!props?.['help']){\r\n <span class=\"tooltip-container\" (mouseenter)=\"showCustomTooltip = true\" (mouseleave)=\"showCustomTooltip = false\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\" class=\"tooltip-icon d-flex\" [size]=\"props?.['tooltipIconSize'] || '20'\">\r\n </sa-icon>\r\n @if(showCustomTooltip){\r\n <sa-tool-tip [messages]=\"convertTooltipToArray(props?.['help'])\" [pointerPosition]=\"'left'\" [simpleMode]=\"true\">\r\n </sa-tool-tip>\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Dropdown Button -->\r\n <div class=\"dropdown-container\" #dropdownContainer [class.disabled]=\"params?.disabled\">\r\n <button mat-button [matMenuTriggerFor]=\"menu\" #menuTrigger=\"matMenuTrigger\" class=\"menu-trigger\"\r\n [disabled]=\"params?.disabled\" [attr.aria-label]=\"params?.label || 'Dropdown menu'\"\r\n [attr.aria-haspopup]=\"'menu'\" [attr.aria-expanded]=\"menuTrigger?.menuOpen\"\r\n (menuOpened)=\"onMenuOpened()\" (menuClosed)=\"onMenuClosed()\">\r\n\r\n <span class=\"selected-value\" [class.placeholder]=\"!formControl.value\">\r\n {{ selectedItem }}\r\n </span>\r\n <span class=\"dropdown_right_icon\">\r\n <sa-icon [icon]=\"'downOutlined'\" [size]=\"'22'\"></sa-icon>\r\n </span>\r\n </button>\r\n\r\n <!-- Dropdown Menu -->\r\n <mat-menu #menu=\"matMenu\" class=\"two-panel-menu\" [hasBackdrop]=\"true\">\r\n <div class=\"two-panel-dropdown\">\r\n <div class=\"menu-left\">\r\n <div *ngFor=\"let item of menuItems\" class=\"menu-item\" [class.active]=\"item.name === activeItem\"\r\n (click)=\"onSelect(item, $event)\" role=\"menuitem\" [attr.aria-selected]=\"isItemSelected(item)\">\r\n\r\n <span>{{ item.name }}</span>\r\n <sa-icon *ngIf=\"item.type === 'date'\" [icon]=\"'rightChevron'\" [size]=\"'16'\" aria-hidden=\"true\">\r\n </sa-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"divider\"></div>\r\n\r\n <div class=\"menu-right\" *ngIf=\"activeItem === 'date'\" (click)=\"stopCalendarClose($event)\">\r\n <mat-card class=\"calendar-card\">\r\n <mat-calendar [(selected)]=\"selectedDate\" (selectedChange)=\"onDateSelected($event)\"\r\n (viewChanged)=\"onViewChanged()\" [minDate]=\"params?.minDate\" [maxDate]=\"params?.maxDate\">\r\n </mat-calendar>\r\n </mat-card>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </div>\r\n\r\n <!-- Validation Message -->\r\n @if(!formControl.valid){\r\n <div class=\"error-message-container\">\r\n <span class=\"error-message\">\r\n <formly-validation-message [field]=\"field\"></formly-validation-message>\r\n </span>\r\n </div>\r\n }\r\n @if(!!props?.['description']){\r\n <p class=\"sa-dropdown-supportText\">{{ props?.['description'] }}</p>\r\n }\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, OnInit, Renderer2, ViewChild, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@Component({\r\n selector: 'sa-filter',\r\n standalone: true,\r\n imports: [CommonModule, IconComponent, HttpClientModule, MatTooltipModule],\r\n templateUrl: './filter.component.html',\r\n styleUrls: ['./filter.component.css']\r\n})\r\nexport class FilterComponent implements OnInit {\r\n\r\n @Input() config: FilterConfig = {\r\n filterLabel: 'Filter by',\r\n filterButtonStyle: 'outlined',\r\n filterItems: []\r\n };\r\n \r\n @Input('filterValues') set filterValues(value: FilterConfig) {\r\n if (value) {\r\n this.config = value;\r\n }\r\n }\r\n\r\n @ViewChild('filterByContent') filterByContent!: ElementRef;\r\n \r\n @Output() onClickEvent = new EventEmitter<FilterClickEvent>();\r\n @Output() filterSelected = new EventEmitter<FilterSelectionEvent>();\r\n @Output() filterRemoved = new EventEmitter<FilterRemovalEvent>();\r\n @Output() dropdownToggled = new EventEmitter<boolean>();\r\n\r\n touchStartY = 0;\r\n touchEndY = 0;\r\n dropdownActive: boolean = false;\r\n\r\n selectedFilters: Record<string, FilterSelection> = {};\r\n submenuActive: Record<string, boolean> = {};\r\n\r\n constructor(private renderer: Renderer2, private hostElement: ElementRef) { }\r\n\r\n ngOnInit(): void {\r\n this.renderer.listen('window', 'click', (e: Event) => this.handleGlobalClick(e));\r\n this.renderer.listen('window', 'keydown', (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') this.closeAll();\r\n });\r\n this.renderer.listen('window', 'resize', () => this.handleResize());\r\n }\r\n\r\n toggleDropdown(event: Event): void {\r\n event.stopPropagation();\r\n const dropdown = this.hostElement.nativeElement.querySelector('.dropdown');\r\n dropdown.classList.toggle('active');\r\n this.dropdownActive = dropdown.classList.contains('active');\r\n this.dropdownToggled.emit(this.dropdownActive);\r\n }\r\n\r\n toggleSubmenu(element: any, event: Event): void {\r\n event.stopPropagation();\r\n\r\n const currentHeader = (event.currentTarget as HTMLElement);\r\n const currentItem = currentHeader.closest('.filter-item');\r\n\r\n // Close all other filter items\r\n const allItems = this.hostElement.nativeElement.querySelectorAll('.filter-item');\r\n allItems.forEach((item: HTMLElement) => {\r\n if (item !== currentItem) {\r\n item.classList.remove('active');\r\n }\r\n });\r\n\r\n // Toggle the current item\r\n currentItem.classList.toggle('active');\r\n\r\n // If it's now active, position its submenu\r\n if (currentItem.classList.contains('active')) {\r\n const submenu = currentItem.querySelector('.filter-submenu');\r\n this.positionSubmenu(submenu as HTMLElement);\r\n }\r\n \r\n // Legacy event\r\n this.onClickEvent.emit({ \r\n event: 'click', \r\n type: 'Menu', \r\n item: element,\r\n filterType: element,\r\n isActive: currentItem.classList.contains('active')\r\n });\r\n\r\n // Toggle active state\r\n const isActive = this.submenuActive[element];\r\n this.submenuActive = {}; // close all\r\n if (!isActive) {\r\n this.submenuActive[element] = true; // open current\r\n }\r\n }\r\n\r\n selectFilter(event: Event): void {\r\n event.stopPropagation();\r\n\r\n const option = event.currentTarget as HTMLElement;\r\n const value = option.dataset['value'] || '';\r\n const text = option.querySelector('span')?.textContent || '';\r\n\r\n // Find parent submenu and its filter type\r\n const submenu = option.closest('.filter-submenu') as HTMLElement;\r\n if (!submenu || !submenu.id.endsWith('Submenu')) return;\r\n\r\n const filterType = submenu.id.replace('Submenu', '');\r\n\r\n // Check if this filter is already selected (toggle functionality)\r\n const isCurrentlySelected = this.selectedFilters[filterType] && \r\n this.selectedFilters[filterType].value === value;\r\n\r\n if (isCurrentlySelected) {\r\n // Remove the filter if it's already selected\r\n this.removeFilter(filterType);\r\n return;\r\n }\r\n\r\n // Deselect all options in this submenu\r\n submenu.querySelectorAll('.filter-option').forEach((el: HTMLElement) => el.classList.remove('selected'));\r\n\r\n // Select the clicked option\r\n option.classList.add('selected');\r\n\r\n // Store selected filter\r\n const selection: FilterSelection = { value, text, filterType };\r\n this.selectedFilters[filterType] = selection;\r\n\r\n // Emit enhanced events\r\n this.filterSelected.emit({\r\n filterType,\r\n selection,\r\n allSelections: { ...this.selectedFilters }\r\n });\r\n\r\n // Legacy event\r\n this.onClickEvent.emit({ \r\n event: 'click', \r\n type: 'Sub Menu', \r\n item: value,\r\n filterType,\r\n selection\r\n });\r\n\r\n setTimeout(() => this.closeAll(), 100);\r\n }\r\n\r\n removeFilter(type: string): void {\r\n const removedSelection = this.selectedFilters[type];\r\n delete this.selectedFilters[type];\r\n \r\n const submenu = this.hostElement.nativeElement.querySelector(`#${type}Submenu`);\r\n if (submenu) {\r\n submenu.querySelectorAll('.filter-option').forEach((opt: HTMLElement) => opt.classList.remove('selected'));\r\n }\r\n\r\n // Emit removal event\r\n this.filterRemoved.emit({\r\n filterType: type,\r\n removedSelection,\r\n remainingSelections: { ...this.selectedFilters }\r\n });\r\n }\r\n\r\n // Helper method to check if a filter option is selected\r\n isFilterOptionSelected(filterType: string, optionValue: string): boolean {\r\n return this.selectedFilters[filterType] && \r\n this.selectedFilters[filterType].value === optionValue;\r\n }\r\n\r\n // Public method to get current selections\r\n getSelectedFilters(): Record<string, FilterSelection> {\r\n return { ...this.selectedFilters };\r\n }\r\n\r\n // Public method to clear all filters\r\n clearAllFilters(): void {\r\n Object.keys(this.selectedFilters).forEach(type => {\r\n this.removeFilter(type);\r\n });\r\n }\r\n\r\n // Public method to set filters programmatically\r\n setFilters(filters: Record<string, FilterSelection>): void {\r\n this.selectedFilters = { ...filters };\r\n // Update UI to reflect selections\r\n Object.entries(filters).forEach(([type, selection]) => {\r\n const submenu = this.hostElement.nativeElement.querySelector(`#${type}Submenu`);\r\n if (submenu) {\r\n const option = submenu.querySelector(`[data-value=\"${selection.value}\"]`);\r\n if (option) {\r\n option.classList.add('selected');\r\n }\r\n }\r\n });\r\n }\r\n\r\n closeAll(): void {\r\n const dropdown = this.hostElement.nativeElement.querySelector('.dropdown');\r\n dropdown.classList.remove('active');\r\n this.hostElement.nativeElement.querySelectorAll('.filter-item').forEach((item: HTMLElement) => item.classList.remove('active'));\r\n }\r\n\r\n handleGlobalClick(e: Event): void {\r\n const target = e.target as HTMLElement;\r\n if (!target.closest('.dropdown')) {\r\n this.closeAll();\r\n }\r\n }\r\n\r\n positionSubmenu(submenu: HTMLElement): void {\r\n if (!submenu) return;\r\n submenu.classList.remove('show-left');\r\n if (window.innerWidth <= 768) return;\r\n setTimeout(() => {\r\n const rect = submenu.getBoundingClientRect();\r\n if (rect.left + submenu.offsetWidth > window.innerWidth - 20) {\r\n submenu.classList.add('show-left');\r\n }\r\n }, 10);\r\n }\r\n\r\n handleResize(): void {\r\n clearTimeout((this as any)._resizeTimeout);\r\n (this as any)._resizeTimeout = setTimeout(() => this.closeAll(), 250);\r\n }\r\n\r\n onTouchStart(e: TouchEvent): void {\r\n this.touchStartY = e.changedTouches[0].screenY;\r\n }\r\n\r\n onTouchEnd(): void {\r\n this.touchEndY = event instanceof TouchEvent ? event.changedTouches[0].screenY : 0;\r\n this.handleSwipeGesture();\r\n }\r\n\r\n handleSwipeGesture(): void {\r\n const swipeThreshold = 50;\r\n const swipeDistance = this.touchStartY - this.touchEndY;\r\n if (swipeDistance < -swipeThreshold && this.filterByContent.nativeElement.scrollTop === 0) {\r\n const dropdown = this.hostElement.nativeElement.querySelector('.dropdown');\r\n dropdown.classList.remove('active');\r\n }\r\n }\r\n\r\n smoothScrollToTop(): void {\r\n window.scrollTo({ top: 0, behavior: 'smooth' });\r\n }\r\n\r\n}\r\n\r\n// Enhanced interfaces\r\nexport interface FilterConfig {\r\n filterLabel: string;\r\n filterButtonStyle?: 'filled' | 'outlined';\r\n filterItems: FilterCategory[];\r\n}\r\n\r\nexport interface FilterCategory {\r\n id: string;\r\n text: string;\r\n subMenu?: FilterOption[];\r\n tooltip?: string;\r\n}\r\n\r\nexport interface FilterOption {\r\n value: string;\r\n label: string;\r\n description?: string;\r\n tooltip?: string;\r\n icon?: {\r\n icon: string;\r\n size: string;\r\n iconPath?: string;\r\n iconUrl?: string;\r\n customClass?: string;\r\n tooltip?: string;\r\n };\r\n}\r\n\r\nexport interface FilterSelection {\r\n value: string;\r\n text: string;\r\n filterType: string;\r\n}\r\n\r\nexport interface FilterClickEvent {\r\n event: string;\r\n type: 'Menu' | 'Sub Menu';\r\n item: any;\r\n filterType?: string;\r\n selection?: FilterSelection;\r\n isActive?: boolean;\r\n}\r\n\r\nexport interface FilterSelectionEvent {\r\n filterType: string;\r\n selection: FilterSelection;\r\n allSelections: Record<string, FilterSelection>;\r\n}\r\n\r\nexport interface FilterRemovalEvent {\r\n filterType: string;\r\n removedSelection?: FilterSelection;\r\n remainingSelections: Record<string, FilterSelection>;\r\n}\r\n","<div class=\"container\">\r\n\r\n <div class=\"filter-container\">\r\n <!-- Main Filter By Dropdown -->\r\n <div class=\"dropdown filter-by-dropdown\">\r\n <button class=\"dropdown-btn filter-by-btn\" [ngClass]=\"{\r\n 'filled-btn': config?.filterButtonStyle === 'filled',\r\n 'outlined-btn': config?.filterButtonStyle === 'outlined'\r\n }\" (click)=\"toggleDropdown($event)\">\r\n <span>{{config?.filterLabel}}</span>\r\n <sa-icon class=\"flex\" [icon]=\"'downChevronOutlined'\" [size]=\"'20'\"></sa-icon>\r\n </button>\r\n\r\n <div class=\"dropdown-content filter-by-content\" #filterByContent (touchstart)=\"onTouchStart($event)\"\r\n (touchend)=\"onTouchEnd()\">\r\n <div class=\"filter-section\">\r\n <!-- Dynamic Filter Items -->\r\n <div *ngFor=\"let item of config?.filterItems\" class=\"filter-item\">\r\n <div class=\"filter-header\" [id]=\"item.text+'Header'\" (click)=\"toggleSubmenu(item.text,$event)\">\r\n <span class=\"filter-label\">{{item.text}}</span>\r\n <sa-icon *ngIf=\"item?.subMenu?.length\" [icon]=\"'rightChevronOutlined'\"\r\n [size]=\"'16'\" \r\n [matTooltip]=\"item?.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\" \r\n class=\"tooltip-icon d-flex\"\r\n [matTooltipDisabled]=\"!item?.tooltip\"></sa-icon>\r\n </div>\r\n <ng-container *ngIf=\"item?.subMenu?.length\">\r\n <div class=\"filter-submenu\" [id]=\"item.text+'Submenu'\">\r\n <div *ngFor=\"let option of item.subMenu\" class=\"filter-option\"\r\n [attr.data-value]=\"option.value\"\r\n [ngClass]=\"{'selected': isFilterOptionSelected(item.id, option.value)}\"\r\n (click)=\"selectFilter($event)\">\r\n <span>{{option.label}}</span>\r\n <div class=\"info-icon\" *ngIf=\"option.icon\">\r\n <sa-icon class=\"flex\" [icon]=\"option.icon.icon\"\r\n [iconPath]=\"option.icon.iconPath\" [iconUrl]=\"option.icon.iconUrl\"\r\n [size]=\"option.icon.size\" [customClass]=\"option.icon.customClass\"\r\n [matTooltip]=\"option.description || option.tooltip || option.icon.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\" \r\n class=\"tooltip-icon d-flex\"\r\n [matTooltipDisabled]=\"!(option.description || option.tooltip || option.icon.tooltip)\"></sa-icon>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Component } from '@angular/core';\r\nimport { IHeaderAngularComp } from 'ag-grid-angular';\r\nimport { IHeaderParams } from 'ag-grid-community';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport interface CustomHeaderParams extends IHeaderParams {\r\n // Leading icon configuration\r\n leadingIcon?: string;\r\n leadingIconSize?: string;\r\n showLeadingIcon?: boolean;\r\n \r\n // Trailing icon/info icon configuration\r\n trailingIcon?: string;\r\n trailingIconSize?: string;\r\n showTrailingIcon?: boolean;\r\n \r\n // Tooltip configuration\r\n tooltip?: string;\r\n tooltipIcon?: string;\r\n showInfoIcon?: boolean;\r\n tooltipIconSize?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'sa-grid-header',\r\n standalone: true,\r\n imports: [CommonModule, IconComponent, MatTooltipModule],\r\n templateUrl: './grid-header.component.html',\r\n styleUrl: './grid-header.component.css'\r\n})\r\nexport class GridHeaderComponent implements IHeaderAngularComp {\r\n params!: CustomHeaderParams;\r\n displayName: string = '';\r\n \r\n // Leading icon properties\r\n leadingIcon: string = '';\r\n leadingIconSize: string = '20';\r\n showLeadingIcon: boolean = false;\r\n \r\n // Trailing icon properties\r\n trailingIcon: string = '';\r\n trailingIconSize: string = '20';\r\n showTrailingIcon: boolean = false;\r\n \r\n // Tooltip properties\r\n tooltip: string = '';\r\n tooltipIcon: string = 'infoCircleOutlined';\r\n showInfoIcon: boolean = false;\r\n tooltipIconSize: string = '20';\r\n\r\n agInit(params: CustomHeaderParams): void {\r\n this.params = params;\r\n this.displayName = params.displayName || '';\r\n \r\n // Leading icon configuration\r\n this.leadingIcon = params.leadingIcon || '';\r\n this.leadingIconSize = params.leadingIconSize || '20';\r\n this.showLeadingIcon = params.showLeadingIcon !== undefined ? params.showLeadingIcon : false;\r\n \r\n // Trailing icon configuration\r\n this.trailingIcon = params.trailingIcon || '';\r\n this.trailingIconSize = params.trailingIconSize || '20';\r\n this.showTrailingIcon = params.showTrailingIcon !== undefined ? params.showTrailingIcon : false;\r\n \r\n // Tooltip configuration\r\n this.tooltip = params.tooltip || '';\r\n this.tooltipIcon = params.tooltipIcon || 'infoCircleOutlined';\r\n this.showInfoIcon = params.showInfoIcon !== undefined ? params.showInfoIcon : false;\r\n this.tooltipIconSize = params.tooltipIconSize || '20';\r\n }\r\n\r\n refresh(params: CustomHeaderParams): boolean {\r\n this.agInit(params);\r\n return true;\r\n }\r\n\r\n onSortRequested(event: any): void {\r\n if (this.params.enableSorting) {\r\n this.params.progressSort(event.shiftKey);\r\n }\r\n }\r\n}\r\n","<div class=\"grid-header-container\" (click)=\"onSortRequested($event)\">\r\n <!-- Leading Icon -->\r\n @if(showLeadingIcon && leadingIcon) {\r\n <span class=\"leading-icon-container\">\r\n <sa-icon \r\n [icon]=\"leadingIcon\" \r\n [size]=\"leadingIconSize\"\r\n class=\"leading-icon\">\r\n </sa-icon>\r\n </span>\r\n }\r\n \r\n <!-- Header Text -->\r\n <span class=\"header-text\">{{ displayName }}</span>\r\n \r\n <!-- Trailing Icon (without tooltip) -->\r\n @if(showTrailingIcon && trailingIcon && !showInfoIcon) {\r\n <span class=\"trailing-icon-container\">\r\n <sa-icon \r\n [icon]=\"trailingIcon\" \r\n [size]=\"trailingIconSize\"\r\n class=\"trailing-icon\">\r\n </sa-icon>\r\n </span>\r\n }\r\n \r\n <!-- Info Icon with Tooltip -->\r\n @if(showInfoIcon && tooltip) {\r\n <span class=\"info-icon-container\">\r\n <sa-icon \r\n [icon]=\"tooltipIcon\" \r\n [size]=\"tooltipIconSize\"\r\n [matTooltip]=\"tooltip\"\r\n matTooltipClass=\"custom-tooltip\"\r\n class=\"info-icon\">\r\n </sa-icon>\r\n </span>\r\n }\r\n</div>\r\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\nimport { ButtonClickEvent, ButtonInterface, ButtonSize, ButtonType } from '../../interfaces/button-interface';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IconService } from '../icon/icon.service';\r\nimport { ChipInterface } from '../../interfaces/chip-interface';\r\nimport { HeaderChipConfig, HeaderConfig, HeaderInfoItem } from '../../interfaces/header-interface';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@Component({\r\n selector: 'sa-header',\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.css'],\r\n standalone: true,\r\n imports: [IconComponent, ChipsComponent, ButtonComponent, HttpClientModule, MatTooltipModule],\r\n providers: [IconService]\r\n})\r\nexport class HeaderComponent implements OnChanges {\r\n @Input() header: HeaderConfig = {};\r\n @Input() chipConfig: HeaderChipConfig[] = [];\r\n @Input() info: HeaderInfoItem[] = [];\r\n @Input() buttonHelper?: ButtonInterface;\r\n @Input() buttonMain?: ButtonInterface;\r\n\r\n @Output() buttonClick = new EventEmitter<ButtonClickEvent>();\r\n\r\n constructor() { }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['header']) {\r\n this.header = changes['header'].currentValue;\r\n } else if (changes['chipConfig']) {\r\n this.chipConfig = changes['chipConfig'].currentValue;\r\n } else if (changes['info']) {\r\n this.info = changes['info'].currentValue;\r\n } else if (changes['buttonHelper']) {\r\n this.buttonHelper = changes['buttonHelper'].currentValue;\r\n } else if (changes['buttonMain']) {\r\n this.buttonMain = changes['buttonMain'].currentValue;\r\n }\r\n }\r\n\r\n onButtonClick(type: 'primary' | 'secondary', event: Event) {\r\n const button = type === 'secondary' ? this.buttonHelper : this.buttonMain;\r\n if (button) {\r\n this.buttonClick.emit({ type, button, originalEvent: event });\r\n }\r\n }\r\n}\r\n","<div class=\"header\">\r\n <div class=\"header-content\">\r\n @if (header?.text || header?.html || header.icon?.iconUrl) {\r\n <div class=\"heading\">\r\n <div class=\"header-name-container\" [class.icon-left]=\"!header?.icon?.iconPosition || header?.icon?.iconPosition === 'left'\" \r\n [class.icon-right]=\"header?.icon?.iconPosition === 'right'\">\r\n @if (header.icon?.iconUrl) {\r\n <sa-icon [iconUrl]=\"header?.icon?.iconUrl\" [iconPosition]=\"header?.icon?.iconPosition\" [size]=\"header?.icon?.size || '24px'\"\r\n [matTooltip]=\"header?.icon?.tooltip || ''\" \r\n [matTooltipDisabled]=\"!header?.icon?.tooltip\" />\r\n }\r\n <div class=\"header-name\" [innerHTML]=\"header?.html || header?.text\"></div>\r\n </div>\r\n @for(chip of chipConfig; track chip.text) {\r\n <div>\r\n <sa-chip \r\n [id]=\"chip.id\"\r\n [type]=\"chip.type\"\r\n [state]=\"chip.state\"\r\n [filling]=\"chip.filling\"\r\n [text]=\"chip.text\"\r\n [iconPosition]=\"chip.iconPosition\"\r\n [iconPath]=\"chip.iconPath\"\r\n [largeStateIcon]=\"chip.largeStateIcon\"\r\n [largeStateText]=\"chip.largeStateText\"\r\n ></sa-chip>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <div class=\"header-info\">\r\n @for(item of info; track item.text) {\r\n <div class=\"info-item\">\r\n @if(item.icon) {\r\n <img [src]=\"item.icon\" alt=\"\">\r\n }\r\n {{item.text}}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"actions\">\r\n @if(buttonHelper) {\r\n <sa-button \r\n (onClickEvent)=\"onButtonClick('secondary', $event)\"\r\n [id]=\"buttonHelper.id\"\r\n [text]=\"buttonHelper.text\"\r\n [type]=\"buttonHelper.type\"\r\n [size]=\"buttonHelper.size\"\r\n [state]=\"buttonHelper.state\"\r\n [ImagePath]=\"buttonHelper.imagePath\"\r\n [iconPosition]=\"buttonHelper.iconPosition\"\r\n [href]=\"buttonHelper.href\"\r\n [hrefTarget]=\"buttonHelper.hrefTarget\"\r\n [isSubmit]=\"buttonHelper.isSubmit\">\r\n </sa-button>\r\n }\r\n @if(buttonMain) {\r\n <sa-button\r\n (onClickEvent)=\"onButtonClick('primary', $event)\"\r\n [id]=\"buttonMain.id\"\r\n [text]=\"buttonMain.text\"\r\n [type]=\"buttonMain.type\"\r\n [size]=\"buttonMain.size\"\r\n [state]=\"buttonMain.state\"\r\n [ImagePath]=\"buttonMain.imagePath\"\r\n [iconPosition]=\"buttonMain.iconPosition\"\r\n [href]=\"buttonMain.href\"\r\n [hrefTarget]=\"buttonMain.hrefTarget\"\r\n [isSubmit]=\"buttonMain.isSubmit\">\r\n </sa-button>\r\n }\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { LayoutSectionInterface } from '../../interfaces/layout-section-interface';\r\nimport { ButtonInterface, ButtonClickEvent } from '../../interfaces/button-interface';\r\nimport { ChipInterface } from '../../interfaces/chip-interface';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IconService } from '../icon/icon.service';\r\n\r\n@Component({\r\n selector: 'sa-layout-section',\r\n templateUrl: './layout-section.component.html',\r\n imports: [\r\n CommonModule,\r\n ButtonComponent,\r\n ChipsComponent,\r\n IconComponent,\r\n HttpClientModule\r\n ],\r\n providers: [IconService],\r\n standalone: true,\r\n styleUrls: ['./layout-section.component.css']\r\n})\r\nexport class LayoutSectionComponent {\r\n @Input() config: LayoutSectionInterface;\r\n @Output() buttonClick = new EventEmitter<ButtonClickEvent>();\r\n\r\n onButtonClick(type: 'primary' | 'secondary', event: Event): void {\r\n const button = type === 'primary' ? this.config.primaryButton : this.config.secondaryButton;\r\n if (button) {\r\n this.buttonClick.emit({ type, button, originalEvent: event });\r\n }\r\n }\r\n} ","<div class=\"layout-section\">\r\n <div class=\"layout-section__header\">\r\n <div class=\"layout-section__title\">\r\n <div class=\"header-name-container\">\r\n @if (config?.headerIcon?.icon) {\r\n <sa-icon [style.height]=\"config?.headerIcon.size || '24'\"\r\n [icon]=\"config?.headerIcon.icon\"\r\n [size]=\"config?.headerIcon.size || '24'\" />\r\n }\r\n <h2>{{ config?.headerText }}</h2>\r\n </div>\r\n @if (config?.chips?.length) {\r\n <div class=\"layout-section__chips\">\r\n @for (chip of config?.chips; track chip.id) {\r\n <sa-chip\r\n [id]=\"chip.id\"\r\n [text]=\"chip.text\"\r\n [type]=\"chip.type\"\r\n [state]=\"chip.state\"\r\n [filling]=\"chip.filling\"\r\n [iconPath]=\"chip.iconPath\"\r\n [iconPosition]=\"chip.iconPosition\"\r\n [largeStateIcon]=\"chip.largeStateIcon\"\r\n [largeStateText]=\"chip.largeStateText\">\r\n </sa-chip>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"layout-section__actions\">\r\n @if (config?.secondaryButton) {\r\n <sa-button \r\n [id]=\"config.secondaryButton.id\"\r\n [text]=\"config.secondaryButton.text\"\r\n [type]=\"config.secondaryButton.type\"\r\n [state]=\"config.secondaryButton.state\"\r\n [size]=\"config.secondaryButton.size\"\r\n [ImagePath]=\"config.secondaryButton.imagePath\"\r\n [icon]=\"config.secondaryButton.icon\"\r\n [iconPosition]=\"config.secondaryButton.iconPosition\"\r\n [href]=\"config.secondaryButton.href\"\r\n [hrefTarget]=\"config.secondaryButton.hrefTarget\"\r\n [width]=\"config?.secondaryButton.width\"\r\n [isSubmit]=\"config.secondaryButton.isSubmit\"\r\n [buttonIconSize]=\"config.secondaryButton.buttonIconSize\"\r\n [showSpinner]=\"config.secondaryButton.showSpinner\"\r\n (onClickEvent)=\"onButtonClick('secondary', $event)\">\r\n </sa-button>\r\n }\r\n @if (config?.primaryButton) {\r\n <sa-button\r\n [id]=\"config.primaryButton.id\"\r\n [text]=\"config.primaryButton.text\"\r\n [type]=\"config.primaryButton.type\"\r\n [state]=\"config.primaryButton.state\"\r\n [size]=\"config.primaryButton.size\"\r\n [ImagePath]=\"config.primaryButton.imagePath\"\r\n [icon]=\"config.primaryButton.icon\"\r\n [iconPosition]=\"config.primaryButton.iconPosition\"\r\n [href]=\"config.primaryButton.href\"\r\n [hrefTarget]=\"config.primaryButton.hrefTarget\"\r\n [width]=\"config.primaryButton.width\"\r\n [isSubmit]=\"config.primaryButton.isSubmit\"\r\n [buttonIconSize]=\"config.primaryButton.buttonIconSize\"\r\n [showSpinner]=\"config.primaryButton.showSpinner\"\r\n (onClickEvent)=\"onButtonClick('primary', $event)\">\r\n </sa-button>\r\n }\r\n </div>\r\n </div>\r\n \r\n <div class=\"layout-section__content\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div> ","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { StatusDotConfig } from '../../interfaces/status-dot.interface';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@Component({\r\n selector: 'sa-status-dot',\r\n standalone: true,\r\n imports: [CommonModule, MatTooltipModule],\r\n template: `\r\n <div [matTooltip]=\"config.tooltip\"\r\n class=\"status-dot\"\r\n [class]=\"config.status\"\r\n [class.outline]=\"config.theme === 'outline'\"\r\n [style.width.px]=\"config.size\"\r\n [style.height.px]=\"config.size\">\r\n </div>\r\n `,\r\n styles: [`\r\n :host {\r\n display: inline-block;\r\n }\r\n \r\n .status-dot {\r\n border-radius: 50%;\r\n display: inline-block;\r\n cursor: pointer;\r\n }\r\n\r\n .primary {\r\n background-color: var(--primary-500, #007bff);\r\n border: 2px solid var(--primary-500, #007bff);\r\n }\r\n\r\n .secondary {\r\n background-color: var(--secondary-500, #6c757d);\r\n border: 2px solid var(--secondary-500, #6c757d);\r\n }\r\n\r\n .success {\r\n background-color: var(--semantic-success-500, #33961F);\r\n border: 2px solid var(--semantic-success-500, #33961F);\r\n }\r\n\r\n .error {\r\n background-color: var(--semantic-error-500, #dc3545);\r\n border: 2px solid var(--semantic-error-500, #dc3545);\r\n }\r\n\r\n .warning {\r\n background-color: var(--semantic-yellow-600, #DC9408);\r\n border: 2px solid var(--semantic-yellow-600, #DC9408);\r\n }\r\n\r\n .outline {\r\n background-color: transparent !important;\r\n }\r\n `],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class StatusDotComponent {\r\n @Input() config: StatusDotConfig = {\r\n status: 'primary',\r\n size: 16,\r\n theme: 'filled',\r\n tooltip: ''\r\n };\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, Component, EventEmitter, forwardRef, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { ChipsComponent } from '../../chips/chips.component';\r\nimport { IconComponent } from '../../icon/icon.component';\r\nimport { IMenuItem } from '../../../interfaces/menu.interface';\r\nimport { StatusDotComponent } from '../../status-dot/status-dot.component';\r\nimport { MenuDirective } from '../menu.directive';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IconService } from '../../icon/icon.service';\r\n\r\n@Component({\r\n selector: 'sa-menu-item',\r\n standalone: true,\r\n imports: [CommonModule, ChipsComponent,HttpClientModule, IconComponent, StatusDotComponent,\r\n forwardRef(() => MenuDirective) \r\n ],\r\n providers: [IconService],\r\n templateUrl: './menu-item.component.html',\r\n styleUrl: './menu-item.component.css'\r\n})\r\nexport class SAMenuItemComponent implements AfterViewInit {\r\n @Input('item') item: IMenuItem;\r\n @Input('showRound') showRound: boolean;\r\n @Output() onEvent: EventEmitter<any> = new EventEmitter();\r\n @ViewChild(forwardRef(() => MenuDirective)) menuDirective: MenuDirective;\r\n // @ViewChild(MenuDirective) menuDirective?: MenuDirective;\r\n\r\n ngAfterViewInit() {\r\n if (this.menuDirective) {\r\n this.menuDirective.onEvent.subscribe((event) => {\r\n this.onEvent.emit(event); // ✅ re-emit to SAMenuComponent\r\n });\r\n }\r\n }\r\n\r\n optionClicked(item: IMenuItem) {\r\n this.onEvent.emit({ type: 'click', item });\r\n }\r\n}\r\n","<!-- <div mat-menu-item class=\"sa-menu-item\">\r\n <span>{{item.label}}</span>\r\n</div> -->\r\n\r\n<div class=\"section-item {{item?.sepratorPosition}}\" [ngStyle]=\"{ 'border-radius': showRound ? '5px' : '0' }\" [ngClass]=\"item.isSelected ? 'selected' : ''\" (click)=\"optionClicked(item)\">\r\n <div class=\"status {{item['className']}}\" [saMenu]=\"item?.subMenu\">\r\n <sa-status-dot *ngIf=\"item.statusDot\" [config]=\"item?.statusDot\"></sa-status-dot>\r\n <sa-icon class=\"flex\" *ngIf=\"item.icon\" [icon]=\"item?.icon?.icon\" [iconPath]=\"item['icon']?.iconPath\" [iconUrl]=\"item['icon']?.iconUrl\" [size]=\"item['icon']?.size\" [customClass]=\"item['icon']?.customClass\"></sa-icon>\r\n <span class=\"sa-groupItem-lable\" >{{item.label}}</span>\r\n <div *ngIf=\"item?.subMenu\" class=\"flex ml-auto\">\r\n <sa-icon [icon]=\"'rightChevronOutlined'\" class=\"flex\" [size]=\"'20'\"></sa-icon>\r\n </div>\r\n </div>\r\n <!-- Section for showing chips if chips are available in object -->\r\n <div *ngIf=\"item.chips\" class=\"tags\">\r\n @for (itm of item.chips; track $index) {\r\n <sa-chip *ngIf=\"itm.text\" [type]=\"itm.type\" [state]=\"itm.state\" [filling]=\"itm.filling\"\r\n [text]=\"itm.text\"></sa-chip>\r\n <!-- <span [ngClass]=\"itm.status == 'active' ? 'tag-active' : 'tag-inactive'\" class=\"\">{{itm.label}}</span> -->\r\n }\r\n </div>\r\n</div>\r\n","import { Component, Input, HostBinding } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-skeleton-base',\r\n standalone: true,\r\n template: `<ng-content></ng-content>`,\r\n styles: [`\r\n :host {\r\n display: block;\r\n position: relative;\r\n overflow: hidden;\r\n background: var(--sa-skeleton-background, #e9ecef);\r\n border-radius: var(--sa-skeleton-radius, 4px);\r\n }\r\n\r\n :host.sa-dark {\r\n background: var(--sa-skeleton-background-dark, #344054);\r\n }\r\n\r\n :host::after {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n left: 0;\r\n transform: translateX(-100%);\r\n background: linear-gradient(\r\n 90deg,\r\n transparent,\r\n var(--sa-skeleton-shine, rgba(255, 255, 255, 0.3)),\r\n transparent\r\n );\r\n animation: shimmer var(--sa-skeleton-animation-duration, 1.5s) infinite;\r\n }\r\n\r\n :host.sa-dark::after {\r\n background: linear-gradient(\r\n 90deg,\r\n transparent,\r\n var(--sa-skeleton-shine-dark, #98A2B3),\r\n transparent\r\n );\r\n }\r\n\r\n @keyframes shimmer {\r\n 100% {\r\n transform: translateX(100%);\r\n }\r\n }\r\n `]\r\n})\r\nexport class SkeletonBaseComponent {\r\n @Input() width: string = '100%';\r\n @Input() height: string = '1rem';\r\n @Input() darkMode: boolean = false;\r\n @HostBinding('class.sa-dark') get isDark() { return this.darkMode; }\r\n @HostBinding('style.width') get getWidth() {\r\n return this.width;\r\n }\r\n\r\n @HostBinding('style.height') get getHeight() {\r\n return this.height;\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { SkeletonBaseComponent } from './skeleton-base.component';\r\n\r\n@Component({\r\n selector: 'sa-skeleton-text',\r\n standalone: true,\r\n imports: [SkeletonBaseComponent],\r\n template: `<sa-skeleton-base [width]=\"width\" [height]=\"height\" [darkMode]=\"darkMode\"></sa-skeleton-base>`,\r\n})\r\nexport class SkeletonTextComponent {\r\n @Input() width: string = '100%';\r\n @Input() height: string = '1rem';\r\n @Input() darkMode?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'sa-skeleton-circle',\r\n standalone: true,\r\n imports: [SkeletonBaseComponent],\r\n template: `<sa-skeleton-base [width]=\"size\" [height]=\"size\" [darkMode]=\"darkMode\" style=\"border-radius: 50%\"></sa-skeleton-base>`,\r\n})\r\nexport class SkeletonCircleComponent {\r\n @Input() size: string = '3rem';\r\n @Input() darkMode?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'sa-skeleton-rectangle',\r\n standalone: true,\r\n imports: [SkeletonBaseComponent],\r\n template: `<sa-skeleton-base [width]=\"width\" [height]=\"height\" [darkMode]=\"darkMode\"></sa-skeleton-base>`,\r\n})\r\nexport class SkeletonRectangleComponent {\r\n @Input() width: string = '100%';\r\n @Input() height: string = '100px';\r\n @Input() darkMode?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'sa-skeleton-elliptical',\r\n standalone: true,\r\n imports: [SkeletonBaseComponent],\r\n template: `<sa-skeleton-base [width]=\"width\" [height]=\"height\" [darkMode]=\"darkMode\" style=\"border-radius: 100px;\"></sa-skeleton-base>`,\r\n})\r\nexport class SkeletonEllipticalComponent {\r\n @Input() width: string = '200px';\r\n @Input() height: string = '48px';\r\n @Input() darkMode?: boolean;\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'sa-skeleton-container',\r\n standalone: true,\r\n imports: [NgStyle],\r\n template: `\r\n <div class=\"skeleton-container\" [ngStyle]=\"containerStyles\">\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n styles: [`\r\n .skeleton-container {\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--sa-skeleton-gap, 1rem);\r\n padding: var(--sa-skeleton-padding, 1rem);\r\n }\r\n `]\r\n})\r\nexport class SkeletonContainerComponent {\r\n @Input() gap?: string;\r\n @Input() padding?: string;\r\n @Input() direction: 'row' | 'column' = 'column';\r\n\r\n get containerStyles() {\r\n return {\r\n gap: this.gap,\r\n padding: this.padding,\r\n flexDirection: this.direction\r\n };\r\n }\r\n}\r\n","export interface SkeletonConfig {\r\n type: 'text' | 'circle' | 'rectangle' | 'elliptical' | 'container';\r\n width?: string;\r\n height?: string;\r\n size?: string;\r\n direction?: 'row' | 'column';\r\n gap?: string;\r\n items?: SkeletonConfig[];\r\n darkMode?: boolean;\r\n}\r\n\r\nexport interface SkeletonPreset {\r\n items: readonly SkeletonConfig[];\r\n containerConfig?: {\r\n gap?: string;\r\n padding?: string;\r\n direction?: 'row' | 'column';\r\n };\r\n darkMode?: boolean;\r\n}\r\n\r\nexport const SKELETON_PRESETS = {\r\n // Preset for a card with title, subtitle and content\r\n card: {\r\n items: [\r\n { type: 'text', width: '60%', height: '1.5rem' },\r\n { type: 'text', width: '40%', height: '1rem' },\r\n { type: 'rectangle', height: '100px' }\r\n ],\r\n containerConfig: {\r\n padding: '1rem',\r\n gap: '0.75rem'\r\n }\r\n },\r\n \r\n // Preset for a list item with avatar\r\n listItem: {\r\n items: [\r\n { type: 'circle', size: '2.5rem' },\r\n { type: 'text', width: '70%', height: '1rem' }\r\n ],\r\n containerConfig: {\r\n direction: 'row',\r\n gap: '1rem',\r\n padding: '0.5rem'\r\n }\r\n },\r\n\r\n // Preset for form fields\r\n formField: {\r\n items: [\r\n { type: 'text', width: '30%', height: '1rem' },\r\n { type: 'rectangle', height: '2.5rem' }\r\n ],\r\n containerConfig: {\r\n gap: '0.5rem'\r\n }\r\n }\r\n} as const;\r\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SkeletonBaseComponent } from './skeleton-base.component';\r\nimport { SkeletonTextComponent, SkeletonCircleComponent, SkeletonRectangleComponent, SkeletonEllipticalComponent } from './skeleton-shapes.component';\r\nimport { SkeletonContainerComponent } from './skeleton-container.component';\r\nimport { SkeletonConfig, SkeletonPreset, SKELETON_PRESETS } from './skeleton-presets';\r\n\r\n@Component({\r\n selector: 'sa-skeleton-loader',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n SkeletonBaseComponent,\r\n SkeletonTextComponent,\r\n SkeletonCircleComponent,\r\n SkeletonRectangleComponent,\r\n SkeletonEllipticalComponent,\r\n SkeletonContainerComponent\r\n ],\r\n template: `\r\n <sa-skeleton-container\r\n [gap]=\"config?.containerConfig?.gap\"\r\n [padding]=\"config?.containerConfig?.padding\"\r\n [direction]=\"config?.containerConfig?.direction || 'column'\"\r\n >\r\n @for (item of config?.items; track $index) {\r\n @switch (item.type) {\r\n @case ('text') {\r\n <sa-skeleton-text\r\n [width]=\"item.width\"\r\n [height]=\"item.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? item.darkMode\"\r\n ></sa-skeleton-text>\r\n }\r\n @case ('circle') {\r\n <sa-skeleton-circle\r\n [size]=\"item.size\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? item.darkMode\"\r\n ></sa-skeleton-circle>\r\n }\r\n @case ('rectangle') {\r\n <sa-skeleton-rectangle\r\n [width]=\"item.width\"\r\n [height]=\"item.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? item.darkMode\"\r\n ></sa-skeleton-rectangle>\r\n }\r\n @case ('elliptical') {\r\n <sa-skeleton-elliptical\r\n [width]=\"item.width\"\r\n [height]=\"item.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? item.darkMode\"\r\n ></sa-skeleton-elliptical>\r\n }\r\n @case ('container') {\r\n <sa-skeleton-container [direction]=\"item.direction\" [gap]=\"item.gap\">\r\n @for (subItem of item.items; track $index) {\r\n @switch (subItem.type) {\r\n @case ('text') {\r\n <sa-skeleton-text\r\n [width]=\"subItem.width\"\r\n [height]=\"subItem.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subItem.darkMode\"\r\n ></sa-skeleton-text>\r\n }\r\n @case ('circle') {\r\n <sa-skeleton-circle\r\n [size]=\"subItem.size\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subItem.darkMode\"\r\n ></sa-skeleton-circle>\r\n }\r\n @case ('rectangle') {\r\n <sa-skeleton-rectangle\r\n [width]=\"subItem.width\"\r\n [height]=\"subItem.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subItem.darkMode\"\r\n ></sa-skeleton-rectangle>\r\n }\r\n @case ('elliptical') {\r\n <sa-skeleton-elliptical\r\n [width]=\"subItem.width\"\r\n [height]=\"subItem.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subItem.darkMode\"\r\n ></sa-skeleton-elliptical>\r\n }\r\n @case ('container') {\r\n <sa-skeleton-container [direction]=\"subItem.direction\" [gap]=\"subItem.gap\">\r\n @for (subSubItem of subItem.items; track $index) {\r\n @switch (subSubItem.type) {\r\n @case ('text') {\r\n <sa-skeleton-text\r\n [width]=\"subSubItem.width\"\r\n [height]=\"subSubItem.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subSubItem.darkMode\"\r\n ></sa-skeleton-text>\r\n }\r\n @case ('circle') {\r\n <sa-skeleton-circle\r\n [size]=\"subSubItem.size\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subSubItem.darkMode\"\r\n ></sa-skeleton-circle>\r\n }\r\n @case ('rectangle') {\r\n <sa-skeleton-rectangle\r\n [width]=\"subSubItem.width\"\r\n [height]=\"subSubItem.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subSubItem.darkMode\"\r\n ></sa-skeleton-rectangle>\r\n }\r\n @case ('elliptical') {\r\n <sa-skeleton-elliptical\r\n [width]=\"subSubItem.width\"\r\n [height]=\"subSubItem.height\"\r\n [darkMode]=\"darkMode ?? config?.darkMode ?? subSubItem.darkMode\"\r\n ></sa-skeleton-elliptical>\r\n }\r\n }\r\n }\r\n </sa-skeleton-container>\r\n }\r\n }\r\n }\r\n </sa-skeleton-container>\r\n }\r\n }\r\n }\r\n </sa-skeleton-container>\r\n `\r\n})\r\nexport class SkeletonLoaderComponent implements OnChanges {\r\n @Input() preset?: keyof typeof SKELETON_PRESETS;\r\n @Input() config?: SkeletonPreset;\r\n @Input() darkMode?: boolean;\r\n\r\n ngOnInit() {\r\n this.updateConfig();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.updateConfig();\r\n }\r\n\r\n private updateConfig() {\r\n if (this.preset && (!this.config || !this.config.items?.length)) {\r\n this.config = SKELETON_PRESETS[this.preset];\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n SimpleChanges,\r\n OnChanges,\r\n EventEmitter,\r\n ViewChild,\r\n forwardRef,\r\n ViewChildren,\r\n QueryList,\r\n} from '@angular/core';\r\nimport {\r\n MatMenu,\r\n MatMenuDefaultOptions,\r\n MatMenuItem,\r\n MatMenuTrigger,\r\n} from '@angular/material/menu';\r\nimport {\r\n Overlay,\r\n PositionStrategy,\r\n ConnectedPosition,\r\n} from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { CardComponent } from '../card/card.component';\r\nimport { MenuItem } from '@material-ui/core';\r\nimport { SAMenuItemComponent } from './menu-list/menu-item.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { IMenu, IMenuItem } from '../../interfaces/menu.interface';\r\nimport { AvatarComponent} from '../avatar/avatar.component';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IconService } from '../icon/icon.service';\r\nimport { SkeletonLoaderComponent } from '../skeleton/skeleton-loader.component';\r\n@Component({\r\n selector: 'sa-menu',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n SAMenuItemComponent,\r\n MatMenu,\r\n MatMenuItem,\r\n ChipsComponent,\r\n HttpClientModule,\r\n IconComponent,\r\n AvatarComponent,\r\n SkeletonLoaderComponent,\r\n],\r\nproviders: [IconService],\r\n templateUrl: './menu.component.html',\r\n styleUrl: './menu.component.css',\r\n // animations: [\r\n // trigger('slideInOut', [\r\n // state('in', style({\r\n // width: '', // When expanded (fully shown)\r\n // })),\r\n // state('out', style({\r\n // width: '0', // When collapsed (hidden)\r\n // })),\r\n // transition('in <=> out', [\r\n // animate('0.2s ease-in-out'), // Animation speed and easing\r\n // ])\r\n // ])\r\n // ]\r\n})\r\nexport class SAMenuComponent implements OnChanges {\r\n @Input() position: 'left' | 'right' | 'top' | 'bottom' = 'bottom'; // Default position\r\n @Input() menu: IMenu;\r\n @Input() hostEl: any;\r\n @Output() onEvent: EventEmitter<any> = new EventEmitter();\r\n @Output() onKeyUpEvent: EventEmitter<any> = new EventEmitter();\r\n @Output() closeEvent: EventEmitter<any> = new EventEmitter();\r\n // @ViewChild('menu', {static: true}) menu;\r\n isExpanded: boolean = false;\r\n constructor(\r\n private overlay: Overlay,\r\n ) {\r\n }\r\n\r\n \r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['menu'] && changes['menu'].currentValue) {\r\n console.log('Menu component detected changes:', changes['menu'].currentValue);\r\n \r\n // Reset active tab index if tabs have changed\r\n if (this.menu?.tabs?.length && this.activeTabIndex >= this.menu.tabs.length) {\r\n this.activeTabIndex = 0;\r\n }\r\n \r\n // Prevent the menu from closing by stopping propagation of any events\r\n // that might trigger menu closing during this update cycle\r\n setTimeout(() => {\r\n // This ensures the menu stays open after the change detection cycle completes\r\n console.log('Menu update complete, menu should remain open');\r\n }, 0);\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.isExpanded = true;\r\n } \r\n\r\n setPosition() {\r\n // const positions: { [key: string]: ConnectedPosition } = {\r\n // left: { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'top' },\r\n // right: { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'top' },\r\n // top: { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top' },\r\n // bottom: { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' }\r\n // };\r\n\r\n // const overlayRef = this.overlay.create();\r\n // const userProfilePortal = new ComponentPortal(CardComponent);\r\n // const compRef = overlayRef.attach(userProfilePortal);\r\n // compRef.instance.title = 'need nduk ra bhai'\r\n // compRef.instance.body = 'sometime little bit this sometimes little bit that. Comming not comming'\r\n // compRef.instance.avatar = '../assets/avatar.svg'\r\n }\r\n\r\n itemClicked(event){\r\n this.onMenuItemClick(null,event.item)\r\n } \r\n\r\n onMenuItemClick(event: any, item: IMenuItem){\r\n // item.isSelected = !item.isSelected;\r\n this.onEvent.emit({type: 'CLICK', item, menu: this.menu});\r\n \r\n // Close the menu after the item is clicked, just like the close button\r\n if(item.subMenu === null || item.subMenu === undefined){\r\n this.closeEvent.emit(event);\r\n }\r\n }\r\n\r\n onSearch(event: any){\r\n this.onEvent.emit({type: 'SEARCH', value:event.target.value})\r\n }\r\n\r\n activeTabIndex: number = 0; // Track the active tab index\r\n\r\n setActiveTab(index: number,tabname): void {\r\n this.activeTabIndex = index; // Update the active tab index\r\n this.onEvent.emit({type: 'TAB_CLICK', activeTab:tabname, menu: this.menu})\r\n }\r\n\r\n\r\n}\r\n","<div class=\"sa-menu\" [ngClass]=\"menu.showTray ? 'sa-menu-tray sa-round-border' : ''\"\r\n [ngStyle]=\"{width: menu.width || 'max-content'}\">\r\n @if(menu?.title){\r\n <div class=\"sa-menu-title\">\r\n <h1>{{menu?.title}}</h1>\r\n <sa-icon [icon]=\"'closeOutlined'\" [size]=\"'20'\" color=\"var(--grey-200, #D0D5DD)\" class=\"sa-menu-close-icon\"\r\n (click)=\"closeEvent.emit($event)\"></sa-icon>\r\n </div>\r\n }\r\n\r\n <!-- @if(menu?.itemGroups && menu.itemGroups.length){\r\n @for (groupItem of menu.itemGroups; track groupItem) {\r\n <div class=\"sa-menu-group\">\r\n <h2>{{groupItem.groupTitle}}</h2>\r\n \r\n @for (item of groupItem.items; track $index) {\r\n <sa-menu-item [item]=\"item\" [showRound]=\"menu.showTray\" (click)=\"onMenuItemClick($event, item)\"></sa-menu-item>\r\n }\r\n </div>\r\n }\r\n } @else if(menu?.items && menu.items.length){\r\n <div class=\"sa-menu-items\">\r\n @for (item of menu.items; track item) {\r\n <sa-menu-item [item]=\"item\" (click)=\"onMenuItemClick($event, item)\"></sa-menu-item>\r\n }\r\n </div>\r\n } -->\r\n\r\n\r\n <!-- Tab Content or Item Groups -->\r\n <div class=\"sa-menu-content\">\r\n <div class=\"sa-menu-content-inner {{menu?.showSearch ? 'sa-menu-content-with-search' : ''}}\">\r\n @if(menu?.showSearch){\r\n <div class=\"search-container\">\r\n <sa-icon icon=\"search\"></sa-icon>\r\n <input name=\"menu-search-bar\" class=\"search-input\" (keyup)=\"onSearch($event)\" type=\"text\" [placeholder]=\"menu.searchPlaceholder\" \r\n />\r\n <button *ngIf=\"menu?.showAddIcon\"><i class=\"fas fa-plus\"></i></button>\r\n </div>\r\n }\r\n \r\n <!-- Tabs -->\r\n @if(menu?.tabs){\r\n <div class=\"sa-menu-tabs\">\r\n <button *ngFor=\"let tab of menu.tabs; let i = index\" [class.active]=\"i === activeTabIndex\"\r\n (click)=\"setActiveTab(i,tab.label)\">\r\n {{ tab.label }}\r\n <!-- ({{ tab.itemGroups.length }}) -->\r\n </button>\r\n </div>\r\n }\r\n <!-- Tabs End -->\r\n\r\n @if(menu?.tabs?.length){\r\n @if(menu.tabs[activeTabIndex]?.itemGroups?.length){\r\n <ng-container *ngFor=\"let groupItem of menu.tabs[activeTabIndex].itemGroups\">\r\n <div class=\"sa-menu-group\">\r\n <h2>{{groupItem.groupTitle}}</h2>\r\n <ng-container *ngFor=\"let item of groupItem.items\">\r\n <sa-menu-item [item]=\"item\" [showRound]=\"menu.showTray\"\r\n (click)=\"onMenuItemClick($event, item)\"></sa-menu-item>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n }\r\n } @else if(menu?.loading && menu?.itemGroupsSkeletonConfig){\r\n <sa-skeleton-loader [config]=\"menu.itemGroupsSkeletonConfig\"></sa-skeleton-loader>\r\n } @else if(menu?.itemGroups?.length){\r\n <ng-container *ngFor=\"let groupItem of menu.itemGroups\">\r\n <div class=\"sa-menu-group\">\r\n <h2>{{groupItem.groupTitle}}</h2>\r\n <ng-container *ngFor=\"let item of groupItem.items\">\r\n <sa-menu-item [item]=\"item\" [showRound]=\"menu.showTray\"\r\n (click)=\"onMenuItemClick($event, item)\"></sa-menu-item>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if(menu?.items && menu?.items?.length){\r\n <div *ngIf=\"menu?.user\" class=\"profile-badge\">\r\n <div class=\"avatar\">\r\n <sa-avatar [altText]=\"menu?.user?.altText\" [imagePath]=\"''\" [size]=\"'large'\"></sa-avatar>\r\n </div>\r\n <div class=\"profile-info\">\r\n <p class=\"profile-name\">{{menu?.user?.name}}</p>\r\n <p class=\"profile-email\">{{menu?.user?.email}}</p>\r\n </div>\r\n </div>\r\n <div class=\"sa-menu-items\">\r\n @for (item of menu.items; track item) {\r\n <sa-menu-item [item]=\"item\" (onEvent)=\"itemClicked($event)\"> </sa-menu-item>\r\n }\r\n </div>\r\n }\r\n\r\n</div>","import { ConnectedPosition, ConnectionPositionPair, FlexibleConnectedPositionStrategyOrigin, Overlay, OverlayContainer, PositionStrategy } from '@angular/cdk/overlay';\r\nimport { Directive, ElementRef, EventEmitter, HostListener, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { SAMenuComponent } from './menu.component';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { IMenu, MyOverlayPositions } from '../../interfaces/menu.interface';\r\nimport { BehaviorSubject, Subject, takeUntil } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[saMenu]',\r\n standalone: true\r\n})\r\nexport class MenuDirective implements OnInit, OnChanges, OnDestroy {\r\n // Stream to track menu configuration changes\r\n private menuConfig$ = new BehaviorSubject<IMenu | null>(null);\r\n \r\n // Stream to handle component destruction\r\n private destroy$ = new Subject<void>();\r\n\r\n // @Input('saMenuObj') saMenuObj = {};\r\n @Input('saMenuRef') saMenuRef: ViewContainerRef | TemplateRef<ElementRef> | null = null;\r\n @Output('onMenuEvent') onMenuEvent: EventEmitter<any> = new EventEmitter();\r\n @Output() onEvent: EventEmitter<any> = new EventEmitter();\r\n @Output() onAttached: EventEmitter<{ element: ElementRef, menu: IMenu }> = new EventEmitter();\r\n @Output() onDetached: EventEmitter<{ element: ElementRef, menu: IMenu }> = new EventEmitter();\r\n\r\n _saMenu: IMenu;\r\n _position: 'left' | 'right' | 'top' | 'bottom' = 'right';\r\n @Input('saMenu')\r\n get saMenu(): IMenu {\r\n return this._saMenu;\r\n }\r\n\r\n set saMenu(value: IMenu) {\r\n this._saMenu = value;\r\n // Emit the new configuration to the stream\r\n this.menuConfig$.next(value);\r\n }\r\n\r\n @Input('saManuPosition')\r\n get position(){\r\n return this._position;\r\n }\r\n set position(value: 'left' | 'right' | 'top' | 'bottom'){\r\n this._position = value;\r\n }\r\n\r\n constructor(\r\n private overlay: Overlay,\r\n private overlayContainer: OverlayContainer,\r\n private elRef:ElementRef\r\n ) {}\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(e) {\r\n if(!!this._saMenu?.items?.length || !!this._saMenu?.itemGroups?.length || !!this._saMenu?.tabs?.length)\r\n this.attachMenu();\r\n }\r\n\r\n private overlayRef: any = null;\r\n private compRef: any = null;\r\n\r\n ngOnInit() {\r\n // Subscribe to menu configuration changes\r\n this.menuConfig$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(config => {\r\n if (!config) return;\r\n \r\n // If the menu is already open, update it without closing\r\n if (this.overlayRef && this.compRef) {\r\n console.log('Updating open menu with new config');\r\n this.compRef.instance.menu = config;\r\n \r\n // Manually trigger change detection if needed\r\n if (this.compRef.instance.ngOnChanges) {\r\n this.compRef.instance.ngOnChanges({\r\n menu: {\r\n currentValue: config,\r\n previousValue: null,\r\n firstChange: false,\r\n isFirstChange: () => false\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n }\r\n\r\n // We've moved this functionality to the reactive stream\r\n \r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Menu changes are now handled through the reactive stream\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Clean up subscriptions\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n \r\n // Clean up the overlay\r\n this.detachMenu();\r\n }\r\n\r\n attachMenu() {\r\n const hostElement = this.elRef.nativeElement;\r\n const menuPortal = new ComponentPortal(SAMenuComponent);\r\n \r\n // Get the base position from MENU_POSITIONS\r\n const basePosition = MENU_POSITIONS[this._position];\r\n \r\n // Create the position strategy with fallback to MENU_POSITIONS if overlayConfig is not provided\r\n const positionStrategy: PositionStrategy = this.overlay.position()\r\n .flexibleConnectedTo(hostElement) // Position relative to the target element (the button)\r\n .withPositions([{\r\n ...basePosition,\r\n offsetX: this._saMenu.overlayConfig?.offsetX !== undefined ? this._saMenu.overlayConfig.offsetX : basePosition.offsetX,\r\n offsetY: this._saMenu.overlayConfig?.offsetY !== undefined ? this._saMenu.overlayConfig.offsetY : basePosition.offsetY\r\n }]);\r\n\r\n // Add custom class to the overlay container\r\n this.overlayContainer.getContainerElement().classList.add('sa-menu-overlay-container');\r\n \r\n this.overlayRef = this.overlay.create({\r\n positionStrategy, \r\n scrollStrategy: this.overlay.scrollStrategies.reposition(), \r\n panelClass: 'custom-menu-overlay'\r\n });\r\n this.compRef = this.overlayRef.attach(menuPortal);\r\n this.compRef.instance.menu = this.saMenu;\r\n this.compRef.instance.hostEl = hostElement;\r\n\r\n // Subscribe to menu component events and emit them\r\n this.compRef.instance.onEvent.subscribe((res) => {\r\n this.onEvent.emit(res);\r\n });\r\n\r\n this.compRef.instance.closeEvent.subscribe((res) => {\r\n this.detachMenu();\r\n });\r\n\r\n this.overlayRef.outsidePointerEvents().subscribe(() => {\r\n this.detachMenu();\r\n });\r\n\r\n this.onAttached.emit({\r\n element: this.elRef,\r\n menu: this._saMenu\r\n });\r\n }\r\n\r\n detachMenu() {\r\n if (this.overlayRef) {\r\n this.onDetached.emit({\r\n element: this.elRef,\r\n menu: this._saMenu\r\n });\r\n this.overlayRef.dispose();\r\n this.overlayRef = null;\r\n this.compRef = null;\r\n \r\n // Remove the custom class from the overlay container\r\n this.overlayContainer.getContainerElement().classList.remove('sa-menu-overlay-container');\r\n }\r\n }\r\n}\r\n\r\nconst MENU_POSITIONS: MyOverlayPositions= {\r\n 'right': {\r\n originX: 'end',\r\n originY: 'center',\r\n overlayX: 'start',\r\n overlayY: 'center',\r\n offsetX: 20,\r\n offsetY: 0\r\n },\r\n 'left': {\r\n originX: 'start',\r\n originY: 'center',\r\n overlayX: 'end',\r\n overlayY: 'center',\r\n offsetX: 20,\r\n offsetY: 0\r\n },\r\n 'top': {\r\n originX: 'center',\r\n originY: 'top',\r\n overlayX: 'center',\r\n overlayY: 'bottom',\r\n offsetX: 0,\r\n offsetY: 20\r\n },\r\n 'bottom': {\r\n originX: 'center',\r\n originY: 'bottom',\r\n overlayX: 'center',\r\n overlayY: 'top',\r\n offsetX: 0,\r\n offsetY: 20\r\n }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, inject, Inject, Input, OnChanges, Output, signal, SimpleChanges, ViewChild, viewChild } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { AvatarComponent } from '../avatar/avatar.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\n// import { AvatarComponent } from '../avatar/avatar.component';\r\n\r\nimport {\r\n MatTooltip,\r\n MatTooltipModule\r\n} from '@angular/material/tooltip';\r\nimport { MenuDirective } from '../menu/menu.directive';\r\nimport { SAMenuComponent } from '../menu/menu.component';\r\nimport { ILeftNav, ILeftNavBlurEvent, ILeftNavClickEvent, ILeftNavItem, ILeftNavLogo } from '../../interfaces/left-nav-interface';\r\nimport { IMenu } from '../../interfaces/menu.interface';\r\nimport { IconService } from '../icon/icon.service';\r\n@Component({\r\n selector: 'sa-left-nav',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n AvatarComponent,\r\n IconComponent,\r\n MatTooltipModule,\r\n MenuDirective,\r\n SAMenuComponent,\r\n IconComponent\r\n ],\r\n providers: [IconService],\r\n templateUrl: './left-nav.component.html',\r\n styleUrl: './left-nav.component.css'\r\n})\r\nexport class LeftNavComponent implements OnChanges {\r\n\r\n // Signal to track if a menu is currently attached/open\r\n isMenuAttached = signal(false);\r\n \r\n // Track which menu is currently open\r\n private activeMenuItemRef: { itemType: 'nav' | 'footer', index: number } | null = null;\r\n @Input('config') config: ILeftNav;\r\n @Output('clickEvent') clickEvent: EventEmitter<ILeftNavClickEvent>;\r\n @Output('hoverEvent') hoverEvent: EventEmitter<ILeftNavBlurEvent>;\r\n @Output('onEvent') onEvent: EventEmitter<any> = new EventEmitter();\r\n\r\n // @Inject(ActivatedRoute) activeRouteService: ActivatedRoute;\r\n // @Inject(Router) routerService: Router;\r\n\r\n private activeItem: ILeftNavItem | null;\r\n\r\n constructor(private route: ActivatedRoute, private router: Router) {\r\n this.clickEvent = new EventEmitter();\r\n this.hoverEvent = new EventEmitter();\r\n }\r\n\r\n ngOnInit() {\r\n console.log(this.config.items);\r\n if (!this.config.footerItems) {\r\n this.config.footerItems = data.footerItems;\r\n }\r\n\r\n // This logic should not be as part of the library. It should be handled by the application.\r\n // if (this.config?.items?.length) {\r\n // this.onNavItemClick(this.config.items[0], 0);\r\n // }\r\n }\r\n\r\n ngAfterViewInit() {\r\n \r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['config'] && !changes['config'].firstChange) {\r\n // Handle config changes\r\n console.log('Config changed:', changes['config'].currentValue);\r\n \r\n // Update any derived state or trigger UI updates\r\n if (this.config?.items) {\r\n // Find and maintain active state when config changes\r\n const activeItemIndex = this.config.items.findIndex(item => item.active);\r\n if (activeItemIndex >= 0) {\r\n this.activeItem = this.config.items[activeItemIndex];\r\n }\r\n \r\n // To ensure Angular's change detection properly propagates changes to the menu directive,\r\n // we can use the Object.assign approach which preserves object references but updates properties\r\n // This is important for Angular's OnPush change detection strategy in child components\r\n \r\n // Update menu objects in items without changing their references\r\n if (this.activeMenuItemRef && this.activeMenuItemRef.itemType === 'nav') {\r\n const activeIndex = this.activeMenuItemRef.index;\r\n if (this.config.items[activeIndex]?.menu) {\r\n // Using a console.log to visually verify the approach is being applied\r\n console.log('Maintaining menu reference for active nav item:', activeIndex);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n setItemActive(index: number) {\r\n try {\r\n if (this.activeItem) {\r\n this.activeItem.active = false;\r\n }\r\n if (this.config?.items?.length) {\r\n this.activeItem = this.config.items[index];\r\n this.activeItem.active = true;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n onNavItemClick(item: ILeftNavItem, index: number, event: any = null) {\r\n\r\n this.clickEvent.emit({\r\n event,\r\n type: 'NAV_ITEM_CLICK',\r\n item\r\n });\r\n this.config.items.forEach((item) => item.active = false);\r\n this.config.items[index].active = true;\r\n \r\n if (!item.disable && item.path) {\r\n this.setItemActive(index);\r\n this.router.navigate([item.path])\r\n }\r\n this.onEvent.emit({ item, index, event });\r\n }\r\n\r\n onFooterItemClick(item: ILeftNavItem, index: number, event: any = null) {\r\n this.clickEvent.emit({\r\n event,\r\n type: 'FOOTER_ITEM_CLICK',\r\n item\r\n });\r\n }\r\n onFooterItemBlur(item: ILeftNavItem, index: number, event: any = null, tooltip: MatTooltip) {\r\n this.hoverEvent.emit({\r\n event,\r\n type: 'FOOTER_ITEM_HOVER',\r\n item\r\n });\r\n if (tooltip) {\r\n tooltip.show();\r\n }\r\n }\r\n onNavItemBlur(item: ILeftNavItem, index: number, event: any = null, tooltip: MatTooltip) {\r\n this.hoverEvent.emit({\r\n event,\r\n type: 'NAV_ITEM_HOVER',\r\n item\r\n });\r\n if (tooltip) {\r\n tooltip.show();\r\n }\r\n }\r\n\r\n onTemplateItemClick(event: any, index: number, item: any) {\r\n this.clickEvent.emit({\r\n event,\r\n item,\r\n type: 'TEMPLATE_ITEM_CLICK'\r\n });\r\n }\r\n\r\n onMenuEvent(event: any){\r\n console.log('onMenuEvent', event)\r\n }\r\n\r\n onLogoClick(event: any, logo: ILeftNavLogo) {\r\n this.clickEvent.emit({\r\n event,\r\n type: 'LOGO_CLICK',\r\n item: {\r\n ...logo,\r\n title: logo.altText\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handler for the onAttached event from the MenuDirective\r\n * This is triggered when the saMenu directive is attached to an element\r\n * @param event The event data containing the element and menu configuration\r\n * @param itemType The type of item ('nav' or 'footer')\r\n * @param item The nav/footer item that the menu is attached to\r\n * @param index The index of the item in the items array\r\n */\r\n onMenuAttached(event: { element: ElementRef, menu: IMenu }, itemType: 'nav' | 'footer', item: ILeftNavItem, index: number): void {\r\n // Emit an event that can be captured by parent applications\r\n this.isMenuAttached.set(true);\r\n \r\n // Track which menu is open\r\n this.activeMenuItemRef = { itemType, index };\r\n \r\n this.onEvent.emit({\r\n type: 'MENU_ATTACHED',\r\n itemType,\r\n item,\r\n index,\r\n element: event.element,\r\n menu: event.menu\r\n });\r\n }\r\n\r\n /**\r\n * Handler for the onDetached event from the MenuDirective\r\n * This is triggered when the menu is closed/detached\r\n * @param event The event data containing the element and menu configuration\r\n * @param itemType The type of item ('nav' or 'footer')\r\n * @param item The nav/footer item that the menu was attached to\r\n * @param index The index of the item in the items array\r\n */\r\n onMenuDetached(event: { element: ElementRef, menu: IMenu }, itemType: 'nav' | 'footer', item: ILeftNavItem, index: number): void {\r\n this.isMenuAttached.set(false);\r\n \r\n // Clear the active menu reference\r\n this.activeMenuItemRef = null;\r\n \r\n this.onEvent.emit({\r\n type: 'MENU_DETACHED',\r\n itemType,\r\n item,\r\n index,\r\n element: event.element,\r\n menu: event.menu\r\n });\r\n }\r\n\r\n\r\n}\r\n\r\n\r\nconst data: ILeftNav = {\r\n items: [{\r\n title: 'Home',\r\n icon: '',\r\n disable: false,\r\n tooltip: '',\r\n relativePath: true,\r\n path: 'home'\r\n }, {\r\n title: 'Pricing',\r\n icon: '',\r\n disable: true,\r\n tooltip: '',\r\n relativePath: true,\r\n path: ''\r\n }, {\r\n title: 'Setting',\r\n icon: 'settingsOutlined',\r\n disable: true,\r\n tooltip: 'coming soon',\r\n relativePath: true,\r\n path: ''\r\n }],\r\n footerItems: [{\r\n title: 'Help',\r\n icon: 'chatHelpOutlined',\r\n disable: true,\r\n tooltip: 'coming soon'\r\n }, {\r\n title: 'Name',\r\n disable: false,\r\n tooltip: '',\r\n type: 'AVATAR'\r\n }, {\r\n title: 'Chevron',\r\n icon: 'doubleDownOutlined',\r\n disable: true,\r\n tooltip: ''\r\n }]\r\n}","<div class=\"sa-left-nav\" >\r\n\r\n <div class=\"sa-left-nav-container {{isMenuAttached() ? 'menu-attached' : ''}}\">\r\n <div class=\"sa-left-nav-logo\">\r\n <sa-icon (click)=\"onLogoClick($event, config?.logo)\" [matTooltip]=\"config?.logo?.tooltip\" [matTooltipPosition]=\"'right'\" matTooltipClass=\"sa-left-nav-tooltip\" [icon]=\"config?.logo?.icon\" [size]=\"config?.logo?.iconSize\"></sa-icon>\r\n </div>\r\n <div class=\"sa-left-nav-items-container\">\r\n @if(config && config?.items && !!config?.items?.length){\r\n <div class=\"sa-left-nav-items-group\">\r\n <ng-container *ngFor=\"let item of config?.items; let i = index\">\r\n <div class=\"sa-left-nav-items\">\r\n <div class=\"sa-left-nav-item\" [ngClass]=\"item.active ? 'active' : '' \"\r\n [saMenu]=\"item.menu\" (onEvent)=\"onEvent.emit($event)\"\r\n (onAttached)=\"onMenuAttached($event, 'nav', item, i)\" (onDetached)=\"onMenuDetached($event, 'nav', item, i)\"\r\n (click)=\"onNavItemClick(item, i, $event)\" (mouseenter)=\"onNavItemBlur(item,i,$event,tooltip)\"\r\n #tooltip=\"matTooltip\" [matTooltip]=\"item.tooltip\" matTooltipPosition=\"right\" matTooltipClass=\"sa-left-nav-tooltip\">\r\n\r\n <sa-icon class=\"sa-left-nav-item-icon\" [icon]=\"item.icon\" [size]=\"item.iconSize || '24'\" [color]=\"item.active ? item.color : 'var(--grey-200)'\"></sa-icon>\r\n <!-- <span>{{item.tooltip}}</span> -->\r\n <!-- <span class=\"sa-left-nav-item-icon\"\r\n [ngStyle]=\"{ 'background-image': 'url(' + item.icon_url + ')' }\"></span> -->\r\n </div>\r\n <p class=\"sa-icon-label\" [ngClass]=\"item.active ? 'active' : '' \">{{item.iconLabel}}</p>\r\n </div>\r\n </ng-container>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"sa-template-item-container\">\r\n @if(config && config.templateItems && !!config.templateItems.length){\r\n <div (click)=\"onTemplateItemClick($event, i, item)\" class=\"sa-template-item\" [ngClass]=\"item.className\" *ngFor=\"let item of config.templateItems; let i = index\">\r\n <sa-icon [matTooltip]=\"item.tooltip\" matTooltipPosition=\"right\" matTooltipClass=\"sa-left-nav-tooltip sa-left-nav-template-tooltip\" [icon]=\"item.icon\" [size]=\"item.iconSize || '24'\" [color]=\"item.color\"></sa-icon>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"sa-left-nav-footer\">\r\n @if(config && config.footerItems && !!config.footerItems.length){\r\n <div class=\"sa-left-nav-footer-container\">\r\n <div class=\"sa-left-nav-footer-item\" [ngClass]=\"item.className\" *ngFor=\"let item of config.footerItems; let i = index\">\r\n <div class=\"footer-item-icon\" [ngClass]=\"item.active ? 'active' : '' \"\r\n (click)=\"onFooterItemClick(item, i, $event)\" (onEvent)=\"onEvent.emit($event)\"\r\n [saMenu]=\"item.menu\" (onAttached)=\"onMenuAttached($event, 'footer', item, i)\" (onDetached)=\"onMenuDetached($event, 'footer', item, i)\"\r\n (mouseenter)=\"onFooterItemBlur(item,i,$event,tooltip)\" #tooltip=\"matTooltip\"\r\n [matTooltip]=\"item.tooltip\" matTooltipPosition=\"right\" matTooltipClass=\"sa-left-nav-tooltip\">\r\n @if(item.type === 'AVATAR'){\r\n <!-- <span class=\"sa-left-nav-footer-name\">ET</span> -->\r\n <sa-avatar [altText]=\"item.altText\" [imagePath]=\"''\" size=\"extra-small\"></sa-avatar>\r\n }@else{\r\n <sa-icon class=\"sa-left-nav-footer-icon\" [icon]=\"item.icon\" size=\"24\" color=\"white\"></sa-icon>\r\n <!-- <span clasi ss=\"sa-left-nav-footer-icon\"\r\n [ngStyle]=\"{ 'background-image': 'url(' + item.icon_url || '' + ')' }\"></span> -->\r\n }\r\n </div>\r\n <p class=\"sa-icon-label\" [ngClass]=\"item.active ? 'active' : '' \">{{item.iconLabel}}</p>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"sa-left-nav-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n</div>","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { CardComponent } from '../card/card.component';\r\nimport { CardCustomHeaderComponent } from '../card/card-custom-header/card-custom-header.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MatTooltip } from '@angular/material/tooltip';\r\nimport { ChipsComponent } from '../chips/chips.component';\r\nimport { CardTitleActionsComponent } from '../card/card-title-actions/card-title-actions.component';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { StatusDotComponent } from '../status-dot/status-dot.component';\r\nimport { IconService } from '../icon/icon.service';\r\n\r\n@Component({\r\n selector: 'sa-mini-card',\r\n standalone: true,\r\n imports: [CardComponent, CardCustomHeaderComponent, IconComponent, MatTooltip, ChipsComponent, \r\n CardTitleActionsComponent, ButtonComponent, StatusDotComponent\r\n ],\r\n providers: [IconService],\r\n templateUrl: './mini-card.component.html',\r\n styleUrl: './mini-card.component.css'\r\n})\r\nexport class MiniCardComponent implements OnChanges {\r\n @Input() cardData: any;\r\n @Output() onCardClickEvent = new EventEmitter<any>();\r\n \r\n\r\n customClassWrapper = 'mini-card-container'\r\n\r\n card: any = {\r\n \"width\": \"500px\",\r\n \"height\": \"auto\",\r\n \"customWrapperClass\": this.customClassWrapper,\r\n \"source\": \r\n {\r\n \"id\": 342,\r\n \"created\": 1648807710970,\r\n \"updated\": 1688016005213,\r\n \"displayName\": \"Xero V2\",\r\n \"displayCategory\": 13,\r\n \"logoUrl\": \"assets/images/png/Amazon-Ads.png\",\r\n \"type\": \"XERO_V2\",\r\n \"loginType\": \"CUSTOM\",\r\n \"cdkSource\": true,\r\n \"datasourceCategory\": \"STANDARD\",\r\n \"name\": \"Xero V2\"\r\n },\r\n \"showActionActionButton\": true,\r\n \"disabled\": true,\r\n \"actionButton\": {\r\n \"text\": \"Add Source\",\r\n \"type\": \"primary\",\r\n \"size\": \"small\",\r\n \"state\": \"default\",\r\n \"id\": \"add-source\"\r\n },\r\n \"chipData\": {\r\n \"type\": \"small\",\r\n \"state\": \"error\",\r\n \"filling\": \"filled\",\r\n \"text\": \"Connected\",\r\n \"tooltip\": \"Some big text here to show tooltip text here\"\r\n },\r\n \"statusDot\": {\r\n \"status\": \"success\",\r\n \"size\": 10,\r\n \"theme\": \"filled\",\r\n \"tooltip\": \"success\"\r\n },\r\n \"action\": \"connect\"\r\n };\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['cardData'] || changes['cardData']) {\r\n this.card = changes['cardData'].currentValue;\r\n }\r\n }\r\n\r\n onCardClick(source: any, button: any, event: any) {\r\n this.onCardClickEvent.emit({ source, button, event });\r\n }\r\n\r\n}\r\n","<sa-card [column]=\"false\" [showCardHeader]=\"true\" [showCardBody]=\"false\"\r\n [width]=\"card?.width || '471px'\" [height]=\"card?.height || '100px'\" [showHeaderBodyDivider]=\"false\"\r\n [customWrapperClass]=\"card?.customWrapperClass || customClassWrapper\"\r\n class=\"{{card?.disabled ? 'disabled-card': 'enabled-card'}}\">\r\n <sa-card-title-header>\r\n <div class=\"sa-card-accordion-title-container\">\r\n <div class=\"sa-mini-card-title-icon-container\">\r\n <div class=\"sa-mini-card-custom-title\">\r\n @if(card?.source?.logoUrl){\r\n <sa-icon [img]=\"card?.source?.logoUrl\" [size]=\"'20'\" class=\"d-flex\" [customClass]=\"'auto-dimensions'\"></sa-icon>\r\n }\r\n <span [matTooltip]=\"card?.source?.tooltip\">\r\n {{card?.source?.name}}\r\n @if(card?.source?.count){\r\n <ng-container>\r\n <span>({{card?.source?.count}})</span>\r\n </ng-container>\r\n }\r\n </span>\r\n @if(card?.statusDot){\r\n <span>\r\n <sa-status-dot [config]=\"card.statusDot\">\r\n </sa-status-dot>\r\n </span>\r\n }\r\n @if(card?.chipData){\r\n <span>\r\n <sa-chip [type]=\"card?.chipData.type\" [state]=\"card?.chipData.state\"\r\n [filling]=\"card?.chipData.filling\" [text]=\"card?.chipData.text\"\r\n [iconPosition]='card?.chipData.iconPosition'\r\n [iconPath]=\"card?.chipData.iconPath\" [tooltip]=\"card?.chipData.tooltip\">\r\n </sa-chip>\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n @if(!card?.disabled && (card?.actionButton && (card?.showActionActionButton ? card?.actionButton : null))){\r\n <div class=\"sa-card-titleIcon no-margin\">\r\n <sa-card-title-actions>\r\n <sa-button [text]=\"card?.actionButton?.text\" [type]=\"card?.actionButton?.type\" [size]=\"card?.actionButton?.size\"\r\n [state]=\"card?.actionButton?.state\" [iconPosition]=\"card?.actionButton?.iconPosition\" [icon]=\"card?.actionButton?.icon\"\r\n [buttonIconSize]=\"card?.actionButton?.buttonIconSize\" (onClickEvent)=\"onCardClick(card?.source, card?.actionButton, $event)\">\r\n </sa-button>\r\n </sa-card-title-actions>\r\n </div>\r\n }\r\n </div>\r\n </sa-card-title-header>\r\n </sa-card>","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sa-page-layout',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './page-layout.component.html',\r\n styleUrl: './page-layout.component.css'\r\n})\r\nexport class PageLayoutComponent {\r\n @Input() showRightContent: boolean = false;\r\n @Input() showFooterContent: boolean = false;\r\n @Input() showProgressBarContent;\r\n}\r\n","<div class=\"layout-container\" [class]=\"showProgressBarContent === false ? 'no-padding': 'padding'\">\r\n <div class=\"layout-inner-container\"\r\n [class]=\"showProgressBarContent === false ? 'no-border-radius': 'border-radius'\">\r\n @if (showProgressBarContent) {\r\n <div class=\"progress-bar-container\">\r\n <ng-content select=\"[progress-bar-content]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"content-container\">\r\n <div class=\"left-section\">\r\n <div class=\"top-section\">\r\n <ng-content select=\"[top-content]\"></ng-content>\r\n </div>\r\n <div class=\"left-wrapper\">\r\n <ng-content select=\"[left-content]\"></ng-content>\r\n </div>\r\n @if (showFooterContent) {\r\n <div class=\"footer-section\">\r\n <ng-content select=\"[footer-content]\"></ng-content>\r\n </div>\r\n }\r\n </div>\r\n @if (showRightContent) {\r\n <div class=\"right-section\">\r\n <ng-content select=\"[right-content]\"></ng-content>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>","import { Component, ElementRef, Input, OnInit, Renderer2 } from '@angular/core';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { NgStyle } from '@angular/common';\r\n\r\n\r\n@Component({\r\n selector: 'sa-progress-bar',\r\n standalone: true,\r\n templateUrl: './progress-bar.component.html',\r\n styleUrl: './progress-bar.component.css',\r\n imports: [MatProgressBarModule, NgStyle],\r\n})\r\n\r\nexport class ProgressBarComponent implements OnInit {\r\n @Input() progressValue: number = 10;\r\n @Input() borderRadius: string = '10px';\r\n @Input() height: string = '8px';\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","<mat-progress-bar mode=\"determinate\" [value]=\"progressValue\" class=\"progress-bar\" [ngStyle]=\"{\r\n '--dynamic-height': height ,\r\n '--dynamic-border-radius': borderRadius \r\n }\"></mat-progress-bar>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormArray, FormBuilder, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport {MatDatepickerModule} from '@angular/material/datepicker';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\n\r\nexport interface QueryField {\r\n key: string;\r\n label: string;\r\n type: string;\r\n options?: { label: string; value: any }[];\r\n operators?: string[];\r\n defaultOperator?: string;\r\n}\r\n\r\nexport interface QueryOperator {\r\n value: string;\r\n label: string;\r\n types?: string[];\r\n}\r\n\r\nexport interface QueryConfig {\r\n fields: QueryField[];\r\n operators: QueryOperator[];\r\n defaultCondition?: 'and' | 'or';\r\n}\r\n\r\nexport interface QueryRule {\r\n field: string;\r\n operator: string;\r\n value: any;\r\n condition?: 'and' | 'or';\r\n}\r\n\r\nexport interface QueryGroup {\r\n condition: 'and' | 'or';\r\n rules: (QueryRule | QueryGroup)[];\r\n}\r\n\r\n@Component({\r\n selector: 'sa-query-builder',\r\n templateUrl: './query-builder.component.html',\r\n styleUrls: ['./query-builder.component.scss'],\r\n standalone: true,\r\n providers: [MatNativeDateModule],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatSelectModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatTooltipModule,\r\n MatButtonToggleModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule\r\n ]\r\n})\r\nexport class QueryBuilderComponent implements OnInit {\r\n @Input() config: QueryConfig = {\r\n fields: [],\r\n operators: [\r\n { value: '=', label: '=' },\r\n { value: '!=', label: '!=' },\r\n { value: '>', label: '>' },\r\n { value: '<', label: '<' },\r\n { value: '>=', label: '>=' },\r\n { value: '<=', label: '<=' },\r\n { value: 'contains', label: 'contains' },\r\n { value: 'between', label: 'between' }\r\n ],\r\n defaultCondition: 'and'\r\n };\r\n\r\n @Output() queryChange = new EventEmitter<QueryGroup>();\r\n\r\n form: FormGroup;\r\n model: QueryGroup;\r\n\r\n constructor(private fb: FormBuilder) {\r\n this.form = this.fb.group({\r\n condition: ['and'],\r\n rules: this.fb.array([])\r\n });\r\n\r\n this.model = {\r\n condition: 'and',\r\n rules: []\r\n };\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initializeForm();\r\n this.addRule();\r\n\r\n this.form.valueChanges.subscribe(value => {\r\n this.model = this.transformFormToModel(value);\r\n this.queryChange.emit(this.model);\r\n });\r\n }\r\n\r\n get rulesArray(): FormArray {\r\n return this.form.get('rules') as FormArray;\r\n }\r\n\r\n initializeForm(): void {\r\n this.form = this.fb.group({\r\n condition: [this.config.defaultCondition || 'and'],\r\n rules: this.fb.array([])\r\n });\r\n }\r\n\r\n addRule(): void {\r\n if (this.config.fields.length === 0) {\r\n return;\r\n }\r\n\r\n const defaultField = this.config.fields[0];\r\n const defaultOperator = defaultField.defaultOperator || this.getOperatorsForType(defaultField.type)[0]?.value || '=';\r\n\r\n const ruleGroup = this.fb.group({\r\n field: [defaultField.key],\r\n operator: [defaultOperator],\r\n value: [null],\r\n condition: ['and']\r\n });\r\n\r\n this.rulesArray.push(ruleGroup);\r\n }\r\n\r\n removeRule(index: number): void {\r\n this.rulesArray.removeAt(index);\r\n }\r\n\r\n getFieldByKey(key: string): QueryField | undefined {\r\n return this.config.fields.find(field => field.key === key);\r\n }\r\n\r\n getOperatorsForType(type: string): QueryOperator[] {\r\n return this.config.operators.filter(op => !op.types || op.types.includes(type));\r\n }\r\n\r\n getOperatorsForField(fieldKey: string): QueryOperator[] {\r\n const field = this.getFieldByKey(fieldKey);\r\n if (!field) return [];\r\n\r\n if (field.operators) {\r\n return this.config.operators.filter(op => field.operators?.includes(op.value));\r\n }\r\n\r\n return this.getOperatorsForType(field.type);\r\n }\r\n\r\n getFieldType(fieldKey: string): string {\r\n const field = this.getFieldByKey(fieldKey);\r\n return field ? field.type : 'string';\r\n }\r\n \r\n isOperatorBetween(index: number): boolean {\r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n return ruleGroup?.get('operator')?.value === 'between';\r\n }\r\n\r\n getFieldOptions(fieldKey: string): { label: string; value: any }[] {\r\n const field = this.getFieldByKey(fieldKey);\r\n return field?.options || [];\r\n }\r\n\r\n onFieldChange(index: number, fieldKey: string): void {\r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n const field = this.getFieldByKey(fieldKey);\r\n \r\n if (field) {\r\n const operators = this.getOperatorsForField(fieldKey);\r\n const defaultOperator = field.defaultOperator || (operators.length > 0 ? operators[0].value : '=');\r\n \r\n ruleGroup.get('operator')?.setValue(defaultOperator);\r\n ruleGroup.get('value')?.setValue(null);\r\n \r\n // Reset range values if they exist\r\n if (ruleGroup.get('valueStart')) {\r\n ruleGroup.get('valueStart')?.setValue(null);\r\n }\r\n if (ruleGroup.get('valueEnd')) {\r\n ruleGroup.get('valueEnd')?.setValue(null);\r\n }\r\n \r\n // Add range form controls if needed\r\n this.updateFormControlsForOperator(index, defaultOperator, field.type);\r\n }\r\n }\r\n\r\n onOperatorChange(index: number, operator: string, fieldKey: string): void {\r\n const fieldType = this.getFieldType(fieldKey);\r\n this.updateFormControlsForOperator(index, operator, fieldType);\r\n \r\n // Reset values when operator changes\r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n ruleGroup.get('value')?.setValue(null);\r\n if (ruleGroup.get('valueStart')) {\r\n ruleGroup.get('valueStart')?.setValue(null);\r\n }\r\n if (ruleGroup.get('valueEnd')) {\r\n ruleGroup.get('valueEnd')?.setValue(null);\r\n }\r\n }\r\n \r\n /**\r\n * Gets the minimum allowed date for the end date picker based on the selected start date\r\n * @param index The index of the rule row\r\n * @returns The minimum date for the end date picker (the start date or today if no start date)\r\n */\r\n getMinEndDate(index: number): Date | null {\r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n const startDate = ruleGroup.get('valueStart')?.value;\r\n \r\n // If start date is selected, use it as minimum for end date\r\n // Otherwise use today's date\r\n return startDate ? new Date(startDate) : new Date();\r\n }\r\n \r\n /**\r\n * Handles changes to the start date\r\n * @param index The index of the rule row\r\n * @param event The date change event\r\n */\r\n onStartDateChange(index: number, event: any): void {\r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n const endDate = ruleGroup.get('valueEnd')?.value;\r\n const startDate = event.value;\r\n \r\n // If end date is before start date, reset it\r\n if (endDate && startDate && new Date(endDate) < new Date(startDate)) {\r\n ruleGroup.get('valueEnd')?.setValue(null);\r\n }\r\n }\r\n \r\n updateFormControlsForOperator(index: number, operator: string, fieldType: string): void {\r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n \r\n // Handle date range for 'between' operator\r\n if (operator === 'between' && fieldType === 'date') {\r\n // Add start and end date controls if they don't exist\r\n if (!ruleGroup.contains('valueStart')) {\r\n ruleGroup.addControl('valueStart', this.fb.control(null));\r\n }\r\n if (!ruleGroup.contains('valueEnd')) {\r\n ruleGroup.addControl('valueEnd', this.fb.control(null));\r\n }\r\n } else {\r\n // Remove range controls if they exist and aren't needed\r\n if (ruleGroup.contains('valueStart')) {\r\n ruleGroup.removeControl('valueStart');\r\n }\r\n if (ruleGroup.contains('valueEnd')) {\r\n ruleGroup.removeControl('valueEnd');\r\n }\r\n }\r\n }\r\n \r\n transformFormToModel(formValue: any): QueryGroup {\r\n return {\r\n condition: formValue.condition,\r\n rules: formValue.rules.map((rule: any) => {\r\n // Handle date range for 'between' operator\r\n if (rule.operator === 'between' && this.getFieldType(rule.field) === 'date') {\r\n return {\r\n field: rule.field,\r\n operator: rule.operator,\r\n value: { start: rule.valueStart, end: rule.valueEnd },\r\n condition: rule.condition\r\n };\r\n }\r\n \r\n // Standard case\r\n return {\r\n field: rule.field,\r\n operator: rule.operator,\r\n value: rule.value,\r\n condition: rule.condition\r\n };\r\n })\r\n };\r\n }\r\n \r\n /**\r\n * Gets the condition for a specific row\r\n * @param index The index of the row\r\n * @returns The condition (and/or) for the row\r\n */\r\n getRowCondition(index: number): 'and' | 'or' {\r\n if (index === 0) return 'and'; // First row doesn't have a condition\r\n \r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n return ruleGroup.get('condition')?.value || 'and';\r\n }\r\n \r\n /**\r\n * Sets the condition for a specific row\r\n * @param index The index of the row\r\n * @param condition The condition to set (and/or)\r\n */\r\n setRowCondition(index: number, condition: 'and' | 'or'): void {\r\n if (index === 0) return; // First row doesn't have a condition\r\n \r\n const ruleGroup = this.rulesArray.at(index) as FormGroup;\r\n ruleGroup.get('condition')?.setValue(condition);\r\n }\r\n\r\n toggleCondition(): void {\r\n const currentCondition = this.form.get('condition')?.value;\r\n const newCondition = currentCondition === 'and' ? 'or' : 'and';\r\n this.form.get('condition')?.setValue(newCondition);\r\n }\r\n\r\n getConditionLabel(): string {\r\n return this.form.get('condition')?.value === 'and' ? 'AND' : 'OR';\r\n }\r\n\r\n resetQuery(): void {\r\n this.rulesArray.clear();\r\n this.addRule();\r\n }\r\n\r\n applyQuery(): void {\r\n this.queryChange.emit(this.model);\r\n }\r\n}\r\n","<div class=\"sa-query-builder\">\r\n <form [formGroup]=\"form\">\r\n <div class=\"query-builder-header\">\r\n <div class=\"where-label\">Where</div>\r\n </div>\r\n\r\n <div class=\"query-builder-body\">\r\n <div class=\"rules-container\" formArrayName=\"rules\">\r\n @for (rule of rulesArray.controls; track $index) {\r\n <div class=\"rule-row\" [formGroupName]=\"$index\">\r\n <!-- Condition selector (And/Or) -->\r\n @if ($index > 0) {\r\n <div class=\"condition-selector\">\r\n <mat-form-field appearance=\"fill\">\r\n <mat-select [value]=\"getRowCondition($index)\" (selectionChange)=\"setRowCondition($index, $event.value)\">\r\n <mat-option value=\"and\">And</mat-option>\r\n <mat-option value=\"or\">Or</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n } @else {\r\n <div class=\"condition-placeholder\"></div>\r\n }\r\n \r\n <!-- Field selection -->\r\n <mat-form-field class=\"field-select\">\r\n <mat-label>Select a filter</mat-label>\r\n <mat-select formControlName=\"field\" (selectionChange)=\"onFieldChange($index, $event.value)\">\r\n @for (field of config.fields; track field.key) {\r\n <mat-option [value]=\"field.key\">\r\n {{ field.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!-- Operator selection -->\r\n <mat-form-field class=\"operator-select\">\r\n <mat-select formControlName=\"operator\" (selectionChange)=\"onOperatorChange($index, $event.value, rule.value.field)\">\r\n @for (op of getOperatorsForField(rule.value.field); track op.value) {\r\n <mat-option [value]=\"op.value\">\r\n {{ op.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <!-- Value input based on field type -->\r\n @switch (getFieldType(rule.value.field)) {\r\n @case ('string') {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n @case ('number') {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput type=\"number\" formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n @case ('date') {\r\n @if (!isOperatorBetween($index)) {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput type=\"date\" [matDatepicker]=\"picker\" formControlName=\"value\" (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n } @else {\r\n <div class=\"date-range-container\">\r\n <mat-form-field class=\"value-input start-date\">\r\n <mat-label>Start date</mat-label>\r\n <input matInput [matDatepicker]=\"startPicker\" formControlName=\"valueStart\" (click)=\"startPicker.open()\" (dateChange)=\"onStartDateChange($index, $event)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"startPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #startPicker></mat-datepicker>\r\n </mat-form-field>\r\n <mat-form-field class=\"value-input end-date\">\r\n <mat-label>End date</mat-label>\r\n <input matInput [matDatepicker]=\"endPicker\" formControlName=\"valueEnd\" (click)=\"endPicker.open()\" [min]=\"getMinEndDate($index)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"endPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #endPicker [startAt]=\"getMinEndDate($index)\"></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n }\r\n }\r\n @case ('boolean') {\r\n <mat-form-field class=\"value-input\">\r\n <mat-select formControlName=\"value\">\r\n <mat-option [value]=\"true\">True</mat-option>\r\n <mat-option [value]=\"false\">False</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n @case ('select') {\r\n <mat-form-field class=\"value-input\">\r\n <mat-select formControlName=\"value\">\r\n @for (option of getFieldOptions(rule.value.field); track option.value) {\r\n <mat-option [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n @default {\r\n <mat-form-field class=\"value-input\">\r\n <input matInput formControlName=\"value\" placeholder=\"Enter a value...\">\r\n </mat-form-field>\r\n }\r\n }\r\n\r\n <!-- Remove rule button -->\r\n <button mat-icon-button class=\"remove-rule-btn\" \r\n (click)=\"removeRule($index)\" \r\n [disabled]=\"rulesArray.length === 1\"\r\n matTooltip=\"Remove filter\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Add rule button -->\r\n <div class=\"add-rule-container\">\r\n <button mat-button color=\"primary\" class=\"add-rule-btn\" (click)=\"addRule()\">\r\n <mat-icon>add</mat-icon> Add a filter\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"query-builder-footer\">\r\n <button mat-button class=\"reset-btn\" (click)=\"resetQuery()\">Reset</button>\r\n <button mat-raised-button color=\"primary\" class=\"apply-btn\" (click)=\"applyQuery()\">Apply filters</button>\r\n </div>\r\n </form>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { QueryGroup, QueryRule } from './query-builder.component';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class QueryBuilderService {\r\n \r\n constructor() { }\r\n\r\n /**\r\n * Converts a query group to a human-readable string\r\n * @param query The query group to convert\r\n * @returns A string representation of the query\r\n */\r\n queryToString(query: QueryGroup): string {\r\n if (!query || !query.rules || query.rules.length === 0) {\r\n return '';\r\n }\r\n\r\n return query.rules\r\n .map((rule: any) => {\r\n if (rule.condition) {\r\n return `(${this.queryToString(rule as QueryGroup)})`;\r\n } else {\r\n return `${rule.field} ${rule.operator} ${rule.value}`;\r\n }\r\n })\r\n .join(` ${query.condition.toUpperCase()} `);\r\n }\r\n\r\n /**\r\n * Converts a query group to a JSON object that can be used in API requests\r\n * @param query The query group to convert\r\n * @returns A JSON object representation of the query\r\n */\r\n queryToJson(query: QueryGroup): any {\r\n if (!query || !query.rules || query.rules.length === 0) {\r\n return {};\r\n }\r\n\r\n return {\r\n condition: query.condition,\r\n rules: query.rules.map((rule: any) => {\r\n if (rule.condition) {\r\n return this.queryToJson(rule as QueryGroup);\r\n } else {\r\n return {\r\n field: rule.field,\r\n operator: rule.operator,\r\n value: rule.value\r\n };\r\n }\r\n })\r\n };\r\n }\r\n\r\n /**\r\n * Validates a query group to ensure all rules have valid values\r\n * @param query The query group to validate\r\n * @returns True if the query is valid, false otherwise\r\n */\r\n isQueryValid(query: QueryGroup): boolean {\r\n if (!query || !query.rules || query.rules.length === 0) {\r\n return false;\r\n }\r\n\r\n return query.rules.every((rule: any) => {\r\n if (rule.condition) {\r\n return this.isQueryValid(rule as QueryGroup);\r\n } else {\r\n return rule.field && rule.operator && rule.value !== undefined && rule.value !== null;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Creates an empty query group\r\n * @param condition The condition to use (and/or)\r\n * @returns An empty query group\r\n */\r\n createEmptyQuery(condition: 'and' | 'or' = 'and'): QueryGroup {\r\n return {\r\n condition,\r\n rules: []\r\n };\r\n }\r\n\r\n /**\r\n * Creates a simple query with a single rule\r\n * @param field The field to filter on\r\n * @param operator The operator to use\r\n * @param value The value to filter by\r\n * @returns A query group with a single rule\r\n */\r\n createSimpleQuery(field: string, operator: string, value: any): QueryGroup {\r\n return {\r\n condition: 'and',\r\n rules: [\r\n {\r\n field,\r\n operator,\r\n value\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { QueryBuilderComponent, QueryConfig, QueryGroup } from './query-builder.component';\r\nimport { QueryBuilderService } from './query-builder.service';\r\nimport { MatCardModule } from '@angular/material/card';\r\n\r\n@Component({\r\n selector: 'sa-query-builder-demo',\r\n standalone: true,\r\n imports: [CommonModule, QueryBuilderComponent, MatCardModule],\r\n template: `\r\n <mat-card>\r\n <mat-card-header>\r\n <mat-card-title>Query Builder Demo</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <sa-query-builder [config]=\"queryConfig\" (queryChange)=\"onQueryChange($event)\"></sa-query-builder>\r\n \r\n <div class=\"query-result\" *ngIf=\"queryString\">\r\n <h3>Query Result:</h3>\r\n <pre>{{ queryString }}</pre>\r\n <h3>JSON:</h3>\r\n <pre>{{ queryJson }}</pre>\r\n <h3>Per-Row Conditions:</h3>\r\n <ul>\r\n <li *ngFor=\"let rule of currentQuery?.rules; let i = index\">\r\n Row {{ i + 1 }}: {{ i === 0 ? 'First row' : rule.condition?.toUpperCase() }}\r\n </li>\r\n </ul>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n `,\r\n styles: [`\r\n .query-result {\r\n margin-top: 20px;\r\n padding: 16px;\r\n background-color: #f5f5f5;\r\n border-radius: 4px;\r\n }\r\n \r\n pre {\r\n white-space: pre-wrap;\r\n word-break: break-all;\r\n background-color: #e0e0e0;\r\n padding: 8px;\r\n border-radius: 4px;\r\n }\r\n `]\r\n})\r\nexport class QueryBuilderDemoComponent {\r\n queryConfig: QueryConfig = {\r\n fields: [\r\n {\r\n key: 'name',\r\n label: 'Name',\r\n type: 'string'\r\n },\r\n {\r\n key: 'age',\r\n label: 'Age',\r\n type: 'number',\r\n operators: ['=', '!=', '>', '<', '>=', '<=', 'between']\r\n },\r\n {\r\n key: 'email',\r\n label: 'Email',\r\n type: 'string',\r\n operators: ['=', '!=', 'contains']\r\n },\r\n {\r\n key: 'birthdate',\r\n label: 'Birth Date',\r\n type: 'date'\r\n },\r\n {\r\n key: 'status',\r\n label: 'Status',\r\n type: 'select',\r\n options: [\r\n { label: 'Active', value: 'active' },\r\n { label: 'Inactive', value: 'inactive' },\r\n { label: 'Pending', value: 'pending' }\r\n ]\r\n },\r\n {\r\n key: 'isVerified',\r\n label: 'Is Verified',\r\n type: 'boolean'\r\n },\r\n {\r\n key: 'lifecycle',\r\n label: 'Lifecycle',\r\n type: 'select',\r\n options: [\r\n { label: 'Active', value: 'active' },\r\n { label: 'At Risk', value: 'at_risk' },\r\n { label: 'Churned', value: 'churned' }\r\n ]\r\n }\r\n ],\r\n operators: [\r\n { value: '=', label: '=' },\r\n { value: '!=', label: '!=' },\r\n { value: '>', label: '>' },\r\n { value: '<', label: '<' },\r\n { value: '>=', label: '>=' },\r\n { value: '<=', label: '<=' },\r\n { value: 'contains', label: 'contains' },\r\n { value: 'between', label: 'between' }\r\n ],\r\n defaultCondition: 'and'\r\n };\r\n\r\n queryString: string = '';\r\n queryJson: string = '';\r\n currentQuery: QueryGroup | null = null;\r\n\r\n constructor(private queryBuilderService: QueryBuilderService) {}\r\n\r\n onQueryChange(query: QueryGroup): void {\r\n this.currentQuery = query;\r\n this.queryString = this.queryBuilderService.queryToString(query);\r\n this.queryJson = JSON.stringify(this.queryBuilderService.queryToJson(query), null, 2);\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport { FieldArrayType, FormlyFieldConfig } from '@ngx-formly/core';\r\nimport { CommonModule } from '@angular/common'; \r\nimport { FormlyModule } from '@ngx-formly/core';\r\nimport { FormGroup, FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { get, keys } from 'lodash';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { IconComponent } from '../icon/icon.component';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatNativeDateModule, MatOptionModule } from '@angular/material/core';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { trigger, state, style, transition, animate, query, stagger } from '@angular/animations';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n\r\n@Component({\r\n selector: 'sa-query-builder-formly',\r\n templateUrl: './query-builder-formly.component.html',\r\n styleUrls: ['./query-builder-formly.component.scss'],\r\n standalone: true,\r\n providers: [],\r\n animations: [\r\n trigger('rowAnimation', [\r\n transition(':enter', [\r\n style({\r\n opacity: 0,\r\n transform: 'translateY(-8px) scale(0.99)'\r\n }),\r\n animate('1100ms cubic-bezier(0.16, 1, 0.3, 1)', style({\r\n opacity: 1,\r\n transform: 'translateY(0) scale(1)'\r\n }))\r\n ]),\r\n transition(':leave', [\r\n style({\r\n opacity: 1,\r\n transform: 'translateY(0) scale(1)'\r\n }),\r\n animate('650ms cubic-bezier(0.4, 0.0, 1, 1)', style({\r\n opacity: 0,\r\n transform: 'translateY(-8px) scale(0.99)'\r\n }))\r\n ])\r\n ]),\r\n trigger('dividerAnimation', [\r\n transition(':enter', [\r\n style({\r\n opacity: 0,\r\n transform: 'scaleX(0)',\r\n transformOrigin: 'left'\r\n }),\r\n animate('1000ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({\r\n opacity: 1,\r\n transform: 'scaleX(1)'\r\n }))\r\n ]),\r\n transition(':leave', [\r\n style({\r\n opacity: 1,\r\n transform: 'scaleX(1)',\r\n transformOrigin: 'left'\r\n }),\r\n animate('600ms cubic-bezier(0.4, 0.0, 0.2, 1)', style({\r\n opacity: 0,\r\n transform: 'scaleX(0)'\r\n }))\r\n ])\r\n ])\r\n ],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n FormlyModule,\r\n ButtonComponent,\r\n IconComponent,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatOptionModule,\r\n MatIconModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule,\r\n MatTooltipModule\r\n ]\r\n})\r\nexport class QueryBuilderFormlyComponent extends FieldArrayType implements OnInit {\r\n \r\n constructor(private cdr: ChangeDetectorRef) { super(); }\r\n\r\n ngOnInit(): void {\r\n \r\n \r\n }\r\n \r\n getRowCondition(index: number): 'and' | 'or' {\r\n if (index === 0) return 'and'; \r\n \r\n const ruleGroup = this.formControl.at(index) as FormGroup;\r\n return ruleGroup.get('logicalOperator')?.value || 'and';\r\n }\r\n\r\n /**\r\n * Sets the condition for a specific row\r\n * @param index The index of the row\r\n * @param condition The condition to set (and/or)\r\n */\r\n setRowCondition(index: number, condition: 'and' | 'or'): void {\r\n if (index === 0) return; // First row doesn't have a logical operator\r\n \r\n const ruleGroup = this.formControl.at(index) as FormGroup;\r\n ruleGroup.get('logicalOperator')?.setValue(condition);\r\n }\r\n\r\n copyRule(): void {\r\n \r\n }\r\n\r\n createField(field: FormlyFieldConfig): FormlyFieldConfig {\r\n if(field.type === 'dynamic-type' || field.type === '') {\r\n field.type = 'sa-input';\r\n field.props.type = 'text';\r\n field.props.placeholder = 'Enter/Select';\r\n }\r\n return field;\r\n }\r\n\r\n\r\n\r\n\r\n // reset(): void {\r\n // this.formControl.reset();\r\n // }\r\n\r\n /**\r\n * Duplicates the row at the given index.\r\n * A deep–clone of that row’s model is inserted right after the original row.\r\n */\r\n // Helper method to backup all date range fields\r\n private backupAllDateRangeFields(): any[] {\r\n const backups: any[] = [];\r\n \r\n for (let i = 0; i < this.field.fieldGroup.length; i++) {\r\n const rowFieldGroup = this.field.fieldGroup[i];\r\n const filterValueField = rowFieldGroup?.fieldGroup?.find((f: any) => f.key === 'filterValue');\r\n \r\n if (filterValueField?.props?.['showDateRange']) {\r\n backups[i] = {\r\n props: { ...filterValueField.props },\r\n fieldGroup: filterValueField.fieldGroup ? filterValueField.fieldGroup.map((field: any) => ({\r\n key: field.key,\r\n type: field.type,\r\n className: field.className,\r\n props: { ...field.props }\r\n // Note: NOT backing up formControl - let Angular manage it\r\n })) : null,\r\n type: filterValueField.type\r\n // Note: NOT backing up formControl - let Angular manage it\r\n };\r\n }\r\n }\r\n \r\n console.log('🎯 Backed up', backups.filter(b => b).length, 'date range fields');\r\n return backups;\r\n }\r\n\r\n // Helper method to restore all date range fields\r\n private restoreAllDateRangeFields(backups: any[]): void {\r\n let restoredCount = 0;\r\n \r\n for (let i = 0; i < backups.length; i++) {\r\n if (backups[i]) {\r\n const rowFieldGroup = this.field.fieldGroup[i];\r\n const filterValueField = rowFieldGroup?.fieldGroup?.find((f: any) => f.key === 'filterValue');\r\n \r\n if (filterValueField) {\r\n console.log(`🎯 Restoring row ${i} - before:`, {\r\n hasShowDateRange: !!filterValueField.props?.['showDateRange'],\r\n hasFieldGroup: !!filterValueField.fieldGroup,\r\n fieldGroupLength: filterValueField.fieldGroup?.length\r\n });\r\n \r\n filterValueField.props = backups[i].props;\r\n filterValueField.fieldGroup = backups[i].fieldGroup;\r\n filterValueField.type = backups[i].type;\r\n \r\n // Reconnect FormControls to fieldGroup items if it's a FormGroup\r\n if (filterValueField.formControl && filterValueField.fieldGroup) {\r\n const formGroup = filterValueField.formControl;\r\n if (formGroup.get) { // Check if it's a FormGroup\r\n filterValueField.fieldGroup.forEach((field: any) => {\r\n if (field.key) {\r\n field.formControl = formGroup.get(field.key);\r\n }\r\n });\r\n console.log(`🎯 Reconnected FormControls for row ${i} fieldGroup`);\r\n }\r\n }\r\n \r\n console.log(`🎯 Restoring row ${i} - after:`, {\r\n hasShowDateRange: !!filterValueField.props?.['showDateRange'],\r\n hasFieldGroup: !!filterValueField.fieldGroup,\r\n fieldGroupLength: filterValueField.fieldGroup?.length\r\n });\r\n \r\n restoredCount++;\r\n } else {\r\n console.log(`❌ Could not find filterValueField for row ${i}`);\r\n }\r\n }\r\n }\r\n console.log(`🎯 Restored ${restoredCount} date range fields`);\r\n }\r\n\r\n // Override add method to protect existing date range fields\r\n // override add(i?: number, initialModel?: any): void {\r\n // console.log('🎯 Add operation started - protecting existing date range fields');\r\n \r\n // // BACKUP ALL DATE RANGE FIELDS BEFORE add() operation\r\n // const allDateRangeBackups = this.backupAllDateRangeFields();\r\n \r\n // // Call the parent add method\r\n // super.add(i, initialModel);\r\n \r\n // // RESTORE ALL DATE RANGE FIELDS after add() with multiple attempts\r\n // setTimeout(() => {\r\n // console.log('🎯 First restoration attempt');\r\n // this.restoreAllDateRangeFields(allDateRangeBackups);\r\n // }, 0);\r\n \r\n // setTimeout(() => {\r\n // console.log('🎯 Second restoration attempt (after handleOperatorChange)');\r\n // this.restoreAllDateRangeFields(allDateRangeBackups);\r\n // }, 100);\r\n \r\n // setTimeout(() => {\r\n // console.log('🎯 Final restoration attempt');\r\n // this.restoreAllDateRangeFields(allDateRangeBackups);\r\n // }, 300);\r\n // }\r\n isRowValidForCopy(index: number): boolean {\r\n const rowModel = this.formControl.at(index)?.value;\r\n if (!rowModel || typeof rowModel !== 'object') return false;\r\n\r\n // Check if required fields are filled: attribute, operators, and either filterValue or filterValueDateRange\r\n const hasAttribute = rowModel.attribute && typeof rowModel.attribute === 'object';\r\n const hasOperator = rowModel.operators && rowModel.operators !== '';\r\n \r\n // Check filterValue (for non-date-range fields) - can be empty string, but must be defined\r\n const hasFilterValue = 'filterValue' in rowModel && \r\n rowModel.filterValue !== undefined && \r\n rowModel.filterValue !== null;\r\n \r\n // Check filterValueDateRange (for date range fields with BETWEEN operator)\r\n const hasDateRangeValue = rowModel.filterValueDateRange && \r\n typeof rowModel.filterValueDateRange === 'object' &&\r\n (rowModel.filterValueDateRange.startDate || rowModel.filterValueDateRange.endDate);\r\n \r\n // Row is valid if it has attribute, operator, and at least one value field\r\n return hasAttribute && hasOperator && (hasFilterValue || hasDateRangeValue);\r\n }\r\n \r\n reset() {\r\n // If there are no rows, add one empty row\r\n if (!this.field.fieldGroup || this.field.fieldGroup.length === 0) {\r\n this.add();\r\n return;\r\n }\r\n\r\n // Delete all rows except the first one - go backwards to avoid index issues\r\n while (this.formControl.length > 1) {\r\n const lastIndex = this.formControl.length - 1;\r\n this.formControl.removeAt(lastIndex);\r\n this.field.fieldGroup?.splice(lastIndex, 1);\r\n }\r\n\r\n // Update the model to reflect only one row\r\n if (this.model && Array.isArray(this.model)) {\r\n this.model.splice(1, this.model.length - 1);\r\n }\r\n\r\n // Clear the first row's values\r\n const firstRowForm = this.formControl.at(0) as FormGroup;\r\n if (firstRowForm) {\r\n firstRowForm.reset({\r\n logicalOperator: 'and',\r\n attribute: null,\r\n operators: null,\r\n filterValue: null,\r\n filterValueDateRange: null\r\n });\r\n }\r\n\r\n // Also clear the model's first row\r\n if (this.model && Array.isArray(this.model) && this.model[0]) {\r\n this.model[0] = {\r\n logicalOperator: 'and',\r\n attribute: null,\r\n operators: null,\r\n filterValue: null,\r\n filterValueDateRange: null\r\n };\r\n }\r\n }\r\n\r\n getFilterType(subField: FormlyFieldConfig): string | undefined {\r\n const parentValue = get(subField, 'formControl.parent.value');\r\n if (!parentValue) return undefined;\r\n\r\n // Look through all keys of the parent value\r\n for (const key of keys(parentValue)) {\r\n const val = parentValue[key];\r\n if (val && typeof val === 'object' && 'filterType' in val) {\r\n return get(val, 'filterType');\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Helper method to restore a simple field value\r\n */\r\n private restoreSimpleField(formGroup: FormGroup, fieldName: string, value: any, backupKey?: string): void {\r\n const ctrl = formGroup?.get(fieldName);\r\n if (ctrl && value !== undefined) {\r\n if (backupKey && !formGroup.value[backupKey]) {\r\n formGroup.patchValue({ [backupKey]: value });\r\n }\r\n ctrl.setValue(value);\r\n }\r\n }\r\n\r\n /**\r\n * Helper method to restore a fieldGroup with nested controls (like date range)\r\n */\r\n private restoreFieldGroup(formGroup: FormGroup, fieldName: string, value: any): void {\r\n const ctrl = formGroup?.get(fieldName);\r\n if (ctrl && value && typeof value === 'object') {\r\n Object.keys(value).forEach(key => {\r\n if (value[key] !== undefined) {\r\n ctrl.get(key)?.setValue(value[key]);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Duplicates the row at the given index.\r\n * A deep–clone of that row's model is inserted right after the original row.\r\n */\r\n copy(index: number): void { \r\n const sourceRowForm = this.formControl.at(index) as FormGroup;\r\n if (!sourceRowForm) return;\r\n\r\n // STEP 1: Capture complete field configuration from source row\r\n const sourceFieldGroup = this.field.fieldGroup?.[index];\r\n if (!sourceFieldGroup) return;\r\n\r\n // Capture field configurations (type, props, options) for each field\r\n const fieldConfigs = new Map<string, any>();\r\n sourceFieldGroup.fieldGroup?.forEach((field: FormlyFieldConfig) => {\r\n if (field.key) {\r\n const config = {\r\n type: field.type,\r\n props: JSON.parse(JSON.stringify(field.props || {})),\r\n className: field.className\r\n };\r\n fieldConfigs.set(field.key as string, config);\r\n }\r\n });\r\n\r\n // STEP 2: Preserve all existing row values and configurations\r\n const preservedRows = new Map<number, any>();\r\n for (let i = 0; i < this.formControl.length; i++) {\r\n const rowForm = this.formControl.at(i) as FormGroup;\r\n const rowFieldGroup = this.field.fieldGroup?.[i];\r\n \r\n if (rowForm && rowFieldGroup) {\r\n const rowFieldConfigs = new Map<string, any>();\r\n rowFieldGroup.fieldGroup?.forEach((field: FormlyFieldConfig) => {\r\n if (field.key) {\r\n const config = {\r\n type: field.type,\r\n props: JSON.parse(JSON.stringify(field.props || {})),\r\n className: field.className\r\n };\r\n rowFieldConfigs.set(field.key as string, config);\r\n }\r\n });\r\n \r\n preservedRows.set(i, {\r\n values: rowForm.getRawValue(),\r\n fieldConfigs: rowFieldConfigs\r\n });\r\n }\r\n }\r\n\r\n // STEP 3: Get raw values from source row\r\n const sourceValues = sourceRowForm.getRawValue();\r\n\r\n // Capture actual values (especially Date objects)\r\n const filterValueCtrl = sourceRowForm.get('filterValue');\r\n const actualFilterValue = filterValueCtrl?.value;\r\n \r\n const dateRangeCtrl = sourceRowForm.get('filterValueDateRange');\r\n const actualDateRange = dateRangeCtrl?.value;\r\n\r\n // Clone the model\r\n const clonedModel = JSON.parse(JSON.stringify(sourceValues));\r\n\r\n // Preserve actual Date values\r\n const capturedFilterValue = actualFilterValue instanceof Date \r\n ? new Date(actualFilterValue.getTime()) \r\n : actualFilterValue;\r\n \r\n const capturedDateRange = actualDateRange && typeof actualDateRange === 'object'\r\n ? JSON.parse(JSON.stringify(actualDateRange))\r\n : actualDateRange;\r\n\r\n // If copying the first row, add logical operator\r\n if (index === 0) {\r\n clonedModel.logicalOperator = 'and';\r\n }\r\n\r\n // STEP 4: Mark that we're in a copy operation to prevent hooks from interfering\r\n (this as any)._isCopying = true;\r\n if (this.field?.options?.formState) {\r\n this.field.options.formState._isCopying = true;\r\n }\r\n \r\n // Insert the new row\r\n this.add(index + 1, clonedModel);\r\n // STEP 5: IMMEDIATELY apply field configurations to ALL rows\r\n // Since hooks are disabled, we need to manually set the correct field types\r\n // Do this synchronously before any rendering\r\n if (this.field.fieldGroup) {\r\n for (let i = 0; i < this.field.fieldGroup.length; i++) {\r\n const rowFieldGroup = this.field.fieldGroup[i];\r\n const originalIndex = i > index ? i - 1 : (i === index + 1 ? index : i);\r\n const configSource = i === index + 1 ? fieldConfigs : preservedRows.get(originalIndex)?.fieldConfigs;\r\n \r\n if (rowFieldGroup && configSource) {\r\n rowFieldGroup.fieldGroup?.forEach((field: FormlyFieldConfig) => {\r\n if (field.key) {\r\n const config = configSource.get(field.key as string);\r\n if (config) {\r\n field.type = config.type;\r\n // Clean the props - remove internal state that might interfere\r\n const cleanProps = { ...config.props };\r\n // Reset internal state for ng-select fields\r\n if (field.type === 'sa-ng-select') {\r\n if (cleanProps.searchTerm !== undefined) {\r\n cleanProps.searchTerm = '';\r\n }\r\n // Ensure loading is false so placeholder shows\r\n if (cleanProps.options && cleanProps.options.length > 0) {\r\n cleanProps.loading = false;\r\n }\r\n }\r\n field.props = { ...field.props, ...cleanProps };\r\n field.className = config.className;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n // STEP 6: Apply values to the copied row after a small delay\r\n setTimeout(() => {\r\n const copiedRowIndex = index + 1;\r\n const rowForm = this.formControl.at(copiedRowIndex) as FormGroup;\r\n const rowFieldGroup = this.field.fieldGroup?.[copiedRowIndex];\r\n \r\n if (!rowForm || !rowFieldGroup) {\r\n console.error('Could not find copied row');\r\n return;\r\n }\r\n \r\n // Set the actual values for the copied row (configs already applied synchronously)\r\n setTimeout(() => {\r\n const filterValueCtrl = rowForm.get('filterValue');\r\n const dateRangeCtrl = rowForm.get('filterValueDateRange');\r\n \r\n if (capturedFilterValue !== null && capturedFilterValue !== undefined && filterValueCtrl) {\r\n filterValueCtrl.setValue(capturedFilterValue, { emitEvent: true });\r\n filterValueCtrl.markAsTouched();\r\n filterValueCtrl.updateValueAndValidity();\r\n }\r\n \r\n if (capturedDateRange && dateRangeCtrl) {\r\n dateRangeCtrl.patchValue(capturedDateRange, { emitEvent: true });\r\n \r\n }\r\n }, 50);\r\n \r\n // Verify that existing rows were not affected\r\n setTimeout(() => {\r\n \r\n // Log all row values for debugging\r\n for (let i = 0; i < this.formControl.length; i++) {\r\n const rowForm = this.formControl.at(i) as FormGroup;\r\n const filterValue = rowForm?.get('filterValue')?.value;\r\n }\r\n \r\n for (let i = 0; i < this.formControl.length; i++) {\r\n if (i === copiedRowIndex) continue; // Skip the copied row\r\n \r\n const originalIndex = i > index ? i - 1 : i;\r\n const preserved = preservedRows.get(originalIndex);\r\n const currentRowFieldGroup = this.field.fieldGroup?.[i];\r\n \r\n if (preserved && currentRowFieldGroup) {\r\n currentRowFieldGroup.fieldGroup?.forEach((field: FormlyFieldConfig) => {\r\n if (field.key === 'filterValue') {\r\n const preservedConfig = preserved.fieldConfigs.get(field.key as string);\r\n if (preservedConfig) {\r\n const typeMatches = field.type === preservedConfig.type;\r\n const optionsMatch = JSON.stringify(field.props?.options) === JSON.stringify(preservedConfig.props?.options);\r\n \r\n if (!typeMatches || !optionsMatch) {\r\n \r\n // If existing row was affected, restore it\r\n if ((field as any)._componentRefs) {\r\n (field as any)._componentRefs = [];\r\n }\r\n field.type = preservedConfig.type;\r\n field.props = { ...field.props, ...preservedConfig.props };\r\n field.className = preservedConfig.className;\r\n \r\n setTimeout(() => {\r\n field?.options?.fieldChanges?.next({\r\n type: 'type',\r\n field,\r\n value: preservedConfig.type,\r\n });\r\n this.cdr.detectChanges();\r\n }, 10);\r\n } else {\r\n const optionsCount = Array.isArray(field.props?.options) ? field.props.options.length : 0;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }, 150);\r\n \r\n // Clear the copying flag after restoration is complete\r\n setTimeout(() => {\r\n delete (this as any)._isCopying;\r\n if (this.field?.options?.formState) {\r\n delete this.field.options.formState._isCopying;\r\n }\r\n console.log('=== COPY COMPLETED ===');\r\n }, 200);\r\n }, 100);\r\n }\r\n\r\n}\r\n","<div class=\"sa-query-builder-container\">\r\n <div class=\"query-builder-body\">\r\n @for(row of field.fieldGroup; track row.id || $index; let last = $last) {\r\n @if($index > 0 && ((row?.model?.logicalOperator | uppercase) === 'AND' || row?.model?.logicalOperator === undefined)){\r\n <div class=\"segment-divider\" [@dividerAnimation]></div>\r\n }\r\n <div class=\"row align-items-baseline query-row\" \r\n [class.or-row]=\"(row?.model?.logicalOperator | uppercase) === 'OR'\"\r\n [class.before-or-row]=\"field?.fieldGroup && $index < ((field.fieldGroup?.length ?? 0) - 1) && (field.fieldGroup?.[$index + 1]?.model?.logicalOperator | uppercase) === 'OR'\"\r\n [@rowAnimation]>\r\n @if ($index === 0) {\r\n <span class=\"where-text flex-1\">Where the:</span>\r\n }\r\n @for (ruleField of row.fieldGroup; track ruleField.key || $index) {\r\n @if(!!ruleField?.props?.['hasDynamicType']){\r\n @switch (getFilterType(ruleField)) {\r\n @case ('STRING') {\r\n <formly-field [field]=\"ruleField\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n @case ('NUMBER') {\r\n <formly-field [field]=\"ruleField\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n @case ('BOOLEAN') {\r\n <formly-field [field]=\"ruleField\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n @case ('CURRENCY') {\r\n <formly-field [field]=\"ruleField\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n @case ('DATE') {\r\n <formly-field [field]=\"ruleField\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n @case ('SELECT') {\r\n <formly-field [field]=\"ruleField\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n @default {\r\n <formly-field [field]=\"createField(ruleField)\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n }\r\n }@else{\r\n <formly-field class=\"col\" [field]=\"ruleField\" matTooltip=\"Select a filter first\"\r\n [matTooltipDisabled]=\"!ruleField.formControl?.disabled\"></formly-field>\r\n }\r\n }\r\n <div class=\"rule-icon-container\">\r\n @if(props?.['showCopyButton']){\r\n <sa-icon icon=\"copyOutlined\" size=\"20\" matTooltip=\"Copy\" class=\"copy-icon pointer {{(field?.fieldGroup?.length === (props?.['maxRows'] || 5)) || !isRowValidForCopy($index) ? 'disabled-part' : ''}}\" (click)=\"isRowValidForCopy($index) && copy($index)\"></sa-icon>\r\n }\r\n @if(props?.['showDeleteRowButton']){\r\n <sa-icon icon=\"deleteIcon\" size=\"20\" matTooltip=\"Delete\" class=\"delete-icon pointer {{field?.fieldGroup?.length === (1) ? 'disabled-part' : ''}}\" (click)=\"remove($index)\"></sa-icon>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <!-- Buttons -->\r\n <div class=\"rule-button-container\">\r\n @if(props?.['showAddFilterButton']){\r\n <sa-button icon=\"add\" iconPosition=\"left\" text=\"Add filter\" (onClickEvent)=\"add()\"\r\n [state]=\"field?.fieldGroup?.length === (props?.['maxRows'] || 5) ? 'disabled' : 'default'\"\r\n type=\"outline\" size=\"medium\">\r\n </sa-button>\r\n }\r\n @if(props?.['showCount']){\r\n <span class=\"filters-count\">{{field?.fieldGroup?.length}}/{{props?.['maxRows'] || 5}} filters</span>\r\n }\r\n @if(props?.['showResetButton']){\r\n <sa-button iconPosition=\"left\" text=\"Reset\" (onClickEvent)=\"reset()\" type=\"primary\" size=\"medium\">\r\n </sa-button>\r\n }\r\n </div>\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, OnInit, Output, ViewChild, ElementRef, AfterViewInit, OnDestroy, HostListener } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { Observable, Subject, of } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, switchMap, takeUntil } from 'rxjs/operators';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\n\r\nexport interface TextareaQueryConfig {\r\n fields: TextareaQueryField[];\r\n operators: TextareaQueryOperator[];\r\n defaultCondition?: 'and' | 'or';\r\n}\r\n\r\nexport interface TextareaQueryField {\r\n key: string;\r\n label: string;\r\n type: string;\r\n description?: string;\r\n unit?: string;\r\n options?: { label: string; value: any }[];\r\n operators?: string[];\r\n}\r\n\r\nexport interface TextareaQueryOperator {\r\n value: string;\r\n label: string;\r\n description?: string;\r\n types?: string[];\r\n}\r\n\r\nexport interface TextareaQueryGroup {\r\n condition: 'and' | 'or';\r\n rules: (TextareaQueryRule | TextareaQueryGroup)[];\r\n}\r\n\r\nexport interface TextareaQueryRule {\r\n field: string;\r\n operator: string;\r\n value: any;\r\n condition?: 'and' | 'or';\r\n}\r\n\r\nexport interface SuggestionItem {\r\n id: string;\r\n name: string;\r\n label: string;\r\n description?: string;\r\n unit?: string;\r\n value: string;\r\n type: 'field' | 'operator' | 'value' | 'condition';\r\n}\r\n\r\nexport interface DropdownPosition {\r\n top: number;\r\n left: number;\r\n}\r\n\r\n@Component({\r\n selector: 'sa-query-builder-textarea',\r\n templateUrl: './query-builder-textarea.component.html',\r\n styleUrls: ['./query-builder-textarea.component.scss'],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatDividerModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule\r\n ]\r\n})\r\nexport class QueryBuilderTextareaComponent implements OnInit, AfterViewInit, OnDestroy {\r\n @Input() config: TextareaQueryConfig = {\r\n fields: [],\r\n operators: [\r\n { value: '=', label: '=', description: 'Equal to' },\r\n { value: '!=', label: '!=', description: 'Not equal to' },\r\n { value: '>', label: '>', description: 'Greater than' },\r\n { value: '<', label: '<', description: 'Less than' },\r\n { value: '>=', label: '>=', description: 'Greater than or equal to' },\r\n { value: '<=', label: '<=', description: 'Less than or equal to' },\r\n { value: 'contains', label: 'contains', description: 'Contains text' }\r\n ],\r\n defaultCondition: 'and'\r\n };\r\n\r\n @Output() queryChange = new EventEmitter<TextareaQueryGroup>();\r\n @Output() suggestionSelected = new EventEmitter<SuggestionItem>();\r\n \r\n @ViewChild('queryTextarea') queryTextarea!: ElementRef<HTMLTextAreaElement>;\r\n @ViewChild('dropdown') dropdown!: ElementRef<HTMLDivElement>;\r\n \r\n form: FormGroup;\r\n suggestions: SuggestionItem[] = [];\r\n filteredSuggestions: SuggestionItem[] = [];\r\n isDropdownVisible = false;\r\n selectedIndex = 0;\r\n dropdownPosition: DropdownPosition = { top: 0, left: 0 };\r\n selectedSuggestion: SuggestionItem | null = null;\r\n \r\n // Date picker state\r\n isDatePickerVisible = false;\r\n datePickerPosition: DropdownPosition = { top: 0, left: 0 };\r\n currentDateField: string | null = null;\r\n currentDateOperator: string | null = null;\r\n showDualDatePicker = false;\r\n firstDateSelected: Date | null = null;\r\n secondDateSelected: Date | null = null;\r\n \r\n private destroy$ = new Subject<void>();\r\n private searchSubject = new Subject<string>();\r\n private cursorPosition = 0;\r\n private currentContext: 'field' | 'operator' | 'value' | 'condition' = 'field';\r\n private lastSelectedField: string | null = null;\r\n private readonly DEBOUNCE_DELAY = 10;\r\n private readonly MAX_SUGGESTIONS = 10;\r\n \r\n constructor(private fb: FormBuilder) {\r\n this.form = this.fb.group({\r\n queryText: ['']\r\n });\r\n }\r\n \r\n // Keyboard event handler for dropdown navigation\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: Event): void {\r\n if (!this.dropdown?.nativeElement.contains(event.target as Node) && \r\n !this.queryTextarea?.nativeElement.contains(event.target as Node)) {\r\n this.hideDropdown();\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initSuggestions();\r\n this.setupSearchStream();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.cursorPosition = 0;\r\n this.setupTextareaEvents();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n \r\n private setupSearchStream(): void {\r\n this.searchSubject.pipe(\r\n debounceTime(this.DEBOUNCE_DELAY),\r\n distinctUntilChanged(),\r\n switchMap(query => this.searchSuggestions(query)),\r\n takeUntil(this.destroy$)\r\n ).subscribe(suggestions => {\r\n this.filteredSuggestions = suggestions;\r\n this.isDropdownVisible = suggestions.length > 0;\r\n this.selectedIndex = 0;\r\n this.updateDropdownPosition();\r\n });\r\n }\r\n\r\n private setupTextareaEvents(): void {\r\n if (!this.queryTextarea) return;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n \r\n // Handle input events\r\n textarea.addEventListener('input', this.onTextareaInput.bind(this));\r\n textarea.addEventListener('keydown', this.onKeyDown.bind(this));\r\n textarea.addEventListener('click', this.updateCursorPosition.bind(this));\r\n textarea.addEventListener('keyup', this.updateCursorPosition.bind(this));\r\n textarea.addEventListener('blur', this.onTextareaBlur.bind(this));\r\n }\r\n\r\n private initSuggestions(): void {\r\n // Add field suggestions\r\n this.config.fields.forEach(field => {\r\n this.suggestions.push({\r\n id: field.key,\r\n name: field.label,\r\n label: field.label,\r\n description: field.description || `${field.type} field`,\r\n unit: field.unit,\r\n value: field.key,\r\n type: 'field'\r\n });\r\n });\r\n \r\n // Add operator suggestions\r\n this.config.operators.forEach(op => {\r\n this.suggestions.push({\r\n id: op.value,\r\n name: op.label,\r\n label: op.label,\r\n description: op.description || `${op.label} operator`,\r\n value: op.value,\r\n type: 'operator'\r\n });\r\n });\r\n \r\n // Add condition suggestions\r\n this.suggestions.push(\r\n {\r\n id: 'AND',\r\n name: 'AND',\r\n label: 'AND',\r\n description: 'Logical AND operator',\r\n value: 'AND',\r\n type: 'condition'\r\n },\r\n {\r\n id: 'OR',\r\n name: 'OR',\r\n label: 'OR',\r\n description: 'Logical OR operator',\r\n value: 'OR',\r\n type: 'condition'\r\n }\r\n );\r\n }\r\n \r\n private updateCursorPosition(event?: Event): void {\r\n if (!this.queryTextarea) return;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n this.cursorPosition = textarea.selectionStart || 0;\r\n this.updateContext();\r\n }\r\n\r\n /**\r\n * Gets text up to the cursor position\r\n */\r\n getTillCursor(): string {\r\n if (!this.queryTextarea) return '';\r\n const textarea = this.queryTextarea.nativeElement;\r\n const fullVal = textarea.value || '';\r\n const cursorPos = Math.max(0, Math.min(this.cursorPosition, fullVal.length));\r\n return fullVal.substring(0, cursorPos);\r\n }\r\n\r\n /**\r\n * Gets the last word before cursor position\r\n */\r\n getLastWordBeforeCursor(): string {\r\n const tillCursor = this.getTillCursor();\r\n \r\n // Special handling for AND/OR conditions\r\n if (tillCursor.toLowerCase().endsWith(' and')) {\r\n return 'and';\r\n }\r\n if (tillCursor.toLowerCase().endsWith(' or')) {\r\n return 'or';\r\n }\r\n \r\n // Split by spaces, operators, and special characters\r\n const pattern = /\\sand\\s|\\sor\\s|[^a-z0-9 ]|\\n/gi;\r\n const parts = tillCursor.split(pattern);\r\n if (parts.length) return parts[parts.length - 1].trim();\r\n return '';\r\n }\r\n\r\n /**\r\n * Inserts text at the position of the current word\r\n */\r\n insertWord(text: string, appendOnly: boolean = false): void {\r\n if (!this.queryTextarea) return;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const fullVal = textarea.value || '';\r\n const cursorPos = this.cursorPosition;\r\n const tillCursor = fullVal.substring(0, cursorPos);\r\n const lastWord = this.getLastWordBeforeCursor();\r\n \r\n // Find position to insert text\r\n let insertPos = cursorPos;\r\n if (!appendOnly && lastWord) {\r\n const lastWordIndex = tillCursor.lastIndexOf(lastWord);\r\n if (lastWordIndex !== -1) {\r\n insertPos = lastWordIndex;\r\n }\r\n }\r\n \r\n // Split text and create new value\r\n const before = fullVal.substring(0, insertPos);\r\n const after = fullVal.substring(cursorPos);\r\n const newVal = before + text + after;\r\n \r\n // Calculate new cursor position\r\n const newPos = before.length + text.length;\r\n \r\n // Update textarea and form control\r\n textarea.value = newVal;\r\n this.form.get('queryText')?.setValue(newVal, { emitEvent: false });\r\n \r\n // Set cursor position\r\n textarea.focus();\r\n textarea.selectionStart = newPos;\r\n textarea.selectionEnd = newPos;\r\n this.cursorPosition = newPos;\r\n \r\n // Only parse query when explicitly needed (like after selection)\r\n // Don't auto-parse to avoid infinite loops\r\n }\r\n\r\n private insertSuggestion(suggestion: SuggestionItem): void {\r\n const textarea = this.queryTextarea?.nativeElement;\r\n if (!textarea) return;\r\n \r\n const text = textarea.value;\r\n const currentWord = this.getCurrentWord();\r\n const wordBounds = this.getCurrentWordBounds();\r\n \r\n // Determine what to insert\r\n let insertText = suggestion.value;\r\n let additionalText = '';\r\n \r\n // Add appropriate spacing and formatting based on suggestion type\r\n switch (suggestion.type) {\r\n case 'field':\r\n additionalText = ' ';\r\n break;\r\n case 'operator':\r\n additionalText = ' ';\r\n break;\r\n case 'value':\r\n // No additional text for values\r\n break;\r\n case 'condition':\r\n insertText = `\\n${suggestion.value} `;\r\n break;\r\n }\r\n \r\n // Replace the current word with the suggestion\r\n const newText = text.substring(0, wordBounds.start) + \r\n insertText + additionalText + \r\n text.substring(wordBounds.end);\r\n \r\n // Update textarea\r\n textarea.value = newText;\r\n \r\n // Set cursor position\r\n const newCursorPos = wordBounds.start + insertText.length + additionalText.length;\r\n textarea.setSelectionRange(newCursorPos, newCursorPos);\r\n this.cursorPosition = newCursorPos;\r\n \r\n // Update form control\r\n this.form.get('queryText')?.setValue(newText, { emitEvent: false });\r\n \r\n // Update context and parse query\r\n this.updateContext();\r\n this.parseAndEmitQuery(newText);\r\n }\r\n\r\n onApply(): void {\r\n const queryText = this.form.get('queryText')?.value || '';\r\n this.hideDropdown();\r\n this.parseAndEmitQuery(queryText);\r\n }\r\n\r\n onReset(): void {\r\n this.form.get('queryText')?.setValue('');\r\n this.cursorPosition = 0;\r\n this.currentContext = 'field';\r\n this.lastSelectedField = null;\r\n this.hideDropdown();\r\n \r\n if (this.queryTextarea) {\r\n this.queryTextarea.nativeElement.focus();\r\n }\r\n \r\n this.queryChange.emit({\r\n condition: this.config.defaultCondition || 'and',\r\n rules: []\r\n });\r\n }\r\n\r\n private onTextareaInput(event: Event): void {\r\n const target = event.target as HTMLTextAreaElement;\r\n if (!target) return;\r\n \r\n const value = target.value;\r\n this.cursorPosition = target.selectionStart || 0;\r\n \r\n // Update form control without triggering events to avoid loops\r\n this.form.get('queryText')?.setValue(value, { emitEvent: false });\r\n \r\n // Update context and trigger search\r\n this.updateContext();\r\n const currentWord = this.getCurrentWord();\r\n this.searchSubject.next(currentWord);\r\n \r\n // Parse and emit query\r\n this.parseAndEmitQuery(value);\r\n }\r\n\r\n private onTextareaBlur(event: FocusEvent): void {\r\n // Delay hiding dropdown to allow for clicks\r\n setTimeout(() => {\r\n if (!this.dropdown?.nativeElement.contains(document.activeElement)) {\r\n this.hideDropdown();\r\n }\r\n }, 150);\r\n }\r\n\r\n private updateContext(): void {\r\n if (!this.queryTextarea) return;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const text = textarea.value;\r\n const beforeCursor = text.substring(0, this.cursorPosition);\r\n \r\n // Enhanced context detection\r\n const currentWord = this.getCurrentWord();\r\n const previousTokens = this.getPreviousTokens(beforeCursor);\r\n \r\n if (this.isAfterOperator(previousTokens)) {\r\n this.currentContext = 'value';\r\n } else if (this.isAfterField(previousTokens)) {\r\n this.currentContext = 'operator';\r\n this.lastSelectedField = this.getLastField(previousTokens);\r\n } else if (this.isAfterValue(previousTokens)) {\r\n this.currentContext = 'condition';\r\n } else {\r\n this.currentContext = 'field';\r\n }\r\n }\r\n\r\n private filterSuggestionsByContext(query: string): SuggestionItem[] {\r\n const normalizedQuery = query.toLowerCase().trim();\r\n \r\n // Get context-appropriate suggestions\r\n let contextSuggestions = this.getContextSuggestions();\r\n \r\n // Filter by query if provided\r\n if (normalizedQuery) {\r\n contextSuggestions = contextSuggestions.filter(suggestion => \r\n suggestion.name.toLowerCase().includes(normalizedQuery) ||\r\n suggestion.label.toLowerCase().includes(normalizedQuery) ||\r\n suggestion.value.toLowerCase().includes(normalizedQuery) ||\r\n (suggestion.description && suggestion.description.toLowerCase().includes(normalizedQuery))\r\n );\r\n }\r\n \r\n // Sort by relevance (exact matches first, then starts with, then contains)\r\n contextSuggestions.sort((a, b) => {\r\n const aScore = this.calculateRelevanceScore(a, normalizedQuery);\r\n const bScore = this.calculateRelevanceScore(b, normalizedQuery);\r\n return bScore - aScore;\r\n });\r\n \r\n return contextSuggestions.slice(0, this.MAX_SUGGESTIONS);\r\n }\r\n\r\n private getContextSuggestions(): SuggestionItem[] {\r\n switch (this.currentContext) {\r\n case 'field':\r\n return this.suggestions.filter(s => s.type === 'field');\r\n case 'operator':\r\n return this.getOperatorSuggestions();\r\n case 'value':\r\n return this.getValueSuggestions();\r\n case 'condition':\r\n return this.suggestions.filter(s => s.type === 'condition');\r\n default:\r\n return this.suggestions;\r\n }\r\n }\r\n\r\n private getOperatorSuggestions(): SuggestionItem[] {\r\n if (!this.lastSelectedField) {\r\n return this.suggestions.filter(s => s.type === 'operator');\r\n }\r\n \r\n const field = this.config.fields.find(f => f.key === this.lastSelectedField);\r\n if (!field || !field.operators) {\r\n return this.suggestions.filter(s => s.type === 'operator');\r\n }\r\n \r\n return this.suggestions.filter(s => \r\n s.type === 'operator' && field.operators!.includes(s.value)\r\n );\r\n }\r\n\r\n private getValueSuggestions(): SuggestionItem[] {\r\n if (!this.lastSelectedField) return [];\r\n \r\n const field = this.config.fields.find(f => f.key === this.lastSelectedField);\r\n if (!field || !field.options) return [];\r\n \r\n return field.options.map(option => ({\r\n id: `${field.key}_${option.value}`,\r\n name: option.label,\r\n label: option.label,\r\n value: option.value.toString(),\r\n type: 'value' as const\r\n }));\r\n }\r\n\r\n private calculateRelevanceScore(suggestion: SuggestionItem, query: string): number {\r\n if (!query) return 1;\r\n \r\n const name = suggestion.name.toLowerCase();\r\n const label = suggestion.label.toLowerCase();\r\n const value = suggestion.value.toLowerCase();\r\n \r\n // Exact match gets highest score\r\n if (name === query || label === query || value === query) return 100;\r\n \r\n // Starts with gets high score\r\n if (name.startsWith(query) || label.startsWith(query) || value.startsWith(query)) return 50;\r\n \r\n // Contains gets medium score\r\n if (name.includes(query) || label.includes(query) || value.includes(query)) return 25;\r\n \r\n // Description match gets low score\r\n if (suggestion.description && suggestion.description.toLowerCase().includes(query)) return 10;\r\n \r\n return 0;\r\n }\r\n\r\n private parseQuery(queryText: string): TextareaQueryGroup {\r\n const lines = queryText.split('\\n').filter(line => line.trim());\r\n const rules: (TextareaQueryRule | TextareaQueryGroup)[] = [];\r\n let currentCondition: 'and' | 'or' = this.config.defaultCondition || 'and';\r\n \r\n for (let i = 0; i < lines.length; i++) {\r\n const trimmedLine = lines[i].trim();\r\n if (!trimmedLine) continue;\r\n \r\n // Check if line is a condition\r\n if (trimmedLine === 'AND' || trimmedLine === 'OR') {\r\n currentCondition = trimmedLine.toLowerCase() as 'and' | 'or';\r\n continue;\r\n }\r\n \r\n // Parse rule from line\r\n const rule = this.parseRule(trimmedLine);\r\n if (rule) {\r\n rule.condition = currentCondition;\r\n rules.push(rule);\r\n }\r\n }\r\n \r\n return {\r\n condition: currentCondition,\r\n rules\r\n };\r\n }\r\n\r\n private parseAndEmitQuery(queryText: string): void {\r\n try {\r\n const query = this.parseQuery(queryText);\r\n this.queryChange.emit(query);\r\n } catch (error) {\r\n console.error('Error parsing query:', error);\r\n // Emit empty query on error\r\n this.queryChange.emit({\r\n condition: this.config.defaultCondition || 'and',\r\n rules: []\r\n });\r\n }\r\n }\r\n\r\n private onKeyDown(event: KeyboardEvent): void {\r\n if (!this.isDropdownVisible) {\r\n this.updateCursorPosition();\r\n return;\r\n }\r\n \r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.selectedIndex = Math.min(this.selectedIndex + 1, this.filteredSuggestions.length - 1);\r\n this.scrollToSelected();\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.selectedIndex = Math.max(this.selectedIndex - 1, 0);\r\n this.scrollToSelected();\r\n break;\r\n case 'Enter':\r\n case 'Tab':\r\n event.preventDefault();\r\n if (this.filteredSuggestions[this.selectedIndex]) {\r\n this.selectSuggestion(this.filteredSuggestions[this.selectedIndex]);\r\n }\r\n break;\r\n case 'Escape':\r\n event.preventDefault();\r\n this.hideDropdown();\r\n break;\r\n default:\r\n this.updateCursorPosition();\r\n break;\r\n }\r\n }\r\n\r\n private getCurrentWord(): string {\r\n if (!this.queryTextarea) return '';\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const text = textarea.value;\r\n const bounds = this.getCurrentWordBounds();\r\n \r\n return text.substring(bounds.start, bounds.end);\r\n }\r\n\r\n private getCurrentWordBounds(): { start: number; end: number } {\r\n if (!this.queryTextarea) return { start: 0, end: 0 };\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const text = textarea.value;\r\n const cursor = this.cursorPosition;\r\n \r\n let start = cursor;\r\n let end = cursor;\r\n \r\n // Find word start (go back until whitespace or start of text)\r\n while (start > 0 && /\\S/.test(text[start - 1])) {\r\n start--;\r\n }\r\n \r\n // Find word end (go forward until whitespace or end of text)\r\n while (end < text.length && /\\S/.test(text[end])) {\r\n end++;\r\n }\r\n \r\n return { start, end };\r\n }\r\n\r\n private getPreviousTokens(text: string): string[] {\r\n return text.trim().split(/\\s+/).filter(token => token.length > 0);\r\n }\r\n\r\n private isAfterOperator(tokens: string[]): boolean {\r\n if (tokens.length === 0) return false;\r\n const lastToken = tokens[tokens.length - 1];\r\n return this.config.operators.some(op => op.value === lastToken);\r\n }\r\n\r\n private isAfterField(tokens: string[]): boolean {\r\n if (tokens.length === 0) return false;\r\n const lastToken = tokens[tokens.length - 1];\r\n return this.config.fields.some(field => field.key === lastToken || field.label === lastToken);\r\n }\r\n\r\n private isAfterValue(tokens: string[]): boolean {\r\n if (tokens.length < 3) return false;\r\n \r\n // Check if we have a complete field-operator-value pattern\r\n const field = tokens[tokens.length - 3];\r\n const operator = tokens[tokens.length - 2];\r\n \r\n return this.config.fields.some(f => f.key === field || f.label === field) &&\r\n this.config.operators.some(op => op.value === operator);\r\n }\r\n\r\n private getLastField(tokens: string[]): string | null {\r\n for (let i = tokens.length - 1; i >= 0; i--) {\r\n const token = tokens[i];\r\n const field = this.config.fields.find(f => f.key === token || f.label === token);\r\n if (field) {\r\n return field.key;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n onSuggestionClick(suggestion: SuggestionItem): void {\r\n this.selectSuggestion(suggestion);\r\n }\r\n\r\n private selectSuggestion(suggestion: SuggestionItem): void {\r\n if (!suggestion || !this.queryTextarea) return;\r\n \r\n this.selectedSuggestion = suggestion;\r\n this.insertSuggestion(suggestion);\r\n this.hideDropdown();\r\n this.suggestionSelected.emit(suggestion);\r\n \r\n // Update context after selection and auto-show next suggestions\r\n setTimeout(() => {\r\n this.updateContext();\r\n this.queryTextarea?.nativeElement.focus();\r\n \r\n // Auto-show next suggestions based on selection type\r\n if (suggestion.type === 'field') {\r\n this.showOperatorSuggestions();\r\n } else if (suggestion.type === 'operator') {\r\n this.showValueSuggestions();\r\n }\r\n }, 10);\r\n }\r\n\r\n // Legacy method - keeping for backward compatibility\r\n onOptionSelected(event: any): void {\r\n // This method is kept for backward compatibility but not used\r\n // The new implementation uses onSuggestionClick instead\r\n }\r\n\r\n private searchSuggestions(query: string): Observable<SuggestionItem[]> {\r\n const suggestions = this.filterSuggestionsByContext(query);\r\n return of(suggestions);\r\n }\r\n\r\n private hideDropdown(): void {\r\n this.isDropdownVisible = false;\r\n this.selectedIndex = 0;\r\n this.filteredSuggestions = [];\r\n }\r\n\r\n private showOperatorSuggestions(): void {\r\n // Get operator suggestions for the current field\r\n const operatorSuggestions = this.getOperatorSuggestions();\r\n \r\n if (operatorSuggestions.length > 0) {\r\n this.filteredSuggestions = operatorSuggestions;\r\n this.isDropdownVisible = true;\r\n this.selectedIndex = 0;\r\n this.updateDropdownPosition();\r\n }\r\n }\r\n\r\n private showValueSuggestions(): void {\r\n // Check if current field is a date field\r\n const currentField = this.config.fields.find(f => f.key === this.lastSelectedField);\r\n \r\n if (currentField && currentField.type === 'date') {\r\n this.showDatePicker();\r\n return;\r\n }\r\n \r\n // Get value/options suggestions for non-date fields\r\n const valueSuggestions = this.getValueSuggestions();\r\n \r\n if (valueSuggestions.length > 0) {\r\n this.filteredSuggestions = valueSuggestions;\r\n this.isDropdownVisible = true;\r\n this.selectedIndex = 0;\r\n this.updateDropdownPosition();\r\n } else {\r\n // If no predefined values, hide dropdown to allow free text input\r\n this.hideDropdown();\r\n }\r\n }\r\n\r\n private updateDropdownPosition(): void {\r\n if (!this.queryTextarea || !this.isDropdownVisible) return;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const rect = textarea.getBoundingClientRect();\r\n \r\n // Calculate cursor position in textarea\r\n const cursorCoords = this.getCursorCoordinates();\r\n \r\n this.dropdownPosition = {\r\n top: rect.top + cursorCoords.top + 20, // 20px below cursor\r\n left: rect.left + cursorCoords.left\r\n };\r\n }\r\n\r\n private showDatePicker(): void {\r\n // Hide regular dropdown\r\n this.hideDropdown();\r\n \r\n // Set up date picker state\r\n this.currentDateField = this.lastSelectedField;\r\n this.currentDateOperator = this.getCurrentOperator();\r\n this.showDualDatePicker = this.currentDateOperator === 'between';\r\n this.firstDateSelected = null;\r\n this.secondDateSelected = null;\r\n \r\n // Show date picker\r\n this.isDatePickerVisible = true;\r\n this.updateDatePickerPosition();\r\n }\r\n\r\n private updateDatePickerPosition(): void {\r\n if (!this.queryTextarea || !this.isDatePickerVisible) return;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const rect = textarea.getBoundingClientRect();\r\n \r\n // Calculate cursor position in textarea\r\n const cursorCoords = this.getCursorCoordinates();\r\n \r\n this.datePickerPosition = {\r\n top: rect.top + cursorCoords.top + 20, // 20px below cursor\r\n left: rect.left + cursorCoords.left\r\n };\r\n }\r\n\r\n private getCurrentOperator(): string | null {\r\n if (!this.queryTextarea) return null;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const text = textarea.value;\r\n const beforeCursor = text.substring(0, this.cursorPosition);\r\n const tokens = this.getPreviousTokens(beforeCursor);\r\n \r\n // Look for the most recent operator\r\n for (let i = tokens.length - 1; i >= 0; i--) {\r\n const token = tokens[i];\r\n if (this.config.operators.some(op => op.value === token)) {\r\n return token;\r\n }\r\n }\r\n \r\n return null;\r\n }\r\n\r\n onFirstDateSelected(date: Date): void {\r\n this.firstDateSelected = date;\r\n \r\n if (this.showDualDatePicker) {\r\n // For 'between' operator, wait for second date\r\n return;\r\n } else {\r\n // For single date operators, insert the date immediately\r\n this.insertDateValue(date);\r\n this.hideDatePicker();\r\n }\r\n }\r\n\r\n onSecondDateSelected(date: Date): void {\r\n this.secondDateSelected = date;\r\n \r\n if (this.firstDateSelected && this.secondDateSelected) {\r\n // Insert both dates for 'between' operator\r\n this.insertDateRangeValue(this.firstDateSelected, this.secondDateSelected);\r\n this.hideDatePicker();\r\n }\r\n }\r\n\r\n private insertDateValue(date: Date): void {\r\n const dateString = this.formatDate(date);\r\n this.insertTextAtCursor(dateString);\r\n }\r\n\r\n private insertDateRangeValue(startDate: Date, endDate: Date): void {\r\n const startDateString = this.formatDate(startDate);\r\n const endDateString = this.formatDate(endDate);\r\n const rangeString = `${startDateString}, ${endDateString}`;\r\n this.insertTextAtCursor(rangeString);\r\n }\r\n\r\n private formatDate(date: Date): string {\r\n // Format date as YYYY-MM-DD\r\n return date.toISOString().split('T')[0];\r\n }\r\n\r\n private insertTextAtCursor(text: string): void {\r\n if (!this.queryTextarea) return;\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const currentText = textarea.value;\r\n const cursorPos = this.cursorPosition;\r\n \r\n // Insert text at cursor position\r\n const newText = currentText.substring(0, cursorPos) + text + currentText.substring(cursorPos);\r\n \r\n // Update textarea\r\n textarea.value = newText;\r\n \r\n // Update cursor position\r\n const newCursorPos = cursorPos + text.length;\r\n textarea.setSelectionRange(newCursorPos, newCursorPos);\r\n this.cursorPosition = newCursorPos;\r\n \r\n // Update form control\r\n this.form.get('queryText')?.setValue(newText, { emitEvent: false });\r\n \r\n // Parse and emit query\r\n this.parseAndEmitQuery(newText);\r\n }\r\n\r\n hideDatePicker(): void {\r\n this.isDatePickerVisible = false;\r\n this.currentDateField = null;\r\n this.currentDateOperator = null;\r\n this.showDualDatePicker = false;\r\n this.firstDateSelected = null;\r\n this.secondDateSelected = null;\r\n \r\n // Focus back to textarea\r\n if (this.queryTextarea) {\r\n this.queryTextarea.nativeElement.focus();\r\n }\r\n }\r\n\r\n private getCursorCoordinates(): { top: number; left: number } {\r\n if (!this.queryTextarea) return { top: 0, left: 0 };\r\n \r\n const textarea = this.queryTextarea.nativeElement;\r\n const text = textarea.value.substring(0, this.cursorPosition);\r\n const lines = text.split('\\n');\r\n const currentLine = lines.length - 1;\r\n const currentColumn = lines[currentLine].length;\r\n \r\n // Approximate character dimensions\r\n const charWidth = 8; // Approximate character width in pixels\r\n const lineHeight = 20; // Approximate line height in pixels\r\n \r\n return {\r\n top: currentLine * lineHeight,\r\n left: currentColumn * charWidth\r\n };\r\n }\r\n\r\n private scrollToSelected(): void {\r\n if (!this.dropdown) return;\r\n \r\n const dropdown = this.dropdown.nativeElement;\r\n const selectedElement = dropdown.querySelector(`[data-index=\"${this.selectedIndex}\"]`) as HTMLElement;\r\n \r\n if (selectedElement) {\r\n selectedElement.scrollIntoView({ block: 'nearest' });\r\n }\r\n }\r\n\r\n private parseRule(ruleText: string): TextareaQueryRule | null {\r\n // Enhanced parsing with better operator detection\r\n const operatorPattern = this.config.operators\r\n .map(op => op.value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\r\n .join('|');\r\n \r\n const regex = new RegExp(`^(\\\\S+)\\\\s+(${operatorPattern})\\\\s+(.+)$`);\r\n const match = ruleText.match(regex);\r\n \r\n if (!match) return null;\r\n \r\n const [, fieldPart, operator, valuePart] = match;\r\n \r\n // Validate field exists\r\n const fieldConfig = this.config.fields.find(f => \r\n f.key === fieldPart || f.label === fieldPart\r\n );\r\n if (!fieldConfig) return null;\r\n \r\n // Validate operator\r\n const operatorConfig = this.config.operators.find(op => op.value === operator);\r\n if (!operatorConfig) return null;\r\n \r\n // Parse value based on field type\r\n let parsedValue: any = valuePart.trim();\r\n \r\n if (fieldConfig.type === 'number') {\r\n const numValue = parseFloat(parsedValue);\r\n if (!isNaN(numValue)) {\r\n parsedValue = numValue;\r\n }\r\n } else if (fieldConfig.type === 'boolean') {\r\n parsedValue = parsedValue.toLowerCase() === 'true';\r\n }\r\n \r\n return {\r\n field: fieldConfig.key,\r\n operator: operator,\r\n value: parsedValue\r\n };\r\n }\r\n}\r\n","<div class=\"sa-query-builder-textarea\">\r\n <form [formGroup]=\"form\">\r\n <div class=\"query-builder-header\">\r\n <div class=\"where-label\">Where</div>\r\n </div>\r\n\r\n <div class=\"query-builder-body\">\r\n <div class=\"textarea-container\">\r\n <mat-form-field class=\"query-textarea-field\" appearance=\"outline\">\r\n <textarea\r\n #queryTextarea\r\n matInput\r\n formControlName=\"queryText\"\r\n placeholder=\"Start typing your query...\"\r\n rows=\"5\"\r\n ></textarea>\r\n </mat-form-field>\r\n \r\n <!-- Custom Dropdown -->\r\n <div \r\n #dropdown\r\n class=\"suggestions-dropdown\" \r\n [class.visible]=\"isDropdownVisible\"\r\n [style.top.px]=\"dropdownPosition.top\"\r\n [style.left.px]=\"dropdownPosition.left\"\r\n >\r\n @for (suggestion of filteredSuggestions; track suggestion.id; let i = $index) {\r\n <div \r\n class=\"suggestion-item\"\r\n [class.selected]=\"i === selectedIndex\"\r\n [attr.data-index]=\"i\"\r\n (click)=\"onSuggestionClick(suggestion)\"\r\n (mouseenter)=\"selectedIndex = i\"\r\n >\r\n <div class=\"suggestion-main\">\r\n <span class=\"suggestion-name\">{{ suggestion.name }}</span>\r\n <span class=\"suggestion-type\">{{ suggestion.type }}</span>\r\n </div>\r\n @if (suggestion.description) {\r\n <div class=\"suggestion-description\">{{ suggestion.description }}</div>\r\n }\r\n @if (suggestion.unit) {\r\n <div class=\"suggestion-unit\">{{ suggestion.unit }}</div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Date Picker Popup -->\r\n <div \r\n class=\"date-picker-popup\" \r\n [class.visible]=\"isDatePickerVisible\"\r\n [style.top.px]=\"datePickerPosition.top\"\r\n [style.left.px]=\"datePickerPosition.left\"\r\n >\r\n <div class=\"date-picker-container\">\r\n @if (!showDualDatePicker) {\r\n <!-- Single Date Picker -->\r\n <div class=\"single-date-picker\">\r\n <h4>Select Date</h4>\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Date</mat-label>\r\n <input matInput [matDatepicker]=\"singlePicker\" (dateChange)=\"onFirstDateSelected($event.value)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"singlePicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #singlePicker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n } @else {\r\n <!-- Dual Date Picker for 'between' operator -->\r\n <div class=\"dual-date-picker\">\r\n <h4>Select Date Range</h4>\r\n <div class=\"date-range-inputs\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Start Date</mat-label>\r\n <input matInput [matDatepicker]=\"startPicker\" (dateChange)=\"onFirstDateSelected($event.value)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"startPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #startPicker></mat-datepicker>\r\n </mat-form-field>\r\n \r\n @if (firstDateSelected) {\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>End Date</mat-label>\r\n <input matInput [matDatepicker]=\"endPicker\" [min]=\"firstDateSelected\" (dateChange)=\"onSecondDateSelected($event.value)\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"endPicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #endPicker></mat-datepicker>\r\n </mat-form-field>\r\n }\r\n </div>\r\n </div>\r\n }\r\n \r\n <div class=\"date-picker-actions\">\r\n <button mat-button (click)=\"hideDatePicker()\">Cancel</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"query-builder-footer\">\r\n <button mat-button class=\"reset-btn\" (click)=\"onReset()\">Reset</button>\r\n <button mat-raised-button color=\"primary\" class=\"apply-btn\" (click)=\"onApply()\">Apply filters</button>\r\n </div>\r\n </form>\r\n</div>\r\n","import { Component } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { QueryBuilderTextareaComponent, TextareaQueryGroup, TextareaQueryConfig } from './query-builder-textarea.component';\r\n\r\n@Component({\r\n selector: 'sa-query-builder-textarea-demo',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n QueryBuilderTextareaComponent,\r\n MatCardModule,\r\n MatDividerModule\r\n ],\r\n template: `\r\n <mat-card>\r\n <mat-card-header>\r\n <mat-card-title>Query Builder Textarea Demo</mat-card-title>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <sa-query-builder-textarea\r\n [config]=\"queryConfig\"\r\n (queryChange)=\"onQueryChange($event)\">\r\n </sa-query-builder-textarea>\r\n\r\n <mat-divider class=\"my-4\"></mat-divider>\r\n\r\n <div class=\"output-section\">\r\n <h3>Query Output</h3>\r\n <pre>{{ currentQuery | json }}</pre>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n `,\r\n styles: [`\r\n .my-4 {\r\n margin-top: 1rem;\r\n margin-bottom: 1rem;\r\n }\r\n \r\n .output-section {\r\n margin-top: 1rem;\r\n }\r\n \r\n pre {\r\n background-color: #f5f5f5;\r\n padding: 1rem;\r\n border-radius: 4px;\r\n overflow: auto;\r\n max-height: 300px;\r\n }\r\n `]\r\n})\r\nexport class QueryBuilderTextareaDemoComponent {\r\n queryConfig: TextareaQueryConfig = {\r\n fields: [\r\n {\r\n key: 'name',\r\n label: 'Name',\r\n type: 'string'\r\n },\r\n {\r\n key: 'age',\r\n label: 'Age',\r\n type: 'number',\r\n operators: ['=', '!=', '>', '<', '>=', '<=', 'between']\r\n },\r\n {\r\n key: 'email',\r\n label: 'Email',\r\n type: 'string',\r\n operators: ['=', '!=', 'contains']\r\n },\r\n {\r\n key: 'createdAt',\r\n label: 'Created At',\r\n type: 'date',\r\n operators: ['=', '!=', '>', '<', '>=', '<=', 'between']\r\n },\r\n {\r\n key: 'isActive',\r\n label: 'Is Active',\r\n type: 'boolean'\r\n },\r\n {\r\n key: 'status',\r\n label: 'Status',\r\n type: 'select',\r\n options: [\r\n { label: 'Active', value: 'active' },\r\n { label: 'Inactive', value: 'inactive' },\r\n { label: 'Pending', value: 'pending' }\r\n ]\r\n },\r\n {\r\n key: 'lifecycle',\r\n label: 'Lifecycle',\r\n type: 'select',\r\n options: [\r\n { label: 'Active', value: 'active' },\r\n { label: 'At Risk', value: 'at_risk' },\r\n { label: 'Churned', value: 'churned' }\r\n ]\r\n }\r\n ],\r\n operators: [\r\n { value: '=', label: '=' },\r\n { value: '!=', label: '!=' },\r\n { value: '>', label: '>' },\r\n { value: '<', label: '<' },\r\n { value: '>=', label: '>=' },\r\n { value: '<=', label: '<=' },\r\n { value: 'contains', label: 'contains' }\r\n ],\r\n defaultCondition: 'and'\r\n };\r\n\r\n currentQuery: TextareaQueryGroup | null = null;\r\n\r\n onQueryChange(query: TextareaQueryGroup): void {\r\n this.currentQuery = query;\r\n console.log('Query changed:', query);\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { MatRadioButton, MatRadioModule } from '@angular/material/radio';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FieldType } from '@ngx-formly/core';\r\nimport { isObservable, of } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'sa-radio-button',\r\n standalone: true,\r\n imports: [MatRadioButton, MatRadioModule, CommonModule, FormsModule, ReactiveFormsModule],\r\n templateUrl: './radio-button.component.html',\r\n styleUrl: './radio-button.component.css'\r\n})\r\n\r\nexport class RadioButtonComponent extends FieldType {\r\n\r\n ngOnInit() {\r\n // console.log(this)\r\n }\r\n\r\n get options$() {\r\n const options = this.props?.options;\r\n return isObservable(options) ? options : of(options || []);\r\n }\r\n\r\n override get formControl(): FormControl {\r\n return super.formControl as FormControl;\r\n }\r\n\r\n selectRadio(value: any, radio: MatRadioButton): void {\r\n this.formControl.setValue(value);\r\n radio.checked = true;\r\n }\r\n}\r\n","<div class=\"radio-group-container\" [ngClass]=\"[props['column'] ? 'column' : '']\">\r\n <div class=\"title-container\">\r\n @if(props['label']){\r\n <div class=\"form-field-title\">\r\n <span>{{ props['label'] }}</span>\r\n </div>\r\n }\r\n @if(props['description']){\r\n <div class=\"form-field-description\">\r\n <span>{{ props['description'] }}</span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"form-field\">\r\n <mat-radio-group [formControl]=\"formControl\" name=\"radioButtons\">\r\n <div *ngFor=\"let option of options$ | async\" class=\"radio-box\" (click)=\"selectRadio(option.value, radio)\">\r\n <mat-radio-button [disableRipple]=\"true\" #radio [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-radio-button>\r\n </div>\r\n </mat-radio-group>\r\n </div>\r\n @if(props['helpText']){\r\n <div class=\"form-field-helpText\">\r\n <span>{{ props['helpText'] }}</span>\r\n </div>\r\n }\r\n</div>","import { Component, Input, OnInit, AfterViewInit, ViewChild, ElementRef, ChangeDetectorRef, SimpleChanges, OnDestroy, ChangeDetectionStrategy } from '@angular/core';\r\nimport { CardComponent } from '../card/card.component';\r\nimport { IconService } from '../icon/icon.service';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { IScrollingCardData } from '../../interfaces/scrolling-card-interface';\r\n\r\n@Component({\r\n selector: 'sa-scrolling-cards',\r\n standalone: true,\r\n imports: [HttpClientModule, CardComponent],\r\n providers: [IconService],\r\n templateUrl: './scrolling-cards.component.html',\r\n styleUrls: ['./scrolling-cards.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ScrollingCardsComponent implements OnInit, AfterViewInit, OnDestroy {\r\n @Input({ required: true }) cards: IScrollingCardData[] = [];\r\n @Input() duration: number = 10;\r\n @Input() direction: 'up' | 'down' | 'left' | 'right' = 'up';\r\n @ViewChild('cardContainer') cardContainer!: ElementRef;\r\n\r\n displayCards: IScrollingCardData[] = [];\r\n animationPaused = false;\r\n isVertical: boolean;\r\n private animationFrame: number | null = null;\r\n\r\n constructor(private cdr: ChangeDetectorRef) { }\r\n\r\n ngOnInit() {\r\n if (this.cards?.length) {\r\n this.displayCards = [...this.cards, ...this.cards];\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['cards'] && !changes['cards'].firstChange && this.cards?.length) {\r\n this.displayCards = [...this.cards, ...this.cards];\r\n this.initializeAnimation();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.cards?.length) {\r\n this.initializeAnimation();\r\n }\r\n }\r\n\r\n private initializeAnimation() {\r\n if (this.animationFrame) {\r\n cancelAnimationFrame(this.animationFrame);\r\n }\r\n\r\n this.animationFrame = requestAnimationFrame(() => {\r\n this.setAnimationProperties();\r\n });\r\n }\r\n\r\n private setAnimationProperties() {\r\n if (!this.cardContainer?.nativeElement) return;\r\n\r\n const container = this.cardContainer.nativeElement;\r\n this.isVertical = this.direction === 'up' || this.direction === 'down';\r\n\r\n // Set vertical/horizontal classes\r\n container.classList.toggle('vertical', this.isVertical);\r\n container.classList.toggle('horizontal', !this.isVertical);\r\n\r\n const containerSize = this.isVertical ? container.scrollHeight : container.scrollWidth;\r\n const duration = containerSize / this.duration;\r\n\r\n container.style.setProperty('--scroll-duration', `${duration}s`);\r\n container.style.setProperty('--scroll-direction', this.direction === 'down' || this.direction === 'right' ? 'reverse' : 'normal');\r\n\r\n // Reset animation\r\n container.style.animation = 'none';\r\n container.offsetHeight; // Trigger reflow\r\n container.style.animation = null;\r\n\r\n this.cdr.markForCheck();\r\n }\r\n\r\n pauseScroll() {\r\n if (!this.cardContainer?.nativeElement) return;\r\n this.animationPaused = true;\r\n this.cardContainer.nativeElement.style.animationPlayState = 'paused';\r\n }\r\n\r\n resumeScroll() {\r\n if (!this.cardContainer?.nativeElement) return;\r\n this.animationPaused = false;\r\n this.cardContainer.nativeElement.style.animationPlayState = 'running';\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.animationFrame) {\r\n cancelAnimationFrame(this.animationFrame);\r\n }\r\n }\r\n}","<div class=\"scrolling-cards-container {{this.isVertical ? 'vertical': 'horizontal'}}\" (mouseenter)=\"pauseScroll()\"\r\n (mouseleave)=\"resumeScroll()\">\r\n <div #cardContainer class=\"card-container\">\r\n @for (card of displayCards; track card.title) {\r\n <sa-card [title]=\"card.title\" [body]=\"card.body\" [avatar]=\"card?.avatar\" [icon]=\"card.icon\" [iconSize]=\"'54'\"\r\n [customWrapperClass]=\"'sa-card-secondary-wrapper'\" [width]=\"'24.063rem'\" [column]=\"false\"\r\n [showCardBody]=\"true\">\r\n </sa-card>\r\n }\r\n </div>\r\n</div>","import { Component, EventEmitter, Input } from '@angular/core';\r\nimport { FieldType, FieldTypeConfig } from '@ngx-formly/core';\r\nimport { NgFor, NgIf } from '@angular/common';\r\nimport { Output } from '@angular/core';\r\n\r\nlet nextId = 0; // used to give unique ids to inputs used in html\r\n\r\n@Component({\r\n selector: 'sa-stepper',\r\n standalone: true,\r\n imports: [NgFor, NgIf],\r\n templateUrl: './stepper.component.html',\r\n styleUrl: './stepper.component.css'\r\n})\r\nexport class StepperComponent extends FieldType<FieldTypeConfig> {\r\n @Input() latestStep: number = -1;\r\n @Input() editable: boolean = true;\r\n @Input() stepLabels: any;\r\n @Input() doneIcon: string;\r\n\r\n @Output() stepped = new EventEmitter;\r\n\r\n uuid: number = nextId++;\r\n\r\n isDisabled: boolean = false;\r\n\r\n tickIcon = {};\r\n\r\n // {\r\n // '-webkit-mask-image': `url(${this.ImagePath})`,\r\n // 'mask-image': `url(${this.ImagePath})`,\r\n // }\r\n\r\n ngOnInit() {\r\n if (this.field.props) {\r\n this.stepLabels = this.field.props.options;\r\n this.editable = this.field.props['params'].editable;\r\n this.latestStep = this.model[`${this.key}`] ? this.model[`${this.key}`].id : -1;\r\n this.doneIcon = this.field.props['params'].doneIcon;\r\n\r\n this.isDisabled = this.field.props.disabled!;\r\n }\r\n console.log(this.doneIcon);\r\n this.tickIcon = {\r\n '-webkit-mask-image': `url(${this.doneIcon})`,\r\n 'mask-image': `url(${this.doneIcon})`\r\n };\r\n }\r\n\r\n update(chosen: number) {\r\n if (!this.editable || this.field.props?.disabled) return;\r\n this.latestStep = chosen;\r\n if (!this.formControl) {\r\n this.stepped.emit(this.latestStep);\r\n return;\r\n }\r\n this.formControl.setValue({\r\n id: this.latestStep\r\n });\r\n }\r\n}\r\n","<div class=\"stepper {{isDisabled ? 'disabled' : 'active'}}\">\r\n <div class=\"steps\" *ngFor=\"let label of stepLabels; let i = index\">\r\n <input id=\"stepper-{{uuid}}-{{i}}\" (change)=\"update(i)\" name=\"stepper-radio-{{uuid}}\"\r\n [checked]=\"i == latestStep ? true: false\" class=\"step-hide\" type=\"radio\">\r\n <div\r\n class=\"label-wrapper {{i < latestStep ? 'done' : ''}} {{i > latestStep ? 'default' : ''}} {{i == latestStep ? 'latest' : ''}}\">\r\n <label [style]=\"i < latestStep ? tickIcon : ''\" for=\"stepper-{{uuid}}-{{i}}\"\r\n class=\"step-label-icon {{i > latestStep ? 'undone' : ''}}\">\r\n </label>\r\n <label for=\"stepper-{{uuid}}-{{i}}\" class=\"step-label-text\">{{label.name}}</label>\r\n </div>\r\n <div *ngIf=\" i !=stepLabels.length-1\" class=\"line {{i < latestStep ? 'done' : 'default'}}\"></div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { TabInterface } from '../../interfaces/tab-interface';\r\nimport { NgFor } from '@angular/common';\r\nimport { NgIf } from '@angular/common';\r\n\r\n\r\nlet nextId = 0; // used to give unique ids to inputs used in html\r\n@Component({\r\n selector: 'sa-tabs',\r\n standalone: true,\r\n imports: [NgFor, NgIf],\r\n templateUrl: './tabs.component.html',\r\n styleUrl: './tabs.component.css'\r\n})\r\nexport class TabsComponent {\r\n @Input() tabs: TabInterface[];\r\n @Input() type: string;\r\n @Input() defaultTab: number;\r\n\r\n @Output() tabChanged = new EventEmitter();\r\n\r\n\r\n uuid: number = nextId++;\r\n svgStyle: any = [];\r\n\r\n ngOnChanges(): void {\r\n this.svgStyle = this.tabs.map((item) => {\r\n return {\r\n '-webkit-mask-image': `url(${item.tabIcon})`,\r\n 'mask-image': `url(${item.tabIcon})`,\r\n }\r\n })\r\n }\r\n tabChange(evt: any) {\r\n this.tabChanged.emit(evt.target.value)\r\n }\r\n}\r\n","<div class=\"tab-wrapper {{type}}\">\r\n <div class=\"tabs\">\r\n <div *ngFor=\"let item of tabs, let i = index\" class=\"tab-item\">\r\n <input [checked]=\"(defaultTab == i) ? true : false\" [value]=\"i\" (change)=\"tabChange($event)\"\r\n id=\"tab-check-{{i}}-{{uuid}}\" class=\"tab-checks\" type=\"radio\" name=\"tab-checkbox-{{uuid}}\">\r\n <label for=\"tab-check-{{i}}-{{uuid}}\" class=\"tab-label\">\r\n <div *ngIf=\"item.iconPosition == 'left' || item.iconPosition == 'both'\" class=\"svg-icon\" [style]=\"svgStyle[i]\">\r\n </div>\r\n {{item.tabName}}\r\n <div *ngIf=\"item.iconPosition == 'right' || item.iconPosition == 'both'\" class=\"svg-icon\" [style]=\"svgStyle[i]\">\r\n </div>\r\n <div class=\"badge\" *ngIf=\"item.badgeContent\">{{item.badgeContent}}</div>\r\n </label>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { Input, Output } from '@angular/core';\r\nimport { MatIcon } from '@angular/material/icon';\r\nimport { NgIf } from '@angular/common';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconComponent } from '../icon/icon.component';\r\n\r\n@Component({\r\n selector: 'sa-toast',\r\n standalone: true,\r\n imports: [CommonModule, ButtonComponent, IconComponent, ButtonComponent, MatIcon, NgIf],\r\n templateUrl: './toast.component.html',\r\n styleUrl: './toast.component.css'\r\n})\r\nexport class ToastComponent implements OnChanges {\r\n @Input() finishPercentage: number = -1;\r\n @Input() heading: string;\r\n @Input() subHeading: string;\r\n @Input() statusIcon: string = '';\r\n @Input() toastCloseIcon: string = 'closeOutlined';\r\n @Input() status: 'success' | 'failure' | 'caution' | 'positive' | 'negative' | 'tentative';\r\n @Input() firstButtonName: string;\r\n @Input() secondButtonName: string;\r\n @Input() closable: boolean;\r\n @Input() filled: boolean = true;\r\n @Input() width: number | string = '';\r\n @Input() toastIconSize: string = '24';\r\n @Input() toastCloseIconSize: string = '24';\r\n\r\n @Output() toastEvent: EventEmitter<IToastEvent> = new EventEmitter();\r\n @Output() firstButton = new EventEmitter();\r\n @Output() secondButton = new EventEmitter();\r\n @Output() closed = new EventEmitter();\r\n\r\n\r\n toastStyles = { backgroundColor: 'transparent', color: '', width: this.width + '%' };\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes && (changes['status'] || changes['filled'])) {\r\n this.statusIcon = toastInfo[this.status]?.icon;\r\n this.toastStyles.backgroundColor = toastInfo[this.status]?.bgColor;\r\n this.toastStyles.color = toastInfo[this.status]?.color;\r\n }\r\n if (changes && changes['width']) {\r\n this.toastStyles.width = typeof this.width === 'number' ? this.width + '%' : this.width;\r\n }\r\n\r\n if (this.finishPercentage > 100) this.finishPercentage = 100;\r\n\r\n }\r\n\r\n clicked(num: number) {\r\n if (num == 0) this.firstButton.emit();\r\n else if (num == 1) this.secondButton.emit();\r\n else if (num == 2) this.closed.emit();\r\n }\r\n\r\n closeToast() {\r\n this.toastEvent.emit({\r\n type: 'TOAST_CLOSED',\r\n params: {}\r\n })\r\n }\r\n\r\n}\r\n\r\nconst toastInfo: any = {\r\n 'success': {\r\n icon: 'checkCircleOutlined',\r\n bgColor: '#EBF5E9',\r\n color: '#246B16'\r\n },\r\n 'failure': {\r\n icon: 'infoCircleOutlined',\r\n bgColor: '#F8E9E9',\r\n color: '#861C15'\r\n },\r\n 'caution': {\r\n icon: 'infoTriangleOutlined',\r\n bgColor: '',\r\n color: ''\r\n }\r\n}\r\n\r\nexport interface IToastEvent {\r\n type: 'TOAST_CLOSED' | 'ACTION_CLICKED';\r\n event?: any;\r\n params?: any;\r\n}","<div class=\"toast\" [ngStyle]=\"toastStyles\">\r\n <div class=\"content\">\r\n <div class=\"toast-icon {{status}}\">\r\n <sa-icon [icon]=\"statusIcon\" [size]=\"toastIconSize\"></sa-icon>\r\n <!-- <img [src]=\"statusIcon\" alt=\"\"> -->\r\n </div>\r\n <div class=\"head-subhead\">\r\n <p class=\"heading\">{{heading}}</p>\r\n <p class=\"subheading\">{{subHeading}}</p>\r\n </div>\r\n @if(closable){\r\n <!-- <img class=\"cross\" (click)=\"closeToast()\" [src]=\"crossmark\" alt=\"\"> -->\r\n <sa-icon class=\"cross\" [icon]=\"toastCloseIcon\" [size]=\"toastCloseIconSize\" (click)=\"closeToast()\"></sa-icon>\r\n }\r\n </div>\r\n <!-- <div class=\"controls\">\r\n <sa-button *ngIf=\"firstButtonName\" (onClickEvent)=\"clicked(0)\" [text]=\"firstButtonName\" type=\"transparent\"\r\n size=\"medium\" state=\"default\">\r\n </sa-button>\r\n <sa-button *ngIf=\"secondButtonName\" (onClickEvent)=\"clicked(1)\" [text]=\"secondButtonName\" type=\"outline\"\r\n size=\"medium\" state=\"default\">\r\n </sa-button>\r\n </div> -->\r\n\r\n <div *ngIf=\"finishPercentage >= 0\" class=\"progress-bar\">\r\n <div class=\"progress-done\" [style.width]=\"finishPercentage+'%'\"></div>\r\n <div class=\"progress-left\" [style.width]=\"100-finishPercentage+'%'\"></div>\r\n </div>\r\n</div>","import { Component, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, signal, computed, effect, ChangeDetectionStrategy, DestroyRef, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { interval, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { trigger, state, style, transition, animate } from '@angular/animations';\r\nimport { TextAnimationConfig } from '../../interfaces/typography-animation-interface';\r\n\r\n@Component({\r\n selector: 'sa-typography-animation',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './typography-animation.component.html',\r\n styleUrl: './typography-animation.component.css',\r\n animations: [\r\n trigger('slideAnimation', [\r\n state('hidden', style({\r\n opacity: 0,\r\n transform: 'translateY(1px)'\r\n })),\r\n state('visible', style({\r\n opacity: 1,\r\n transform: 'translateY(-50%)'\r\n })),\r\n transition('hidden => visible', [\r\n animate('{{duration}}ms ease-out')\r\n ], { params: { duration: 300 } }),\r\n transition('visible => hidden', [\r\n animate('{{duration}}ms ease-in')\r\n ], { params: { duration: 300 } })\r\n ])\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TypographyAnimationComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() config: TextAnimationConfig = {\r\n words: [],\r\n prefix: '',\r\n animationDelay: 3000,\r\n animationDuration: 200,\r\n showFirstWordImmediately: false\r\n };\r\n\r\n currentWordIndex = signal<number>(0);\r\n animationState = signal<'initializing' | 'running'>('initializing');\r\n private intervalId: any;\r\n\r\n ngOnInit() {\r\n // Set animation state to running after a brief initialization period\r\n // This helps ensure the first word appears immediately when requested\r\n setTimeout(() => {\r\n this.animationState.set('running');\r\n }, 50);\r\n \r\n this.startAnimation();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Check if config has changed and is not the first change\r\n if (changes['config'] && !changes['config'].firstChange) {\r\n // Reset the current word index\r\n this.currentWordIndex.set(0);\r\n \r\n // Clear the existing interval if it exists\r\n if (this.intervalId) {\r\n clearInterval(this.intervalId);\r\n }\r\n \r\n // Restart the animation with the new configuration\r\n this.startAnimation();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.intervalId) {\r\n clearInterval(this.intervalId);\r\n }\r\n }\r\n\r\n private startAnimation() {\r\n // Trigger the first animation immediately\r\n this.currentWordIndex.update(current => \r\n (current + 1) % this.config.words.length\r\n );\r\n\r\n // Add a small delay before starting the interval to ensure DOM is ready\r\n setTimeout(() => {\r\n this.intervalId = setInterval(() => {\r\n this.currentWordIndex.update(current => \r\n (current + 1) % this.config.words.length\r\n );\r\n }, this.config.animationDelay || 3000);\r\n }, 100);\r\n }\r\n}","<div class=\"text-animation\">\r\n <span class=\"prefix\" *ngIf=\"config.prefix\">{{ config.prefix }}</span>\r\n <span class=\"words-wrapper\">\r\n <ng-container *ngFor=\"let word of config.words; let i = index\">\r\n <span\r\n class=\"word\"\r\n [@slideAnimation]=\"currentWordIndex() === i ? 'visible' : 'hidden'\"\r\n [style.transition-delay]=\"config.animationDelay + 'ms'\"\r\n >\r\n {{ word }}\r\n </span>\r\n </ng-container>\r\n </span>\r\n </div>","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TestLibraryService {\r\n\r\n constructor() { }\r\n}\r\n","export interface ButtonInterface {\r\n id: string | number,\r\n text: string,\r\n type: string,\r\n size: ButtonSize,\r\n state: string,\r\n imagePath?: string,\r\n icon?: any,\r\n iconPosition?: ButtonIconPosition,\r\n href?: string,\r\n hrefTarget?: string,\r\n isSubmit?: boolean,\r\n width?: any,\r\n buttonIconSize?: any,\r\n showSpinner?: boolean,\r\n onClick?: (event: any) => void\r\n}\r\n\r\nexport const buttonSizes = [\r\n 'small', 'medium', 'large'\r\n] as const;\r\n\r\ntype PredefinedButtonSizes = typeof buttonSizes[number];\r\n\r\nexport type ButtonSize = PredefinedButtonSizes | string;\r\n\r\nexport const buttonPosition = [\r\n 'left', 'right', 'both'\r\n] as const;\r\n\r\ntype PredefinedButtonPositions = typeof buttonPosition[number]\r\n\r\nexport type ButtonIconPosition = PredefinedButtonPositions | string;\r\n\r\n\r\nexport const buttonType = [\r\n 'primary', 'outline', 'transparent'\r\n] as const;\r\n\r\ntype PredefinedButtonType = typeof buttonType[number]\r\n\r\nexport type ButtonType = PredefinedButtonType | string;\r\n\r\n\r\nexport interface ButtonClickEvent {\r\n type: 'primary' | 'secondary';\r\n button: ButtonInterface;\r\n originalEvent: Event;\r\n}","export const iconNames = [\r\n 'analysis', 'arrowRightOutlined', 'avatar',\r\n 'businessStatsFilled', 'chatHelpOutlined', 'checkCircleFilled',\r\n 'checkCircleOutlined', 'checkOutlined', 'circleFilled',\r\n 'closeBlueOutlined', 'closeCircleFilled', 'closeOutlined',\r\n 'doubleDownOutlined', 'eyeFilled',\r\n 'eyeOutlined', 'formDetailsOutlined', 'gridViewOutlined',\r\n 'homeOutlined', 'infoCircleOutlined', 'infoTriangleFilled',\r\n 'infoTriangleOutlined', 'innosupps', 'locationOutlined',\r\n 'mailOutlined', 'multiConnectionHub', 'personOutlined',\r\n 'rightChevronOutlined', 'sarasWhite', 'settingsOutlined',\r\n 'sourcesOutlined', 'targetScanOutlined', 'upwardTriangleFilled',\r\n 'headsetOutlined', 'sarasFullLogo', 'leftChevronCircle', 'rightChevronCircle', 'errorCircleOutlined',\r\n 'errorCrossOutlined', 'downChevronOutlined', 'peopleAudience', 'screenPerson', 'slideSettings', 'desktopSpeakerOutlined',\r\n 'tabDesktopArrowClockwiseOutlined', 'disabledCheckboxFilled', 'timerOutlined', 'refresh', 'chatIcon', 'add', 'calendar',\r\n 'compassNorthWest'\r\n] as const;\r\n\r\n// Define a type for the predefined icon names\r\ntype PredefinedIconName = typeof iconNames[number];\r\n\r\n// Define IconName as a union of PredefinedIconName and string\r\nexport type IconName = PredefinedIconName | string;\r\n\r\nexport interface IconInterface {\r\n icon?: IconName | string,\r\n size?: string,\r\n iconUrl?: string,\r\n iconPosition?: string\r\n}\r\n\r\n\r\nexport interface saIcon {\r\n icon?: IconName;\r\n iconPath?: string;\r\n iconUrl?: string;\r\n size?: string;\r\n color?: string;\r\n customClass?: string;\r\n }","import { IMenu } from \"./menu.interface\";\r\n\r\nexport interface ILeftNav {\r\n logo?: ILeftNavLogo;\r\n items?: ILeftNavItem[];\r\n templateItems?: ITemplateItem[];\r\n footerItems?: ILeftNavItem[];\r\n }\r\n\r\n export interface ILeftNavLogo extends ILeftNavItem {\r\n \r\n }\r\n \r\n export interface ILeftNavItem {\r\n title: string,\r\n // icon_url?: string,\r\n icon?: string,\r\n iconSize?: string,\r\n color?: string,\r\n disable?: boolean,\r\n tooltip?: string,\r\n relativePath?: boolean,\r\n path?: string,\r\n active?: boolean,\r\n type?: 'ICON' | 'AVATAR';\r\n menu?: IMenu;\r\n altText?: string,\r\n showSearch?: boolean,\r\n iconLabel?: string,\r\n className?: string;\r\n itemType?: string;\r\n [key: string]: any;\r\n }\r\n \r\n export interface ILeftNavClickEvent {\r\n type: 'NAV_ITEM_CLICK' | 'FOOTER_ITEM_CLICK' | 'LOGO_CLICK' | 'TEMPLATE_ITEM_CLICK' | 'CLICK';\r\n event: any,\r\n item: ILeftNavItem\r\n }\r\n export interface ILeftNavBlurEvent {\r\n type: 'NAV_ITEM_HOVER' | 'FOOTER_ITEM_HOVER' | 'LOGO_HOVER';\r\n event: any,\r\n item: ILeftNavItem\r\n }\r\n \r\n export enum ILeftNavTypes {\r\n \r\n }\r\n\r\n export interface ITemplateItem extends ILeftNavItem {\r\n iconSize?: string;\r\n backgroundColor?: string;\r\n }","/*\n * Public API Surface of component-library\n */\n\n// ... existing code ...\n\n\n// Components\nexport * from './lib/accordion/accordion.component';\nexport * from './lib/avatar/avatar.component';\nexport * from './lib/button/button.component';\nexport * from './lib/calendar-header/calendar-header.component';\nexport * from './lib/card/card-body/card-body.component';\nexport * from './lib/card/card-custom-header/card-custom-header.component';\nexport * from './lib/card/card-footer-actions/card-footer-actions.component';\nexport * from './lib/card/card-icon/card-icon.component';\nexport * from './lib/card/card-title-actions/card-title-actions.component';\nexport * from './lib/card/card.component';\nexport * from './lib/card/checkbox-card/checkbox-card.component';\nexport * from './lib/card/guide-card/guide-card.component';\nexport * from './lib/card/menu-card/menu-card.component';\nexport * from './lib/card/thumbnail-card/thumbnail-card.component';\nexport * from './lib/card-carousel/card-carousel.component';\nexport * from './lib/categories-nav/categories-nav.component';\nexport * from './lib/checkbox/checkbox.component';\nexport * from './lib/chips/chips.component';\nexport * from './lib/component-library.component';\nexport * from './lib/dashboard-loader/dashboard-loader.component';\nexport * from './lib/data-grid/data-grid.component';\nexport * from './lib/datepicker/datepicker.component';\nexport * from './lib/dialog/dialog.component';\nexport * from './lib/dropdown/category-dropdown/category-dropdown.component';\nexport * from './lib/dropdown/ng-select/ng-select.component';\nexport * from './lib/dropdown-menu/dropdown-menu.component';\nexport * from './lib/filter/filter.component';\nexport * from './lib/form-input/form-input.component';\nexport * from './lib/form-select/form-select.component';\nexport * from './lib/grid-cell/grid-cell.component';\nexport * from './lib/grid-header/grid-header.component';\nexport * from './lib/header/header.component';\nexport * from './lib/icon/icon.component';\nexport * from './lib/layout-section/layout-section.component';\nexport * from './lib/left-nav/left-nav.component';\nexport * from './lib/list/list.component';\nexport * from './lib/menu/menu-list/menu-item.component';\nexport * from './lib/menu/menu.component';\nexport * from './lib/message-banner/message-banner.component';\nexport * from './lib/message-banner-v2/message-banner-v2.component';\nexport * from './lib/mini-card/mini-card.component';\nexport * from './lib/page-layout/page-layout.component';\nexport * from './lib/progress-bar/progress-bar.component';\nexport * from './lib/query-builder/query-builder-demo.component';\nexport * from './lib/query-builder/query-builder.component';\nexport * from './lib/query-builder-formly/query-builder-formly.component';\nexport * from './lib/query-builder-textarea/query-builder-textarea-demo.component';\nexport * from './lib/query-builder-textarea/query-builder-textarea.component';\nexport * from './lib/radio-button/radio-button.component';\nexport * from './lib/scrolling-cards/scrolling-cards.component';\nexport * from './lib/skeleton/skeleton-base.component';\nexport * from './lib/skeleton/skeleton-container.component';\nexport * from './lib/skeleton/skeleton-loader.component';\nexport * from './lib/skeleton/skeleton-shapes.component';\nexport * from './lib/spinner/spinner.component';\nexport * from './lib/status-dot/status-dot.component';\nexport * from './lib/stepper/stepper.component';\nexport * from './lib/tabs/tabs.component';\nexport * from './lib/toast/toast.component';\nexport * from './lib/tool-tip/tool-tip.component';\nexport * from './lib/typography-animation/typography-animation.component';\n\n// Services\nexport * from './lib/component-library.service';\nexport * from './lib/icon/icon.service';\nexport * from './lib/query-builder/query-builder.service';\n\n// Interfaces\nexport * from './interfaces/avatar-interface';\nexport * from './interfaces/button-interface';\nexport * from './interfaces/card-carousel-interface';\nexport * from './interfaces/chip-interface';\nexport * from './interfaces/form-layout.interface';\nexport * from './interfaces/grid-interface';\nexport * from './interfaces/guide-card-interface';\nexport * from './interfaces/header-interface';\nexport * from './interfaces/icon-interface';\nexport * from './interfaces/layout-section-interface';\nexport * from './interfaces/left-nav-interface';\nexport * from './interfaces/menu.interface';\nexport * from './interfaces/message-banner';\nexport * from './interfaces/option-interface';\nexport * from './interfaces/scrolling-card-interface';\nexport * from './interfaces/select-interface';\nexport * from './interfaces/status-dot.interface';\nexport * from './interfaces/tab-interface';\nexport * from './interfaces/toast-interface';\nexport * from './interfaces/typography-animation-interface';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["nextId","i1","_get","_includes","_replace","_toString","i3","i2","_isUndefined","_first","_find","_map","_words","_isString","_split","_join","_size","_repeat","_takeRight","i4","_keys","_has","_startCase","_set","NgSelectComponent","i5","_toLower","_forEach","_filter","i6","takeUntil","i7","i8","i1.QueryBuilderService"],"mappings":"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"}