primeng
Version:
PrimeNG is an open source UI library for Angular featuring a rich set of 80+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with PrimeB
1 lines • 24.3 kB
Source Map (JSON)
{"version":3,"file":"primeng-metergroup.mjs","sources":["../../src/metergroup/style/metergroupstyle.ts","../../src/metergroup/metergroup.ts","../../src/metergroup/primeng-metergroup.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BaseStyle } from 'primeng/base';\n\nconst theme = ({ dt }) => `\n.p-metergroup {\n display: flex;\n gap: ${dt('metergroup.gap')};\n}\n\n.p-metergroup-meters {\n display: flex;\n background: ${dt('metergroup.meters.background')};\n border-radius: ${dt('metergroup.border.radius')};\n}\n\n.p-metergroup-label-list {\n display: flex;\n flex-wrap: wrap;\n margin: 0;\n padding: 0;\n list-style-type: none;\n}\n\n.p-metergroup-label {\n display: inline-flex;\n align-items: center;\n gap: ${dt('metergroup.label.gap')};\n}\n\n.p-metergroup-label-marker {\n display: inline-flex;\n width: ${dt('metergroup.label.marker.size')};\n height: ${dt('metergroup.label.marker.size')};\n border-radius: 100%;\n}\n\n.p-metergroup-label-icon {\n font-size: ${dt('metergroup.label.icon.size')};\n width: ${dt('metergroup.label.icon.size')};\n height: ${dt('metergroup.label.icon.size')};\n}\n\n.p-metergroup-horizontal {\n flex-direction: column;\n}\n\n.p-metergroup-label-list-horizontal {\n gap: ${dt('metergroup.label.list.horizontal.gap')};\n}\n\n.p-metergroup-horizontal .p-metergroup-meters {\n height: ${dt('metergroup.meters.size')};\n}\n\n.p-metergroup-horizontal .p-metergroup-meter:first-of-type {\n border-start-start-radius: ${dt('metergroup.border.radius')};\n border-end-start-radius: ${dt('metergroup.border.radius')};\n}\n\n.p-metergroup-horizontal .p-metergroup-meter:last-of-type {\n border-start-end-radius: ${dt('metergroup.border.radius')};\n border-end-end-radius: ${dt('metergroup.border.radius')};\n}\n\n.p-metergroup-vertical {\n flex-direction: row;\n}\n\n.p-metergroup-label-list-vertical {\n flex-direction: column;\n gap: ${dt('metergroup.label.list.vertical.gap')};\n}\n\n.p-metergroup-vertical .p-metergroup-meters {\n flex-direction: column;\n width: ${dt('metergroup.meters.size')};\n height: 100%;\n}\n\n.p-metergroup-vertical .p-metergroup-label-list {\n align-items: start;\n}\n\n.p-metergroup-vertical .p-metergroup-meter:first-of-type {\n border-start-start-radius: ${dt('metergroup.border.radius')};\n border-start-end-radius: ${dt('metergroup.border.radius')};\n}\n.p-metergroup-vertical .p-metergroup-meter:last-of-type {\n border-end-start-radius: ${dt('metergroup.border.radius')};\n border-end-end-radius: ${dt('metergroup.border.radius')};\n}\n`;\n\nconst classes = {\n root: ({ props }) => [\n 'p-metergroup p-component',\n {\n 'p-metergroup-horizontal': props.orientation === 'horizontal',\n 'p-metergroup-vertical': props.orientation === 'vertical'\n }\n ],\n meters: 'p-metergroup-meters',\n meter: 'p-metergroup-meter',\n labelList: ({ props }) => [\n 'p-metergroup-label-list',\n {\n 'p-metergroup-label-list-vertical': props.labelOrientation === 'vertical',\n 'p-metergroup-label-list-horizontal': props.labelOrientation === 'horizontal'\n }\n ],\n label: 'p-metergroup-label',\n labelIcon: 'p-metergroup-label-icon',\n labelMarker: 'p-metergroup-label-marker',\n labelText: 'p-metergroup-label-text'\n};\n\n@Injectable()\nexport class MeterGroupStyle extends BaseStyle {\n name = 'metergroup';\n\n theme = theme;\n\n classes = classes;\n}\n\n/**\n *\n * MeterGroup is a group of process status indicators.\n *\n * [Live Demo](https://www.primeng.org/metergroup)\n *\n * @module metergroupstyle\n *\n */\nexport enum MeterGroupClasses {\n /**\n * Class name of the root element\n */\n root = 'p-metergroup',\n /**\n * Class name of the meters element\n */\n meters = 'p-metergroup-meters',\n /**\n * Class name of the meter element\n */\n meter = 'p-metergroup-meter',\n /**\n * Class name of the label list element\n */\n labelList = 'p-metergroup-label-list',\n /**\n * Class name of the label element\n */\n label = 'p-metergroup-label',\n /**\n * Class name of the label icon element\n */\n labelIcon = 'p-metergroup-label-icon',\n /**\n * Class name of the label marker element\n */\n labelMarker = 'p-metergroup-label-marker',\n /**\n * Class name of the label text element\n */\n labelText = 'p-metergroup-label-text'\n}\n\nexport interface MeterGroupStyle extends BaseStyle {}\n","import { CommonModule } from '@angular/common';\nimport { AfterContentInit, ChangeDetectionStrategy, Component, ContentChild, ContentChildren, ElementRef, forwardRef, inject, Input, NgModule, QueryList, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { getOuterHeight } from '@primeuix/utils';\nimport { PrimeTemplate, SharedModule } from 'primeng/api';\nimport { BaseComponent } from 'primeng/basecomponent';\nimport { MeterItem } from './metergroup.interface';\nimport { MeterGroupStyle } from './style/metergroupstyle';\n\n@Component({\n selector: 'p-meterGroupLabel, p-metergrouplabel',\n standalone: true,\n imports: [CommonModule, SharedModule],\n template: `\n <ol [ngClass]=\"labelClass\">\n <li *ngFor=\"let labelItem of value; let index = index; trackBy: parentInstance.trackByFn\" class=\"p-metergroup-label\">\n <ng-container *ngIf=\"!iconTemplate\">\n <i *ngIf=\"labelItem.icon\" [class]=\"labelItem.icon\" [ngClass]=\"{ 'p-metergroup-label-icon': true }\" [ngStyle]=\"{ color: labelItem.color }\"></i>\n <span *ngIf=\"!labelItem.icon\" class=\"p-metergroup-label-marker\" [ngStyle]=\"{ backgroundColor: labelItem.color }\"></span>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: labelItem, icon: labelItem.icon }\"></ng-container>\n <span class=\"p-metergroup-label-text\">{{ labelItem.label }} ({{ parentInstance.percentValue(labelItem.value) }})</span>\n </li>\n </ol>\n `\n})\nexport class MeterGroupLabel {\n @Input() value: any[] = null;\n\n @Input() labelPosition: 'start' | 'end' = 'end';\n\n @Input() labelOrientation: 'horizontal' | 'vertical' = 'horizontal';\n\n @Input() min: number;\n\n @Input() max: number;\n\n @Input() iconTemplate: TemplateRef<any> | undefined;\n\n get labelClass(): { [key: string]: boolean } {\n return {\n 'p-metergroup-label-list p-component': true,\n 'p-metergroup-label-list-vertical': this.labelOrientation === 'vertical',\n 'p-metergroup-label-list-horizontal': this.labelOrientation === 'horizontal'\n };\n }\n\n parentInstance: MeterGroup = inject(forwardRef(() => MeterGroup));\n}\n/**\n * MeterGroup displays scalar measurements within a known range.\n * @group Components\n */\n@Component({\n selector: 'p-meterGroup, p-metergroup, p-meter-group',\n standalone: true,\n imports: [CommonModule, MeterGroupLabel, SharedModule],\n template: `\n <div #container [ngClass]=\"containerClass\" [attr.role]=\"'meter'\" [attr.aria-valuemin]=\"min\" [attr.aria-valuemax]=\"max\" [attr.aria-valuenow]=\"totalPercent()\" [ngStyle]=\"style\" [class]=\"styleClass\">\n @if (labelPosition === 'start') {\n <p-meterGroupLabel *ngIf=\"!labelTemplate && !_labelTemplate\" [value]=\"value\" [labelPosition]=\"labelPosition\" [labelOrientation]=\"labelOrientation\" [min]=\"min\" [max]=\"max\" [iconTemplate]=\"iconTemplate || _iconTemplate\" />\n <ng-container *ngTemplateOutlet=\"labelTemplate || labelTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }\"></ng-container>\n }\n <ng-container *ngTemplateOutlet=\"startTemplate || _startTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }\"></ng-container>\n <div class=\"p-metergroup-meters\">\n <ng-container *ngFor=\"let meterItem of value; let index = index; trackBy: trackByFn\">\n <ng-container\n *ngTemplateOutlet=\"\n meterTemplate || _meterTemplate;\n context: {\n $implicit: meterItem,\n index: index,\n orientation: this.orientation,\n class: 'p-metergroup-meter',\n size: percentValue(meterItem.value),\n totalPercent: totalPercent()\n }\n \"\n >\n </ng-container>\n <ng-container *ngIf=\"!meterTemplate && !_meterTemplate && meterItem.value > 0\">\n <span class=\"p-metergroup-meter\" [ngStyle]=\"meterStyle(meterItem)\"></span>\n </ng-container>\n </ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"endTemplate || _endTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }\"></ng-container>\n @if (labelPosition === 'end') {\n <p-meterGroupLabel *ngIf=\"!labelTemplate && !_labelTemplate\" [value]=\"value\" [labelPosition]=\"labelPosition\" [labelOrientation]=\"labelOrientation\" [min]=\"min\" [max]=\"max\" [iconTemplate]=\"iconTemplate || _iconTemplate\" />\n <ng-container *ngTemplateOutlet=\"labelTemplate || _labelTemplate; context: { $implicit: value, totalPercent: totalPercent(), percentages: percentages() }\"></ng-container>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [MeterGroupStyle]\n})\nexport class MeterGroup extends BaseComponent implements AfterContentInit {\n /**\n * Current value of the metergroup.\n * @group Props\n */\n @Input() value: MeterItem[] | undefined;\n /**\n * Mininum boundary value.\n * @group Props\n */\n @Input() min: number = 0;\n /**\n * Maximum boundary value.\n * @group Props\n */\n @Input() max: number = 100;\n /**\n * Specifies the layout of the component, valid values are 'horizontal' and 'vertical'.\n * @group Props\n */\n @Input() orientation: 'horizontal' | 'vertical' = 'horizontal';\n /**\n * Specifies the label position of the component, valid values are 'start' and 'end'.\n * @group Props\n */\n @Input() labelPosition: 'start' | 'end' = 'end';\n /**\n * Specifies the label orientation of the component, valid values are 'horizontal' and 'vertical'.\n * @group Props\n */\n @Input() labelOrientation: 'horizontal' | 'vertical' | undefined = 'horizontal';\n /**\n * Inline style of the element.\n * @group Props\n */\n @Input() style: { [klass: string]: any } | null | undefined;\n /**\n * Style class of the element.\n * @group Props\n */\n @Input() styleClass: string | undefined;\n\n get vertical(): boolean {\n return this.orientation === 'vertical';\n }\n\n get containerClass() {\n return {\n 'p-metergroup p-component': true,\n 'p-metergroup-horizontal': this.orientation === 'horizontal',\n 'p-metergroup-vertical': this.orientation === 'vertical'\n };\n }\n\n @ContentChild('label', { descendants: false }) labelTemplate: TemplateRef<any> | undefined;\n\n @ContentChild('meter', { descendants: false }) meterTemplate: TemplateRef<any> | undefined;\n\n @ContentChild('end', { descendants: false }) endTemplate: TemplateRef<any> | undefined;\n\n @ContentChild('start', { descendants: false }) startTemplate: TemplateRef<any> | undefined;\n\n @ContentChild('icon', { descendants: false }) iconTemplate: TemplateRef<any> | undefined;\n\n @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate> | undefined;\n\n _labelTemplate: TemplateRef<any> | undefined;\n\n _meterTemplate: TemplateRef<any> | undefined;\n\n _endTemplate: TemplateRef<any> | undefined;\n\n _startTemplate: TemplateRef<any> | undefined;\n\n _iconTemplate: TemplateRef<any> | undefined;\n\n _componentStyle = inject(MeterGroupStyle);\n\n @ViewChild('container', { read: ElementRef }) container: ElementRef;\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n const _container = this.container.nativeElement;\n const height = getOuterHeight(_container);\n this.vertical && (_container.style.height = height + 'px');\n }\n\n ngAfterContentInit() {\n this.templates?.forEach((item) => {\n switch (item.getType()) {\n case 'label':\n this._labelTemplate = item.template;\n break;\n\n case 'meter':\n this._meterTemplate = item.template;\n break;\n\n case 'icon':\n this._iconTemplate = item.template;\n break;\n\n case 'start':\n this._startTemplate = item.template;\n break;\n\n case 'end':\n this._endTemplate = item.template;\n break;\n }\n });\n }\n\n percent(meter = 0) {\n const percentOfItem = ((meter - this.min) / (this.max - this.min)) * 100;\n\n return Math.round(Math.max(0, Math.min(100, percentOfItem)));\n }\n\n percentValue(meter) {\n return this.percent(meter) + '%';\n }\n\n meterStyle(val) {\n return {\n backgroundColor: val.color,\n width: this.orientation === 'horizontal' && this.percentValue(val.value),\n height: this.orientation === 'vertical' && this.percentValue(val.value)\n };\n }\n\n totalPercent() {\n return this.percent(this.value.reduce((total, val) => total + val.value, 0));\n }\n\n percentages() {\n let sum = 0;\n const sumsArray = [];\n\n this.value.forEach((item) => {\n sum += item.value;\n sumsArray.push(sum);\n });\n\n return sumsArray;\n }\n\n trackByFn(index: number): number {\n return index;\n }\n}\n\n@NgModule({\n imports: [MeterGroup, SharedModule],\n exports: [MeterGroup, SharedModule]\n})\nexport class MeterGroupModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;AAGA,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK;;;WAGf,EAAE,CAAC,gBAAgB,CAAC,CAAA;;;;;kBAKb,EAAE,CAAC,8BAA8B,CAAC,CAAA;qBAC/B,EAAE,CAAC,0BAA0B,CAAC,CAAA;;;;;;;;;;;;;;WAcxC,EAAE,CAAC,sBAAsB,CAAC,CAAA;;;;;aAKxB,EAAE,CAAC,8BAA8B,CAAC,CAAA;cACjC,EAAE,CAAC,8BAA8B,CAAC,CAAA;;;;;iBAK/B,EAAE,CAAC,4BAA4B,CAAC,CAAA;aACpC,EAAE,CAAC,4BAA4B,CAAC,CAAA;cAC/B,EAAE,CAAC,4BAA4B,CAAC,CAAA;;;;;;;;WAQnC,EAAE,CAAC,sCAAsC,CAAC,CAAA;;;;cAIvC,EAAE,CAAC,wBAAwB,CAAC,CAAA;;;;iCAIT,EAAE,CAAC,0BAA0B,CAAC,CAAA;+BAChC,EAAE,CAAC,0BAA0B,CAAC,CAAA;;;;+BAI9B,EAAE,CAAC,0BAA0B,CAAC,CAAA;6BAChC,EAAE,CAAC,0BAA0B,CAAC,CAAA;;;;;;;;;WAShD,EAAE,CAAC,oCAAoC,CAAC,CAAA;;;;;aAKtC,EAAE,CAAC,wBAAwB,CAAC,CAAA;;;;;;;;;iCASR,EAAE,CAAC,0BAA0B,CAAC,CAAA;+BAChC,EAAE,CAAC,0BAA0B,CAAC,CAAA;;;+BAG9B,EAAE,CAAC,0BAA0B,CAAC,CAAA;6BAChC,EAAE,CAAC,0BAA0B,CAAC,CAAA;;CAE1D;AAED,MAAM,OAAO,GAAG;AACZ,IAAA,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK;QACjB,0BAA0B;AAC1B,QAAA;AACI,YAAA,yBAAyB,EAAE,KAAK,CAAC,WAAW,KAAK,YAAY;AAC7D,YAAA,uBAAuB,EAAE,KAAK,CAAC,WAAW,KAAK;AAClD;AACJ,KAAA;AACD,IAAA,MAAM,EAAE,qBAAqB;AAC7B,IAAA,KAAK,EAAE,oBAAoB;AAC3B,IAAA,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK;QACtB,yBAAyB;AACzB,QAAA;AACI,YAAA,kCAAkC,EAAE,KAAK,CAAC,gBAAgB,KAAK,UAAU;AACzE,YAAA,oCAAoC,EAAE,KAAK,CAAC,gBAAgB,KAAK;AACpE;AACJ,KAAA;AACD,IAAA,KAAK,EAAE,oBAAoB;AAC3B,IAAA,SAAS,EAAE,yBAAyB;AACpC,IAAA,WAAW,EAAE,2BAA2B;AACxC,IAAA,SAAS,EAAE;CACd;AAGK,MAAO,eAAgB,SAAQ,SAAS,CAAA;IAC1C,IAAI,GAAG,YAAY;IAEnB,KAAK,GAAG,KAAK;IAEb,OAAO,GAAG,OAAO;uGALR,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAf,eAAe,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;AASD;;;;;;;;AAQG;IACS;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AACzB;;AAEG;AACH,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,cAAqB;AACrB;;AAEG;AACH,IAAA,iBAAA,CAAA,QAAA,CAAA,GAAA,qBAA8B;AAC9B;;AAEG;AACH,IAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,oBAA4B;AAC5B;;AAEG;AACH,IAAA,iBAAA,CAAA,WAAA,CAAA,GAAA,yBAAqC;AACrC;;AAEG;AACH,IAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,oBAA4B;AAC5B;;AAEG;AACH,IAAA,iBAAA,CAAA,WAAA,CAAA,GAAA,yBAAqC;AACrC;;AAEG;AACH,IAAA,iBAAA,CAAA,aAAA,CAAA,GAAA,2BAAyC;AACzC;;AAEG;AACH,IAAA,iBAAA,CAAA,WAAA,CAAA,GAAA,yBAAqC;AACzC,CAAC,EAjCW,iBAAiB,KAAjB,iBAAiB,GAiC5B,EAAA,CAAA,CAAA;;MC9IY,eAAe,CAAA;IACf,KAAK,GAAU,IAAI;IAEnB,aAAa,GAAoB,KAAK;IAEtC,gBAAgB,GAA8B,YAAY;AAE1D,IAAA,GAAG;AAEH,IAAA,GAAG;AAEH,IAAA,YAAY;AAErB,IAAA,IAAI,UAAU,GAAA;QACV,OAAO;AACH,YAAA,qCAAqC,EAAE,IAAI;AAC3C,YAAA,kCAAkC,EAAE,IAAI,CAAC,gBAAgB,KAAK,UAAU;AACxE,YAAA,oCAAoC,EAAE,IAAI,CAAC,gBAAgB,KAAK;SACnE;;IAGL,cAAc,GAAe,MAAM,CAAC,UAAU,CAAC,MAAM,UAAU,CAAC,CAAC;uGArBxD,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAbd,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;KAWT,EAZS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,ylBAAE,YAAY,EAAA,CAAA,EAAA,CAAA;;2FAc3B,eAAe,EAAA,UAAA,EAAA,CAAA;kBAjB3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;AACrC,oBAAA,QAAQ,EAAE;;;;;;;;;;;AAWT,IAAA;AACJ,iBAAA;8BAEY,KAAK,EAAA,CAAA;sBAAb;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAEQ,GAAG,EAAA,CAAA;sBAAX;gBAEQ,GAAG,EAAA,CAAA;sBAAX;gBAEQ,YAAY,EAAA,CAAA;sBAApB;;AAYL;;;AAGG;AA4CG,MAAO,UAAW,SAAQ,aAAa,CAAA;AACzC;;;AAGG;AACM,IAAA,KAAK;AACd;;;AAGG;IACM,GAAG,GAAW,CAAC;AACxB;;;AAGG;IACM,GAAG,GAAW,GAAG;AAC1B;;;AAGG;IACM,WAAW,GAA8B,YAAY;AAC9D;;;AAGG;IACM,aAAa,GAAoB,KAAK;AAC/C;;;AAGG;IACM,gBAAgB,GAA0C,YAAY;AAC/E;;;AAGG;AACM,IAAA,KAAK;AACd;;;AAGG;AACM,IAAA,UAAU;AAEnB,IAAA,IAAI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU;;AAG1C,IAAA,IAAI,cAAc,GAAA;QACd,OAAO;AACH,YAAA,0BAA0B,EAAE,IAAI;AAChC,YAAA,yBAAyB,EAAE,IAAI,CAAC,WAAW,KAAK,YAAY;AAC5D,YAAA,uBAAuB,EAAE,IAAI,CAAC,WAAW,KAAK;SACjD;;AAG0C,IAAA,aAAa;AAEb,IAAA,aAAa;AAEf,IAAA,WAAW;AAET,IAAA,aAAa;AAEd,IAAA,YAAY;AAE1B,IAAA,SAAS;AAEzC,IAAA,cAAc;AAEd,IAAA,cAAc;AAEd,IAAA,YAAY;AAEZ,IAAA,cAAc;AAEd,IAAA,aAAa;AAEb,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAEK,IAAA,SAAS;IAEvD,eAAe,GAAA;QACX,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa;AAC/C,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC;AACzC,QAAA,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;;IAG9D,kBAAkB,GAAA;QACd,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,KAAI;AAC7B,YAAA,QAAQ,IAAI,CAAC,OAAO,EAAE;AAClB,gBAAA,KAAK,OAAO;AACR,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ;oBACnC;AAEJ,gBAAA,KAAK,OAAO;AACR,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ;oBACnC;AAEJ,gBAAA,KAAK,MAAM;AACP,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ;oBAClC;AAEJ,gBAAA,KAAK,OAAO;AACR,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ;oBACnC;AAEJ,gBAAA,KAAK,KAAK;AACN,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ;oBACjC;;AAEZ,SAAC,CAAC;;IAGN,OAAO,CAAC,KAAK,GAAG,CAAC,EAAA;QACb,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG;QAExE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;;AAGhE,IAAA,YAAY,CAAC,KAAK,EAAA;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG;;AAGpC,IAAA,UAAU,CAAC,GAAG,EAAA;QACV,OAAO;YACH,eAAe,EAAE,GAAG,CAAC,KAAK;AAC1B,YAAA,KAAK,EAAE,IAAI,CAAC,WAAW,KAAK,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AACxE,YAAA,MAAM,EAAE,IAAI,CAAC,WAAW,KAAK,UAAU,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK;SACzE;;IAGL,YAAY,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;;IAGhF,WAAW,GAAA;QACP,IAAI,GAAG,GAAG,CAAC;QACX,MAAM,SAAS,GAAG,EAAE;QAEpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACxB,YAAA,GAAG,IAAI,IAAI,CAAC,KAAK;AACjB,YAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AACvB,SAAC,CAAC;AAEF,QAAA,OAAO,SAAS;;AAGpB,IAAA,SAAS,CAAC,KAAa,EAAA;AACnB,QAAA,OAAO,KAAK;;uGApJP,UAAU,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAFR,CAAC,eAAe,CAAC,4YAkEX,aAAa,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAcE,UAAU,EArHhC,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAnCS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA9Bb,eAAe,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,KAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA8BiB,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAwC5C,UAAU,EAAA,UAAA,EAAA,CAAA;kBA3CtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,2CAA2C;AACrD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,YAAY,CAAC;AACtD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCT,IAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,SAAS,EAAE,CAAC,eAAe;AAC9B,iBAAA;8BAMY,KAAK,EAAA,CAAA;sBAAb;gBAKQ,GAAG,EAAA,CAAA;sBAAX;gBAKQ,GAAG,EAAA,CAAA;sBAAX;gBAKQ,WAAW,EAAA,CAAA;sBAAnB;gBAKQ,aAAa,EAAA,CAAA;sBAArB;gBAKQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAKQ,KAAK,EAAA,CAAA;sBAAb;gBAKQ,UAAU,EAAA,CAAA;sBAAlB;gBAc8C,aAAa,EAAA,CAAA;sBAA3D,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;gBAEE,aAAa,EAAA,CAAA;sBAA3D,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;gBAEA,WAAW,EAAA,CAAA;sBAAvD,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;gBAEI,aAAa,EAAA,CAAA;sBAA3D,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;gBAEC,YAAY,EAAA,CAAA;sBAAzD,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,MAAM,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;gBAEZ,SAAS,EAAA,CAAA;sBAAxC,eAAe;uBAAC,aAAa;gBAcgB,SAAS,EAAA,CAAA;sBAAtD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;MA8EnC,gBAAgB,CAAA;uGAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YA5JhB,UAAU,EAyJG,YAAY,CAzJzB,EAAA,OAAA,EAAA,CAAA,UAAU,EA0JG,YAAY,CAAA,EAAA,CAAA;AAEzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,EAHf,OAAA,EAAA,CAAA,UAAU,EAAE,YAAY,EACZ,YAAY,CAAA,EAAA,CAAA;;2FAEzB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC;AACnC,oBAAA,OAAO,EAAE,CAAC,UAAU,EAAE,YAAY;AACrC,iBAAA;;;AC1PD;;AAEG;;;;"}