UNPKG

ng-rating-pro

Version:

A powerful and customizable Angular rating component that allows full and half ratings with support for read-only mode, dynamic scaling, and SVG customization.<br/>Perfect for use in reviews, feedback forms, and rating-based applications.

1 lines 18.1 kB
{"version":3,"file":"ng-rating-pro.mjs","sources":["../../../projects/ng-rating-pro/src/lib/rating-icon/custom-rating.directive.ts","../../../projects/ng-rating-pro/src/lib/rating-icon/star-icon.component.ts","../../../projects/ng-rating-pro/src/lib/rating-icon/star-icon.component.html","../../../projects/ng-rating-pro/src/lib/rating-icon/heart-icon.component.ts","../../../projects/ng-rating-pro/src/lib/rating-icon/heart-icon.component.html","../../../projects/ng-rating-pro/src/lib/ng-rating-pro.component.ts","../../../projects/ng-rating-pro/src/lib/ng-rating-pro.component.html","../../../projects/ng-rating-pro/src/lib/ng-rating-pro.module.ts","../../../projects/ng-rating-pro/src/public-api.ts","../../../projects/ng-rating-pro/src/ng-rating-pro.ts"],"sourcesContent":["import { Directive, ElementRef, Renderer2, Input, OnInit } from '@angular/core';\n\nenum State {\n Empty = 'empty',\n Half = 'half',\n Full = 'full',\n}\n\n@Directive({\n selector: '[ngCustomRating]',\n})\nexport class CustomRatingDirective {\n public iconViewBox = [0, 0, 19, 18];\n\n constructor(private el: ElementRef, private renderer: Renderer2) {}\n\n public updateRating(iconName: string): void {\n this.iconViewBox = this.getIconViewBox();\n this.updateRatindId(iconName);\n }\n\n private updateRatindId(iconName: string): void {\n const iconId =\n iconName +\n '-' +\n this.el.nativeElement.attributes.getNamedItem('ngProjectAs').value;\n this.el.nativeElement.setAttribute('id', iconId);\n }\n\n private getIconViewBox(): number[] {\n const dims = this.el.nativeElement.attributes\n .getNamedItem('viewBox')\n .value.split(' ');\n return dims.map((dim: string) => parseInt(dim));\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'ng-star-icon',\n templateUrl: './star-icon.component.html',\n})\nexport class StarIconComponent {\n static iconName: string = 'star';\n}\n","<ng-container>\n <svg:symbol id=\"star-empty\" viewBox=\"0 0 24 24\" fill=\"#F1E8CA\">\n <path\n d=\"M12 18l-7.056 3.71 1.348-7.853L.558 9.17l7.923-1.15L12 0l3.519 7.99 7.923 1.18-5.734 5.697 1.348 7.853z\"\n />\n </svg:symbol>\n <svg:symbol id=\"star-full\" viewBox=\"0 0 24 24\" fill=\"#D3A81E\">\n <path\n d=\"M12 18l-7.056 3.71 1.348-7.853L.558 9.17l7.923-1.15L12 0l3.519 7.99 7.923 1.18-5.734 5.697 1.348 7.853z\"\n />\n </svg:symbol>\n <svg:symbol id=\"star-half\" viewBox=\"0 0 24 24\">\n <!-- Left (filled) half of the star -->\n <path\n d=\"M12 0 \n L12 18 \n L4.944 21.71 \n L6.292 13.857 \n L0.558 9.17 \n L8.481 7.99 \n L12 0Z\"\n fill=\"#D3A81E\"\n />\n <!-- Right (empty) half of the star -->\n <path\n d=\"M12 0 \n L12 18 \n L19.056 21.71 \n L17.708 13.857 \n L23.442 9.17 \n L15.519 7.99 \n L12 0Z\"\n fill=\"#F1E8CA\"\n />\n </svg:symbol>\n</ng-container>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'ng-heart-icon',\n templateUrl: './heart-icon.component.html',\n})\nexport class HeartIconComponent {\n static iconName: string = 'heart';\n}\n","<ng-container>\n <svg:symbol\n id=\"heart-empty\"\n viewBox=\"0 0 24 24\"\n fill=\"#FFFFFF\"\n stroke=\"#FFCDD2\"\n >\n <path\n d=\"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z\"\n />\n </svg:symbol>\n\n <svg:symbol id=\"heart-full\" viewBox=\"0 0 24 24\" fill=\"#FF0000\">\n <path\n d=\"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z\"\n />\n </svg:symbol>\n\n <svg:symbol id=\"heart-half\" viewBox=\"0 0 24 24\">\n <!-- Right (empty) half of the heart -->\n <path\n d=\"M12,21.35L12,5.09C13.09,3.81 14.76,3 16.5,3C19.58,3 22,5.42 22,8.5C22,12.28 18.6,15.36 13.45,20.03L12,21.35Z\"\n fill=\"#FFFFFF\"\n stroke=\"#FFCDD2\"\n />\n\n <!-- Left (filled) half of the heart -->\n <path\n d=\"M12,21.35L12,5.09C10.91,3.81 9.24,3 7.5,3C4.42,3 2,5.42 2,8.5C2,12.28 5.4,15.36 10.55,20.03L12,21.35Z\"\n fill=\"#FF0000\"\n />\n </svg:symbol>\n</ng-container>\n","import {\n Component,\n ComponentFactoryResolver,\n ContentChildren,\n EventEmitter,\n HostListener,\n Input,\n OnInit,\n Output,\n QueryList,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { CustomRatingDirective } from './rating-icon/custom-rating.directive';\nimport { StarIconComponent } from './rating-icon/star-icon.component';\nimport { HeartIconComponent } from './rating-icon/heart-icon.component';\n\nexport enum State {\n Empty = 'empty',\n Half = 'half',\n Full = 'full',\n}\n\n@Component({\n selector: 'ngRatingPro',\n templateUrl: './ng-rating-pro.component.html',\n styleUrls: ['./ng-rating-pro.component.css'],\n})\nexport class NgRatingProComponent implements OnInit {\n @Input() scale: number = 5;\n @Input() rating: number = 0;\n @Input() allowHalf: boolean = true;\n @Input() size: number = 20; // Default size\n @Input() spacing: number = 8; // Spacing between stars in viewBox units\n @Input() readonly: boolean = false;\n @Input() iconName: string = 'star';\n\n @ContentChildren(CustomRatingDirective)\n ratingDirectives!: QueryList<CustomRatingDirective>;\n @ViewChild('dynamicContainer', { read: ViewContainerRef, static: true })\n dynamicContainer!: ViewContainerRef;\n\n @Output() ratingChange: EventEmitter<number> = new EventEmitter<number>();\n\n public states: State[] = [];\n\n starWidth: number = 24;\n starHeight: number = 24;\n containerWidth: number = 0;\n totalWidth: number = 0;\n\n ngOnInit() {\n this.updateStates(this.allowHalf);\n }\n\n ngAfterContentInit() {\n if (this.ratingDirectives.length !== 3) {\n this.loadDynamicComponent();\n } else {\n this.ratingDirectives.forEach((directive) => {\n directive.updateRating(this.iconName);\n });\n this.starHeight = this.ratingDirectives.first.iconViewBox[3];\n this.starWidth = this.ratingDirectives.first.iconViewBox[2];\n }\n this.updateDimensions();\n }\n\n private loadDynamicComponent() {\n const component = this.getComponent();\n this.dynamicContainer.clear();\n this.dynamicContainer.createComponent(component);\n this.iconName = component.iconName;\n }\n\n private getComponent() {\n switch (this.iconName) {\n case 'star':\n return StarIconComponent;\n case 'heart':\n return HeartIconComponent;\n default:\n return StarIconComponent;\n }\n }\n\n updateDimensions() {\n // Calculate total width in viewBox units\n this.totalWidth =\n this.starWidth * this.scale + this.spacing * (this.scale - 1);\n\n // Calculate container width maintaining aspect ratio\n const aspectRatio = this.totalWidth / this.starHeight;\n this.containerWidth = this.size * aspectRatio;\n }\n\n getStarPosition(index: number): number {\n return index * (this.starWidth + this.spacing);\n }\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent) {\n if (this.readonly) return;\n if (event.target instanceof SVGElement && +event.target.id > 0) {\n const clickedIndex = +event.target.id - 1;\n this.toggleRating(clickedIndex);\n this.updateStates(this.allowHalf);\n }\n event.stopPropagation();\n }\n\n private toggleRating(index: number) {\n const isFull = this.rating === index + 1;\n const isHalf = this.rating === index + 0.5;\n\n if (this.allowHalf) {\n if (isFull) {\n this.rating = index;\n } else if (isHalf) {\n this.rating = index + 1;\n } else {\n this.rating = index + 0.5;\n }\n } else {\n if (isFull) {\n this.rating = index;\n } else {\n this.rating = index + 1;\n }\n }\n }\n\n public updateStates(allowHalf: boolean) {\n this.ratingChange.emit(this.rating);\n this.rating = Math.round(this.rating * 2) / 2;\n this.states = Array.from({ length: this.scale }, (_, i) => {\n if (i < Math.floor(this.rating)) return State.Full;\n if (i === Math.floor(this.rating) && this.rating % 1 !== 0 && allowHalf)\n return State.Half;\n return State.Empty;\n });\n }\n}\n","<div\n [style.width]=\"containerWidth + 'px'\"\n [style.height]=\"size + 'px'\"\n class=\"rating-container\"\n>\n <!-- Define symbols -->\n <svg style=\"display: none\">\n <ng-container #dynamicContainer></ng-container>\n <ng-content select=\"half\"></ng-content>\n <ng-content select=\"full\"></ng-content>\n <ng-content select=\"empty\"></ng-content>\n </svg>\n\n <!-- Rating display -->\n <svg\n [attr.viewBox]=\"'0 0 ' + totalWidth + ' ' + starHeight\"\n [style.width]=\"'100%'\"\n [style.height]=\"'100%'\"\n aria-hidden=\"true\"\n focusable=\"false\"\n class=\"rating\"\n >\n <ng-container *ngFor=\"let state of states; let i = index\">\n <use\n [id]=\"i + 1\"\n [attr.x]=\"getStarPosition(i)\"\n [attr.y]=\"0\"\n [attr.width]=\"starWidth\"\n [attr.height]=\"starHeight\"\n [attr.xlink:href]=\"'#' + iconName + '-' + state\"\n [ngStyle]=\"{ cursor: !readonly ? 'pointer' : 'default' }\"\n />\n </ng-container>\n </svg>\n</div>\n","import { NgModule } from '@angular/core';\nimport { NgRatingProComponent } from './ng-rating-pro.component';\nimport { StarIconComponent } from './rating-icon/star-icon.component';\nimport { CommonModule } from '@angular/common';\nimport { CustomRatingDirective } from './rating-icon/custom-rating.directive';\n\n@NgModule({\n declarations: [\n NgRatingProComponent,\n CustomRatingDirective,\n ],\n imports: [CommonModule],\n exports: [NgRatingProComponent, CustomRatingDirective],\n})\nexport class NgRatingProModule {}\n","/*\n * Public API Surface of ng-rating-pro\n */\n\nexport * from './lib/ng-rating-pro.component';\nexport * from './lib/ng-rating-pro.module';\nexport * from './lib/rating-icon/custom-rating.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["State"],"mappings":";;;;;AAEA,IAAKA,OAIJ;AAJD,CAAA,UAAK,KAAK,EAAA;AACR,IAAA,KAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,KAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,KAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EAJIA,OAAK,KAALA,OAAK,GAIT,EAAA,CAAA,CAAA;MAKY,qBAAqB,CAAA;IAGhC,WAAoB,CAAA,EAAc,EAAU,QAAmB,EAAA;QAA3C,IAAE,CAAA,EAAA,GAAF,EAAE;QAAsB,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAF7C,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;;AAI5B,IAAA,YAAY,CAAC,QAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AACxC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;;AAGvB,IAAA,cAAc,CAAC,QAAgB,EAAA;QACrC,MAAM,MAAM,GACV,QAAQ;YACR,GAAG;AACH,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,KAAK;QACpE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;;IAG1C,cAAc,GAAA;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;aAChC,YAAY,CAAC,SAAS;AACtB,aAAA,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AACnB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAW,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC;;+GAtBtC,qBAAqB,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;mGAArB,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC7B,iBAAA;;;MCJY,iBAAiB,CAAA;aACrB,IAAQ,CAAA,QAAA,GAAW,MAAX,CAAkB;+GADtB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,oDCN9B,s/BAoCA,EAAA,CAAA,CAAA;;4FD9Ba,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,SAAS;+BACE,cAAc,EAAA,QAAA,EAAA,s/BAAA,EAAA;;;MEGb,kBAAkB,CAAA;aACtB,IAAQ,CAAA,QAAA,GAAW,OAAX,CAAmB;+GADvB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,qDCN/B,yqCAiCA,EAAA,CAAA,CAAA;;4FD3Ba,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,yqCAAA,EAAA;;;IEcf;AAAZ,CAAA,UAAY,KAAK,EAAA;AACf,IAAA,KAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,KAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,KAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EAJW,KAAK,KAAL,KAAK,GAIhB,EAAA,CAAA,CAAA;MAOY,oBAAoB,CAAA;AALjC,IAAA,WAAA,GAAA;QAMW,IAAK,CAAA,KAAA,GAAW,CAAC;QACjB,IAAM,CAAA,MAAA,GAAW,CAAC;QAClB,IAAS,CAAA,SAAA,GAAY,IAAI;AACzB,QAAA,IAAA,CAAA,IAAI,GAAW,EAAE,CAAC;AAClB,QAAA,IAAA,CAAA,OAAO,GAAW,CAAC,CAAC;QACpB,IAAQ,CAAA,QAAA,GAAY,KAAK;QACzB,IAAQ,CAAA,QAAA,GAAW,MAAM;AAOxB,QAAA,IAAA,CAAA,YAAY,GAAyB,IAAI,YAAY,EAAU;QAElE,IAAM,CAAA,MAAA,GAAY,EAAE;QAE3B,IAAS,CAAA,SAAA,GAAW,EAAE;QACtB,IAAU,CAAA,UAAA,GAAW,EAAE;QACvB,IAAc,CAAA,cAAA,GAAW,CAAC;QAC1B,IAAU,CAAA,UAAA,GAAW,CAAC;AA6FvB;IA3FC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;;IAGnC,kBAAkB,GAAA;QAChB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;YACtC,IAAI,CAAC,oBAAoB,EAAE;;aACtB;YACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;AAC1C,gBAAA,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,aAAC,CAAC;AACF,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;;QAE7D,IAAI,CAAC,gBAAgB,EAAE;;IAGjB,oBAAoB,GAAA;AAC1B,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;AACrC,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;AAC7B,QAAA,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS,CAAC;AAChD,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ;;IAG5B,YAAY,GAAA;AAClB,QAAA,QAAQ,IAAI,CAAC,QAAQ;AACnB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,iBAAiB;AAC1B,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,kBAAkB;AAC3B,YAAA;AACE,gBAAA,OAAO,iBAAiB;;;IAI9B,gBAAgB,GAAA;;AAEd,QAAA,IAAI,CAAC,UAAU;AACb,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;;QAG/D,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;QACrD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW;;AAG/C,IAAA,eAAe,CAAC,KAAa,EAAA;QAC3B,OAAO,KAAK,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;;AAIhD,IAAA,OAAO,CAAC,KAAiB,EAAA;QACvB,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,KAAK,CAAC,MAAM,YAAY,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE;YAC9D,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC;AACzC,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;AAC/B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;;QAEnC,KAAK,CAAC,eAAe,EAAE;;AAGjB,IAAA,YAAY,CAAC,KAAa,EAAA;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,KAAK,GAAG,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,KAAK,GAAG,GAAG;AAE1C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK;;iBACd,IAAI,MAAM,EAAE;AACjB,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC;;iBAClB;AACL,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,GAAG;;;aAEtB;YACL,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK;;iBACd;AACL,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC;;;;AAKtB,IAAA,YAAY,CAAC,SAAkB,EAAA;QACpC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;YACxD,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;gBAAE,OAAO,KAAK,CAAC,IAAI;AAClD,YAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,SAAS;gBACrE,OAAO,KAAK,CAAC,IAAI;YACnB,OAAO,KAAK,CAAC,KAAK;AACpB,SAAC,CAAC;;+GAhHO,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EASd,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,qBAAqB,EAEC,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gBAAgB,2CCvCzD,ihCAmCA,EAAA,MAAA,EAAA,CAAA,6GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDPa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,aAAa,EAAA,QAAA,EAAA,ihCAAA,EAAA,MAAA,EAAA,CAAA,6GAAA,CAAA,EAAA;8BAKd,KAAK,EAAA,CAAA;sBAAb;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBAGD,gBAAgB,EAAA,CAAA;sBADf,eAAe;uBAAC,qBAAqB;gBAGtC,gBAAgB,EAAA,CAAA;sBADf,SAAS;uBAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE;gBAG7D,YAAY,EAAA,CAAA;sBAArB;gBA2DD,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;MEtFtB,iBAAiB,CAAA;+GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,iBAN1B,oBAAoB;AACpB,YAAA,qBAAqB,CAEb,EAAA,OAAA,EAAA,CAAA,YAAY,CACZ,EAAA,OAAA,EAAA,CAAA,oBAAoB,EAAE,qBAAqB,CAAA,EAAA,CAAA,CAAA;AAE1C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAHlB,YAAY,CAAA,EAAA,CAAA,CAAA;;4FAGX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,oBAAoB;wBACpB,qBAAqB;AACtB,qBAAA;oBACD,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,OAAO,EAAE,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;AACvD,iBAAA;;;ACbD;;AAEG;;ACFH;;AAEG;;;;"}